【问题标题】:how to convert google-maps GeoJSON to GPX, retaining location names如何将谷歌地图 GeoJSON 转换为 GPX,保留位置名称
【发布时间】:2021-02-09 23:15:44
【问题描述】:

我已通过外卖工具导出了我的 google-maps 兴趣点(保存的地点/位置)。如何将其转换为 GPX,以便将其导入 OSMANd?

我尝试使用 gpsbabel:

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

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

【问题讨论】:

    标签: python google-maps gps geojson gpx


    【解决方案1】:

    最后我通过创建一个小的 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
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-04-09
        • 2012-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-12
        • 1970-01-01
        • 2018-01-22
        • 1970-01-01
        相关资源
        最近更新 更多