Answers:
PostGIS 1.5引入了一种新的GEOGRAPHY类型。该GEOGRAPHY
类型允许将未投影的球体坐标存储在PostGIS表中,并对它们执行一些分析功能。
ST_Area
可以对GEOGRAPHY类型的多边形执行查询,以计算其面积(以平方米为单位)。
下面的查询使用椭球体(当前仅WGS-84
支持椭球体)输出所有多边形的面积,假设它们使用GEOGRAPHY
类型存储:
SELECT ST_Area(the_geom) FROM table_of_polygons;
可以从源代码中得出用于计算椭球体上面积的算法。
以下是一些代码的链接,这些代码将产生一个简单多边形的区域(最初来自世界风论坛):http : //forum.worldwindcentral.com/showthread.php?t=20724。这大致基于以下关系解决了一个球体上的问题:
S =多边形面积;theta是弧度的内角之和;n是顶点数;r是球体的半径。
另请参阅(公式图像的来源):http : //www.geom.uiuc.edu/docs/reference/CRC-formulas/node59.html
我很高兴看到扁球体上多边形区域的链接和/或代码。
这是我们在OpenLayers中进行的简化计算的来源。此方法来自“球面上的多边形的某些算法”(Robert。G. Chamberlain和William H. Duquette,NASA JPL出版物07-03)。上面链接的代码用于确定线性环的面积(具有地理坐标)。从圆环中总结出多边形和多多边形的面积。
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)坐标的两个元素数组。OpenLayers.Util.rad方法仅将度转换为弧度(度* PI / 180)。
在2011-07年,PolygonArea类添加到了GeographicLib中。这将计算其边为测地线的多边形的真实椭圆面积。与PostGIS不同,该方法不需要数字积分。有关文档记录(以及指向公式导出纸张的链接),请参见
http://geographiclib.sf.net/html/classGeographicLib_1_1PolygonAreaT.html
(已修复链接,以将PolygonArea泛化为模板类。)