用phython写出kml批量转换shp
时间: 2023-05-11 13:06:59 浏览: 298
可以使用 pyKML 库来实现批量转换 KML 文件为 SHP 文件。以下是示例代码:
```python
from osgeo import ogr
from pykml import parser
# 定义输入和输出文件夹路径
input_folder = '/path/to/kml/folder'
output_folder = '/path/to/shp/folder'
# 遍历输入文件夹中的所有 KML 文件
for filename in os.listdir(input_folder):
if filename.endswith('.kml'):
# 解析 KML 文件
with open(os.path.join(input_folder, filename), 'rb') as f:
doc = parser.parse(f).getroot().Document
# 创建输出 SHP 文件
output_path = os.path.join(output_folder, filename[:-4] + '.shp')
driver = ogr.GetDriverByName('ESRI Shapefile')
out_ds = driver.CreateDataSource(output_path)
out_layer = out_ds.CreateLayer(filename[:-4], None, ogr.wkbPolygon)
# 遍历 KML 文件中的所有 Polygon
for placemark in doc.Placemark:
polygon = placemark.MultiGeometry.Polygon
ring = ogr.Geometry(ogr.wkbLinearRing)
for coord in polygon.outerBoundaryIs.LinearRing.coordinates.text.split():
lon, lat, _ = coord.split(',')
ring.AddPoint(float(lon), float(lat))
poly = ogr.Geometry(ogr.wkbPolygon)
poly.AddGeometry(ring)
# 将 Polygon 写入 SHP 文件
feature_defn = out_layer.GetLayerDefn()
feature = ogr.Feature(feature_defn)
feature.SetGeometry(poly)
out_layer.CreateFeature(feature)
# 关闭输出 SHP 文件
out_ds = None
```
这段代码会将输入文件夹中的所有 KML 文件转换为同名的 SHP 文件,并保存到输出文件夹中。注意,这段代码需要安装 pyKML 和 GDAL 库。
阅读全文