Рассчитать расстояние между двумя наборами lon и lat - PullRequest
0 голосов
/ 20 марта 2012

Поскольку мой вопрос говорит, что я ищу функцию / формулу, которая может вычислить расстояние между двумя точками.Теперь я посмотрел на пример и нашел отличные функции, но ни одна из них, похоже, не работает, все они возвращают 0, когда я поставляю 2 набора точек.В основном мне нужно будет передать следующую функцию (lat1, lon1, lat2, lon2) и получить обратно расстояние.С этого расстояния я могу проверить, находится ли рядом другая точка.

ОБНОВЛЕНИЕ Хорошо, теперь я использую следующую функцию,

BEGIN
    DECLARE pi, q1, q2, q3 , roundedVal  FLOAT ;
      DECLARE rads FLOAT DEFAULT 0;
      SET pi = PI();
      SET lat1 = lat1 * pi / 180;
      SET lon1 = lon1 * pi / 180;
      SET lat2 = lat2 * pi / 180;
      SET lon2 = lon2 * pi / 180;
      SET q1 = COS(lon1-lon2);
      SET q2 = COS(lat1-lat2);
      SET q3 = COS(lat1+lat2);
      SET rads = ACOS( 0.5*((1.0+q1)*q2 - (1.0-q1)*q3) ); 
      RETURN FORMAT((6371 * rads) , 1);
    END

Это работает нормальнос километрами, но я ищу метры.Так что я знаю, что у меня есть изменение чисел в этой функции, но какие и что делать.Любая помощь?

Ответы [ 4 ]

2 голосов
/ 20 марта 2012

Я использовал этот веб-сайт в прошлом, и он работал для меня.Имеет множество полезных формул и приводит примеры в javascript.

http://www.movable -type.co.uk / scripts / latlong.html

1 голос
/ 20 марта 2012

Я бы порекомендовал вам взглянуть на пространственное расширение MySQL.

http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html

Если вам это не нравится, этот блог может вам пригодиться:

http://zcentric.com/2010/03/11/calculate-distance-in-mysql-with-latitude-and-longitude/

0 голосов
/ 20 марта 2012

применить это к значениям

double theta = src_longitude - dest_longitude;
double min_distance = (Math.sin(Math.toRadians(src_latitude)) * Math.sin(Math.toRadians(dest_latitude))) +(Math.cos(Math.toRadians(src_latitude)) * Math.cos(Math.toRadians(dest_latitude)) * Math.cos(Math.toRadians(theta)));
min_distance = Math.acos(min_distance);
min_distance = Math.toDegrees(min_distance);
min_distance = min_distance * 60 * 1.1515 * 1.609344;
0 голосов
/ 20 марта 2012

Попробуйте этот запрос

$qry = "SELECT *,(((acos(sin((".$latitude."*pi()/180)) *
sin((`Latitude`*pi()/180))+cos((".$latitude."*pi()/180)) * cos((`Latitude`*pi()/180))*
cos(((".$longitude."- `Longitude`)*pi()/180))))*180/pi())*60*1.1515) as distance FROM
'MyTable` WHERE distance >= ".$distance."
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...