Jawaban:
PostGIS 1.5 memperkenalkan tipe GEOGRAPHY baru . The GEOGRAPHY
Tipe 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-84
spheroid yang didukung), dengan asumsi mereka disimpan menggunakan GEOGRAPHY
tipe:
SELECT ST_Area(the_geom) FROM table_of_polygons;
Algoritma yang digunakan untuk menghitung area pada spheroid dapat diturunkan dari kode sumber .
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:
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.
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).
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.
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.)