2010-10-20 6 views
6

Ich habe die geokit und geokit-Schienen gem für Schienen für eine Weile, aber eine Frage, die ich nicht gefunden habe beantwortet gefunden, wie man berechnet Aggregatzentrum für eine Sammlung von Punkten. Ich weiß, wie man den Abstand zwischen zwei Punkten, aber nicht mehr als 2 berechnet.mit geokit oder anderen Rubin Juwel, um das Zentrum einer Reihe von Geo-Koordinaten zu berechnen

Mein Grund ist, habe ich eine Reihe von Punkten alle in der gleichen Stadt ... alle Sachen, die perfekt sind, würde die Stadt ein Zentrum haben, das Ich könnte es einfach gebrauchen, aber einige Städte, sagen Berlin, haben kein perfektes Zentrum. Sie haben mehrere Zentren und ich möchte nur die ganze Liste der Orte in meiner Datenbank verwenden, um ein Zentrum für eine bestimmte Verteilung zu berechnen. Hat jemand anderes dieses Problem?

Irgendwelche Tipps? Danke

Antwort

4

Da Sie noch nie Geokit verwendet haben, ist die Mathematik hinter dieser Operation relativ einfach zu implementieren. Unter der Annahme, dass diese Punkte aus einer Breite und einer Länge bestehen, benötigen Sie nur die durchschnittliche Breite und die durchschnittliche Länge für alle Punkte. Sobald Sie diese beiden Werte haben, haben Sie Ihren Mittelpunkt.

points = [[14, 19], [-5, 57], [23, -12]] 
points.transpose.map{|c| c.inject{|a, b| a + b}.to_f/c.size} 

Ebenso, wenn diese Punkte Geokit::LatLng Objekte anstelle eines 2-dimensionalen Arrays sind, können Sie Karte nur ihre lat und lng Werte einfach durch #to_a auf sie vorher anrufen.

points.map(&:to_a).transpose.map{|c| c.inject{|a, b| a + b}.to_f/c.size} 
+1

Es ist nichts wert, die Dinge sind etwas komplizierter als nur Mittelung, wenn Sie nach Präzision suchen: http://www.geomidpoint.com/calculation.html –