Làm cách nào để đưa vào biểu đồ không mong muốn từ PostGIS?


9

Câu hỏi này liên quan nhiều hơn đến các tài nguyên mà tôi có thể chưa xác định được, mặc dù tôi đã tìm kiếm trên web một thời gian.

Trong dự án tôi đang làm việc vào lúc này tôi cần chạy một thuật toán đường đi ngắn nhất trên biểu đồ đại diện cho các phòng văn phòng, hành lang, cầu thang, thang máy và tuyến đường giữa các tòa nhà.

Đối với lớp trình bày, tôi đã nghĩ đến việc sử dụng kịch bản Python với MapServer, nhưng bây giờ tôi sẽ suy nghĩ nhiều hơn về cách xây dựng biểu đồ từ (shapefiles được chuyển thành a) postGIS db được tạo từ OpenEV để dễ dàng thêm và xóa các cạnh hoặc trọng lượng hoặc thông tin về các điểm sau đó.

Đối với Python có một mô-đun gọi là networkX liên quan đến đồ thị và mặc dù vấn đề này đã được đưa ra trong stackexchange ở đây , nhưng đồ thị tôi đang cố gắng xây dựng không phải là một sơ đồ mà là một hướng vô hướng.

Cập nhật: 5 ngày trước mạng tiện ích của Ben Reilly đã được thêm vào dự án networkX. Utilitynetwork xây dựng một biểu đồ có hướng từ các tính năng của shapefile.
Các câu hỏi vẫn mở cho một cách tiếp cận tương tự các tính năng đọc từ cơ sở dữ liệu postGIS.


Bạn không muốn sử dụng pgRouting?
underdark

Tôi sẽ sử dụng pgRouting, tuy nhiên thuật toán tôi đang cố gắng thực hiện là một ngôi sao hai chiều và không phải là một tùy chọn ngoài luồng.
user39901230

Câu trả lời:


5

NetworkX có một phương pháp để chuyển đổi các đồ thị có hướng thành các đồ thị không có hướng .

Ngoài ra, để đọc một shapefile (hoặc thư mục của shapefiles) không thực sự cần phải xuất một biểu đồ có hướng, đó chỉ là những gì tôi cần tại thời điểm đó. Tôi đã không thử, nhưng thay thế dòng duy nhất:

net = nx.DiGraph()

... Có thể chỉ cần thực hiện các mẹo.

NetworkX có vẻ như nó sẽ hỗ trợ đọc shapefiles ngoài hộp (với OGR) trong 1.4 ( tính năng ).


xin lỗi vì sự nhầm lẫn. Những gì tôi thực sự đang cố gắng là chuyển đổi các shapefiles thành một cơ sở dữ liệu postGIS bằng cách sử dụng shp2pgsql và sau đó từ cơ sở dữ liệu postGIS để nhập nó vào biểu đồ networkX.
user39901230

cảm ơn Ben Chỉ cần lưu ý rằng 5 ngày trước họ đã đóng vé và mã của bạn đã được thêm vào dự án networkX. Sẽ rất thú vị để xem liệu có thể làm điều tương tự với các tính năng từ cơ sở dữ liệu postGIS hay không, nhưng tôi sẽ xem xét điều đó trong kỳ nghỉ Giáng sinh.
user39901230

do networkx đã bao gồm mô-đun nhưng chưa phát hành v1.4 nên có thể đưa ra một số mẫu sử dụng mạng tiện ích. Cho đến nay tôi đã lướt qua testnetworkload và thông qua các mẫu của bạn tìm thấy ở đây: gis.stackexchange.com/questions/210/alternatives-to-pgrouting/...
user39901230

Vẫn còn một chút việc phải làm, đây là lý do tại sao tôi không đưa nó lên pypi. Bây giờ tôi đã công khai wiki, nó nên chứa các mẫu hoạt động tốt nhất: bitbucket.org/gallipoli/utilitynetwork/wiki/Home
bwreilly

vì tôi dự định đưa điều này vào dự án năm cuối đại học, tôi có thể đóng góp không?
user39901230


2

Không chắc bạn quan tâm đến việc sử dụng các khung công tác khác như thế nào hoặc nếu bạn đã giải quyết được vấn đề này, nhưng dự án Geodjango bổ sung các tính năng ORM thực sự tốt cho các mô hình dữ liệu GIS, cho nhiều loại cơ sở dữ liệu hỗ trợ GIS, bao gồm các postgres với các ràng buộc PostGIS được cài đặt .

Liên kết Geodjango có tại đây: http://docs.djangoproject.com/en/dev/ref/contrib/gis/install/#overview

Lưu ý rằng Django là một khung web cho python, geodjango sắp sửa chỉnh sửa và hiển thị dữ liệu GIS cho phát triển web phụ trợ, nhưng nó cũng cung cấp một tập hợp các lớp trực quan và mạnh mẽ hơn nhiều so với các liên kết python trực tiếp (thay vì 'pythonic' hơn là trực tiếp 'được chuyển đổi từ cú pháp C', ví dụ: bạn có thể tạo một lớp django.contrib.gis.geos.linestring.LineString thay vì tạo một lớp ogr.Geometry với hằng số wkbLineString trong hàm tạo).

Trong hướng dẫn geodjango có vị trí: http://docs.djangoproject.com/en/dev/ref/contrib/gis/tutorial/

Các bước cần thiết để định cấu hình đọc / ghi từ cơ sở dữ liệu Postgres của bạn cũng đơn giản như sử dụng các mô hình trăn django khác, vấn đề đau đầu là thiết lập cơ sở dữ liệu không gian địa lý của bạn. Vì vậy, để tải dữ liệu vào cơ sở dữ liệu postgres, hãy xem liên kết neo #layermicking trong hướng dẫn ở trên; nó là ánh xạ trường giữa dữ liệu có sẵn trong tệp hình dạng tới các cột cơ sở dữ liệu được thiết lập cho mô hình dữ liệu của bạn.

Ít nhất, tôi sẽ mất 2-3 giờ để xem hướng dẫn và thiết lập các ràng buộc PostGIS và xem công cụ GIS này có phải là thứ bạn đang tìm kiếm không.

Cũng lưu ý rằng, khi bạn có cơ sở dữ liệu hỗ trợ GIS (ví dụ: các ràng buộc PostGIS cho pssql), bạn có thể thực hiện 'chứa' 'trong' trên dữ liệu hình học cơ sở dữ liệu (Dòng / Đa giác) bằng cách sử dụng các hàm được lưu trữ cơ sở dữ liệu (ví dụ ST_Contains(...): xem SQL mẫu cho PostGIS / pgsql đây: http://postgis.refractions.net/docs/ch04.html#id2639062 ... và phần tốt nhất về Geodjango, đó là nó được tối ưu hóa để làm những tra cứu không gian dành cho bạn! .

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.