Plotly:在地图上绘制点和线时自动进入/退出到合适的区域

Posted

技术标签:

【中文标题】Plotly:在地图上绘制点和线时自动进入/退出到合适的区域【英文标题】:Plotly: auto room in/out to the suitable region when plotting points and lines on the map 【发布时间】:2022-01-10 16:15:03 【问题描述】:

自动调整显示正确地图范围的正确方法是什么:

这是当前的显示,我几乎看不到绘图的真实部分:

理想的展示方式:

下面是代码。

import plotly.graph_objects as go
import plotly.io as pio
import plotly

lon1 = [113.076843,113.154191,113.737213,113.842405,114.244183]
lat1 = [23.10993,23.218533,23.047626,22.987975,22.601581]

lon2 = [113.364738, 113.664108,113.661705,114.244183]
lat2 = [22.997112,22.878038,22.869216,22.601581]

lon_trip1 = lon1
lat_trip1 = lat1

lon_trip2 = lon2
lat_trip2 = lat2

fig = go.Figure()
fig.add_trace(go.Scattermapbox(
        mode="markers+lines",
        lon=lon_trip1,
        lat=lat_trip1,
        name="trip1",
        marker='size': 10))
fig.add_trace(go.Scattermapbox(
        mode="markers+lines",
        lon=lon_trip2,
        lat=lat_trip2,
        name="trip2",
        marker='size': 10))

fig.update_layout(
        margin='l': 113, 't': 24, 'b': 22, 'r': 115,
            autosize=True,
        mapbox=
            # 'center': 'lon': 10, 'lat': 10,
            # 'autosize'=True,
            'style': "stamen-terrain",
            # 'center': 'lon': -20, 'lat': -20,
            # 'zoom': 1
        )

pio.write_image(fig,'C:/Users/user/Desktop/test.png',width=1980, height=1080)
plotly.offline.plot(fig, filename='C:/Users/user/Desktop/plot' + '.html')
fig.show()

【问题讨论】:

【参考方案1】:

要在使用地图框时自动设置中心位置,您需要一种特殊的方法。我已经使用official reference 中的示例修改了您的代码。中心的经纬度设置合适,请更正。

import plotly.graph_objects as go
import plotly.io as pio 
import plotly

lon1 = [113.076843, 113.154191, 113.737213, 113.842405, 114.244183 ]
lat1 = [23.10993, 23.218533, 23.047626, 22.987975, 22.601581 ]

lon2 = [113.364738, 113.664108, 113.661705,114.244183]
lat2 = [22.997112, 22.878038, 22.869216, 22.601581 ]

lon_trip1 = lon1
lat_trip1 = lat1

lon_trip2 = lon2
lat_trip2 = lat2

fig = go.Figure()
fig.add_trace(go.Scattermapbox(
    mode="markers+lines",
    lon=lon_trip1,
    lat=lat_trip1,
    name="trip1", marker='size': 10))

fig.add_trace(
    go.Scattermapbox(
        mode="markers+lines",
        lon=lon_trip2,
        lat=lat_trip2,
        name="trip2",
        marker='size': 10))

fig.update_layout(
    margin='l': 113, 't': 24, 'b': 22, 'r': 115,
    mapbox=dict(style='carto-positron',
                center=go.layout.mapbox.Center(lon=113.664, lat=22.878),
                pitch=0,
                zoom=8)
)

fig.add_annotation(x=lat2[0],
                   xref='x',
                   y=lon2[0],
                   yref='y',
                   text="DAZHEN'GANG",
                   font=dict(color='blue', size=20))

pio.write_image(fig,'./data/plotly_choropleth.png',width=1980, height=1080)
#plotly.offline.plot(fig, filename='C:/Users/user/Desktop/plot' + '.html')
fig.show()

【讨论】:

谢谢。您能否建议如何在每个节点内添加文本?例如像 1,2,3 这样的数字。以及如何将线型设为箭头线 还有,我能不能把地图背景的样式改成类似于Tableau的白灰色呢 可以使用add_annotation() 添加文本。您可以按原样使用纬度和经度,x,y 作为坐标参考。地图类型可以在样式中更改,所以我将其更改为白灰色。最后,箭头的添加似乎不是地图框散点图的功能。因此,您必须使用 add_annotation() 手动添加它们。 非常感谢。当我移动地图时,似乎 annotation() 不会与节点绑定。我遵循了这个方法:***.com/questions/62240079/… 但是,它似乎根本不起作用。 另外,有没有办法将地图语言自动更改为本地语言,如谷歌地图?再次非常感谢

以上是关于Plotly:在地图上绘制点和线时自动进入/退出到合适的区域的主要内容,如果未能解决你的问题,请参考以下文章

点和线之间的最短距离(Google Maps API 问题?)

如何使用 OpenLayers 将属性插入 WFS?

点和线之间的最短距离(Google Maps API问题?)

地图上自定义标记点和轨迹线的实现

已知点和线, 求垂足

Problem C: 平面上的点和线——Point类Line类 (III)