В чем причина заметной разницы между функцией расстояния Postgis и результатами калькулятора расстояния Google Maps? - PullRequest
0 голосов
/ 06 февраля 2019

Я создаю приложение на основе python / django, в котором важно измерить расстояние между двумя заданными географическими точками с точностью не менее 10 метров.

Проблема в том, что результаты функции расстояния Postgis и калькулятора расстояния Google Maps (между двумя выводами) сильно различаются.

Я поместил два вывода на Google Maps с координатами (52.162919 20.999998)и (52.163557 20.997626) и измерили расстояние с помощью щелчка правой кнопкой мыши -> измерить расстояние, и я также использовал функцию расстояния postgis для вычисления результата в моем коде.

from django.contrib.gis.db.models.functions import Distance
from django.contrib.gis.geos import GEOSGeometry

qs = queryset.annotate(distance=Distance(
    GEOSGeometry(f'SRID=4326;POINT(52.162919 20.999998)'),
    GEOSGeometry(f'SRID=4326;POINT(52.163557 20.997626)'), 
    spheroid=True)) \
    .values_list('id', 'distance', named=True)

    return qs


class XXXSerializer(serializers.ModelSerializer):
    class Meta:
        model = XXX
        fields = ('id', 'distance')

    distance = serializers.SerializerMethodField()

    def get_distance(self, obj):
        return obj.distance.m

Результат расчета базы данных равен 270.868624085953метров, тогда как базовый результат Google Maps составляет 175,13 метра!

Разница между этими результатами огромна.

Есть ли у вас какие-либо идеи о том, что может быть причиной, какой результат является правильным?один и как настроить мой код так, чтобы он соответствовал результату расстояния Google Maps?

1 Ответ

0 голосов
/ 06 февраля 2019

В одном из расчетов вы указали широту и долготу в неправильном направлении.Вы можете проверить его здесь , чтобы убедиться, что результаты повторяются, если вы переключаете значения.Буквально просто нужно убедиться, что вы знаете, какое значение является широтой, а какое - долготой, и правильно указать его для обоих API.

Я не пользуюсь библиотекой, но это плохо документировано, учитывая, насколько легко эта ошибка.Вы можете увидеть больше в Означает ли Y широту, а X означает долготу в каждом программном обеспечении ГИС?

...