地图绘制入门#

基础地图 WGS84#

# import plotly.io as pio
# pio.renderers.default = "notebook_connected"

from plotly import graph_objects as go

基础数据:

data = []
scattermapbox = go.Scattermapbox() 
data.append(scattermapbox)

布局:

mapbox_kargs = dict(
    zoom=10,
    center=dict(
        lat=30.272934,
        lon=120.147376,
    ),
    style="open-street-map",
    accesstoken='!!! replace with your mapbox ak !!!'
)

layout_kargs = dict(
    autosize=False,
    width=1000,
    height=600,
    margin=dict(
        r=0, t=38, l=0, b=0, pad=0
    ),
)

layout = go.Layout(
    mapbox=mapbox_kargs,
    **layout_kargs
)

渲染:

fig = go.Figure(
    data=data,
    layout=layout
)
f = go.FigureWidget(fig)
f
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
File ~/checkouts/readthedocs.org/user_builds/visionz/envs/stable/lib/python3.10/site-packages/IPython/core/formatters.py:920, in IPythonDisplayFormatter.__call__(self, obj)
    918 method = get_real_method(obj, self.print_method)
    919 if method is not None:
--> 920     method()
    921     return True

File ~/checkouts/readthedocs.org/user_builds/visionz/envs/stable/lib/python3.10/site-packages/plotly/basewidget.py:741, in BaseFigureWidget._ipython_display_(self)
    737 """
    738 Handle rich display of figures in ipython contexts
    739 """
    740 # Override BaseFigure's display to make sure we display the widget version
--> 741 widgets.DOMWidget._ipython_display_(self)

AttributeError: type object 'DOMWidget' has no attribute '_ipython_display_'

可选的地图样式:(无需 ak)"open-street-map""carto-positron""stamen-terrain" 等 ;(需要 ak)"basic""streets""outdoors" 等。

使用高德地图 GCJ-02#

import plotly.graph_objects as go

data = []

scattermapbox = go.Scattermapbox() 
data.append(scattermapbox)

basemap_layer = [
    dict(
        below="traces",
        sourcetype="raster",
        sourceattribution="高德地图",
        source=[
            "http://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=7"
        ]
    )
]

mapbox_kargs = dict(
    zoom=10,
    center=dict(
        lat=30.272934,
        lon=120.147376,
    ),
    style="white-bg",
    layers=basemap_layer,
)

layout_kargs = dict(
    autosize=False,
    width=1000,
    height=500,
    margin=dict(
        r=0, t=38, l=0, b=0, pad=0
    ),
)

layout = go.Layout(
    mapbox=mapbox_kargs,
    **layout_kargs
)

fig = go.Figure(
    data=data,
    layout=layout
)

go.FigureWidget(fig)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
File ~/checkouts/readthedocs.org/user_builds/visionz/envs/stable/lib/python3.10/site-packages/IPython/core/formatters.py:920, in IPythonDisplayFormatter.__call__(self, obj)
    918 method = get_real_method(obj, self.print_method)
    919 if method is not None:
--> 920     method()
    921     return True

File ~/checkouts/readthedocs.org/user_builds/visionz/envs/stable/lib/python3.10/site-packages/plotly/basewidget.py:741, in BaseFigureWidget._ipython_display_(self)
    737 """
    738 Handle rich display of figures in ipython contexts
    739 """
    740 # Override BaseFigure's display to make sure we display the widget version
--> 741 widgets.DOMWidget._ipython_display_(self)

AttributeError: type object 'DOMWidget' has no attribute '_ipython_display_'

使用天地图 CGCS2000#

import plotly.graph_objects as go

data = []

scattermapbox = go.Scattermapbox() 
data.append(scattermapbox)

tk = "!!! replace with your tianditu tk !!!"
layer = "vec"
basemap_layer = [
    dict(
        below="traces",
        sourcetype="raster",
        sourceattribution="天地图",
        source=[
            "https://t0.tianditu.gov.cn/{layer}_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER={layer}&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILECOL={{x}}&TILEROW={{y}}&TILEMATRIX={{z}}&tk={tk}".format(layer=layer, tk=tk)
        ]
    ),
    dict(
        below="traces",
        sourcetype="raster",
        source=[
            "https://t3.tianditu.gov.cn/cva_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILECOL={{x}}&TILEROW={{y}}&TILEMATRIX={{z}}&tk={tk}".format(tk=tk)
        ]
    )
]

mapbox_kargs = dict(
    zoom=10,
    center=dict(
        lat=30.272934,
        lon=120.147376,
    ),
    style="carto-positron",
    layers=basemap_layer,
)

layout_kargs = dict(
    autosize=False,
    width=1200,
    height=500,
    margin=dict(
        r=0, t=38, l=0, b=0, pad=0
    ),
)

layout = go.Layout(
    mapbox=mapbox_kargs,
    **layout_kargs
)

fig = go.Figure(
    data=data,
    layout=layout
)

go.FigureWidget(fig)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
File ~/checkouts/readthedocs.org/user_builds/visionz/envs/stable/lib/python3.10/site-packages/IPython/core/formatters.py:920, in IPythonDisplayFormatter.__call__(self, obj)
    918 method = get_real_method(obj, self.print_method)
    919 if method is not None:
--> 920     method()
    921     return True

File ~/checkouts/readthedocs.org/user_builds/visionz/envs/stable/lib/python3.10/site-packages/plotly/basewidget.py:741, in BaseFigureWidget._ipython_display_(self)
    737 """
    738 Handle rich display of figures in ipython contexts
    739 """
    740 # Override BaseFigure's display to make sure we display the widget version
--> 741 widgets.DOMWidget._ipython_display_(self)

AttributeError: type object 'DOMWidget' has no attribute '_ipython_display_'