ฉันต้องการสร้างแบบสอบถามเพื่อเลือกวิธีการทั้งหมดและโหนดของพวกเขาที่มีอยู่ภายในกล่องขอบเขตโดยใช้ postGIS กล่อง bounding จะต้องมีรายละเอียดทั้งหมดตามคำสั่ง osmosis "--bounding-box" จะดึงคำสั่ง
มีวิธีใดที่จะทำเช่นนั้น?
ฉันต้องการสร้างแบบสอบถามเพื่อเลือกวิธีการทั้งหมดและโหนดของพวกเขาที่มีอยู่ภายในกล่องขอบเขตโดยใช้ postGIS กล่อง bounding จะต้องมีรายละเอียดทั้งหมดตามคำสั่ง osmosis "--bounding-box" จะดึงคำสั่ง
มีวิธีใดที่จะทำเช่นนั้น?
คำตอบ:
สำหรับเอกสาร osmosis ฉันเห็นตัวเลือกคำสั่ง :
--bounding-box top=49.5138 left=10.9351 bottom=49.3866 right=11.201
สำหรับ PostGIS คุณสามารถใช้ST_MakeEnvelope (ซ้าย, ล่าง, ขวา, บน, srid)เพื่อสร้าง box bounding จากนั้น&&
ผู้ประกอบการ box boundingจะค้นหาตำแหน่งที่กล่อง bounding ตัดกัน:
SELECT *
FROM mytable
WHERE mytable.geom && ST_MakeEnvelope(10.9351, 49.3866, 11.201, 49.5138, 4326);
SRID 4326 สำหรับ WGS84 Lat / Long และจำเป็นสำหรับ PostGIS 1.5 เท่านั้น สามารถละเว้นได้สำหรับรุ่นที่ใหม่กว่า
ฉันคิดว่ามันจะเป็นแบบนี้: กล่องขอบเขตใน PostGIS สร้างขึ้นโดย
ST_GeomFromText('POLYGON((ulx uly, urx ury, llx llr, lrx lry, ulx uly))', <srid>)
แบบสอบถามจะใช้ ST_Intersection พร้อมแบบสอบถามย่อย
SELECT bbox_nodes.id, bbox_nodes.tag, nodes_geom
FROM (SELECT nodes.id, nodes.tag,
ST_Intersection(nodes.the_geom,
ST_GeomFromText('POLYGON((ulx uly, urx ury, llx llr, lrx lry, ulx uly))', <srid> )).geom AS nodes_geom
FROM nodes
WHERE ST_Intersects(nodes.the_geom,
ST_GeomFromText('POLYGON((ulx uly, urx ury, llx llr, lrx lry, ulx uly))', <srid> )) AS bbox_nodes
WHERE ST_Dimension(bbox_nodes.nodes_geom)=0;
ฉันทำสิ่งนี้มากขึ้นหรือน้อยลงจากหน้าความช่วยเหลือของ PostGIS
แบบสอบถามที่สองบนตารางวิธีออกแบบคล้ายกับข้างบน (แต่ด้วย ST_Dimension () = 1) ควรได้รับวิธี
HTH, Micha
มีหัวข้อที่คล้ายกับคำถามของคุณที่นี่ ...
ST_Intersection - (T) ส่งคืนเรขาคณิตที่แสดงถึงส่วนที่ใช้ร่วมกันของ geomA และ geomB การนำภูมิศาสตร์ไปใช้จะแปลงเป็นเรขาคณิตเพื่อทำสี่แยกจากนั้นแปลงกลับเป็น WGS84
1. คุณสามารถรับข้อมูลบางอย่างได้ที่นี่เกี่ยวกับฟังก์ชั่นการสร้างรูปทรงเรขาคณิต
SELECT ST_AsText(ST_Intersection(
ST_Buffer('POINT(0 0)', 2),
ST_Buffer('POINT(3 0)', 2)
));
2. ข้อมูลอื่นที่นี่เกี่ยวกับ Intersects Intersection: PostGIS - ST_Intersects, ST_Intersection ...
SELECT b.the_geom As bgeom, p.the_geom As pgeom,
ST_Intersection(b.the_geom, p.the_geom) As intersect_bp
FROM buildings b INNER JOIN parcels p ON ST_Intersection(b,p)
WHERE ST_Overlaps(b.the_geom, p.the_geom)
LIMIT 1;
ฉันหวังว่ามันจะช่วยคุณ ...
นี่คือความคิดเห็นเกี่ยวกับรหัส @ Micha ของ
คู่พิกัดสำหรับPOLYGON
ควรเป็นไปตามคำสั่งตามเข็มนาฬิกา (หรือตามเข็มนาฬิกาตามลำดับ): ซ้ายบน, ขวาบน, ขวาล่าง, ซ้ายล่าง, ซ้ายบน
ดังนั้นตามเข็มนาฬิกาการเรียกใช้ฟังก์ชันควรเป็น:
ST_GeomFromText('POLYGON((ulx uly, urx ury, lrx lry, llx llr, ulx uly))', <srid>)
หรือทวนเข็มนาฬิกา:
ST_GeomFromText('POLYGON((ulx uly, llx llr, lrx lry, urx ury, ulx uly))', <srid>)