使用simpleKML创建的Polygon在Google Earth中不显示问题求助
解决simpleKML创建Polygon在Google Earth不显示且定位到(0,0)的问题
我一眼就看出问题所在了——你误用了多边形的边界属性!下面给你详细解释和修正方案:
核心原因
innerboundaryis是用来定义多边形内部的洞的,它不能单独使用,必须配合outerboundaryis(定义多边形的外轮廓)一起。当你只设置innerboundaryis时,Google Earth无法识别出有效的多边形区域,就会出现定位到(0,0)且不显示图形的情况。
另外,simpleKML对边界坐标的格式要求是嵌套列表(外层是一个列表,里面包含每个坐标点的列表),虽然你的元组列表可能在某些场景下能运行,但规范写法是嵌套列表,能避免很多解析问题。
修正后的代码示例
1. 简单三角形Polygon的正确写法
pol1 = kml.newpolygon(name=pnt.name) # 用outerboundaryis定义外轮廓,坐标用嵌套列表格式 pol1.outerboundaryis = [[-75.6667, 46.714], [-74.502, 44.60796], [-74.57411, 46.13910], [-75.6667, 46.714]] pol1.style.linestyle.color = simplekml.Color.green pol1.style.linestyle.width = 5 pol1.style.polystyle.color = simplekml.Color.changealphaint(100, simplekml.Color.green)
注意:坐标顺序是经度在前,纬度在后,你的例子里顺序是对的,但这是很多人容易踩的坑,特意提醒下。
2. 圆形Buffer的正确写法
对于你原本的圆形Polygon,只需要把innerboundaryis换成outerboundaryis,同时确保newCoord是嵌套列表格式(每个坐标点是[lon, lat]的列表,外层再包一个列表):
pol = kml.newpolygon(name=pnt.name) pol.description = f"A buffer for {pnt.name}" # 替换成outerboundaryis,确保newCoord是[[lon1, lat1], [lon2, lat2], ...]格式 pol.outerboundaryis = newCoord pol.style.linestyle.color = simplekml.Color.green pol.style.linestyle.width = 5 pol.style.polystyle.color = simplekml.Color.changealphaint(100, simplekml.Color.green)
额外注意事项
- 如果确实需要创建带洞的多边形(比如一个大 polygon 里面挖掉一块),必须同时设置
outerboundaryis和innerboundaryis,两者都是嵌套列表格式。 - 多边形的坐标必须闭合(最后一个点和第一个点完全相同),否则Google Earth可能无法正确渲染。
内容的提问来源于stack exchange,提问作者Daniel Mutton
相关产品推荐
相关产品推荐

