Учитывая набор точек широты и долготы, как я могу рассчитать широту и долготу центральной точки этого набора (то есть точки, которая будет центрировать вид по всем точкам)?
РЕДАКТИРОВАТЬ: Python решение, которое я использовал:
Convert lat/lon (must be in radians) to Cartesian coordinates for each location.
X = cos(lat) * cos(lon)
Y = cos(lat) * sin(lon)
Z = sin(lat)
Compute average x, y and z coordinates.
x = (x1 + x2 + ... + xn) / n
y = (y1 + y2 + ... + yn) / n
z = (z1 + z2 + ... + zn) / n
Convert average x, y, z coordinate to latitude and longitude.
Lon = atan2(y, x)
Hyp = sqrt(x * x + y * y)
Lat = atan2(z, hyp)
z
, пожалуйста?Ответы:
Простой способ их простого усреднения имеет странные граничные случаи с углами, когда они переходят от 359 'назад к 0'.
Гораздо раньше вопрос о SO вопрос о нахождении в среднем набора компаса углов.
Расширение подхода, рекомендуемого там для сферических координат, будет:
источник
Спасибо! Вот C # версия решений OP с использованием степеней. Он использует класс System.Device.Location.GeoCoordinate
источник
Я нашел этот пост очень полезным, так что вот решение в PHP. Я успешно использовал это и просто хотел сэкономить еще какое-то время.
источник
Очень полезный пост! Я реализовал это в JavaScript, настоящим мой код. Я использовал это успешно.
источник
Javascript версия оригинальной функции
источник
В интересах возможной экономии кому-то минуты или двух, вот решение, которое использовалось в Objective-C вместо Python. Эта версия принимает NSArray NSValues, которые содержат MKMapCoordinates, который был вызван в моей реализации:
источник
<GLKit/GLKMath.h>
и используйтеGLKMathDegreesToRadians
иGLKMathRadiansToDegrees
очень хорошие решения, именно то, что мне нужно для моего быстрого проекта, так что вот быстрый порт. спасибо и вот еще проект для детской площадки: https://github.com/ppoh71/playgounds/tree/master/centerLocationPoint.playground
источник
Если вы заинтересованы в получении очень упрощенного «центра» точек (например, для простого центрирования карты по центру полигона gmaps), то вот базовый подход, который сработал для меня.
Это возвращает среднюю координату lat / lng для центра многоугольника.
источник
В Django это тривиально (и на самом деле работает, у меня были проблемы с рядом решений, неправильно возвращающих отрицательные значения по широте).
Например, предположим, что вы используете django-геопосткоды ( автором которых я являюсь).
point
этоPoint
экземпляр Django, который затем можно использовать для выполнения таких задач, как извлечение всех объектов, которые находятся в пределах 10 км от этой центральной точки;Изменить это на сырой Python тривиально;
Под капотом Django использует GEOS - более подробная информация на https://docs.djangoproject.com/en/1.10/ref/contrib/gis/geos/
источник
Версия Java, если кому-то это нужно. Константы определены статически, чтобы не вычислять их дважды.
источник
Вот версия Android, основанная на ответе @ Yodacheese's C # с использованием API Карт Google:
в приложении build.gradle добавьте:
источник
Реализация Dart для Flutter, чтобы найти центральную точку для нескольких широты, долготы.
импорт математического пакета
Список широты и долготы
источник
Это то же самое, что и проблема средневзвешенного значения, когда все веса одинаковы, и есть два измерения.
Найти среднее значение всех широт для вашей центральной широты и среднее значение всех долгот для центральной долготы.
Предостережение: это приближение на близком расстоянии, и ошибка станет неуправляемой, когда отклонения от среднего значения будут превышать несколько миль из-за кривизны Земли. Помните, что широта и долгота - это градусы (на самом деле это не сетка).
источник
Если вы хотите учесть используемый эллипсоид, вы можете найти формулы здесь http://www.ordnancesurvey.co.uk/oswebsite/gps/docs/A_Guide_to_Coordinate_Systems_in_Great_Britain.pdf
см. Приложение B
Документ содержит много других полезных вещей
В
источник
Вне объекта в PHP. Данный массив координатных пар возвращает центр.
Взятые идеи от # 4
источник
Вот версия Python для нахождения центральной точки. Lat1 и lon1 - списки широты и долготы. это вернет широту и долготу центральной точки.
источник
Dart / Flutter Рассчитать центральную точку нескольких пар координат широта / долгота
источник
Если вы хотите, чтобы все точки были видны на изображении, вам нужны экстремумы по широте и долготе и убедитесь, что ваше представление включает эти значения с любой границей, которую вы хотите.
(Из ответа Альнитака, как вы можете вычислить экстремумы, может быть немного проблематично, но если они находятся на несколько градусов по обе стороны от долготы, которая оборачивается вокруг, тогда вы сделаете точный выстрел и выберете правильный диапазон.)
Если вы не хотите искажать какую-либо карту, на которой находятся эти точки, то отрегулируйте соотношение сторон ограничительной рамки так, чтобы оно соответствовало пикселям, которые вы выделили для вида, но все еще включает в себя экстремумы.
Чтобы точки центрировались на некотором произвольном уровне масштабирования, рассчитайте центр ограничительной рамки, которая «просто соответствует» точкам, как указано выше, и сохраните эту точку в качестве центральной точки.
источник
Я сделал эту задачу в JavaScript, как показано ниже
источник
В качестве благодарности за эту ветку, вот мой небольшой вклад в реализацию в Ruby, в надежде, что я сэкономлю кому-то несколько минут из их драгоценного времени:
источник
Я использовал формулу, полученную с www.geomidpoint.com, и написал следующую реализацию C ++.
array
Иgeocoords
мои собственные классы функциональность которых должны быть понятны.источник