Le 5 mai 2012 16:15, sly (sylvain letuffe) <li...@letuffe.org> a écrit :
>> > Non, il ne l'est pas.
>>
>> Regarde mieux !
>
> re-lit la page du wiki qui parle des relations multipolygone, elle dit :
> "the multipolygon relation can be used to build multipolygons in compliance
> with the OGC Simple Feature standard"

Cela n'exprime que la volonté de principe d'adhérer à la conformité
OGC, mais cela ne fixe pas la contrainte correctement avec les seules
règles énoncées plus bas qui introduisent la contradiction avec cette
phrase de principe. Ce sont les règles d'nterprétation plus bas qui
sont fausses, pas cette phrase de principe que tu cites.

>> Tiens compte du fait que l'ordre de tri des membres n'est pas
>> significatif, pas plus que l'orientation des ways
>
> Je ne fais que ça.
>
>> , pas plus que l'orientation des ways : tu obtiens 3
>> géométries possibles dans ton fichier (en ignorant l'orientation des
>> anneaux obtenus ainsi que le noeud de départ de chacun d'eux), même si
>> dans ce cas simple 1 seule correspond à une géométrie GIS valide.
>
> Tout est là, tu viens de le dire, on obtient 1 seule géométrie qui peut être
> valide au sens OGC, et comme c'est un pré-requis de la définition de la
> relation type=multipolygon, alors il n'y a pas d'ambiguité dans demo2.osm
> puisque la commune A n'a qu'une seule représentation OGC possible.
> CQFD


Ton CQSD est invalide. Cependant j'admets avoir fait une erreur : il
n'y a pas 1 seule interprétation valide au sens OGC mais bien deux !!!

- La forme en 2 polygones carrés est la seule valide au sens OGC pour
désigner l'intérieur de la surface décrite. Mais
- La forme en un seul polygone en forme E3 est la seule valide a sens
OGC pour designer... l'extérieur de la même surface!

Pour ensuite choisir la quelle utiliser, soit on tient compte du rôle
"inner" ou "outer" indiqué dans les ways de la relation (ces rôles
devraient être tous identiques pour tous les ways parcourus par un
même polygone OGC formé sinon il y a contradiction d'une contrainte,
et la définition OSM est invalide).

On peut ensuite éliminer une des alternatives, si on considère que
dans OSM on ne veut pas désigner la surface extérieure mais toujours
la surface intérieure, mais cela demande de considérer l'union des
polygones formés pour déterminer lesquels sont des contours internes
ou externes. Cette élimination n'est pas possible en considérant
chaque polygone isolément, mais seulement après avoir généré tous les
rings.

>> La
>> difficulté c'est l'algo pour déterminer cette géométrie valide (on a
>> un arbre de recherche combinatoire).
>
> Je ne le nie pas, mais la n'est pas la question (en tout cas pas pour
> l'instant) puisque je m'attache à expliquer que ta remarque initiale :
> "On a le cas suivant apparemment non prévu par OSM" est manifestement fausse.

J'ai cependant trouvé en cherchant un algorithme permettant de trouver
les deux formes valides au sens OGC :

(1) on part d'un way quelconque qu'on parcourt dans une direction
donnée, et on le sors de la liste des ways non encore parcourus.

(2) Quand on arrive à son extrémité, soit on est arrivé au point de
départ, et la forme est fermée, le polygone est extrait, mais on ne
sait pas encore si c'est un polygone interne ou externe. s'il y a
encore d'autres polygones à former s'il reste des chemin, et si c'est
le cas on reboucle en (1), sinon on sort en (4). S'il n'y a pas
d'autre chemin possible, le polyhone en cours n'est pas fermé, mais on
est arrivé à l'extrémité d'une polyligne (l'autre extremité n'est pas
encore maximale, on doit parcourir cette autre extrémité pour voir si
elle peut elle aussi être prolongée, mais on peut aussi sortir en (4)
en mettant cette polyligne non fermée pour les traiter plus tard dans
l'autre sens de parcours et voir quels polyligne peuvent être des
polongations d'un autre.

(3) Sinon on prend parmi les chemins de continuation possibles le
chemin qui tourne le plus à gauche pour prolonger le parcours, on le
sors de la liste des chemins non parcourus pour l'ajouter au poygone
en cours de formation et on reboucle en (2).

La forme en 1 seul polygone E3 peut donc être obtenue par un parcours
en tournant le plus à gauche, comme aussi la forme en deux polygones
carrés.

Les deux formes possibles seront inversées si on utilise le parcours
en tournant le plus à droite au lieu de la gauche. On ne peut pas
décider laquelle des deux formes est interne ou externe tant qu'on n'a
pas formé et extrait tous les autres polygones de la relation: cela
demande de savoir lesquelles des formes polygonales sont entièrement
dans une des autres formes polygonales formées.

On ne peut pas non plus savoir à priori si c'est le parcours en
tournant le plus à droite ou celui en tournant le plus à gauche qui
produit les polygones souhaités.

Pour un exemple complet, il faudrait faire le test avec en tentant de
représenter la surface des cases noires d'un échiquier (dont les ways
de délimitation peuvent être dans tous les sens et dans le désordre le
plus complet). Un échiquier 8x8, dont les ways délimitant les cases
auraient été mélangés et réorientés de façon aléatoire devrait
permettre cela (pour compliquer l'affaire, on pourrait aussi découper
ces ways de bordure d'une seule case en plusieurs parties elles aussi
mélangées).

Ensuite je souhaite bien du plaisir pour arriver à trier les ways
correctement et déterminer les deux formes valides en OGC (il y en
aura toujours deux si tous les polygones sont fermés), puis pour
déterminer laquelle des deux désigne l'intérieur des cases noires de
l'échiquier, ou leur extérieur !

_______________________________________________
Talk-fr mailing list
Talk-fr@openstreetmap.org
http://lists.openstreetmap.org/listinfo/talk-fr

Reply via email to