Найти пересечение двух локаций

Я хочу найти точки пересечения двух мест в Android.

Я не хочу рассматривать случаи, когда круги, как показано на рисунке не пересекаются или входят или полностью перекрывающимися.

моя проблема заключается в том, что местоположение задано в степени, а радиус (точность) задан в метре. Я не знаю, как смешивать эти единицы.

в моем случае среда Android, но проблема не в Android специфический.

Locations with Radiuses in m

1 ответов


вы должны преобразовать latitdue, долготу в декартову систему координат, с единицами измерения.
Это делается с помощью циклической эквидистантной проекции с центром latitude = (latitudeCircle1 + latCircle2) / 2.0. (то же самое для Центральной долготы)

(http://mathworld.wolfram.com/CylindricalEquidistantProjection.html)

В приведенной выше ссылке, чтобы получить систему на основе метра, вам еще предстоит умножить на константу "meterPerDegreeAtEquator", которая 40000000 / 360.0

теперь у вас есть координаты x, y, как и в школе.

затем вы вычисляете точки пересечения окружностей, как узнали в школе, или как нашли где-то в интернете. Например здесь: https://math.stackexchange.com/questions/256100/how-can-i-find-the-points-at-which-two-circles-intersect

затем вы преобразуете декартовые точки пересечения обратно в lat, lon, используя обратный проекция.

Это работает для расстояния между двумя кругами не более 10-100км.

Примечание: ниже общей ошибки, которую я видел в обсуждении с вашим образцом кода: Обратите внимание, что x относится к долготе, а y-к широте. Хотя мы говорим лат / Лонг. В таких формулах преобразования вы должны использовать long, LAT order в именах параметров и т. д. См. также Lat Long или Long Lat