Czy tworzysz PUNKT ze współrzędnych długości i szerokości geograficznej w istniejącej tabeli za pomocą PostGIS?


10

Chciałbym zrobić PUNKT, używając kolumn długości i szerokości geograficznej istniejącej tabeli .
Oto link do dokumentacji ST_MakePoint .

Oto mój stół:

CREATE TABLE sysinst.bio (  
    oid INTEGER PRIMARY KEY,  
    longitude FLOAT,  
    latitude FLOAT,  
        geom GEOMETRY(POINT, 26913)
);

Dodawanie kolumny geometrii:

SELECT AddGeometryColumn ('sysinst', 'bio', 'geom', 26913, 'POINT', 2);

Oto moje zapytanie:

UPDATE sysinst.bio SET geom = ST_SetSRID(ST_MakePoint(longitude, latitude), 26913);

Brak zwracanego błędu, chociaż PUNKTY są nieprawidłowo drukowane podczas przeglądania w QGIS.

Do (-97.5959, 21.1922), I odbieranie(-109.4896, 0.0002)

Jakieś sugestie?

Jestem otwarty na robienie tego bardziej efektywnie, jeśli istnieje łatwiejszy sposób.


Nie widzę problemu z zapytaniem. Być może możesz spróbować zdiagnozować problem w częściach - być może spróbuj wyeliminować część QGIS i po prostu użyć wiersza polecenia dla postgis?
BradHards,

Może nie rozumiem, ale wydaje się, że podajesz współrzędne szerokości geograficznej (-97, 21) w stopniach, do CRS, który jest oparty na UTM i używa mierników. Jeśli deklarujesz to jako SRID 26918, wówczas wartości long / lat muszą znajdować się w tym CRS. Jeśli wartości Long / Lat są wyrażone w stopniach, musisz utworzyć geometrię jako ST_SetSRID (MakePoint (...), 4326), a następnie przekształcić warstwę na 26913
Micha

@Micha, powinieneś dodać komentarz jako odpowiedź. Oczekuję, że odpowiedni SRID rozwiąże problem PO. Pomocne może być również dołączenie i przykład dodania transformacji ST_Transform .
katahdin

Odpowiedzi:


16

Może nie rozumiem, ale wydaje się, że podajesz współrzędne szerokości geograficznej (-97, 21) w stopniach, do CRS, który jest oparty na UTM i używa mierników. Jeśli deklarujesz to jako SRID 26918, wówczas wartości long / lat muszą znajdować się w tym CRS. Jeśli wartości Long / Lat są wyrażone w stopniach, musisz utworzyć geometrię jako ST_SetSRID (MakePoint (...), 4326), a następnie przekształcić warstwę na 26913. Tak więc, łącząc wszystko razem, jeśli potrzebujesz mieć warstwę w 26913, ale twoje kolumny długości i szerokości geograficznej są w stopniach, a więc CRS 4326

UPDATE sysinst.bio SET geom = ST_Transform(ST_SetSRID(ST_MakePoint(longitude, latitude), 4326),26913);

Dzięki za pomoc. Powinienem był o tym pomyśleć wcześniej ...
Zach
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.