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