2011-01-09 33 views
6

Tôi có tệp dữ liệu ở định dạng CSV có một số dữ liệu như sau: id trường | gạch dữ liệu | mô tả dữ liệu | kinh độ | Tôi có PostgreSQL và PostGIS đã được cài đặt và tôi muốn sử dụng PostGIS để tạo truy vấn sẽ hiển thị tất cả các bản ghi (từ bảng trên) nằm trong khoảng cách được chỉ định từ một vị trí lat/long.Sử dụng PostGIS với bảng dữ liệu hiện có có tọa độ thập phân

Vấn đề là tôi không biết cách bắt đầu. Tôi chỉ cần nhập tệp CSV của mình vào cơ sở dữ liệu PostgreSQL và bắt đầu sử dụng các hàm PostgreSQL và PostGIS khi tôi đã chuyển đổi tệp CSV thành bảng PostgreSQL?

Có thêm bước nào để làm cho bảng hoạt động với các chức năng của PostGIS không?

Điều gì sẽ là các bước chính xác để thực hiện việc này? Tôi thực sự đánh giá cao sự giúp đỡ của bạn!

Trả lời

8

Để làm việc với PostGIS, bạn cần phải nhập các tập lệnh này vào cơ sở dữ liệu đang hoạt động của mình.

Một khi bạn đã bước này thực hiện, thiết lập bảng của bạn và thêm cột PostGIS để nó

SELECT AddGeometryColumn('yourtable', 'columnname', 4269, 'POINT', 2); 

3 giá trị cuối cùng là SRID, loại và kích thước. Tôi chỉ cho rằng đây là những gì bạn muốn. Bạn có thể cần phải điều chỉnh SRID nhưng điều này sẽ ổn.

Bạn có thể đặt trong nhập khẩu của bạn/cập nhật/bất cứ điều gì mà bạn đã chọn để thêm hình học như

ST_Transform(ST_PointFromText('POINT(-85.45899 32.1337)', 4326)); 

Truy vấn này có thể được viết thành UPDATE hay INSERT của bạn kịch bản cho dữ liệu.

+0

Cảm ơn bạn! Đây thực sự là những gì tôi đang tìm kiếm. Tôi có thể có thể tạo ra một tập lệnh python nhỏ sẽ đi qua bảng và chuyển đổi các tọa độ thập phân đó thành các điểm. – avatar

+0

Có gì giống như tác phẩm này không? UPDATE mytable SET geometrycolumn = ST_Transform (ST_PointFromText ('POINT (-85.45899 32.1337)', 4326)) trong đó column1 = 'data1' và column2 = 'data2'; – avatar

+0

@itgorilla Tôi không biết tài liệu tham khảo của PostGIS bằng trái tim nhưng tại sao không, hãy thử nó;) – DrColossos

2

Đây là một câu hỏi thú vị :-)

Bạn có biết hệ tọa độ nào của các lat lat không?

Tôi đặt câu hỏi này bởi vì nó có liên quan đến cách bạn lưu trữ dữ liệu.

Điều bạn cần làm là tạo cột ngoài các cột trong tệp CSV chứa đối tượng hình học PostGIS loại POINT.

Sau đó tôi sẽ nhập dữ liệu CSV vào các cột tiêu chuẩn trong bảng, sau đó chạy bản cập nhật SQL để xây dựng dữ liệu ĐIỂM từ mỗi bản ghi và lưu trữ trong cột hình học được tạo.

Tại thời điểm đó, bạn sẽ có thể sử dụng các chức năng PostGIS để truy cập và dự đoán truy vấn trên dữ liệu.

Đây là tất cả loại meta những gì tôi đang nói ở trên vì có những phức tạp liên quan đến dữ liệu đang được sử dụng. Bạn sẽ cần phải biết hệ thống tham chiếu không gian được sử dụng với dữ liệu ban đầu.

+0

Dài lat là số thập phân. – avatar

+0

Không chắc chắn đây có phải là câu hỏi đúng hay không nhưng làm cách nào để chuyển đổi các bảng thập phân vĩ độ/dài thành một ĐIỂM? Tôi không chắc chắn nếu chỉ bằng cách chạy bản cập nhật SQL PostgreSQL sẽ biết tôi có hai trường cho lat và dài và chuyển đổi chúng thành một ĐIỂM. – avatar

+1

Phải dài lat là số thập phân nhưng chúng liên quan đến một hình cầu đặc biệt (ví dụ: hệ tọa độ tham chiếu tọa độ WGS84 hoặc NAD83 chẳng hạn). Khi thực hiện cập nhật, bạn phải thực hiện cập nhật với lựa chọn phụ để chuyển đổi dữ liệu lat/lon tinh khiết sang đối tượng PostGIS POINT thích hợp. Bạn sẽ phải tham khảo tài liệu về cách thực hiện việc này. –

7

Tôi vừa phải giải quyết cùng một nhiệm vụ và đã làm một việc tương tự như giải pháp của DrColossos ... Bạn có thể đã thực hiện với nó ngay bây giờ, nhưng tôi chỉ muốn thêm điều này trong trường hợp ai đó googles vấn đề này (như tôi đã làm) : Không cần viết kịch bản để tạo hình học từ các trường vĩ độ/vĩ độ, bạn có thể sử dụng một chuỗi được ghép nối đơn giản:

UPDATE mytable 
SET the_geom = ST_PointFromText('POINT(' || x ||' '|| y ||')', 4326) 
+0

Bạn đang sống tiết kiệm! – icefex

Các vấn đề liên quan