如何在Python Folium中绘制两城市间的最短路径连线
解决Folium绘制东京与茂宜岛跨太平洋最短路径的问题
问题描述
使用Python的Folium模块绘制东京(35.6895, 139.6917)与夏威夷茂宜岛(20.7967, -156.3319)的连线时,默认生成的连线会绕经大西洋、欧洲,而非跨太平洋的合理最短路径。原代码如下:
import folium tokyo = (35.6895, 139.6917) maui = (20.7967, -156.3319) # Calculate the midpoint midpoint = ((tokyo[0] + maui[0]) / 2, (tokyo[1] + maui[1]) / 2) # Create a map centered around the midpoint m = folium.Map(location=midpoint, zoom_start=2) # Draw a line connecting Tokyo and Maui folium.PolyLine( locations=[tokyo, maui], color='green', weight=2 ).add_to(m) # Add markers for Tokyo and Maui folium.Marker(location=tokyo, popup='Tokyo').add_to(m) folium.Marker(location=maui, popup='Maui').add_to(m) # Save the map to an HTML file m.save('path_map.html')
当前效果为连线绕经全球西侧,未沿太平洋最短路径绘制。
解决方案
问题根源在于两点经度跨度极大(东京东经139°,茂宜岛西经156°,平面投影下默认选择较短的西侧路径)。只需调整其中一个点的经度为跨太平洋的等效经度,让平面投影中的经度差指向太平洋方向即可:
- 将茂宜岛的经度从
-156.3319转换为203.6681(计算方式:-156.3319 + 360 = 203.6681),此时两点经度差约为64°,平面直线将对应跨太平洋的大圆航线。 - 同时调整地图中心至太平洋区域,避免地图显示偏向大西洋。
修改后的代码
import folium tokyo = (35.6895, 139.6917) # 调整茂宜岛经度为跨太平洋的等效值 maui = (20.7967, 203.6681) # 设置地图中心为太平洋区域,替代原中点 map_center = (28, 170) m = folium.Map(location=map_center, zoom_start=2) # 绘制跨太平洋连线 folium.PolyLine( locations=[tokyo, maui], color='green', weight=2 ).add_to(m) # 添加标记(注意标记仍使用原经度,确保显示位置正确) folium.Marker(location=(35.6895, 139.6917), popup='Tokyo').add_to(m) folium.Marker(location=(20.7967, -156.3319), popup='Maui').add_to(m) m.save('pacific_path_map.html')
说明
- 标记仍使用原经度坐标,确保在地图上的实际位置正确。
- 调整后的PolyLine会沿太平洋绘制最短路径,符合球面大圆航线的平面投影效果。
内容的提问来源于stack exchange,提问作者Evan Wright
相关产品推荐
相关产品推荐

