Расчет С PostGIS Расстояние
я делаю приложение навигации по карте в помещении прямо сейчас, и то, что я пытаюсь сделать, это создать базу данных точки карты в здании.
все координаты, которые я использую, взяты из Карты Google (что означает, что EPSG-3857). Теперь мне нужно найти расстояние в метрах, а также использовать D_Within в метрах
когда я пытаюсь извлечь расстояние между 2 точками:
SELECT ST_DISTANCE(
ST_GeomFromText('POINT(' || StartLon || ' ' || StartLat || ')',3857),
ST_GeomFromText('POINT(' || EndLon || ' ' || EndLat || ')',3857))
FROM i3_building.floordata;
для первых 2 строк с:
Start: 103.776047 1.292149; End: 103.77607 1.292212 (3 meters away)
Start: 103.776070 1.292212; End: 103.77554 1.292406 (50 meters away)
результат дано:
2.59422435413724e-005
4.11096095831604e-005
даже если они находятся в рад, второй результат только в два раза выше, чем первый. Так что это сбивает меня с толку. Затем я пытаюсь вывести его как метры:
SELECT ST_DISTANCE(
ST_GeographyFromText('POINT(' || StartLon || ' ' || StartLat || ')'),
ST_GeographyFromText('POINT(' || EndLon || ' ' || EndLat || ')'))
FROM i3_building.floordata;
результат, заданный для тех же строк:
2.872546829
4.572207435
что не то, что я ожидал, а также. Я не очень хорошо знаком с PostGis и SRID, поэтому этот вопрос может показаться простым, но, пожалуйста, помогите мне, я застрял нет @@
1 ответов
ваша система координат (CRS) - 4326, лат/Лон. Это общий источник путаницы с Google Maps: 3857-это CRS, используемый Google Maps для своих плиток, и проектируемые метры, основанные на сферическом глобусе. Векторные источники, которые добавляются в Google Maps (данные KML, GPS-дампы и т. д.), Как правило, находятся в lat/lon, 4326, который измеряется в градусах и преобразуется на лету.
Если вы хотите расстояние в метрах между двумя точками lat/ lon, используйте ST_Distance_Sphere. Например, для вашего первого набора очков,
select st_distance_sphere(st_makepoint(103.776047, 1.292149),st_makepoint(103.77607, 1.292212));
что дает 7.457 метров. Ваш второй набор точек 62.74 метрах друг от друга, на основе одного и того же запроса.
обратите внимание, что есть также ST_Distance_Spheroid который принимает третий параметр, измерение сфероида, то есть приближение формы Земли. Это потенциально будет более точным, но, вероятно, не значительным по сравнению с малым далекие расстояния.
ST_Distance дает расстояние в проецируемых координатах, поэтому, вероятно, вы получили странные результаты, подключая значения lat/lon.