10
votes

Optimisation du polygone Google Maps

J'ai extraite les données de pays de pays de quelque part et réussi avec succès à la convertir en une gamme de coordonnées L AUT-GNL que je peux alimenter vers Google Maps API pour dessiner des polyline ou des polygones.

Le problème est que cela comporte environ 1200 points de cette forme. Il rend parfaitement dans Google Maps, mais j'ai besoin de réduire le nombre de points de 1200 à moins de 100 ans. Je n'ai pas besoin de contour très lisse, j'ai juste besoin de jeter les points que je peux vivre sans. Tout algorithme ou un outil en ligne qui peut m'aider à réduire le nombre de points est nécessaire.


5 commentaires

Avez-vous besoin de faire cela une fois? Utilisez-vous également un type de base de données qui pourraient avoir des extensions spatiales dessus?


@Argiropoulos Stavros: Juste une fois. Aucune base de données impliquée; c'est juste une page HTML / JavaScript. Si la base de données aiderait ensuite, je pourrais importer les données dans une base de données MySQL 5.1 et effectuer toute utilisation que vous suggérez.


Recherche de "polyline codée". Il va réduire vos 1200 points à une chaîne de 40 octets


Potrace fonctionne bien, bien que je soupçonne que ce n'est pas ce que vous voulez pour les données cartographiques. Néanmoins, l'inkscape a une bonne implémentation de Postrace dans sa commande Simplify .


Je cherchais la même chose et Simplify.js fonctionne bien.


6 Réponses :


5
votes

Je pense MAPSHAPER peut faire cela en ligne

Sinon, implémentez une partie algorithme


6 commentaires

Il est considéré comme poli d'expliquer les scores négatifs; J'ai fourni un lien vers un outil en ligne qui pourrait faire ce qui a été demandé.


Puis-je extraire les informations de coordonnées des fichiers "SHP" générés par la carte Shaper?


Désolé, n'a pas eu le temps de faire plus que de la bownvote à ce moment-là. L'explication est qu'elle semblait inutile d'offrir un outil (et un avis vague à mettre en œuvre «certains algorithmes») comme une solution à ce que semblait une question sur la manière de programmer une solution. Maintenant que l'OP précise qu'il n'a pas besoin de le programmer, mais seulement le faire une fois, je retirerai le bowvote dès que le système me le permet.


@Salman A, Afaik, oui à un point que vous pouvez par exemple utiliser shpp2pgsql pour les importer pour postgis


Mise en œuvre "Algorithme de simplification de la ligne de Douglas-Péucker" pour réduire ~ 1200 points jusqu'à 70.


L'algorithme de Douglas-Setucker est implémenté dans la méthode de simplification ici: googlemaps.github.io/android-maps-utils/javadoc/com/google/m APS / ...



0
votes

PROBABLEMENT probable Ce que vous voulez diviser les points en 2 demi et que vous voulez essayer ma fonction JavaScript:

function shortenAndShow ( polyline, color ) {
  var dist = 0, copyPoints = Array ( );
  for ( var n = 0, var end = polyline.getVertexCount ( ) - 1; n < end ; n++ ) {
    dist += polyline.getVertex ( n ).distanceFrom ( polyline.getVertex ( n +1 ) );
    copyPoints.push ( polyline.getVertex (n) );
   }
   var lastPoint = copyPoints [copyPoints.length-1];
   var newLine = new GPolyline (copyPoints, color, 2, 1);
   gmap2.addOverlay ( newLine );
} 


0 commentaires


8
votes

a trouvé ce simple JavaScript par Bill Chadwick. Il suffit de nourrir dans le latlng à un tableau et passez aux arguments de la source dans une fonction ici Douglas Pebucker La routine de simplification de la ligne

Il diffusera un tableau avec moins de points pour le polygone. xxx

thearrayoflatlng est un tableau de latlng que vous avez collecté à l'aide de Google Maps API. La valeur de 2000 est KINK en mètres. Mon hypothèse est la plus élevée de la valeur, plus de points seront supprimés comme une sortie.

pour les débutants réels: Assurez-vous de déclarer le fichier JS sur votre page HTML avant de l'utiliser. :) xxx


2 commentaires

Vous devriez essayer d'inclure les extraits de code le plus important de votre réponse et expliquez pourquoi ils (ou quel que soit l'algorithme) expliquent la réponse ..


Merci pour l'avantage Nathaniel. Édité ça.



0
votes

Je suis d'accord sur l'anwser de la déraison, le site Web Support Geojson, je l'ai utilisé dans mon site Web, et il a coupé mon geojson, mais je pense que vous avez également besoin de ce pays du monde Geo Json


2 commentaires

Link Seules les réponses doivent être des commentaires


@Nsnoob oui, je veux commenter la déraison, mais je n'ai pas les 50 réputations



1
votes

Je cherchais exactement la même chose et trouvé SIMPLIFY.JS . C'est exactement ce que vous voulez et est incroyablement facile à utiliser. Vous passez simplement dans vos coordonnées et il supprimera tous les points excédentaires.

 Entrez la description de l'image ici xxx

the points < / Code> L'argument doit contenir un tableau de vos coordonnées formatées comme {x: 123, y: 123} . (Ensuite, vous pouvez le convertir au format que vous souhaitez.)

La tolérance doit être la précision dans degrés décimaux . Par exemple. 0.0001 sur 11 mètres. L'augmentation de ce nombre réduira la taille de la sortie.

SET Highquality à True Pour de meilleurs résultats si cela ne vous dérange pas d'attendre quelques millisecondes plus longtemps. < / p>


0 commentaires