используя geokit или другой рубиновый камень, чтобы вычислить центр ряда гео-координат - PullRequest
7 голосов
/ 20 октября 2010

Я уже некоторое время использую драгоценный камень geokit и geokit-rails для рельсов, но один вопрос, на который я не нашел ответа, - как найти вычисленный агрегатный центр для набора точек.Я знаю, как рассчитать расстояние между двумя точками, но не более 2.

Моя причина в том, что у меня есть ряд точек в одном и том же городе ... все идеально, в городе будетцентр, который я мог бы просто использовать, но в некоторых городах, скажем, в Берлине, нет идеального центра.У них есть несколько центров, и я просто хочу использовать весь список мест в моей базе данных, чтобы рассчитать центр для конкретного распределения.У кого-нибудь еще была такая проблема?

Есть советы?Спасибо

1 Ответ

5 голосов
/ 21 октября 2010

Никогда ранее не использовавший Geokit, математика, лежащая в основе этой операции, относительно проста для реализации самостоятельно.Предполагая, что эти точки состоят из широты и долготы, вам просто нужна средняя широта и средняя долгота для всех точек.Получив эти два значения, вы получите свою центральную точку.

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

Аналогично, если эти точки являются Geokit::LatLng объектами, а не 2-мерным массивом, вы можете просто отобразить их широту и долготузначения просто вызывая #to_a для них заранее.

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