Snap dòng đến điểm tự động?


19

Tôi có hai shapefile vector: Một tệp là các điểm đại diện cho các hố ga và hai là một tệp đa tuyến đại diện cho các đường ống dẫn đến và từ các hố ga. Tôi cần chụp các đường trong một khoảng cách xác định đến hố ga gần nhất.

Có một cách dễ dàng để thực hiện điều này mà không cần làm bằng tay?

dòng -> điểm

Cập nhật

Theo Alexandre, tôi đã xuất các shapefiles của mình sang định dạng spatialite. Không chắc chắn những gì tiếp theo.

nhập mô tả hình ảnh ở đây

Cập nhật # 2 Tôi đã tạo một tệp db mới và nhập các shapefiles vào db mới bằng cách sử dụng spatialite-gui, tôi đã điều chỉnh truy vấn SQL của mình nhưng như bạn thấy tôi gặp lỗi "không có cột như vậy: f.geom"

nhập mô tả hình ảnh ở đây


Trong bảng không gian Spatialite (lớp), các tính năng hình học được lưu trong một thuộc tính. Các tên có thể khác nhau. Trong bảng "pipe", thuộc tính đó được gọi là Geometry. Tôi sẽ cập nhật câu trả lời của mình giả sử rằng mh cũng là một thuộc tính Hình học.
Alexandre Neto

Tôi gặp lỗi "không có chức năng như vậy: ST_Snap". Tôi đang sử dụng QGIS 1.8 trên Windows 7 64 bit.
GreyHippo

Bạn có những gì Spatialite? Bạn có thể kiểm tra nó trong QGIS> Trợ giúp> Giới thiệu
Alexandre Neto

"không có cột như vậy: f.geom" - thử với f.Geometry
vinayan

Phiên bản Spatialite của tôi là 3.0.1
GreyHippo

Câu trả lời:


26

Nếu bạn sẵn sàng đưa dữ liệu của mình vào Postgis (hoặc Spatialite ), bạn có thể sử dụng ST_Snap để làm những gì bạn muốn.

Chỉ cần sử dụng lớp đường \ bảng làm đầu vào và lớp điểm của bạn làm tham chiếu và đặt dung sai. Một cái gì đó như thế này:

SELECT
    f.gid as gid,
    ST_Snap(f.Geometry, g.Geometry, 2) as geom
FROM
    pipe as f,
    (SELECT ST_Collect(Geometry) as Geometry
     FROM mh) as g

Kết quả là thế này:

nhập mô tả hình ảnh ở đây

Sau đó, bạn có thể cập nhật hình học của mình bằng cách sử dụng mã định danh.


Tôi sẽ đặt mã "Chọn ... Từ ..." ở đâu? "Sử dụng định danh tính năng" nghĩa là gì?
GreyHippo

Sau khi nhập tệp của bạn trong cơ sở dữ liệu (postgis hoặc spatialite), bạn có thể sử dụng Trình quản lý DB để xem các bảng cơ sở dữ liệu của mình và chạy truy vấn SQL (mã) trong Cửa sổ SQL, sau đó tải nó vào khung vẽ của bạn. Hãy cho tôi biết nếu điều đó làm việc cho bạn, và sau đó chúng tôi sẽ thực hiện phần cập nhật.
Alexandre Neto

Alexandre, xem cập nhật ở trên. Tôi xuất tập tin sang hai tập tin spatiallite.
GreyHippo

Bạn nên đặt cả hai tệp vào cùng một Cơ sở dữ liệu Spatialite, chỉ cần kéo nói "pipe" vào cơ sở dữ liệu "mh.sqlite". Sau đó cập nhật Mã SQL để thay đổi "điểm" thành "mh" và "đường" thành "đường ống". Cũng thích ứng "gid" với id "pipe" của bạn. Sau đó, bạn có thể Thực thi và tải kết quả.
Alexandre Neto

3

Tôi không biết nhiều về QGIS hoặc GRASS, nhưng một số Googling nhanh chóng đã mang lại v.clean trong GRASS nên thực hiện thủ thuật này.

Có một cái nhìn vào bài nàycái này .

Các lựa chọn thay thế cho QGIS và GRASS:

Nếu tôi làm điều này trong ArcGIS, có lẽ tôi sẽ lưu trữ dữ liệu của mình trong Bộ dữ liệu tính năng trong Cơ sở dữ liệu địa lý tệp và tạo một cấu trúc liên kết để xác định các khu vực mà lớp điểm không nằm trên điểm cuối của các dòng. Sau đó, bạn có thể sửa lỗi bằng Trình kiểm tra lỗi .

Nhưng, có lẽ giải pháp nhanh nhất và dễ nhất sẽ là FME. Bạn có thể thử sử dụng Công cụ Snapper hoặc tốt hơn nữa là Công cụ AnchoredSnapper . Nếu bạn sử dụng AnchororedSnapper, hãy đảm bảo rằng kiểu chụp nhanh của bạn là Chụp điểm cuối. Tất nhiên, bạn sẽ cần giấy phép cho FME. Nhưng bạn có thể tải xuống bản dùng thử 14 ngày nếu bạn không có.


Tôi đã xem v.clean nhưng nó chỉ sử dụng một lớp, tôi cần so sánh lớp này với lớp khác. Ngoài ra, tôi đã tìm kiếm nhiều hơn cho một tùy chọn QGIS / opensource.
GreyHippo

1
@GreyHippo, GRASS là mã nguồn mở
nghệ thuật21

1
Tôi biết GRASS là mã nguồn mở nhưng các tùy chọn khác của bạn thì không.
GreyHippo


-1

Cách thủ công

Qgis -> Cài đặt -> Tùy chọn chụp (và tôi không chắc nhưng có thể cần tiện ích mở rộng CadTools) và cho phép chỉnh sửa tô pô.

Cách tự động

v.clean trong các công cụ GRASS trong hộp công cụ SEXTANTE trong QGIS. Nếu bạn có PostGIS 2.0 thì ST_Snap và ST_SnapToGrid () (Và không có lý do gì bạn không thể sử dụng nó, đó là công cụ không gian rất tốt)

Cách thương mại

Công cụ FME và MRF (mở rộng thương mại, tôi đã có một phiên bản đánh giá. Nó rất tốt).

Ngoài ra, tôi quan tâm đến việc quản lý ống nước / cống với các công cụ nguồn mở, bạn có gợi ý nào không?


Tôi nghĩ đó là những gì GreyHippo có nghĩa là "làm bằng tay". Chỉ cần sử dụng các tùy chọn Chụp, bạn sẽ phải di chuyển mọi nút lủng lẳng bằng tay để kích hoạt tính năng chụp. Hay tôi đang thiếu một cái gì đó?
Jake

Không. tôi bị mù.
Simplexio

Simplexio, tôi KHÔNG muốn làm nó bằng tay. Tôi đã hy vọng cho một plugin hoặc quá trình tôi không biết về.
GreyHippo

Tôi không nghĩ bạn có thể sử dụng GRASS v.clean trên hai lớp?
GreyHippo

1
Nếu tôi nhớ chính xác, nó có thể sửa các dòng quá ngắn. bạn thấy đấy, vấn đề bạn gặp phải không phải là hố ga của bạn không đúng chỗ, mà mạng lưới cống của bạn không đúng về mặt cấu trúc. Và đó chỉ cần lớp ống. Mọi hệ thống mạng tiện ích mà tôi đã thấy đều cho rằng có hố ga ở mọi ngã tư cống. Điều này giả định rằng bạn muốn có cấu trúc liên kết chính xác.
Simplexio
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.