合法GeoJSON Polygon能否表示岛中湖中的岛?规范与验证疑问
关于GeoJSON表示“岛中湖中的岛”的合法性问题
核心结论
合法的GeoJSON 单个Polygon确实无法表示“岛中湖中的岛”这类多层嵌套的地理形态,必须使用MultiPolygon来实现。
规范依据与问题分析
根据RFC7846对Polygon的定义:
对于包含多个环的Polygon,第一个环必须是外环,其余必须是内环。外环界定表面范围,内环(若存在)界定表面内的孔洞。
你提供的Polygon数据中,第三个环会被规范解析为第一个外环的直接孔洞,但它实际是第二个内环(湖)内部的“岛”,不符合“内环仅为外环孔洞”的要求,因此第一个验证器的判断是正确的——该Polygon属于无效GeoJSON。
正确的表示方法
要实现“岛中湖中的岛”的形态,需要用MultiPolygon,将结构拆分为两个独立的Polygon:
- 第一个Polygon:最外层大岛(外环) + 中间的湖(内环,即大岛的孔洞)
- 第二个Polygon:湖内部的小岛(仅外环,作为独立的多边形单元)
对应的合法GeoJSON示例如下:
{ "type": "MultiPolygon", "coordinates": [ [ [ [-0.8, -0.8], [0.8, -0.8], [0.8, 0.8], [-0.8, 0.8], [-0.8, -0.8] ], [ [-0.6, -0.6], [-0.6, 0.6], [0.6, 0.6], [0.6, -0.6], [-0.6, -0.6] ] ], [ [ [-0.4, -0.4], [0.4, -0.4], [0.4, 0.4], [-0.4, 0.4], [-0.4, -0.4] ] ] ] }
该结构符合GeoJSON规范:MultiPolygon中的每个Polygon要么是实心区域,要么是带孔洞的区域,通过组合这两个Polygon,就能准确表达“大岛-湖-小岛”的嵌套形态。
内容的提问来源于stack exchange,提问作者jjg
相关产品推荐
相关产品推荐

