Question

J'ai un problème similaire avec ce message . Je dois afficher jusqu'à 1 000 polygones sur une carte Google intégrée. Les polygones sont dans une base de données SQL, et je peux les rendre à la volée sous la forme d’un fichier KML unique à l’aide d’un HttpHandler personnalisé (dans ASP.NET), comme ceci http://alpha.foresttransparency.org/concession.1.kml .

Même sur ma machine de développement (très rapide), charger une douzaine de formes prend un certain temps. Donc, deux questions, vraiment:

  1. Quelle serait une bonne stratégie pour les transformer en marqueurs au lieu de superpositions une fois que je suis au-delà d'un certain niveau de zoom?

  2. Existe-t-il un algorithme accessible au public pour simplifier un polygone (réduire le nombre de points) afin que je ne montre pas plus de points que ce qui est logique à un certain niveau de zoom?

Était-ce utile?

La solution

Pour votre deuxième question: vous avez besoin de l’ algorithme de généralisation Douglas-Peucker

Autres conseils

Pour votre première question, pouvez-vous calculer la surface d’un polygone particulier et relier chaque niveau de zoom à une surface minimale particulière, de sorte que vous zoomez en avant ou en arrière sur la disparition du polygone et que les marqueurs apparaissent en fonction du niveau de zoom.

Pour la deuxième question, j'utiliserais la suggestion de Mark Bessey.

Je ne connais pas grand-chose à propos de KML, mais je pense que la solution habituelle à la question n ° 2 consiste à itérer sur les points et à supprimer tous les segments de ligne d'une certaine taille. Cela entraînera des erreurs "malheureuses". effets dans certains cas, mais il est relativement rapide et facile à faire.

Je recommanderais 2 choses: - Calculez et combinez les polygones qui se touchent. Cela implique BEAUCOUP de traitement et de calculs difficiles, mais je l'ai fait pour que je sache que c'est possible. - Créez votre propre superposition au lieu d'utiliser KML au format PNG, tout en les combinant dans la suggestion précédente. Vous devrez créer BEAUCOUP de PNG, mais le client flambe vite.

Bonne chance:)

J'avais besoin d'une solution à votre question n ° 2 il y a un moment et après avoir examiné quelques algorithmes de simplification de ligne disponibles, j'ai créé le mien.

Le processus est simple et semble fonctionner correctement, même s'il peut être un peu lent si vous ne l'implémentez pas correctement:

P [0..n] est votre tableau de points.  Soit T [n] le triangle formé par les points P [n-1], P [n], P [n + 1. ]   Max est le nombre de points pour lequel vous essayez de réduire cette ligne.

  1. Calculez l'aire de chaque triangle possible T [1..n-1] dans l'ensemble.
  2. Choisissez le triangle T [i] avec la plus petite surface
  3. Supprimez le point P [i] pour essentiellement aplatir le triangle
  4. Recalculez l'aire des triangles affectés T [n-1], T [n + 1]
  5. Passez à l’étape 2 si le nombre de points > Max
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top