2009-09-22 4 views
3

Благодаря Wikileaks, здесь, в Великобритании, мы можем теперь получить доступ к нашим координатам долготы и широты для каждого почтового кода wikileaks postcodes uk ВАЖНО. Не используйте эти данные в общедоступных приложениях. Существует опасение, что данные были намеренно повреждены, и вы можете считаться нарушающими закон об авторском праве. Попробуйте использовать данные с сайта с открытым исходным кодом, как этот Postcode UK siteКак эффективно использовать значения долготы/широты в Mysql?

Теперь, можно вычислить расстояния между каждой точкой, используя следующий расчет (первоначально из тонкой книги Pro Mysql):

Расстояние d между двумя точки (x1, y1) и (x2, y2) могут быть вычислены по следующему уравнению (до тех пор, пока значения x являются широтой, а значения y являются долгота в радианах, r - радиус сферы, которая составляет 3956 дюймов):

d = acos (sin x1) * sin (x2) + cos (x1) * cos (x2) * cos (y2-y1)) * r

Теперь это достаточно хорошо, или я должен использовать новые типы и функции данных ГИС, и если да, то как мне преобразовать ссылки долготы и широты в тип данных точки? Я понимаю, что, поскольку Земля не идеальная сфера, поэтому расчет расстояния, который я цитирую выше, не является совершенным; однако это достаточно хорошо для моих целей. Будет ли использовать новую функциональность ГИС: а) сделать расчет расстояния быстрее b) сделать расчет расстояния более точным?

ответ

2

Чтобы сосредоточиться на (а):

В прошлом я предвычисленные части, сохраняя латы, длинный, XAxis, YAxis и zxais, где х, у & г определяются как:

xaxis = cos(radians(Lat)) * cos(radians(Lon)) 
yaxis = cos(radians(Lat)) * sin(radians(Lon)) 
zaxis = sin(radians(Lat)) 

расстояние, то можно рассчитать, используя SQL свободно, как (acos(xaxis * $xaxis + yaxis * $yaxis + zaxis * $zaxis) * 6367.0/1.852) (где те, которые начинаются с $ являются предварительно вычислены для начальной точки в вопросе таким же образом, как указано выше)

Pre -компьютер в этот способ подталкивает относительно дорогостоящий триггер к одноразовому событию и упрощает запрос.

+0

Фантастический - я всегда был поклонником денормализации хранилища данных, где он помогает вычислять время. благодаря! – DBMarcos99

+0

Интересно, что вы используете 6367 в качестве фигуры радиуса Земли в километрах. Эта цифра колеблется между 6356 и 6378 по разным источникам. Во всяком случае, я отмечаю это как принятый ответ – DBMarcos99

+0

@ DBMarcos99 Средний радиус (как используется здесь) обычно определяется как '((2 * SemiMajorAxis) + SemiMinorAxis)/3.0', для которого значения могут быть найдены для вашей [предпочтительной геодезической system] (http://en.wikipedia.org/wiki/World_Geodetic_System#A_new_World_Geodetic_System:_WGS_84) –

1

Ну, чтобы ответить на ваш вопрос «В», потому что ваше уравнение предполагает идеальную сферу, вы будете немного отброшены (и это, скорее всего, будет постепенно ухудшаться, чем дальше две точки от одного другой). Если GIS учитывает это, то вы бы уточнили расчет расстояний.

Что касается преобразования от lat/long to point, я мог бы поклясться, что это было предоставлено в пределах Google Maps API. (См GLatLng ссылки.)

+0

Thx для этого. Я действительно искал варианты в Mysql, но использование интерфейса API может быть полезной альтернативой. – DBMarcos99

 Смежные вопросы

  • Нет связанных вопросов^_^