有个数据存储的肯德基地址的字典,用python如何实现出一个可视化图片,上面显示着沈阳的地区,然后以及那个数据字典里的地区作为点表现
时间: 2024-10-22 21:28:16 浏览: 9
要在Python中实现这个功能,我们可以使用matplotlib库来创建地图并标记出指定地点。首先需要安装geopandas和basemap或folium库来进行地理位置处理和可视化。以下是一个简单的步骤:
1. 安装所需库(如果还没有安装):
```bash
pip install geopandas matplotlib basemap folium
```
2. 导入所需的库:
```python
import geopandas as gpd
import matplotlib.pyplot as plt
from geopy.geocoders import Nominatim
import json
```
3. 确保你有一个包含肯德基地址及其对应地区的数据字典,例如:
```python
data = {
"地址": ["沈阳市沈河区中街路520号", ...],
"地区": ["沈河区", ...]
}
```
4. 使用geopy的Nominatim查找地址对应的经纬度:
```python
geolocator = Nominatim(user_agent="kfc_map")
locations = []
for addr in data["地址"]:
location = geolocator.geocode(addr)
if location:
locations.append((location.latitude, location.longitude))
else:
print(f"无法获取地址 {addr} 的位置信息")
# 将地址和地区转换为GeoDataFrame
gdf = gpd.GeoDataFrame(data={"地区": data["地区"]}, geometry=gpd.points_from_xy(*zip(*locations)))
```
5. 加载中国地图数据:
```python
if using_folium: # 如果使用folium
china_map = folium.Map(location=[gdf.geometry.y.min(), gdf.geometry.x.min()], zoom_start=8)
else: # 如果使用basemap
m = Basemap(projection='lcc', resolution='i', lat_0=35, lon_0=105)
fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(1, 1, 1, projection=m)
```
6. 在地图上绘制地点:
```python
for _, row in gdf.iterrows():
if using_folium:
folium.Marker([row['geometry'].y, row['geometry'].x], popup=row['地区']).add_to(china_map)
else:
m.plot(row['geometry'].x, row['geometry'].y, 'o', markersize=5, color='red')
ax.text(row['geometry'].x, row['geometry'].y, row['地区'], fontsize=10)
if not using_folium: # 如果不是folium,显示matplotlib图像
plt.show()
else: # 如果是folium,保存并显示HTML地图
china_map.save("kfc_map.html")
html_map = open('kfc_map.html', 'r').read()
print(html_map)
```
在这个示例中,`using_folium`变量可以设置为True或False,代表是否使用folium库来生成交互式地图。如果你选择使用basemap,你需要先运行上述代码才能看到静态地图。
阅读全文