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 LINESTRING
các bản ghi đường cao tốc thành MULTILINESTRING
cá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 name
và state
). 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 WHERE
khoả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) MULTILINESTRING
hồ 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:
Đố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. :)