หากฉันมีรูปหลายเหลี่ยมในพิกัดทางภูมิศาสตร์ (WGS84) ฉันจะวัดพื้นที่ทั้งหมดได้อย่างไรบนพื้นผิวโลกโดยคำนึงถึงความโค้งของโลก
หากฉันมีรูปหลายเหลี่ยมในพิกัดทางภูมิศาสตร์ (WGS84) ฉันจะวัดพื้นที่ทั้งหมดได้อย่างไรบนพื้นผิวโลกโดยคำนึงถึงความโค้งของโลก
คำตอบ:
PostGIS 1.5 แนะนำใหม่ประเภทภูมิศาสตร์ GEOGRAPHY
ชนิดช่วยให้พิกัด unprojected บนลูกกลมที่จะเก็บไว้ในตาราง PostGIS และบางฟังก์ชั่นการวิเคราะห์เพื่อที่จะดำเนินการกับพวกเขา
ST_Area
สามารถดำเนินการค้นหากับประเภทรูปหลายเหลี่ยม GEOGRAPHY เพื่อคำนวณพื้นที่ในหน่วยตารางเมตร
เคียวรีต่อไปนี้จะแสดงพื้นที่ของรูปหลายเหลี่ยมทั้งหมดโดยใช้ spheroid (ปัจจุบันรองรับเฉพาะWGS-84
spheroid) โดยสมมติว่าเก็บไว้โดยใช้GEOGRAPHY
ประเภท:
SELECT ST_Area(the_geom) FROM table_of_polygons;
ขั้นตอนวิธีการที่ใช้ในการคำนวณพื้นที่บนลูกกลมสามารถมาจากซอร์สโค้ด
นี่คือการเชื่อมโยงไปยังรหัสบางอย่างที่จะให้ผลผลิตในพื้นที่ของรูปหลายเหลี่ยมง่าย (มีพื้นเพมาจากลมโลกฟอรั่ม): การhttp://forum.worldwindcentral.com/showthread.php?t=20724 สิ่งนี้จะช่วยแก้ปัญหาบนทรงกลมโดยประมาณตามความสัมพันธ์:
S = พื้นที่ของรูปหลายเหลี่ยม; ทีต้าคือผลรวมของมุมภายในเป็นเรเดียน n คือจำนวนจุดยอด r คือรัศมีของทรงกลม
ดูเพิ่มเติม (ที่มาของอิมเมจสูตร): http://www.geom.uiuc.edu/docs/reference/CRC-formulas/node59.html
ฉันยินดีที่จะเห็นลิงก์และ / หรือรหัสสำหรับพื้นที่รูปหลายเหลี่ยมในรูปทรงกลม oblate
นี่คือแหล่งที่มาสำหรับการคำนวณแบบง่ายที่เราทำใน OpenLayers วิธีนี้มาจาก"อัลกอริทึมบางอย่างสำหรับรูปหลายเหลี่ยมบนทรงกลม" (Robert. G. Chamberlain และ William H. Duquette, NASA JPL Publication 07-03) รหัสที่เชื่อมโยงกับด้านบนใช้สำหรับกำหนดพื้นที่ของวงแหวนแบบเส้นตรง (พร้อมพิกัดทางภูมิศาสตร์) พื้นที่สำหรับรูปหลายเหลี่ยมและ MultiPolygons ถูกหาผลรวมจากวงแหวน
var area = 0.0;
var len = ring.components && ring.components.length;
if (len > 2) {
var p1, p2;
for (var i=0; i<len-1; i++) {
p1 = ring.components[i];
p2 = ring.components[i+1];
area += OpenLayers.Util.rad(p2.x - p1.x) *
(2 + Math.sin(OpenLayers.Util.rad(p1.y)) +
Math.sin(OpenLayers.Util.rad(p2.y)));
}
area = area * 6378137.0 * 6378137.0 / 2.0;
}
ส่วนประกอบของแหวนคือสององค์ประกอบของอาร์เรย์ของ x, y (lon, lat) coords ในรหัสข้างต้น วิธี OpenLayers.Util.rad เพียงแปลงองศาเป็นเรเดียน (deg * PI / 180)
คุณจะต้องแปลงพิกัดทางภูมิศาสตร์ของคุณเป็นเส้นโครงที่มีระบบพิกัดที่ให้คุณใช้คณิตศาสตร์คาร์ทีเซียนเพื่อคำนวณพื้นที่
ฉันเชื่อว่าUTMเป็นเครื่องฉายภาพมาตรฐานที่ได้รับการยอมรับเนื่องจากมันง่ายมากในการเลือกโซนตามละติจูดและลองจิจูดของคุณและความเพี้ยนนั้นก็น้อยมาก ดังนั้นถ้าคุณมีรูปหลายเหลี่ยมขนาดของเท็กซัสคุณสามารถใช้ UTM Zone 14 N และมันจะยังคงแม่นยำ
หากรูปหลายเหลี่ยมของคุณอยู่เหนือขั้วโลกเหนือหรือใต้คุณควรใช้ยูพีเอสแทนเนื่องจากการคาดการณ์ UTM นั้นมีความแม่นยำน้อยกว่าเสาและคุณจะเคลื่อนที่ข้ามอย่างรวดเร็วเมื่อขอบเขตมีขนาดเล็กลง (เนื่องจากตามเส้นลองจิจูด)
เมื่อคะแนนของคุณอยู่ในระบบพิกัดที่เป็นมิตรกับคาร์ทีเซียนคุณสามารถปฏิบัติต่อพวกมันเช่นรูปหลายเหลี่ยมในตารางและคำนวณพื้นที่
เพิ่มคลาส PolygonArea ใน GeographicLib ใน 2011-07 สิ่งนี้คำนวณพื้นที่รูปวงรีที่แท้จริงของรูปหลายเหลี่ยมที่มีขอบเป็นมาตรศาสตร์ ซึ่งแตกต่างจาก PostGIS วิธีนี้ไม่ได้ทำให้เกิดการรวมเชิงตัวเลข สำหรับ documenation (และลิงค์ไปยังกระดาษที่ได้รับสูตร) ให้ดู
http://geographiclib.sf.net/html/classGeographicLib_1_1PolygonAreaT.html
(ลิงก์ได้รับการแก้ไขเพื่อให้สะท้อนถึงลักษณะทั่วไปของ PolygonArea ไปยังคลาสเทมเพลต)