Averaging eine Reihe von Punkten auf einer Google Map zu einer kleineren Menge
-
20-09-2019 - |
Frage
Ich bin eine kleine Google-Karte auf einer Webseite anzuzeigen, die Google Maps Static-API verwenden.
Ich habe eine Reihe von 15-Koordinaten, die ich als Punkte auf der Karte darstellen möchte.
Durch die Karte ziemlich klein ist (184 x 90 Pixel) und die Obergrenze von 2000 Zeichen auf einer Google Maps-URL, kann ich nicht jeden Punkt auf der Karte darstellen.
Also anstatt Ich möchte eine kleine Liste von Koordinaten erzeugen, die ein Durchschnitt der großen Liste darstellt.
Also statt 15 Sätze zu haben, würde ich mit 5 Sätzen enden, die Positionen die Positionen des 15. Say nähern ist gibt es 3 Punkte, die jeder-andere in enger Nähe sind, als an jedem anderen Punkt auf der Karte werden diese Punkte brach in 1 Punkt werden.
Also ich suche ich nach einem Algorithmus erraten, kann dies tun.
Nicht jemand zu fragen, jeden Schritt zu buchstabieren, aber mich vielleicht in Richtung eines mathematischen Prinzips oder Allzweckfunktion für diese Art der Sache zeigen?
Ich bin sicher, dass eine ähnliche Funktion in verwendet wird, sagen, Grafik-Software, wenn ein Bild Verpixelungen.
(Wenn ich das löse ich sicher, dass meine Ergebnisse zu veröffentlichen sein werden.)
Lösung
Ich empfehle K-Means Clustering , wenn Sie Cluster müssen N in eine Objekte bekannte Anzahl K
Andere Tipps
Wenn Sie Suchen für solche Funktionen / Klassen, haben einen Blick auf MarkerClusterer und MarkerManager Utility-Klassen. MarkerClusterer ehesten entspricht die beschriebene Funktionalität, wie in
Im Allgemeinen Ich denke, der Bereich, den Sie brauchen, um zu suchen um ist „Vektorquantisierung“. Ich habe ein altes Buch Titel Vektorquantisierung und Signalkompression von Allen Gersho und Robert M. Gray bekam, die ein paar Beispiele. Aus dem Gedächtnis war die Lloyd Iteration ein guter Algorithmus für diese Art der Sache. Es kann den Eingangssatz nehmen und reduzieren sie auf eine feste Größe Menge von Punkten. Grundsätzlich gleichmäßig oder zufällig verteilen Sie Ihre Punkte um den Raum. Karte jede Ihrer Eingaben in den nächsten quantisiert Punkt. Dann berechnen, um den Fehler (beispielsweise Summe der Abstände oder Root-Mean-Squared). Dann wird für jeden Ausgangspunkt, setzen Sie ihn in der Mitte des Satzes, die es abbildet. Dadurch wird der Punkt bewegen und möglicherweise sogar die Menge ändern, die es abbildet. Führen Sie diese iterativ, bis keine Änderungen von einer Iteration zur nächsten erkannt werden. Hope, das hilft.