如何将google-maps GeoJSON转换为GPX,并保留位置名称

问题描述

我已经通过导出工具导出了Google地图的兴趣点(保存的地点)。如何将其转换为GPX,以便可以将其导入OSMAnd?

我尝试使用gpsbabel:

gpsbabel -i geojson -f my-saved-locations.json -o gpx -F my-saved-locations_converted.gpx

但这并没有保留每个兴趣点的标题/名称-而是仅使用了WPT001,WPT002等名称

解决方法

最后,我通过创建一个小的python脚本在格式之间进行转换来解决了这个问题。 这可以很容易地适应特定需求:

#!/usr/bin/env python3

import argparse
import json
import xml.etree.ElementTree as ET
from xml.dom import minidom


def ingestJson(geoJsonFilepath):
    poiList = []
    with open(geoJsonFilepath) as fileObj:
        data = json.load(fileObj)
        for f in data["features"]:
            poiList.append({'title': f["properties"]["Title"],'lon': f["geometry"]["coordinates"][0],'lat': f["geometry"]["coordinates"][1],'link': f["properties"].get("Google Maps URL",''),'address': f["properties"]["Location"].get("Address",'')})
    return poiList


def dumpGpx(gpxFilePath,poiList):
    gpx = ET.Element("gpx",version="1.1",creator="",xmlns="http://www.topografix.com/GPX/1/1")
    for poi in poiList:
        wpt = ET.SubElement(gpx,"wpt",lat=str(poi["lat"]),lon=str(poi["lon"]))
        ET.SubElement(wpt,"name").text = poi["title"]
        ET.SubElement(wpt,"desc").text = poi["address"]
        ET.SubElement(wpt,"link").text = poi["link"]
    xmlstr = minidom.parseString(ET.tostring(gpx)).toprettyxml(encoding="utf-8",indent="  ")
    with open(gpxFilePath,"wb") as f:
        f.write(xmlstr)


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--inputGeoJsonFilepath',required=True)
    parser.add_argument('--outputGpxFilepath',required=True)
    args = parser.parse_args()

    poiList = ingestJson(args.inputGeoJsonFilepath)
    dumpGpx(args.outputGpxFilepath,poiList=poiList)


if __name__ == "__main__":
    main()

...

可以这样称呼:

./convert-googlemaps-geojson-to-gpx.py \
  --inputGeoJsonFilepath my-saved-locations.json \
  --outputGpxFilepath my-saved-locations_converted.gpx
,

还有一个名为“togpx”的 NPM 脚本: https://github.com/tyrasd/togpx

我没有尝试过,但它声称可以保留尽可能多的信息。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...