
怎么使用python在某一个城市随机生成经纬度坐标,并在这种灰色图中画出来呢
关注引自免费微信小程序:皆我百晓生
要实现这个功能,我们可以使用Python中的几个库:matplotlib用于绘制地图和点,geopandas处理地理空间数据,以及random生成随机数。首先确保安装了所需的库,可以使用以下命令进行安装:
pip install geopandas matplotlib descartes
接下来,我们将编写一个函数来生成随机坐标并将其绘制成灰度图。这里我们以南京为例,因为题目提到了南京市厨余油脂回收网络。
import random
import matplotlib.pyplot as plt
from matplotlib.collections import RegularPolyCollection
import geopandas as gpd
from shapely.geometry import Point
# 加载南京市边界数据(可以从网上下载相应城市的shapefile)
nanjing_boundaries = gpd.read_file("path/to/nanjing_boundary.shp")
def generate_random_points(n, city_boundaries):
random_points = []
# 遍历指定次数
for _ in range(n):
# 生成随机经度和纬度,范围应限制在城市边界内
random_longitude = random.uniform(city_boundaries.total_bounds[0], city_boundaries.total_bounds[2])
random_latitude = random.uniform(city_boundaries.total_bounds[1], city_boundaries.total_bounds[3])
# 创建Point对象并将它添加到列表中
random_point = Point(random_longitude, random_latitude)
random_points.append(random_point)
return random_points
def plot_random_points(points, city_boundaries, ax=None, color='gray'):
if ax is None:
fig, ax = plt.subplots(figsize=(10, 10))
# 绘制城市边界
city_boundaries.plot(ax=ax, facecolor='none', edgecolor='black')
# 使用RegularPolyCollection绘制点,这样可以控制点的大小和颜色
collection = RegularPolyCollection(
sizes=[100], # 点的大小
offsets=points, # 点的位置
facecolors=color, # 点的颜色
edgecolors=color,
offset_transform=ax.transData
)
ax.add_collection(collection)
# 设置坐标轴不可见
ax.axis('off')
ax.set_title("南京市厨余油脂回收网络")
plt.tight_layout()
plt.show()
# 生成10个随机点作为示例
n_random_points = 10
random_points = generate_random_points(n_random_points, nanjing_boundaries)
# 绘制随机点
plot_random_points(random_points, nanjing_boundaries)
在这个例子中,你需要替换"path/to/nanjing_boundary.shp"为实际的城市边界shapefile路径。运行这段代码后,会生成一张南京市的地图,上面有10个随机分布的点,代表可能的餐饮点、收运点等位置。你可以根据需要调整随机点的数量。
注意,这只是一个基础的示例,实际应用中可能还需要考虑更多的因素,例如避开已有的设施位置、人口密度等。如果你需要更复杂的功能,可能需要引入其他数据源和算法来进行分析。