Hòa tan hoặc bỏ dòng trên các thuộc tính phổ biến trong PostGIS hoặc GRASS?


9

Tôi có một shapefile đường trung tâm đường có đường phân chia ở mỗi ngã tư. Tuy nhiên, tôi muốn tham gia LINESTRING có một bộ thuộc tính chung vào một LINESTRING duy nhất. Chừng nào tên, giới hạn tốc độ, v.v., không thay đổi, tôi muốn hợp nhất chúng lại với nhau. Đây là sự kết hợp cuối cùng vào OpenStreetMap.

Phần mềm ArcGIS for Desktop của Esri dường như cho phép điều này với lệnh Dissolve và tùy chọn UNSPLIT_LINES.

Tôi cũng tìm thấy một lệnh Dissolve trong QGIS nhưng dường như nó chỉ hoạt động trên các đa giác và các trường đơn lẻ.

Giả sử không có gì tồn tại cho QGIS, có ai biết làm thế nào trong PostGIS hoặc GRASS không?



Nếu câu hỏi này được hỏi hôm nay tôi nghĩ nó sẽ bị đóng vì quá rộng. Thay vì cố gắng đóng nó ngay bây giờ, tôi sẽ chỉnh sửa nó để trang bị thêm các Câu trả lời hiện có và ngăn các Câu trả lời rộng hơn.
PolyGeo

Câu trả lời:


4

Câu hỏi thú vị. Tôi không coi mình là một bậc thầy PostGIS, nhưng tôi đã giải quyết vấn đề của bạn và đưa ra truy vấn sau đây để hòa tan LINESTRINGcác bản ghi đường cao tốc thành MULTILINESTRINGcác bản ghi khi chúng có các giá trị chung trong nhiều trường (trong tập dữ liệu của tôi, tôi khớp với các trường namestate). Tôi đã sử dụng OGR để đẩy một shapefile đường cao tốc (được đổi tên thành ushwys) vào PostGREsql; vì vậy trường hình học của tôi được gọi là wkb_geometry. Hãy thử hack truy vấn này để chứa dữ liệu và điều kiện trường của bạn:

SELECT 
u.name, 
u.state, 
ST_AsText( ST_Multi( ST_Collect( u.wkb_geometry ) ) ) as multilines 
FROM ushwys u
GROUP BY u.name, u.state 
ORDER BY u.state 
LIMIT 100; --########### DROP THE LIMIT WHEN YOU'RE DONE EXPERIMENTING

Nếu điều này hoạt động, bạn có thể sử dụng ogr2ogr để thực hiện truy vấn này và xuất kết quả hầu hết mọi định dạng vectơ bạn thích, chẳng hạn như shapefile, GML, CSV hoặc cách khác. Để biết thông tin về cách gọi các truy vấn SQL từ ogr2ogr, hãy xem tài liệu OGR SQL .

Để tham khảo, tôi đã xem lại hướng dẫn PostGIS ST_Collect , cũng như trang web này thể hiện việc nhóm trên nhiều lĩnh vực.

Nếu bạn thấy các giao dịch của truy vấn này không phù hợp với bạn, xin vui lòng cho tôi biết và tôi sẽ đưa ra câu trả lời của tôi để nó không kéo dài và làm mọi người bối rối.


PS Nếu bạn không quen thuộc với việc sử dụng ogr2ogr để đẩy dữ liệu địa lý vào PostGIS, tôi đã sử dụng kịch bản ogr2ogr sau để thực hiện nhập dữ liệu của tôi ( hãy cẩn thận sao chép từ các trang web và pasteing trực tiếp vào cửa sổ lệnh ogr2ogr của bạn, như tôi đã tìm thấy các trang định dạng giới thiệu ngắt dòng và thay thế phông chữ / ký tự cho dấu ngoặc kép phá vỡ tập lệnh ogr ):

ogr2ogr -f "PostGreSQL" PG:"host=127.0.0.1 user=postgres dbname=gisdb password=my_password" 
"E:\GISData\UnitedStates\highways.shp" -nln ushwys -nlt geometry

[Cập nhật]

Tôi muốn xem cách "nhìn" này trong QGIS sau khi chạy truy vấn đó, vì vậy tôi đã sửa đổi truy vấn để áp dụng điều WHEREkhoản này (cung cấp cho tôi tất cả các biến thể của Quốc lộ Hoa Kỳ 65 ở bang Missouri):

where u.state = 'MO' and u.name LIKE '%US%65%'

Tiếp theo, tôi đã sử dụng QGIS và plugin QuickWKT để trực quan hóa tất cả tám (8) MULTILINESTRINGhồ sơ đường cao tốc kết quả của mình . Như bạn có thể thấy trong ảnh chụp màn hình, kết quả cuối cùng đưa Hwy 65 từ biên giới phía bắc của Missoui với Iowa đến tận biên giới phía nam của cô với Arkansas:

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

Đối với tôi, điều này cho thấy rằng truy vấn của tôi không tạo ra bất kỳ sự trùng lặp hoặc loại bỏ các tính năng bất ngờ nào. Vì vậy, tiếp theo tôi tự hỏi "ok, hòa tan trả lại tám tính năng, nhưng có bao nhiêu tính năng trong bảng gốc thực sự đại diện cho Hwy 65 ở Missouri?" Truy vấn tiếp theo của tôi đã trả lời câu hỏi đó. Có vẻ như bộ dữ liệu gốc sử dụng ba mươi tám (38) tính năng để đại diện cho Hwy 65 ở Missouri:

SELECT count(*) FROM ushwys WHERE state = 'MO' AND name LIKE '%US%65%';
-- returned 38

Trên phân tích cuối cùng, truy vấn đã giảm ba mươi tám (38) tính năng xuống còn tám (8) tính năng chia sẻ các giá trị trong các trường tên và trạng thái. Tại thời điểm này, tôi tương đối tin tưởng truy vấn này hữu ích và phù hợp để hòa tan các hình học một phần thành nhiều hình học khi nhiệm vụ hòa tan cần xem xét nhiều trường.

Chúc mừng. :)



1

Trong GRASS GIS, hãy xem v.build.polylines

v.build.polylines có thể được sử dụng để xây dựng lại các polylines bị hỏng

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.