2010-10-20 5 views
6

Używam klejnotów geokit i geokit-rails dla szyn na chwilę, ale jedno pytanie, na które nie znalazłem odpowiedzi, to jak znaleźć obliczone agregat centrum dla zbioru punktów. Wiem, jak obliczyć odległość między dwoma punktami, ale nie więcej niż 2.za pomocą geokita lub innego klejnotu ruby ​​do obliczenia centrum szeregu współrzędnych geograficznych

Mój powód jest taki, że mam serię punktów w tym samym mieście ... wszystkie rzeczy są doskonałe, miasto miałoby centrum, które Mógłbym po prostu użyć, ale niektóre miasta, powiedzmy, że Berlin nie ma idealnego centrum. Mają wiele centrów i po prostu chcę użyć całej listy miejsc, które mam w mojej bazie danych, aby obliczyć centrum dla konkretnej dystrybucji. Czy ktoś jeszcze miał ten problem?

Jakieś wskazówki? Dzięki

Odpowiedz

4

Nigdy wcześniej nie korzystałem z Geokit, matematyka za tą operacją jest stosunkowo łatwa do zrealizowania. Zakładając, że te punkty składają się z szerokości i długości geograficznej, po prostu potrzebujesz średniej szerokości i średniej długości geograficznej dla wszystkich punktów. Gdy masz te dwie wartości, masz swój punkt centralny.

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

Podobnie, jeśli te punkty są Geokit::LatLng obiekty zamiast 2-wymiarowej tablicy, można po prostu map ich wartości łac i LNG po prostu dzwoniąC#to_a na nich wcześniej.

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

Nic nie warte, rzeczy są nieco bardziej skomplikowane niż uśrednianie, jeśli szukasz precyzji: http://www.geomidpoint.com/calculation.html –

Powiązane problemy