Wykonuję teraz aplikację do nawigacji w mapach wewnętrznych, a ja próbuję wykonać to zbudować bazę danych punktu mapy w budynku.PostGis Distance Calculation
Wszystkie używane współrzędne są pobierane z Google Map (co oznacza, że EPSG ma 3857). Co muszę zrobić, to znaleźć odległość w metrach, a także korzystać z D_Within w metrach
Kiedy próbuję wydobyć się odległość między 2 pkt:
SELECT ST_DISTANCE(
ST_GeomFromText('POINT(' || StartLon || ' ' || StartLat || ')',3857),
ST_GeomFromText('POINT(' || EndLon || ' ' || EndLat || ')',3857))
FROM i3_building.floordata;
przez pierwsze 2 rzędu z:
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)
Wynik podany jest:
2.59422435413724e-005
4.11096095831604e-005
Mimo iż są one w rad, druga re Sult jest tylko dwa razy większy od pierwszego. Więc to sprawia, że się mylę. Wtedy staram się go jako wyjścia liczników:
SELECT ST_DISTANCE(
ST_GeographyFromText('POINT(' || StartLon || ' ' || StartLat || ')'),
ST_GeographyFromText('POINT(' || EndLon || ' ' || EndLat || ')'))
FROM i3_building.floordata;
Wynik podany w tych samych wierszach jest:
2.872546829
4.572207435
co nie jest, czego się spodziewałem, jak również. Nie jestem zaznajomiony z PostGis i SRID, więc to pytanie może wydawać się proste, ale proszę, pomóżcie mi, utknęło mi @@
Dziękuję za odpowiedź. Spróbowałem też 4326, ale niewiele różni się od 3857. Na odległość pierwszego zestawu jest 3 metry, ponieważ znajduje się w moim biurze, więc znam go całkiem dobrze. Próbuję również obliczyć to stąd: http://boulter.com/gps/distance/ - ten sam wynik, 3 metry. –
Co masz na myśli, mówiąc niewiele inaczej? Powiedziałbym, że 7,45 metra i 62,74 są zupełnie inne. Problemem jest jednak st_distance_sphere, ponieważ pobiera on dane wejściowe w lat/lon, gdzie st_distance zajmuje odległość w rzutowanych współrzędnych. 3857 i 4326 są radykalnie różne, są to odpowiednio metry i stopnie, ale musisz podłączyć je do odpowiednich funkcji, aby uzyskać właściwe odpowiedzi: D –
Przepraszam, po prostu idź i spróbuj mierzyć, około 7 metrów jest całkiem poprawne.Dzięki za pomoc :) –