Как преобразовать километры в градусы в Geodjango/GEOS?
Я использую метод "buffer" из API GEOS для создания круга, основанного на точке и радиусе в GeoDjango, в соответствии с этим ответом: GeoDjango: как создать круг, основанный на точке и радиусе
Как заметил один из комментаторов, вам нужно будет преобразовать радиус в км в градусы... но как? Я предполагаю, что это быстрая формула, но она греческая для меня. Я был бы благодарен за любые указатели.
Ответы
Ответ 1
Ответ может зависеть от местоположения на земле. Около экватора 1 км будет равняться примерно 0,008 градусам (1 км /40 000 км * 360 градусов) широты и долготы, но около полюсов 1 км будет равняться примерно 0,008 градусам по широте, но может быть много много градусов долготы. (Если вы на расстоянии 1 км от полюса, расстояние в 1 км "запад" приблизит вас к 57 градусам долготы на запад.)
Но, если API просто хочет получить градусы по большому кругу в качестве измерения, возможно, этого будет достаточно (n км /40 000 км * 360 градусов). По крайней мере, 40 000 км "достаточно для меня":) более точные цифры доступны.
Ответ 2
1 градус лата составляет около 110,567 км на экваторе до 111,699 км на полюсах.
Этот link
может вас заинтересовать. Преобразование основано на окружности деления земли на 360 градусов.
1 град. длиной также около 111 км на экваторе и → 0, когда вы идете на полюса.
Ответ 3
Буфер в API-интерфейсе GEOS django создаст буфер, используя те единицы, которые использует ваша текущая система координат.
Если вы сохраняете все в 4326 (в латах/длинных градусах), вам придется найти какой-то сложный способ преобразования KM в градусы. Но теперь ваш буфер будет сильно искажен, чем больше север вы идете.
Лучшим решением является перепроектирование вашей геометрии в проекцию, которая поддерживает область, и часто такая проекция может отслеживать единицы измерения в метрах.
Например, если вы создаете буферные области в Северной Америке, вы можете использовать эту проекцию, которая использует метры http://spatialreference.org/ref/sr-org/7314/
Вот пример того, как это сделать с использованием Django GEOS API:
from django.contrib.gis.geos import Point
# Defines a point in lat/long
p = Point(-70, 50)
# This projection defines lat/long coordinate system
p.srid = 4326
# Transform into the 7314 projection using the OGC WKT format to define that projection
p.transform('PROJCS["NA Lambert Azimuthal Equal Area",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["degree",0.0174532925199433]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["false_easting",0.0],PARAMETER["false_northing",0.0],PARAMETER["longitude_of_center",-100.0],PARAMETER["latitude_of_center",45.0],UNIT["meter",1.0]]')
# Creates a buffered polygon of 1000 meters in radius
poly = p.buffer(1000)
Ответ 4
расстояние = степень * диаметр PI */360
Используя приблизительную оценку радиуса Земли: 6378 км
1 Степень @на экваторе или вдоль долготы: 111.317 км
1 Степень вдоль широты в градуированном градуите:
(градусы * PI * диаметр /360) * cos (широта)
Итак, 60 широт:
55 659 м в направлении долготы.
Ответ 5
Я использую этот конвертер
Формулы для расчета градусов в километрах: L = π * R * a/180