我正在使用Java构建一个应用程序,需要将GeoJson多边形存储到MongoDB中,然后查询以检查一个点与多少个多边形相交
$geoIntersects
。我有几个关于GeoJson多边形的问题,在网上没有找到答案。标准(https://www.rfc-editor.org/rfc/rfc7946)指出:线性环必须遵循右手规则,即外部环逆时针,内部环顺时针。但是我进行了一个测试,将2个圆保存为多边形,一个顺时针,另一个逆时针,如果我查询一个在内部的点,两种情况都可以正常工作。# Clockwise:
"polygon": {
"type": "Polygon",
"coordinates": [
[
[-58.3816, -34.51386847158805 ], [-58.317506306149276, -34.531008005363724 ], [-58.27783822235179, -34.57589660852675 ], [-58.27776882904558, -34.631415496391675 ], [-58.317394025120045, -34.6763584216405 ], [-58.3816, -34.69353152841195 ], [-58.445805974879946, -34.6763584216405 ], [-58.48543117095441, -34.631415496391675 ], [-58.4853617776482, -34.57589660852675 ], [-58.44569369385072, -34.531008005363724 ], [-58.3816, -34.51386847158805 ] ]
]
}
# Counterclockwise
"polygon": {
"type": "Polygon",
"coordinates": [
[
[-58.3816, -34.51386847158805 ], [-58.44569369385072, -34.531008005363724 ], [-58.4853617776482, -34.57589660852675 ], [-58.48543117095441, -34.631415496391675 ], [-58.445805974879946, -34.6763584216405 ], [-58.3816, -34.69353152841195 ], [-58.317394025120045, -34.6763584216405 ], [-58.27776882904558, -34.631415496391675 ], [-58.27783822235179, -34.57589660852675 ], [-58.317506306149276, -34.531008005363724 ], [-58.3816, -34.51386847158805 ] ]
]
}
- 如何检查给定的多边形是否按正确顺序排列?
- 有没有Java库可以检查我的多边形是否有效?例如,检查第一个和最后一个点是否匹配以及逆时针方向等。类似于http://geojsonlint.com/,但是使用Java库。
- 如果我保存的点列表存在交叉点会发生什么?我进行了一个测试,保存了一个像图片中那样的多边形,但似乎查询与任何点都不相交。我应该在保存之前检查多边形是否具有交叉点吗?如何做到这一点?
谢谢!