2016-06-13 10 views
0

Как определить, что точка с LAT, LONG формат координат находится рядом с другим пунктом.Как найти ближайшие точки в заданных координатах

позволяет сказать, что я хочу, чтобы найти все точки рядом с:

-38.9086621 ,-68.082214

, которые находятся в менее чем в 1 км от расстояния. Я уже знаю, как найти координату в данном квадранте, но не как найти квадрант вблизи точки.

+1

Если вам нужна точность, вы должны преобразовать географические координаты в метрической систему отсчета (например, как EPSG: 3857), а затем вы можете использовать простую математику. Вы можете взглянуть на proj4js (http://proj4js.org). –

+0

@MarcCompte Какое улучшение точности вы достигаете, делая это при измерении расстояния? В геодезических работах углов или измерения расстояния, компенсация, погрешность измерений, ... выполняются preferible в глобальной системе координат, такие как ECEF, чтобы избежать ошибок, о системе отсчета. –

+1

@JoseHermosillaRodrigo Мы говорим о расстоянии. Расстояние между двумя точками является мерой на плоскости. Географические координаты трехмерны. Другого способа вычисления метрических расстояний нет, кроме того, чтобы преобразовать из 3D в плоскость. Конечно, вы можете использовать основную тригонометрию, чтобы сделать это, но тогда вы предполагаете, что Земля - ​​идеальная сфера, и это редко бывает столь же точно, как использование эллипсоида (более сложное приближение к земной трехмерной форме). Именно поэтому трансформация является ключом к достижению высокоточного расчета расстояния, за исключением использования лазерных измерений. –

ответ

0

Вы можете использовать формуляр haversine для расчета расстояний между двумя заданными координатами. Вычисленное расстояние - это прямая связь между заданными координатами (beeline).

JavaScript пример (Source):

var R = 6371e3; // meters 
var lat1Radians = lat1.toRadians(); 
var lat2Radians = lat2.toRadians(); 
var deltaLat = (lat2-lat1).toRadians(); 
var deltaLon = (lon2-lon1).toRadians(); 

var a = Math.sin(deltaLat/2) * Math.sin(deltaLat/2) + 
     Math.cos(lat1Radians) * Math.cos(lat2Radians) * 
     Math.sin(deltaLon/2) * Math.sin(deltaLon/2); 
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 

var d = R * c; 
+0

Пожалуйста, избегайте использования латинских букв в качестве имен переменных. Может вызвать много проблем;) – veritas

+1

Просто скопировал его из источника, но теперь он исправлен. благодаря – KRONWALLED

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

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