python-3.x 叶初始Map坐标位置不工作

mm9b1k5b  于 2023-01-22  发布在  Python
关注(0)|答案(1)|浏览(115)

我使用folium来绘制一些坐标,每次我运行代码时,它都会在一些默认坐标而不是我定义的坐标处打开Map。
我试过:

import folium
import pandas as pd

# includes only an example route, dict contains N keys with each being a route. Not relevant to the issue
routes_processed = {0: [(41.4178016, 2.149055),
                        (41.419455, 2.1498049),
                        (41.4195666, 2.1499949),
                        (41.4195266, 2.1514833),
                        (41.4198416, 2.151785),
                        (41.4201266, 2.1517766),
                        (41.4204183, 2.1502616)]}

m = folium.Map(location=[41.399231, 2.168904])

def add_marker(points, m):
    for point in [points[0], points[-1]]:
        folium.Marker(point).add_to(m)   # add the lines

def add_line(points, m):
    folium.PolyLine(points, weight=5, opacity=1).add_to(m)   # create optimal zoom

def fit_bounds(points, m):
    df = pd.DataFrame(points).rename(columns={0:'Lon', 1:'Lat'})[['Lat', 'Lon']]
    sw = df[['Lat', 'Lon']].min().values.tolist()
    ne = df[['Lat', 'Lon']].max().values.tolist()
    m.fit_bounds([sw, ne])

for key, value in routes_processed.items():
    add_marker(value, m)
    add_line(value, m)
    fit_bounds(value, m)

m.show_in_browser()

我遵循了this教程和this另一个。
我期望浏览器在[41.399231,2.168904]坐标处打开,并限制在我在points变量中使用的坐标处。相反,我得到了非洲肯尼亚附近的某个地方。无论我使用什么输入坐标作为配置,这种情况都会发生。
终端中没有提示错误,我可以在每次运行代码时使用缩放来重新定位感兴趣区域。
我想可能是因为我用Map作为参数,并将配置重写为默认值。当我不绘制任何标记时,它会工作。

    • 问题:**如何在不为routes_processed中坐标的每次迭代创建新的标记和线的情况下向Map添加标记和线,并使其保持在定义的位置[41.399231,2.168904]的中心?

环境
我正在MSI/第11代英特尔(R)酷睿(TM)i7 - 11800H上使用Windows 10 Pro。
使用conda环境,Python 3.9.15,folium版本0.14.0和panda 1.5.2。
从VSCode,powershell终端运行,并提示到Chrome 109.0.5414.75(官方版本)(64位)。

xpszyzbs

xpszyzbs1#

我认为这个问题作为一个使用folium进行可视化的例子,作为一个用户是一个有用的代码,错误的原因是初等纬度和经度颠倒了,但是提问者给了我回答问题的机会。

import folium
import pandas as pd

# includes only an example route, dict contains N keys with each being a route. Not relevant to the issue
routes_processed = {0: [(41.4178016, 2.149055),
                        (41.419455, 2.1498049),
                        (41.4195666, 2.1499949),
                        (41.4195266, 2.1514833),
                        (41.4198416, 2.151785),
                        (41.4201266, 2.1517766),
                        (41.4204183, 2.1502616)]}

m = folium.Map(location=[41.419, 2.15])

def add_marker(points, m):
    for point in [points[0], points[-1]]:
        folium.Marker(point).add_to(m)   # add the lines

def add_line(points, m):
    folium.PolyLine(points, weight=5, opacity=1).add_to(m)   # create optimal zoom

def fit_bounds(points, m):
    df = pd.DataFrame(points).rename(columns={0:'Lat', 1:'Lon'})[['Lat', 'Lon']] #update
    sw = df[['Lat', 'Lon']].min().values.tolist()
    ne = df[['Lat', 'Lon']].max().values.tolist()
    m.fit_bounds([sw, ne])

for key, value in routes_processed.items():
    add_marker(value, m)
    add_line(value, m)
    fit_bounds(value, m)

#m.show_in_browser()
m

相关问题