2010-10-20 18 views
6

Ho usato la gemma geokit e geokit-rails per le rotaie per un po 'ma una domanda che non ho trovato risposta è come trovare la calcolata centro aggregato per una raccolta di punti. So come calcolare la distanza tra due punti, ma non più di 2.utilizzando geokit o altra gemma rubino per calcolare il centro di una serie di coordinate geografiche

Il motivo è che ho una serie di punti tutti nella stessa città ... tutto perfetto essendo la città avrebbe un centro che Potrei semplicemente usarlo, ma in alcune città, ad esempio, Berlino non ha un centro perfetto. Hanno centri multipli e voglio solo utilizzare l'intera lista di posti che ho nel mio database per calcolare un centro per una particolare distribuzione. Qualcun altro ha avuto questo problema?

Qualche consiglio? Grazie

risposta

4

Non avendo mai usato Geokit in precedenza, la matematica dietro questa operazione è relativamente semplice da implementare. Supponendo che questi punti siano costituiti da una latitudine e una longitudine, è sufficiente la latitudine media e la longitudine media per tutti i punti. Una volta che hai questi due valori, hai il tuo punto centrale.

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

Allo stesso modo, se questi punti sono Geokit::LatLng oggetti invece di una matrice a 2 dimensioni, si può solo mappare i loro valori e lat GNL semplicemente chiamando #to_a su di loro in anticipo.

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

Non vale niente, le cose sono un po 'più complicate della media se si sta cercando la precisione: http://www.geomidpoint.com/calculation.html –

Problemi correlati