Bagaimana saya bisa mengukur area dari koordinat geografis?

12

Jika saya memiliki poligon dalam koordinat geografis (WGS84), bagaimana cara mengukur total area yang diambil masing-masing di permukaan bumi, dengan mempertimbangkan kelengkungan bumi?

scw
sumber

Jawaban:

7

PostGIS 1.5 memperkenalkan tipe GEOGRAPHY baru . The GEOGRAPHYTipe memungkinkan untuk koordinat unprojected pada spheroid yang akan disimpan dalam tabel PostGIS, dan beberapa fungsi analisis yang akan dilakukan atas mereka.

ST_Area pertanyaan dapat dilakukan pada poligon jenis GEOGRAFI untuk menghitung luasnya dalam meter persegi.

Kueri berikut menampilkan area semua poligon menggunakan spheroid (saat ini hanya WGS-84spheroid yang didukung), dengan asumsi mereka disimpan menggunakan GEOGRAPHYtipe:

SELECT ST_Area(the_geom) FROM table_of_polygons;

Algoritma yang digunakan untuk menghitung area pada spheroid dapat diturunkan dari kode sumber .

fmark
sumber
Keren. Terimakasih atas infonya. Saya harus mencoba ini.
glennon
Apa yang dilakukan PostGIS di bawah tenda?
mwalker
@ mwalker Saya belum meluangkan waktu untuk belajar, tetapi saya telah menambahkan tautan ke kode sumber jika Anda ingin :)
fmark
menurut mata saya yang tidak terlatih, PostGIS menggunakan penjumlahan, mengukir area menjadi potongan-potongan dan menambahkan semuanya.
mwalker
10

Berikut tautan ke beberapa kode yang akan menghasilkan area poligon sederhana (berasal dari World Wind Forum): http://forum.worldwindcentral.com/showthread.php?t=20724 . Ini menyelesaikan masalah pada sebuah bola, secara kasar berdasarkan pada hubungan:

teks alternatif

S = luas poligon; theta adalah jumlah sudut interior pada radian; n adalah jumlah simpul; r adalah jari-jari bola.

Lihat juga (sumber gambar rumus): http://www.geom.uiuc.edu/docs/reference/CRC-formulas/node59.html

Saya akan senang melihat tautan dan / atau kode untuk area poligon pada spheroid oblate.

Glennon
sumber
1
@glennon Code untuk area poligon geodesik pada spheroid tersedia di GeographicLib . Kode berisi tautan ke kertas tempat algoritme diturunkan.
cffk
Metode ini, berdasarkan pada rumus Gauss-Bonnet, sangat menarik secara matematis tetapi hampir tidak berharga untuk angka-angka kecil di bumi: ada pembatalan besar untuk menemukan "kelebihan" sangat kecil di dalam tanda kurung, sering mengarah pada hilangnya presisi yang sangat besar-- mudah untuk kehilangan hampir semua presisi sepenuhnya, bahkan ketika bekerja di aritmatika presisi ganda. Untuk perhitungan GIS rutin, itu tidak berfungsi.
Whuber
7

Inilah sumber perhitungan sederhana yang kami buat di OpenLayers. Metode ini berasal dari "Beberapa Algoritma untuk Poligon di Sphere" (Robert. G. Chamberlain dan William H. Duquette, NASA JPL Publication 07-03). Kode yang ditautkan ke atas adalah untuk menentukan luas cincin linear (dengan koordinat geografis). Area untuk Polygons dan MultiPolygons diringkaskan dari ring.

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;
}

Komponen cincin adalah dua larik elemen dari x, y (lon, lat) coords dalam kode di atas. Metode OpenLayers.Util.rad baru saja mengubah derajat ke radian (deg * PI / 180).

Tim Schaub
sumber
1
Jari-jari yang Anda gunakan, 6378137.0 m sesuai dengan jari-jari khatulistiwa Bumi. Apakah ada alasan untuk itu? Bukankah menggunakan jari-jari medium lebih tepat?
FredB
Math.radians = fungsi (derajat) {derajat kembali * Math.PI / 180.0; }; x = lintang, y = bujur
Stefan Steiger
4

Anda harus mengubah koordinat geografis Anda menjadi proyeksi yang memiliki sistem koordinat yang memungkinkan Anda menggunakan matematika Cartesian untuk menghitung area.

Saya percaya UTM adalah proyeksi standar yang diterima, karena sangat mudah untuk memilih zona berdasarkan lintang dan bujur Anda, dan juga distorsi yang minimal, bahkan di seluruh zona. Jadi, jika Anda memiliki poligon ukuran Texas, Anda dapat menggunakan UTM Zone 14 N dan itu masih akan cukup akurat.

Jika poligon Anda berada di atas kutub Utara atau Selatan, maka Anda harus menggunakan UPS sebagai gantinya, karena proyeksi UTM kurang akurat di atas kutub, dan Anda akan dengan cepat melewatinya ketika batas semakin kecil (karena mengikuti garis garis bujur)

Setelah poin Anda berada dalam sistem koordinat ramah Cartesian, Anda dapat memperlakukannya seperti poligon di kisi dan menghitung area.

mwalker
sumber
3

Kelas PolygonArea ditambahkan ke GeographicLib pada 2011-07. Ini menghitung area ellipsoidal sebenarnya dari poligon yang ujung-ujungnya adalah geodesik. Tidak seperti PostGIS, metode ini tidak memerlukan integrasi numerik. Untuk dokumentasi (dan tautan ke makalah tempat formula diturunkan), lihat

http://geographiclib.sf.net/html/classGeographicLib_1_1PolygonAreaT.html

(Tautan yang diperbaiki untuk mencerminkan generalisasi PolygonArea ke kelas templat.)

cffk
sumber