多边形和MultiPolygons应该遵循正确的规则


17

http://geojsonlint.com/我收到错误消息

 Polygons and MultiPolygons should follow the right-hand rule

我使用了3年之久,旧的geojson文件没有任何问题。现在geojsonlint强制执行右手规则,如何解决该问题。

Answers:


7

从2016年8月开始,GeoJSON现在是正式的IETF规范。与旧的2008年非正式规范相比有些变化。因此,要对2016年规范有效,您的多边形必须为右手缠绕。

参见https://tools.ietf.org/html/rfc7946#section-3.1.6

使用务必表示对规范的绝对要求。但是,随后关于不拒绝其他绕组的语言是很奇怪的,并且有一些争论可以接受-也许解析器应该接受并纠正其他绕组。我认为,导致geojsonlint(来自geoj​​sonhint)使用该词的原因应该是,而不是必须在他们的反馈消息中使用。

因此,我同意geojsonlint.com位置,因为它们位于页面顶部,即指向2016年规范的链接。根据2016年规范,您的多边形不好。但是,按照2008​​年的非正式规范,它们还是不错的。因此,如果您不希望更改多边形的缠绕,则需要确定使用的所有短绒毛或解析器都符合旧的2008年规范,并且不要一天之内突然迁移到新的正式规范。

或者,也许您应该考虑更改多边形绕组,因为这样做可以使您既符合规范,又可以在2008规范逐渐消失时更好地定位于未来。

请注意,对我而言,2016年规范的最大变化是对坐标系统的支持完全下降。我将所有GeoJSON放在NAD83中,然后必须悄悄删除,因为现在所有GeoJSON都是WGS84。对我来说,幸运的是,我来自Oracle Spatial,我所有的多边形都已经绕好了。


对我来说,如果geojsonlint可以选择跳过缠绕测试,或将其报告为单独的问题,那将是很好的。这也是规范以某种方式推荐的内容。
user30184


4

对于任何发现此问题并正在寻找解决问题的工具的人。GDAL ogr2ogr可以采用“ 2008”规范GeoJSON并以“ RFC7946”标准模式写出(多边形遵循正确的定向规则)。

ogr2ogr -f GeoJSON -lco RFC7946=YES output.json input.json

或用于要以字符串形式输入和输出GeoJSON的脚本中:

echo 'Your GeoJSON' | ogr2ogr -f GeoJSON -lco RFC7946=YES /vsistdout/ /vsistdin/



2

使用可以很容易地在Python中修复此问题geojson-rewind

from geojson_rewind import rewind

rewoundGeoJSON = rewind(geoJSONString)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.