以编程方式将 GeoJSON 渲染为图像文件

Lea*_*wly 4 python geojson

我有一系列 GeoJSON 对象,我希望以编程方式在地图上渲染它们。

我可以使用http://geojson.io并上传我的 GeoJSON,但如何以编程方式执行此操作并导出 PNG 或其他图像文件?

https://github.com/mapbox/geojson.io看起来很棒,但它公开发布到 geojson.io 网站。

Sar*_*oma 6

您需要获取适用于 Python 的 MapBox SDK:pip install mapbox

https://github.com/mapbox/mapbox-sdk-py

然后您可以使用以下服务:Static Maps V4(或者 Static Styles V1 看起来也很有趣)

https://www.mapbox.com/api-documentation/pages/static_classic.html

这是他们示例中的代码:https://github.com/mapbox/mapbox-sdk-py/blob/master/docs/static.md#static-maps

主要.py

from mapbox import Static

service = Static()

portland = {
    'type': 'Feature',
    'properties': {'name': 'Portland, OR'},
    'geometry': {
        'type': 'Point',
        'coordinates': [-122.7282, 45.5801]}}
response = service.image('mapbox.satellite', features=[portland])

# add to a file
with open('./output_file.png', 'wb') as output:
    _ = output.write(response.content)
Run Code Online (Sandbox Code Playgroud)

跑步:export MAPBOX_ACCESS_TOKEN="YOUR_MAP_BOX_TOKEN" && python main.py

上面的代码对我有用,并创建了所提供数据的周围区域的 png,如下所示。该features属性应该接受您的 geojson 对象。

python脚本的输出:main.py

如果你想使用自定义 MapBox 样式,那么你需要使用 Static Styles V1

https://www.mapbox.com/api-documentation/?language=Python#static

主要.py

from mapbox import StaticStyle

service = StaticStyle()

portland = {
    'type': 'Feature',
    'properties': {'name': 'Portland, OR'},
    'geometry': {
        'type': 'Point',
        'coordinates': [-122.7282, 45.5801]}}
response = service.image('YOUR_USERNAME', 'YOUR_STYLE_ID', features=[portland])


# add to a file
with open('./output_file.png', 'wb') as output:
    _ = output.write(response.content)
Run Code Online (Sandbox Code Playgroud)

样式化地图输出

我还在 GitHub 上创建了一个带有示例函数的存储库: https: //github.com/sarcoma/MapBox-Static-Style-Python-Script

  • 这仅适用于小数据。如果金额较大,您会得到:“mapbox.errors.InputSizeError:GeoJSON 对于静态地图 API 来说太大,必须少于 4096 个字符” (5认同)
  • 将[地图 id](https://gis.stackexchange.com/a/244797/70242) 从“mapbox.satellite”更改为“mapbox.streets”可以大大提高图像质量。 (2认同)