ST_MakeLine ส่งคืนรูปทรงเรขาคณิตที่ไม่รองรับซึ่งไม่แสดงผลในโปรแกรมดูรูปทรงเรขาคณิต
ฉันพยายามเรียกใช้แบบสอบถาม ST_MakeLine ที่จะส่งกลับระยะทางที่สั้นที่สุดระหว่างพิกัดที่กำหนดรหัสมีดังนี้:
SELECT ST_MakeLine(route.geom) as test
FROM (SELECT *
FROM pgr_fromAtoB('roads2_noded',73.1789,33.5183,73.1768,33.5191)
ORDER BY seq
) As route
ผลลัพธ์มีลักษณะดังนี้:

เป็นที่ชัดเจนว่าผลลัพธ์ไม่แสดงค่าว่าง แต่เมื่อฉันดูใน Geometry Viewer มันจะให้ข้อความต่อไปนี้:

มีใครบอกฉันได้ไหมว่าข้อความนี้หมายถึงอะไรและฉันจะหาวิธีแก้ปัญหานี้ได้อย่างไร ประเภทรูปทรงเรขาคณิตของไฟล์รูปร่างถนนของฉันคือ MULTILINESTRING
St_AsText (route.geom) แสดงผลลัพธ์ต่อไปนี้:
SELECT ST_AsText( ST_MakeLine(route.geom)) FROM (SELECT *FROM pgr_fromAtoB('roads2_noded',73.1789,33.5183,73.1768,33.5191)
ORDER BY seq
) As route

การใช้ Select จาก pgr_fromAtoB อย่างง่ายให้:
SELECT * FROM pgr_fromAtoB('roads2_noded',73.1789,33.5183,73.1768,33.5191) ORDER BY seq

roads2_noded คือไฟล์รูปร่างของถนนที่ฉันกำลังทำงานอยู่ด้านล่าง:


คำตอบ
ไม่สามารถใช้ฟังก์ชัน pg_Routing สำหรับ MultiLineStrings ดังนั้นก่อนอื่นให้สร้างตารางใหม่โดยมีรายการข้อมูลทั้งหมดของตาราง roads2 จากนั้นเพิ่มคอลัมน์ของ roads2 ลงในตารางใหม่ ตัวอย่างเช่น id, sub_id, name, distance, geom เป็นต้นจากนั้นใช้เคียวรีต่อไปนี้เพื่อแปลงรูปทรงเรขาคณิต MultiLineString ของ roads2 เป็น LineString
ALTER TABLE my_table
ALTER COLUMN geom TYPE geometry(linestring,4326) USING ST_GeometryN(geom, 1);
หลังจากนั้นให้เพิ่มคอลัมน์ geom ของ roads2 ลงในตารางใหม่ หลังจากนั้นให้ใช้การสืบค้นเครือข่ายถนนและโทโพโลยีเช่น pgr_nodeNetwork และ pgr_createTopology และสร้างฟังก์ชัน pgr_fromAtoB จากนั้นรันแบบสอบถาม ST_MakeLine:
SELECT ST_MakeLine(route.geom) as test
FROM (SELECT *
FROM pgr_fromAtoB('my_table_noded',73.1789,33.5183,73.1768,33.5191)
ORDER BY seq
) As route
ผลลัพธ์จะแสดงรูปทรงเรขาคณิต:
