如何批量提取Google Earth中的地名为文本?满足Python项目列表比对需求
批量提取Google Earth地名的可落地方案
方案1:复用现有剪贴板内容做结构化解析(零额外操作成本)
你当前用Ctrl+C/右键复制地点的操作本身就已经拿到了全部结构化数据,不需要专门去抓界面上的显示文本:
- 直接把剪贴板内容粘贴到新建的空白文件里,将文件后缀修改为
.kmz即可——KMZ本质是ZIP压缩包,内部存储的就是带完整地点结构的KML文本 - 你之前粘贴后看到「属性页完整源码」的情况,是因为粘贴到了富文本编辑器中,编辑器自动识别了剪贴板里携带的富文本格式内容,不影响结构化KML数据的有效性
- 以下代码全程使用Python内置标准库,不需要安装任何第三方工具,没有环境配置门槛,新手复制粘贴就能运行:
import zipfile import xml.etree.ElementTree as ET def ge_kmz_to_text(kmz_save_path): name_list = [] with zipfile.ZipFile(kmz_save_path, 'r') as kmz_archive: # 读取KMZ内部默认主KML文件 with kmz_archive.open('doc.kml', 'r') as kml_content: tree = ET.parse(kml_content) root = tree.getroot() # 匹配KML标准命名空间下的所有Placemark的name字段 kml_ns = {'ns': 'http://www.opengis.net/kml/2.2'} # 全局递归匹配所有Placemark下的名称,自动覆盖嵌套子文件夹的内容 for name_node in root.findall('.//ns:Placemark/ns:name', kml_ns): node_text = name_node.text.strip() if name_node.text else '' if node_text: name_list.append(node_text) # 导出纯文本地名列表 with open('ge_extracted_names.txt', 'w', encoding='utf-8') as out_f: out_f.write('\n'.join(name_list)) return name_list # 替换为你保存的KMZ文件路径即可运行 ge_kmz_to_text('粘贴保存的复制内容.kmz') - 代码运行后生成的
ge_extracted_names.txt就是全量无格式的纯地名列表,可直接用于和本地应有列表做比对。
方案2:官方导出功能适配大文件场景
如果需要处理的地点规模达到5-10k量级,避免剪贴板内容被截断:
- 直接在Google Earth左侧地点侧边栏,选中装所有待提取多边形的父级文件夹,右键选择「将位置另存为」,选择保存格式为KMZ
- 后续解析流程和上述代码完全一致,该方式导出的KMZ没有内容截断风险,适配10k级别的地点规模
- 如果遇到KML存在多层嵌套子文件夹导致漏读,只需要把代码中的匹配逻辑调整为全局遍历所有
<name>节点,即可覆盖所有层级的地点内容
内容的提问来源于stack exchange,提问作者user15154115
相关产品推荐
相关产品推荐

