Найти пересечение двух локаций
Я хочу найти точки пересечения двух мест в Android.
Я не хочу рассматривать случаи, когда круги, как показано на рисунке не пересекаются или входят или полностью перекрывающимися.
моя проблема заключается в том, что местоположение задано в степени, а радиус (точность) задан в метре. Я не знаю, как смешивать эти единицы.
в моем случае среда Android, но проблема не в Android специфический.
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