【问题标题】:Finding the centroid of a SQL Geography type polygon查找 SQL 地理类型多边形的质心
【发布时间】:2022-05-19 01:51:50
【问题描述】:

我有一个 WKT 多边形,我想找到它的质心。 我正在使用的数据库具有地理类型字段来存储我的空间信息。 我正在处理 WKT 4326 字符串列表,检查它们是否有效,如果不是则使它们有效。 在此之后,我想计算这些多边形的质心。 我可以看到 MS SQL STCentroid 返回几何类型。 谁能告诉我将此质心存储在 Geography 类型中的含义是什么?

...为什么没有与 Geography 类型等效的 STCentroid?

谢谢

【问题讨论】:

  • 您使用的是哪个 dbms?
  • 我正在使用 Microsoft SQL Server。
  • EnvelopeCenter 方法可能是质心的适当近似值。您是否看到并考虑了它?
  • 考虑以北极为中心的正方形和以南极为中心的第二个正方形。明智地,你认为它的质心应该在哪里?
  • EnvelopeCenter 看起来很有趣,谢谢。回复你的第二条评论,我不关注你。您是在谈论寻找多个多边形的质心吗?

标签: sql sql-server spatial


【解决方案1】:

虽然这是在提出您的问题一年后,但我希望这个答案可以帮助任何未来的读者,比如我自己,他们发现这个问题在问同样的问题。

要回答标题中有关查找 SQL GEOGRAPHY 对象质心的问题:

您可以使用EnvelopeCenter() 来获得GEOGRAPHY 的近似圆心。这将返回一个GEOGRAPHY 对象,但您可以从中提取一个中心以获得纬度/经度,如下所示:

DECLARE @g geography = 'LINESTRING(-120 45, -120 0, -90 0)';
DECLARE @lat FLOAT,
        @lon FLOAT

@lat = @g.EnvelopeCenter().Lat
@lon = @g.EnvelopeCenter().Long

谁能告诉我将这个质心存储在 Geography 类型中的含义是什么?

...为什么没有与 Geography 类型等效的 STCentroid?

我假设你的意思是GEOMETRY?如果是这样……

我不建议将其转换为 GEOMETRY 并使用 STCentroid(),因为某些文章(如 this 一篇)会建议,因为它仅在某些时间有效。因为 GEOMETRY 对象是平面 2D 对象,所以您无法准确地从地球这样的形状中获取平坦区域,尤其是当您靠近两极时,这与旨在解决此问题的 GEOGRAPHY 对象不同。在数学上不可能从一个球体形成一个平坦的矩形而没有某种变形。离赤道越近,所经历的失真就越少,但在两极可能会非常夸张。

要详细了解这一点,您可以查看这个网站,该网站在查看平面地图时显示了国家的真实大小: https://www.thetruesize.com/

如果您想了解更多信息,请观看来自Vox 的精彩视频。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多