【问题标题】:Issue with OpenStreetMap administration area renderingOpenStreetMap 管理区域渲染问题
【发布时间】:2016-07-22 01:18:23
【问题描述】:

我将最新的 OpenStreetMap 数据导入本地 SQLServer 数据库并为某些管理区域生成“外部”形状。原始区域形状可在此处获得: http://www.openstreetmap.org/relation/2658573

我收到的内容如下:

我所做的是我按照 db 中定义的顺序为这个形状(上面提到的)定义了“外部”方式,并按照 OpenStreetMap db 中定义的顺序从属于所有方式的点构造了 POLYGON 定义。

为了将数据导入 SQLServer db,我使用了 OsmSharp.core nuget 包。 根据此页面上的信息,形状数据的方向是顺时针方向(请参阅命名和方向部分)): http://wiki.openstreetmap.org/wiki/Talk:Relation:multipolygon

我的问题是:

有人知道为什么对描述某些区域形状的“方式”/线条进行直接定义不能正常工作吗? 我应该拒绝线路/方式定义中的一些点吗? 也许我只是错过了其他东西......

编辑 1:
我进行了快速查询以验证来自 scai 的信息,看起来很有希望:

NodeNr 列显示了我应该将路径/线定义上的哪个点作为多边形定义的起点/终点。 WayNr 显示哪条连续的方式与哪条路径共享点。

编辑 2:
我已经测试了与方式定义相关的数据,看起来主要问题仅在于方式定义中的节点顺序。所有经过测试的方式都使用了属于它们的所有节点(没有任何冗余点,以防万一该方式可能在该方式的中间穿过其他方式)。
一些示例数据:

nr 42(WayNr = 42)的路定义表明这条线的起点(路nr 41的延续)在位置44上。这意味着42路定义中的点/节点44有与第 41 路定义中位置 30 上的点相同的 gps/坐标。

在以正确的顺序采用这些“还原”行后,我收到了如下所示的形状:

添加内部区域(排除)后,它最终看起来就像原来的一个形状:

OpenStreetMap 数据的另一个问题是它使用右手规则来定义形状的外环(顺时针而不是逆时针),因此对于 SQLServer,我们必须在 Geography 实例上使用 ReorientObject() 方法。例如,要检测形状的方向,您可以在 Geography 对象上使用 EnvelopeAngle() 方法。

编辑 3:
我在 OSM forum 上收到了一个答案,关系成员的方式顺序无关紧要(我们不能依赖它)所以在进一步处理之前必须重新排序方式......

【问题讨论】:

标签: sql-server maps geospatial openstreetmap


【解决方案1】:

stackoverflow 和 gis.stackexchange.com 上已经有各种类似的问题。

关系不一定包含正确顺序的方式。因此,有必要自己订购方式。查看路径的最后一个节点的 ID,并搜索与其起始节点具有相同 ID 的路径。如果您对所有方式都这样做,那么生成的几何图形应该没问题。

【讨论】:

  • 感谢 scai 提供的信息!老实说,我还不知道这样与 gis 相关的子域存在于 SO :)
  • 您的假设是我应该从当前方式/线路中取出最后一点,并在下一条方式上查找相同的节点 ID。这是否意味着我应该以这种通用方式“链接”所有线路(在方式/线路上寻找共同点以通过它们链接方式)?我也会在你提到的 gis.SO 上寻找答案:)
  • 是的。连续的方式将共享相同的节点 ID 作为它们的结束/开始。如果多面关系没有被破坏,那么将只有一种其他方式匹配此节点 ID。继续这样做,直到消耗完所有应该自动引导您到第一个消耗路径的起始节点 ID 的路径。
  • 在按照 scai 的建议查看了一些数据后,我添加了更多信息。如果它是问题的根源,我将问题标记为已解决。感谢 scai 提供的信息 :)
  • scai,我看到线点的顺序也是不可预测的。有些线是从上到下定义的,而另一些线​​是从下到上定义的。这意味着我还必须检测要链接在一起的点的方向(当与前一行链接的 NodeNr 高于与下一行链接的 NodeNr 时,这意味着我必须恢复为该行定义的点的顺序)。我对吗?奇怪...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-07
  • 2018-10-14
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
  • 2013-11-04
相关资源
最近更新 更多