สร้างแวดวงใน PostGIS หรือไม่


22

ฉันใช้ PostGIS 1.5.2 กับรูปทรงเรขาคณิตใน SRID: 900913 ฉันต้องการสร้างแวดวงโดยใช้รายการคะแนนเป็นจุดศูนย์กลางด้วยรัศมี 600 กิโลเมตร ฉันใช้คำค้นหานี้:

INSERT INTO circles (geom) (
   SELECT ST_Buffer(point, 600000, 'quad_segs=8') 
   FROM points
);

แต่วงกลมที่สร้างขึ้นมีรัศมีไม่ 600 กิโลเมตร (รัศมีอยู่ใกล้กับความยาวนี้ แต่ไม่แน่นอน)

มีวิธีอื่นในการสร้างแวดวงใน PostGIS หรือไม่

หมายเหตุ: ข้อมูลที่แสดงนั้นมาจากสเปน การฉายภาพที่ถูกต้องคือ 4326 แต่ลูกค้าใช้ Google rasters ดังนั้นฉันจึงจัดเก็บข้อมูลไว้ใน 900913 เพื่อหลีกเลี่ยงการถอดแบบและเพิ่มประสิทธิภาพ


1
คุณวัดรัศมีอย่างไรเพื่อหาว่ามันไม่ใช่ 600 กม.
underdark

1
@underdark ฉันรู้ระยะทางระหว่างสองเมืองและวงกลมที่สร้างโดยใช้เป็นศูนย์กลางหนึ่งของเมืองนี้ไม่ขยายไปยังเมืองอื่น ฉันยืนยันระยะทางระหว่างสองเมืองโดยใช้gmap-pedometer.com
angelcervera

3
เสียงนี้เกี่ยวข้องกับgis.stackexchange.com/questions/10148/ …
underdark

@underdark การใช้SELECT ST_Distance( (select point from points where id = 7), (select point from points where id = 42));ผลตอบแทนมากกว่า 100km ของความแตกต่างเกี่ยวกับความเคารพ gmap-pedometer.com แต่ถ้าฉันคิดว่าความยาวนี้ถูกต้องรัศมีของวงกลมก็สมบูรณ์แบบ แต่คนใช้ระยะทางแรกเป็นรัศมีไม่มีระยะทางที่ส่งกลับโดย st_distance เป็นไปได้ในการแปลงระยะทางแรกเป็นอันดับที่สองหรือไม่?
angelcervera

คำตอบ:


15

ลองสิ่งนี้:

 SELECT ST_Transform(geometry( 
            ST_Buffer(geography( 
                ST_Transform( point, 4326 )), 
                600000)), 
            900913) FROM points`

สิ่งนี้พลิกเป็นภูมิศาสตร์แล้วใช้การเลือก inbuilt SRID เพื่อ (ย้อนกลับ) ในรูปเรขาคณิตที่มีบัฟเฟอร์ระนาบที่ดีจะถูกเรียกใช้แล้วพลิกกลับ ปัญหาเกี่ยวกับวิธีการของคุณใน Mercator คือ Mercator ไม่รักษาระยะห่าง การใช้การฉายภาพในพื้นที่ที่เหมาะสมยิ่งขึ้นจะให้ผลลัพธ์ที่ดีกว่าและนั่นคือสิ่งที่เกิดขึ้นในวิธีการข้างต้น


4

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

ความแม่นยำของ srid 90013 นั้นก็แย่มากเช่นกันเนื่องจากเป็นภาพที่ครอบคลุมทั่วทั้งโลก

คุณจะได้ผลลัพธ์ที่แม่นยำยิ่งขึ้นด้วยการฉายภาพในพื้นที่


@ nicklas-aven มันเป็นไปได้ 100km ของความแตกต่างในระยะทาง 600 กม. เพราะฉันใช้การฉาย 900913 ไม่ใช่ 4326?
angelcervera

1
ใช่มันเป็นไปได้ ตรวจสอบ Pauls แสดงความคิดเห็นของเธอเมื่อฉันไม่สามารถเชื่อว่า inaccurancy gis.stackexchange.com/questions/3264/... สิ่งที่เป็นที่ 4326 ไม่ได้คาดการณ์ไว้
Nicklas Avén

3

ขึ้นอยู่กับที่แวดวงของคุณกำลังถูกสร้าง พวกเขาอยู่ใกล้เส้นศูนย์สูตรหรืออยู่ใกล้กับเสาหรือไม่

ลองดูแผนที่นี้ คุณคิดว่า Antartica หรือกรีนแลนด์นั้นใหญ่จริงหรือ นั่นคือการฉายภาพที่คุณใช้ใช่ไหม

ฉันอยากจะแนะนำให้คุณอ่านเอกสาร USGS ฉบับนี้อย่างรวดเร็วเกี่ยวกับการฉายภาพโดยเฉพาะตารางด้านล่างซึ่งจะช่วยให้คุณทราบว่าการคาดการณ์แบบใดที่เหมาะกับอะไร

และหลังจากนั้นฉันคิดว่าในที่สุดฉันก็ควรตอบคำถามของคุณ :)

สิ่งที่ Nicklas พูดนั้นเป็นคำแนะนำที่ดี มีการประมาณการเฉพาะสำหรับพื้นที่ท้องถิ่นของคุณที่จะทำงานได้ดีขึ้นหรือไม่

มิฉะนั้นคุณอาจต้องการดูประเภท PostGIS Geographyใหม่ อย่างไรก็ตามคำตอบที่เหมาะสมที่สุดขึ้นอยู่กับว่าข้อมูลของคุณอยู่ที่ไหน

อัปเดต: ตั้งแต่ตอนนี้เรารู้ว่าข้อมูลของคุณอยู่ในสเปนคุณดูที่เก็บไว้ในเครื่องฉายภาพในพื้นที่เช่นUTM Zone 31Nทำการดำเนินการของคุณโดยใช้ข้อมูลนั้นแล้วฉายกลับไปที่ Google Web Mercator หรือไม่


1
+1 สำหรับการใช้ประเภทภูมิศาสตร์สำหรับแผนที่ที่ครอบคลุมพื้นที่ที่ยอดเยี่ยม ปัญหาที่นี่คือว่าไม่มีฟังก์ชั่นบัฟเฟอร์พื้นเมืองสำหรับประเภทภูมิศาสตร์ใน postgis แต่มีการสร้าง inbuilt เป็น "srid ที่ดีที่สุด" การสร้างบัฟเฟอร์แล้วกลับไปที่ 4326 ดังนั้นการรู้ข้อมูลของคุณและเลือก srid ด้วยตนเองจะช่วยให้ควบคุมได้ดีขึ้น
Nicklas Avén

Nicklas คุณถูกต้องเกี่ยวกับการคัดเลือกนักแสดงและฉันเห็นด้วยกับคุณ 100% เกี่ยวกับการฉายภาพในพื้นที่ (เช่นทราบข้อมูลของคุณ) อย่างไรก็ตามหากคำตอบคือเขาต้องการมีข้อมูล "ทั่วโลก" IMHO ตรรกะการคัดเลือกภายในประเภทภูมิศาสตร์จะทำงานได้ดีขึ้นมากในการหาสิ่งที่ SR เหมาะสมสำหรับการดำเนินงานทางไกลนั้นโดยเฉพาะ ตรรกะที่กำหนดเองที่ซับซ้อน สิ่งที่ดีอีกอย่างหนึ่งเกี่ยวกับประเภทภูมิศาสตร์คือแม้ว่าการดำเนินการจำนวนมากจะถูกใช้ในการคำนวณทางคณิตศาสตร์คาร์ทีเซียน แต่การดำเนินการยังคงได้รับการปรับปรุงให้ใช้คณิตศาสตร์ทรงกลม
Ragi Yaser Burhum

2

คุณสามารถใช้ newish SQL / MM ตอนที่ 3ชนิดเรขาคณิต CIRCULARSTRING และ / หรือ CURVEPOLYGON

อย่างไรก็ตามขอเตือนว่าการสนับสนุนสำหรับประเภทนี้มี จำกัด ทั้งด้วยฟังก์ชั่นภายในและโปรแกรมภายนอก คุณสามารถใช้ST_CurveToLineเพื่อช่วยให้เห็นภาพได้

นอกจากนี้มันเป็นบิตนอกวาง ( ณ PostGIS 2.0 SVN) ที่SELECT ST_Area('CURVEPOLYGON(CIRCULARSTRING(2 1, 1 2, 0 1, 1 0, 2 1))'::geometry)เป็นเพียงการประมาณคร่าวๆของπ (เปรียบเทียบ 3.14033115695475 ถึง 3.14159265358979 จากpi())


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