将 GeoDataFrame 多边形转换为 kml 文件

Convert GeoDataFrame polygons to kml file

我有一个带有各种多边形和颜色的 geopandas GeoDataFrame,我用它来绘制气象数据(我问的另一个问题 ):

        color   geometry
0   #fbfdd1 (POLYGON ((-97.12191717810094 32.569, -97.1194...
1   #f3fabf (POLYGON ((-97.12442748846019 32.569, -97.1219...
2   #ebf7b1 (POLYGON ((-97.12944810917861 32.569, -97.1269...
3   #daf0b2 (POLYGON ((-97.18969555780023 32.569, -97.1879...
4   #cbeab3 (POLYGON ((-97.18969555780023 32.5710632999095...
5   #afdfb6 (POLYGON ((-97.18467493708175 32.569, -97.1821...
6   #92d4b9 (POLYGON ((-97.17463369564484 32.5730575804109...
7   #74c9bc (POLYGON ((-97.17714400600408 32.5764063816167...
8   #5bbfc0 (POLYGON ((-97.17714400600408 32.5790959050363...
9   #40b5c3 (POLYGON ((-97.17463369564484 32.5814268890055...
10  #31a6c2 (POLYGON ((-97.17714400600408 32.5852716913413...
11  #2397c0 (POLYGON ((-97.17714400600408 32.5878055733984...
12  #1e83b9 (POLYGON ((-97.17714400600408 32.5895482376014...
13  #206eaf (POLYGON ((-97.17714400600408 32.5911487379959...
14  #2259a5 (POLYGON ((-97.17714400600408 32.5927834911588...
15  #23479d POLYGON ((-97.17463369564484 32.59421434681196...
16  #243594 POLYGON ((-97.17463369564484 32.5962866795434,...
17  #1a2b7d POLYGON ((-97.1721233852856 32.59996829071199,...

我想将其转换为 kml / kmz 文件,但我以前从未使用过该文件类型,所以我不确定如何进行。我试过使用 this 脚本,但它需要一些我没有的高度字段。在 python 内有没有好的/简单的方法来做到这一点?如果可能,我想避免使用在线转换器工具。

所以我可能找到了解决方案...

我安装了Geospatial Data Abstraction Library and have been using the ogr2ogr功能。

正如我在问题中所解释的,我有一个带有多边形和相关颜色的 geopandas GeoDataFrame,我将其写入 json 文件:

with open('/Users/Me/Documents/mydata.json', 'w') as f:
    f.write(gdf.to_json())

在终端/命令行中,我输入:

ogr2ogr -f KML /Users/Me/Documents/mydata.kml /Users/Me/Documents/mydata.json

从技术上讲,您可以使用库 'subprocess':

从 python 脚本中调用此命令
import subprocess
subprocess.call("ogr2ogr -f KML /Users/Me/Documents/mydata.kml /Users/Me/Documents/mydata.json",shell=True)

这会生成一个包含我的 lat/lon-based 多边形的 kml 文件。但是,它会自动将所有线条颜色设置为红色且没有填充颜色(即使我的 json 文件中有颜色)。我还没有找到好的解决方案,所以我一直在手动编辑 KML 文件以获得我想要的样式。

fionageopandas 包装的库非正式地支持您必须手动启用的 KML 驱动程序。

import geopandas as gpd
import fiona

fiona.supported_drivers['KML'] = 'rw'

gdf = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
gdf.to_file('test.kml', driver='KML')

请注意,它也可以读取 KML 文件,但在 'nested' kml 文件上效果不佳,请参阅此 gist 了解更多详细信息