You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell实现KML数据转指定格式CSV的需求与问题

处理KML数据生成关联名称的CSV脚本方案

-replace命令没法实现这种带状态跟踪的替换逻辑,因为它只能做静态字符串替换,没法在处理过程中保存并复用动态更新的名称变量。直接用逐行处理的方式更靠谱,以下是PowerShell实现脚本:

# 初始化变量:当前关联名称、CSV内容(先写入表头)
$currentName = $null
$csvContent = @("X,Y,Name")

# 读取源数据文件(替换为你的实际文件路径)
Get-Content -Path "your_input_file.txt" | ForEach-Object {
    $trimmedLine = $_.Trim()
    
    # 匹配<kml:name>标签,提取名称并更新当前变量
    if ($trimmedLine -match '<kml:name>(.*?)</kml:name>') {
        $currentName = $matches[1]
    }
    # 匹配坐标行(假设格式为 经度,纬度,可根据实际结构调整正则)
    elseif ($trimmedLine -match '^(-?\d+\.\d+),(-?\d+\.\d+)$') {
        # 提取经度(X)、纬度(Y),关联当前名称生成CSV行
        if ($currentName) {
            $csvContent += "$($matches[1]),$($matches[2]),$currentName"
        }
    }
}

# 将结果写入CSV文件(替换为你的输出路径)
$csvContent | Out-File -Path "output.csv" -Encoding UTF8

关键说明:

  • 状态跟踪:通过$currentName变量持续记录最近一次匹配到的名称,后续所有坐标行都会关联这个名称,直到遇到下一个<kml:name>标签更新变量。
  • 正则适配:如果你的坐标行包含KML的<coordinates>标签或海拔值,比如<coordinates>116.397,39.908,0</coordinates>,把坐标匹配的正则改成:
    elseif ($trimmedLine -match '<coordinates>(-?\d+\.\d+),(-?\d+\.\d+),.*?</coordinates>')
    
  • 编码处理:用-Encoding UTF8确保中文名称不会乱码。

内容的提问来源于stack exchange,提问作者Rubric23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 22:52:40