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

Я использую метод «буфера» из API GEOS, чтобы создать круг на основе точки и радиуса в GeoDjango, согласно этому ответу: GeoDjango: Как создать круг на основе точки и радиуса

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

Ответы [ 4 ]

15 голосов
/ 07 марта 2011

Ответ может зависеть от местоположения на земле.В районе экватора 1 км будет равен примерно 0,008 градуса (1 км / 40000 км * 360 градусов) широты и долготы, но около полюсов 1 км будет равен примерно 0,008 градуса широты, но может быть много много градусов долготы.(Если вы находитесь на расстоянии 1 км от полюса, 1 км пути на запад принесет вам приблизительно 57 градусов долготы на запад.)

Но, если API просто хочет получить градусы вдоль большого круга в качестве измерения, возможно,было бы достаточно использовать (н км / 40000 км * 360 градусов).По крайней мере, 40000 км "достаточно для меня" :) более точные цифры доступны .

6 голосов
/ 07 марта 2011

1 градус широты составляет около 110,567 км на экваторе до 111,699 км на полюсах.

Это link может вас заинтересовать.Преобразование основывается на делении окружности земли на 360 градусов.

1 градус в длину также составляет около 111 км на экваторе и -> 0 при движении к полюсам.

4 голосов
/ 18 октября 2013

Буфер в API GEOS django создаст буфер, используя любые единицы измерения, которые использует ваша текущая система координат.

Если вы храните все в 4326 (в широтах / долготах), то вам нужно будет найти какой-нибудь хитрый способ преобразования КМ в градусы. Но теперь ваш буфер будет сильно искажен по мере продвижения на север.

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

Например, если вы создаете буферизованные области в Северной Америке, вы можете использовать эту проекцию, которая использует метры 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)
0 голосов
/ 10 марта 2011

расстояние = градус * PI * диаметр / 360

Используя приблизительную оценку радиуса Земли: 6378 км

1 градус @ на экваторе или по долготе: 111,317 км

1 градус по широте в x градусах широты: (градусы * PI * диаметр / 360) * cos (широта)

Итак, 60 широты: 55 659 м по долготе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...