Coğrafi koordinatlardan alanı nasıl ölçebilirim?


12

Coğrafi koordinatlarda (WGS84) çokgenlerim varsa, yeryüzünün eğriliğini hesaba katarak, her birinin yeryüzünde aldığı toplam alanı nasıl ölçebilirim?

Yanıtlar:


7

PostGIS 1.5 yeni bir COĞRAFYA türünü tanıttı . GEOGRAPHYTip 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, GEOGRAPHYtü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 .


Güzel. Bilgi için teşekkürler. Bunu denemek zorunda kalacağım.
glennon

PostGIS kaputun altında ne yapar?
mwalker

@mwalker Öğrenmek için zaman ayırmadım, ancak isterseniz kaynak koduna bir bağlantı ekledim :)
fmark

eğitimsiz gözümle, PostGIS bir özet kullanıyor, alanı şeritlere oyuyor ve hepsini ekliyor.
mwalker

10

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:

alternatif metin

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.


1
@glennon Bir sferoid üzerindeki jeodezik çokgenin alanı kodu GeographicLib'de bulunmaktadır . Kod, algoritmanın türetildiği kağıda bir bağlantı içerir.
cffk

Gauss-Bonnet formülüne dayanan bu yöntem, büyük matematiksel ilgi çekicidir, ancak yeryüzündeki küçük figürler için neredeyse değersizdir: parantez içinde minik "aşırı" bulmak için büyük bir iptal vardır ve genellikle felaket hassasiyet kaybına yol açar. çift ​​hassasiyetli aritmetik işlemlerde bile neredeyse tüm hassasiyetleri tamamen kaybetmek kolaydır. Rutin CBS hesaplamaları için işe yaramıyor.
whuber

7

İş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.


1
Kullandığınız yarıçap, 6378137.0 m Dünya'nın ekvatoral yarıçapına karşılık gelir. Bunun bir sebebi var mı? Orta yarıçap kullanmak daha kesin olmaz mıydı?
FredB

Math.radians = fonksiyon (derece) {dönüş derecesi * Math.PI / 180.0; }; x = enlem, y = boylam
Stefan Steiger

4

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.


3

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.)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.