Я делаю приложение для навигации по внутренней карте прямо сейчас, и я пытаюсь создать базу данных точек карты в здании.
Все координаты, которые я использую, взяты из Google Map (что означает EPSG 3857). Теперь мне нужно найти расстояние в метрах, а также использовать D_Within в метрах.
Когда я пытаюсь извлечь расстояние между двумя точками:
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, поэтому этот вопрос может показаться простым, но, пожалуйста, помогите мне, я застрял без @@