Yanıtlar:
PostGIS 1.5 yeni bir COĞRAFYA türünü tanıttı . GEOGRAPHY
Tip PostGIS tablosunda saklanabilir ve bir sferoid ile unprojected koordinatları sağlar ve bir analiz fonksiyonları onların üzerine gerçekleştirilmelidir.
ST_Area
alanlarını metrekare cinsinden hesaplamak için GEOGRAPHY tipi çokgenler üzerinde sorgulamalar yapılabilir.
Aşağıdaki sorgu WGS-84
, GEOGRAPHY
tür kullanılarak depolandıkları varsayılarak , sferoid kullanan (şu anda yalnızca sferoid desteklenmektedir) tüm çokgenlerin alanını çıkarır :
SELECT ST_Area(the_geom) FROM table_of_polygons;
Bir küredeki alanı hesaplamak için kullanılan algoritma kaynak kodundan türetilebilir .
Basit bir çokgenin alanını (aslında Dünya Rüzgar Forumu'ndan) verecek bazı kodların bağlantısı: http://forum.worldwindcentral.com/showthread.php?t=20724 . Bu, problemi kabaca ilişkiye dayanan bir küre üzerinde çözer:
S = çokgen alanı; teta radyandaki iç açıların toplamıdır; n köşe sayısıdır; r kürenin yarıçapıdır.
Ayrıca bkz. (Formül resminin kaynağı): http://www.geom.uiuc.edu/docs/reference/CRC-formulas/node59.html
Oblate bir küredeki çokgen alanın bağlantılarını ve / veya kodunu görmekten memnuniyet duyarım.
İşte OpenLayers'ta yaptığımız basitleştirilmiş hesaplamanın kaynağı . Bu yöntem "Bir Küredeki Çokgenler için Bazı Algoritmalar" dan gelir (Robert. G. Chamberlain ve William H. Duquette, NASA JPL Yayını 07-03). Yukarıya bağlı kod doğrusal bir halkanın (coğrafi koordinatlarla) alanını belirlemek içindir. Çokgenler ve Çokgenler için alanlar halkalardan toplanır.
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;
}
Halka bileşenleri, yukarıdaki koddaki x, y (lon, lat) koordinatlarının iki eleman dizisidir. OpenLayers.Util.rad yöntemi dereceleri radyana (deg * PI / 180) dönüştürür.
Coğrafi koordinatlarınızı, alanı hesaplamak için Kartezyen matematik kullanmanıza izin veren bir koordinat sistemine sahip bir projeksiyona dönüştürmeniz gerekir.
Enlem ve boylamınıza göre bir bölge seçmek çok basit olduğu ve bölgeler arasında bile bozulmanın minimum olduğu için UTM'nin kabul edilen standart projeksiyon olduğuna inanıyorum . Yani, Teksas büyüklüğünde bir çokgen varsa, UTM Zone 14 N'yi kullanabilirsiniz ve yine de oldukça doğru olacaktır.
Çokgenleriniz Kuzey veya Güney kutbunun üzerindeyse, UTM projeksiyonları kutuplar üzerinde daha az doğru olduğundan UPS'i kullanmalısınız ve sınırlar küçüldükçe bunları hızlı bir şekilde geçeceksiniz (boylam çizgilerini takip ettikleri için)
Puanlarınız Kartezyen dostu bir koordinat sistemine girdikten sonra, bir ızgaradaki çokgenler gibi davranabilir ve alanı hesaplayabilirsiniz.
2011-07'de GeographicLib'e bir PolygonArea sınıfı eklendi. Bu, kenarları jeodezik olan bir poligonun gerçek elipsoidal alanını hesaplar. PostGIS'den farklı olarak, yöntem sayısal entegrasyon gerektirmez. Belgeleme (ve formüllerin türetildiği kağıda bağlantı) için bkz.
http://geographiclib.sf.net/html/classGeographicLib_1_1PolygonAreaT.html
(Bağlantı, PolygonArea öğesinin şablon sınıfına genelleştirilmesini yansıtacak şekilde düzeltildi.)