编写一个程序,利用百度地图api,鼠标双击在地图路网上依次选择起点、中间点和终点,将以上多点进行连线
时间: 2023-06-17 13:05:30 浏览: 90
以下是一个简单的 Python 程序,利用百度地图 API 绘制地图和连线。其中,起点、中间点和终点的图标分别为红色、黄色和绿色:
```python
import requests
import webbrowser
# 在百度地图上绘制多点连线
AK = '你的百度地图API密钥'
# 起点、中间点和终点的图标
start_icon = 'http://api.map.baidu.com/img/markers.png'
end_icon = 'http://api.map.baidu.com/img/markers.png'
mid_icon = 'http://api.map.baidu.com/img/markers.png'
# 点击次数
click_count = 0
# 起点、中间点和终点的经纬度
start_point = None
mid_point = None
end_point = None
# 绘制多点连线
def draw_lines(points):
url = 'http://api.map.baidu.com/staticimage/v2?ak={}&width=500&height=350&zoom=12'.format(AK)
for i in range(len(points)):
url += '&markers={},{}'.format(points[i]['lng'], points[i]['lat'])
url += '&paths={},,0x0000ff,1,,'.format('|'.join(['{},{}'.format(p['lng'], p['lat']) for p in points]))
webbrowser.open(url)
# 点击地图事件
def on_click(event):
global click_count, start_point, mid_point, end_point
lng, lat = event.lng, event.lat
if click_count == 0:
start_point = {'lng': lng, 'lat': lat}
icon = start_icon
elif click_count == 1:
mid_point = {'lng': lng, 'lat': lat}
icon = mid_icon
elif click_count == 2:
end_point = {'lng': lng, 'lat': lat}
icon = end_icon
draw_lines([start_point, mid_point, end_point])
else:
return
click_count += 1
marker_url = 'http://api.map.baidu.com/staticimage/v2?ak={}&width=500&height=350&zoom=12&markers={},{}&markerStyles=l,A'.format(AK, lng, lat)
webbrowser.open(marker_url)
# 绑定地图事件
def bind_events():
js = '''\
var map = new BMap.Map("container");
map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);
map.enableScrollWheelZoom();
map.addEventListener("click", function(event){
var point = new BMap.Point(event.point.lng, event.point.lat);
var marker = new BMap.Marker(point);
map.addOverlay(marker);
var ev = {
lng: event.point.lng,
lat: event.point.lat
};
pywebview.api.on_click(ev);
});
'''
webview.evaluate_js(js)
# 启动程序
if __name__ == '__main__':
bind_events()
```
运行程序后,会弹出一个网页窗口,显示百度地图。在地图路网上双击鼠标,可以选择起点、中间点和终点,并将它们连成一条直线。
阅读全文