实体框架DbGeography无法正确计算Area?

mar*_*rac 3 c# gis entity-framework postgis

如果我将WKT格式的多边形定义为此(经度/纬度):

string wkt = "POLYGON ((15.981800258159638 45.810693408924287, 15.983624160289764 45.810783148865241, 15.983688533306122 45.809844611497965, 15.981843173503876 45.8096838246252, 15.981800258159638 45.810693408924287))"
Run Code Online (Sandbox Code Playgroud)

然后创建DbGeography对象,如下所示:

var polygon = System.Data.Entity.Spatial.DbGeography.FromText(wkt);
Run Code Online (Sandbox Code Playgroud)

Area属性的值是510065621695499.69

如果我像这样使用Postgres和PostGis做同样的事情:

select ST_Area(ST_GeographyFromText(wkt))
Run Code Online (Sandbox Code Playgroud)

结果是15496.7483872527,它应该是正确的值。

如果我创建通过反转坐标(纬度/经度)的多边形,都DbGeographyST_Area返回相同的值(21247.6269483712)

谁能解释这是怎么回事?

PS:多边形位于克罗地亚的萨格勒布。

Aak*_*shM 5

这与多边形方向有关。对于这些空间数据类型,引用文档,“椭圆形系统中多边形的内部由左手规则定义” 。参见例如这个问题,毫无疑问,还有许多其他问题,请参见进一步的阅读和解决此问题的方法。

如果反转 WKT中点的顺序,则会得到一个区域15496.7447813973(使用与WGS84对应SRID 4326),该区域非常接近其他GIS系统给您的区域。我猜出的差异可能是由于不同的SRID,但我离专家还很远。

请注意,您得到的错误结果非常接近整个地球的表面积510,072,000km²-由于DbGeography使用了定向协议,因此已经构造了您想要的多边形的外部