2012-03-20 3 views
0

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

UPDATE Хорошо, так я теперь с помощью следующей функции,

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 

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

+0

Er, на каком языке? И [что вы пробовали] (http://mattgemmell.com/2008/12/08/what-have-you-tried/)? – ghoti

+0

Извините, langauge - mysql, у меня есть формула для получения километров. Мне просто нужно выработать счетчики. Спасибо за всю помощь, ребята! –

+0

Чтобы изменить km на m, просто умножьте результат на 1000. Вот что означает «k»: «кило» - это «тысяча». –

ответ

1

Я бы порекомендовал вам взглянуть на пространственное расширение до 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

спасибо! не знали, что они существуют. –

0

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

$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." 
0

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

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

Я не понимаю, что вы здесь делаете. Что такое тета? Почему вы преобразовываете расстояние в градусы? Что такое 60 * 1,1515 * 1,609344? Каковы единицы min_distance (ft/m/мили/морские мили/км)? – TreyA

+0

извините .. моя ошибка, отредактировал ответ. Взгляни – skaur

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