gpt4 book ai didi

c# - Entity Framework DbGeography 没有正确计算面积?

转载 作者:行者123 更新时间:2023-11-30 14:29:36 26 4
gpt4 key购买 nike

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

string wkt = "POLYGON ((15.981800258159638 45.810693408924287, 15.983624160289764 45.810783148865241, 15.983688533306122 45.809844611497965, 15.981843173503876 45.8096838246252, 15.981800258159638 45.810693408924287))"

然后我创建了 DbGeography 对象:

var polygon = System.Data.Entity.Spatial.DbGeography.FromText(wkt);

Area 属性的值为 510065621695499.69

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

select ST_Area(ST_GeographyFromText(wkt))

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

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

谁能解释一下这是怎么回事?

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

最佳答案

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

如果您颠倒顺序您的 WKT 中的点,您将得到一个区域 15496.7447813973(使用 SRID of 4326 corresponding to WGS84 ),这与您的区域非常接近其他 GIS 系统正在为您提供。我猜想差异可能是由于不同的 SRID,但我远不是专家。

请注意,您得到的错误结果非常接近 510,072,000 平方公里,即整个地球的表面积 - 因为 DbGeography 使用它所使用的方向协议(protocol),它构建了 外部 您想要的多边形。

关于c# - Entity Framework DbGeography 没有正确计算面积?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25622508/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com