Подтвердить что ты не робот

Как преобразовать километры в градусы в Geodjango/GEOS?

Я использую метод "buffer" из API GEOS для создания круга, основанного на точке и радиусе в GeoDjango, в соответствии с этим ответом: GeoDjango: как создать круг, основанный на точке и радиусе

Как заметил один из комментаторов, вам нужно будет преобразовать радиус в км в градусы... но как? Я предполагаю, что это быстрая формула, но она греческая для меня. Я был бы благодарен за любые указатели.

4b9b3361

Ответ 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