Suite

Quelle erreur suis-je en train de faire lors du rendu des routes et des bâtiments OpenStreetMap dans Minecraft ?


J'essaie de créer une carte Minecraft de la Ernst Reuter Platz à Berlin. Pour cela, j'utilise les données OpenStreetMap.

Voici à quoi ressemble l'endroit sur une carte 2D :

Lorsque je rends les routes et les bâtiments sur une carte Minecraft, je fais quelque chose de mal. Vous trouverez ici un aperçu zoomable de la carte.

Les blocs gris représentent les rues (des autoroutes aux trottoirs) et les brun rougeâtre - le contour des bâtiments.

Comme vous pouvez le voir, il y a une erreur dans le moteur de rendu. Par exemple, à un certain endroit, il y a un bâtiment, où les lignes semblent être tracées dans le mauvais ordre.

Existe-t-il un algorithme que je peux utiliser pour trier les points des polygones OSM afin qu'ils donnent une belle forme (comme un vrai bâtiment) ? Si oui, comment ça s'appelle ?

Mise à jour 1 (30.09.2015 08:38 MSK): Une approche possible consiste à utiliser l'algorithme d'enveloppe convexe.

Mise à jour 2 : Exemple de définition d'un bâtiment

             

J'ai trouvé l'erreur. Dans une partie cruciale du code, un ensemble (collection non ordonnée) a été utilisé au lieu d'une liste (collection ordonnée).


Il n'est pas nécessaire de "trier" les nœuds. Je suppose que vous avez déjà une erreur dans votre analyseur. Comment lisez-vous/stockez-vous les nœuds et leur ordre ?

Supposons que vous lisez dans un fichier XML OSM. L'ordre dans lequel les nœuds apparaissent dans ce fichier XML n'a aucune importance. Au lieu de cela, vous devez regarder l'ordre dans lequel ces nœuds sont référencés de la manière correspondante, c'est-à-dire l'ordre deséléments. Cela devient assez clair lorsque l'on se rend compte qu'un seul nœud peut faire partie de plusieurs manières et peut même faire partie de la même manière plusieurs fois.