Tạo POINT từ tọa độ kinh độ / vĩ độ trong bảng hiện có bằng PostGIS?


10

Tôi muốn tạo một ĐIỂM bằng cách sử dụng các cột kinh độ và vĩ độ của một bảng hiện có .
Đây là một liên kết đến tài liệu của ST_MakePoint .

Đây là bảng của tôi:

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

Thêm cột hình học:

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

Đây là truy vấn của tôi:

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

Không có lỗi trả về mặc dù POINTS được vẽ sai khi xem trong QGIS.

(-97.5959, 21.1922), tôi nhận(-109.4896, 0.0002)

Bất kỳ đề xuất?

Tôi sẵn sàng làm việc này hiệu quả hơn nếu có cách dễ dàng hơn.


Tôi không thấy vấn đề với truy vấn. Có lẽ bạn có thể cố gắng chẩn đoán vấn đề theo từng phần - có lẽ cố gắng loại bỏ phần QGIS và chỉ sử dụng dòng lệnh cho postgis?
BradHards 16/03/13

Có thể tôi không hiểu, nhưng dường như bạn đang nhập tọa độ Kinh độ Vĩ độ (-97, 21) theo độ, vào CRS dựa trên UTM và sử dụng mét. Nếu bạn đang khai báo đây là SRID 26918, thì các giá trị dài / lat phải nằm trong CRS đó. Nếu các giá trị Long / Lat tính theo độ thì bạn sẽ cần tạo hình học dưới dạng ST_SetSRID (MakePoint (...), 4326) sau đó chuyển đổi lớp thành 26913
Micha

@Micha, bạn nên thêm nhận xét của bạn làm câu trả lời. Tôi hy vọng SRID thích hợp sẽ giải quyết vấn đề OP. Nó cũng có thể hữu ích để bao gồm và ví dụ về cách thêm ST_Transform .
katahdin

Câu trả lời:


16

Có thể tôi không hiểu, nhưng dường như bạn đang nhập tọa độ Kinh độ Vĩ độ (-97, 21) theo độ, vào CRS dựa trên UTM và sử dụng mét. Nếu bạn đang khai báo đây là SRID 26918, thì các giá trị dài / lat phải nằm trong CRS đó. Nếu các giá trị Long / Lat tính theo độ thì bạn sẽ cần tạo hình học dưới dạng ST_SetSRID (MakePoint (...), 4326) sau đó chuyển đổi lớp thành 26913. Vì vậy, hãy đặt tất cả lại với nhau, nếu bạn cần phải có lớp trong 26913, nhưng các cột kinh độ / vĩ độ của bạn được tính bằng độ, với CRS 4326, sau đó

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

Cảm ơn đã giúp đỡ. Tôi nên nghĩ về điều đó trước khi ...
Zach
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.