2010-11-08 32 views
1

J'ai un polygone et un segment de ligne dont les extrémités sont situées sur les deux côtés du polygone. Quel est le moyen le plus simple de diviser le polygone en deux polygones? (J'utilise le paquet jts).Fractionner un polygone avec un LineString dans JTS

J'ai essayé d'utiliser polygonizer mais je ne pense pas que je l'utilise correctement car il ne semble pas fonctionner.

Merci,

Répondre

1

J'ai fait des choses semblables en faisant la partie de la ligne segement d'un polygone très grand, puis recouper les deux polygones. Vous pouvez créer le grand polygone en ajoutant des segments à chaque extrémité du segment jusqu'à ce que vous soyez en dehors des limites du polygone, puis ajouter deux segments à 90 degrés qui dépassent les limites du polygone d'origine, puis lier les deux derniers segments avec un dernier segment pour former un grand polygone qui divise le poylgon original le long du segment initial et entoure le reste du polygone d'origine. C'est plutôt une douleur mais ça marche. Jim

2

Réponse tardive, mais peut-être que quelqu'un veut le savoir aussi.

supposant que vous avez suivant la géométrie:
GEOMETRYCOLLECTION (polygonal ((100 150, 100 340, 350 340, 350 150, 100 150)), LINESTRING (220 340, 220 150))

On pouvait essayez fusionner ligne cette collection de la géométrie, le résultat devrait être:
MULTILINESTRING ((220 340, 220 150), (100 150, 100 340, 350 340, 350 150, 100 150))

A partir de là faire une unaire union, résultat:
MULTILINESTRING ((220 340, 220 150), (100 150, 100 340, 220 340), (220 340, 350 340, 350 150, 220 150), (220 150, 100 150))

Enfin, vous pouvez utiliser le polygonizer et obtenir les deux polygones:
GEOMETRYCOLLECTION (polygonal ((220 150, 220 340, 350 340, 350 150, 220 150)), polygonal ((100 150, 100 340, 220 340, 220 150, 100 150)))

Donc, pour que le polygoniseur fonctionne, vous devez lui donner des lignes simples en entrée et non pas un polygone entier.

testés dans JTS testbuilder