สแน็ปอินเส้นไปยังจุดโดยอัตโนมัติ?


19

ฉันมีสองรูปร่างเวกเตอร์: หนึ่งไฟล์คือจุดที่แสดงถึงบ่อพักและอีกอันคือไฟล์ polyline ซึ่งเป็นตัวแทนของท่อที่นำไปสู่และจากบ่อพัก ฉันจำเป็นต้องตะครุบเส้นภายในระยะที่กำหนดกับท่อระบายน้ำที่ใกล้ที่สุด

มีวิธีง่ายๆในการทำสิ่งนี้โดยไม่ทำด้วยตนเองหรือ

บรรทัด -> จุด

ปรับปรุง

ตาม Alexandre ฉันได้ส่งออกรูปร่างของฉันไปเป็นรูปแบบ spatialite ไม่แน่ใจว่าจะทำอะไรต่อไป

ป้อนคำอธิบายรูปภาพที่นี่

อัปเดต # 2 ฉันสร้างไฟล์ db ใหม่และนำเข้า shapefiles ไปยังฐานข้อมูลใหม่โดยใช้ spatialite-gui ฉันปรับคิวรี SQL ของฉัน แต่อย่างที่คุณเห็นฉันได้รับข้อผิดพลาด "ไม่มีคอลัมน์ดังกล่าว: f.geom"

ป้อนคำอธิบายรูปภาพที่นี่


ในตารางเชิงพื้นที่ (เลเยอร์) รูปทรงเรขาคณิตของคุณลักษณะจะถูกบันทึกไว้ในแอตทริบิวต์ ชื่ออาจแตกต่างกัน ในตาราง "ไพพ์" ที่แอตทริบิวต์นั้นเรียกว่าเรขาคณิต ฉันจะอัปเดตคำตอบของฉันโดยสมมติว่า mh นั้นเป็นคุณลักษณะทางเรขาคณิตด้วย
— Alexandre Neto

ฉันพบข้อผิดพลาด "ไม่มีฟังก์ชั่นดังกล่าว: ST_Snap" ฉันใช้ QGIS 1.8 บน Windows 7 64 บิต
— GreyHippo

คุณมี Spatialite อะไร? คุณสามารถตรวจสอบได้ใน QGIS> ความช่วยเหลือ> เกี่ยวกับ
— Alexandre Neto

"ไม่มีคอลัมน์ดังกล่าว: f.geom" - ลองใช้ f.Geometry
— vinayan

เวอร์ชั่น Spatialite ของฉันคือ 3.0.1
— GreyHippo

คำตอบ:


26

หากคุณยินดีที่จะใส่ข้อมูลของคุณในPostgis (หรือSpatialite ) คุณสามารถใช้ST_Snapเพื่อทำสิ่งที่คุณต้องการ

เพียงแค่ใช้เส้นเลเยอร์ \ ตารางเป็นอินพุตและเลเยอร์จุดของคุณเป็นข้อมูลอ้างอิงและตั้งค่าความอดทน บางสิ่งเช่นนี้

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

ผลลัพธ์คือ:

ป้อนคำอธิบายรูปภาพที่นี่

จากนั้นคุณสามารถอัปเดตรูปทรงเรขาคณิตของคุณโดยใช้ตัวระบุคุณสมบัติ


ฉันจะใส่รหัส "เลือก ... จาก ... " ได้ที่ไหน "ใช้ตัวระบุคุณสมบัติ" หมายความว่าอย่างไร
— GreyHippo

หลังจากนำเข้าไฟล์ของคุณในฐานข้อมูล (postgis หรือ spatialite) คุณสามารถใช้ตัวจัดการฐานข้อมูลเพื่อดูตารางฐานข้อมูลของคุณและเรียกใช้แบบสอบถาม SQL (รหัส) ในหน้าต่าง SQL แล้วโหลดลงในพื้นที่ทำงานของคุณ บอกฉันว่ามันเหมาะกับคุณหรือไม่แล้วเราจะทำส่วนอัพเดท
— Alexandre Neto

โปรดอ่านอัปเดตด้านบน ฉันส่งออกไฟล์เป็นไฟล์ spatiallite สองไฟล์
— GreyHippo

คุณควรวางทั้งสองไฟล์ไว้ในฐานข้อมูล Spatialite เดียวกันเพียงลากคำว่า "ไพพ์" ไปยังฐานข้อมูล "mh.sqlite" หลังจากนั้นอัปเดตรหัส SQL เพื่อเปลี่ยน "points" เป็น "mh" และ "lines" เป็น "pipe" ปรับ "gid" ให้สอดคล้องกับ id "pipe" ของคุณ หลังจากนั้นคุณสามารถดำเนินการและโหลดผลลัพธ์
— Alexandre Neto

3

ฉันไม่ค่อยรู้อะไรเกี่ยวกับ QGIS หรือ GRASS แต่ Google Googling ที่รวดเร็วบางอย่างให้v.cleanใน GRASS ควรทำเรื่องหลอกลวง

มีลักษณะที่โพสต์นี้และหนึ่งในนี้

ทางเลือกของ QGIS และ GRASS:

ถ้าฉันจะทำเช่นนี้ใน ArcGIS ฉันอาจจะเก็บข้อมูลของฉันในชุดข้อมูลคุณสมบัติในฐานข้อมูลไฟล์และสร้างโทโพโลยีเพื่อระบุพื้นที่ที่เลเยอร์จุดไม่ได้อยู่บนจุดสิ้นสุดของเส้น จากนั้นคุณสามารถแก้ไขข้อผิดพลาดโดยใช้ตรวจสอบข้อผิดพลาด

แต่อาจเป็นวิธีที่เร็วและง่ายที่สุดใน FME คุณอาจจะลองใช้เครื่องมือปลากะพงหรือยังดีกว่าที่เครื่องมือ AnchoredSnapper หากคุณใช้ AnchoredSnapper ต้องแน่ใจว่าประเภทการสแนปของคุณคือ End Point Snapping แน่นอนคุณจะต้องมีใบอนุญาตสำหรับ FME แต่คุณสามารถดาวน์โหลดทดลองใช้ 14 วันหากคุณไม่มี


ฉันดู v.clean แต่ใช้เพียงเลเยอร์เดียวฉันต้องเปรียบเทียบเลเยอร์หนึ่งกับอีกชั้นหนึ่ง นอกจากนี้ฉันยังมองหาตัวเลือก QGIS / opensource มากกว่า
— GreyHippo

1
@GreyHippo, GRASS เป็น opensource
— artwork21

1
ฉันรู้ว่า GRASS เป็น opensource แต่ตัวเลือกอื่นของคุณไม่ใช่
— GreyHippo


-1

คู่มือวิธี

Qgis -> การตั้งค่า -> ตัวเลือกการสแนป (และฉันไม่แน่ใจ แต่อาจต้องใช้ส่วนขยาย CadTools) และเปิดใช้งานการแก้ไขโทโพโลยี

วิธีอัตโนมัติ

v.clean ซึ่งอยู่ในเครื่องมือ GRASS ในกล่องเครื่องมือ SEXTANTE ใน QGIS หากคุณมี PostGIS 2.0 แล้ว ST_Snap และ ST_SnapToGrid () (และไม่มีเหตุผลที่คุณไม่สามารถใช้มันเป็นเครื่องมือเชิงพื้นที่ที่ดีมาก)

วิธีการค้า

เครื่องมือ FME และ MRF (ส่วนขยายเพื่อการค้าฉันมีเวอร์ชันทดลองใช้แล้วดีมาก)

นอกจากนี้ฉันยังสนใจเกี่ยวกับการจัดการท่อน้ำ / ท่อระบายน้ำด้วยเครื่องมือโอเพนซอร์สคุณมีคำแนะนำหรือไม่?


ฉันคิดว่านั่นคือสิ่งที่ GreyHippo หมายถึงโดย เพียงแค่ใช้ตัวเลือกการสแนปคุณจะต้องย้ายทุกโหนดที่ห้อยด้วยมือเพื่อเปิดใช้งานสแนป หรือว่าฉันขาดอะไรไป?
— Jake

ไม่ ฉันตาบอด
— simplexio

Simplexio ฉันไม่ต้องการทำด้วยตนเอง ฉันหวังว่าจะมีปลั๊กอินหรือกระบวนการที่ฉันไม่รู้
— GreyHippo

ฉันไม่คิดว่าคุณจะใช้ GRASS v.clean สองชั้นได้หรือไม่
— GreyHippo

1
ถ้าฉันจำได้อย่างถูกต้องมันสามารถแก้ไขเส้นสั้นเกินไป คุณเห็นไหมว่าปัญหาที่คุณมีไม่ได้อยู่ที่บ่อพักของคุณไม่ถูกต้องเพราะที่เครือข่ายท่อระบายน้ำของคุณไม่ถูกต้องด้วยวิธีทอพอโลยี และนั่นต้องการเพียงแค่ท่อเลเยอร์เท่านั้น ทุกระบบเครือข่ายยูทิลิตี้ที่ฉันได้เห็นถือว่ามีท่อระบายน้ำในทุกแยกท่อระบายน้ำ offcourse นี้อนุมานว่าคุณต้องการมีโทโพโลยีที่ถูกต้อง
— simplexio
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.