arcpy实现kml批量转出为shp 包括shp合并

参考文章

arcpy实现 kml批量转出为shp_kml批量合并转shp_A873054267的博客-CSDN博客

参考帮助是arcgis里边自带的KMLToLayer_conversion函数

应用场景:

两步路产生的多个轨迹文件KML,批量转换成arcgis 的gdb数据库

最后合并成一个shp

第一步:把kml转换成gdb

import arcpy, os

# Set workspace (where all the KMLs are) 放kml文件的文件夹,如果kml文件过多,建议50个kml一个文件夹,多执行几个py就行,否则500个kml可能要一个小时
arcpy.env.workspace="D:/KML"

# Set local variables and location for the consolidated file geodatabase 导出的geodata文件夹
outLocation = "D:/KMLOUT"


# Create the master FileGeodatabase

# Convert all KMZ and KML files found in the current workspace 找出kml文件,速度不快的
for kmz in arcpy.ListFiles('*.kml'):
  print "CONVERTING: " + os.path.join(arcpy.env.workspace,kmz)
  arcpy.KMLToLayer_conversion(kmz, outLocation)

第二步:

把数据合并到一个shp

import arcpy,os
# 下面是输出shp的文件夹
out_path = "D:/KML2SHP"
fcz=[]
# 下面是gdb存放的的文件夹
arcpy.env.workspace = "D:/KMLOUT"

# Loop through all the FileGeodatabases within the workspace
wks = arcpy.ListWorkspaces('*', 'FileGDB')
# Skip the Master GDB
for fgdb in wks:  
     
  # Change the workspace to the current FileGeodatabase
  arcpy.env.workspace = fgdb    

  # For every Featureclass inside, copy it to the Master and use the name from the original fGDB  
  featureClasses = arcpy.ListFeatureClasses('*', '', 'Placemarks')
  for fc in featureClasses:
    if fc=='Polylines': # 只要线段,点不要,这个看自己的需求
      print "COPYING: " + fc + " FROM: " + fgdb    
      fcCopy = fgdb + os.sep + 'Placemarks' + os.sep + fc    
      print(fcCopy)
      fcz.append(fcCopy)

  
arcpy.Merge_management(fcz,os.path.join(out_path,'M123.shp'))



#M123是导出shp的文件名,可以自行修改,不能重复

print("done")

比上面的参考文件的好的是,将所有layer转出到shp,这步没做,速度会快一点。

后续可能会写个自动分割执行的东西,因为kml文件较多,一个个生成比较慢;或者用异步生成工具

另外生成合并也有点慢,为了速度,用重名工具,先把文件重命名为a001,a002,最后就直接合并数组,可能会快一点,或者python直接去文件名后拼接数组 fcz.append(fcCopy) 只是搞了一堆字符串,并不需要这么复杂,因为生成的是有规律的字符串

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值