我是Shapefile和python映射的新手,所以我希望在密度图上叠加shapefile的数据点时能获得一些帮助。
说实话,我是一个在shapefile中进行映射和读取的初学者,所以到目前为止我所掌握的并不多。
我已经开始使用pyshp,但是如果有更好的软件包可以做到这一点,那么我希望收到任何反馈。
以下代码用于创建洛杉矶地区的底图:
def get_base_map(rides_clean):
return folium.Map(locations=[rides_clean.start_lat.mean(),
rides_clean.start_lon.mean()],
zoom_start = 20, tiles = 'cartodbpositron')
以下代码用于创建密度/热图:
from folium import plugins
stationArr = rides_clean[['start_lat', 'start_lon']][:40000].as_matrix()
get_base_map(rides_clean).add_child(plugins.HeatMap(stationArr,
radius=40, max_val=300))
以下代码是相同的热点图,但添加了路线:
(draw_route_lines(get_base_map(rides_clean),
routedf_vol)).add_child(plugins.HeatMap(stationArr, radius=40,
max_val=300))
我想查看来自shapefile的数据点,这些数据点显示为密度图顶部的标记。
答案 0 :(得分:0)
可以用pyshp做到这一点。我只用过Matplotlib在地图上绘制shapefile点,但是此方法将创建两个数组,分别是您要绘制的每个点的x和y坐标。如果shapefile中有多个形状,则使用第一个代码段;如果只有一个形状,则可以使用第二个代码段。
import shapefile
import numpy as np
sf = shapefile.Reader('/path/to/shapefile')
point_list = []
for shape in sf:
temp = shape.points()
point_list.append(temp)
point_list = np.array(point_list)
x = point_list[:,0]
y = point_list[:,1]
对于只有一个形状的shapefile:
import shapefile
import numpy as np
sf = shapefile.Reader('/path/to/shapefile')
point_list = np.array(sf.shape(0).points)
x = point_list[:,0]
y = point_list[:,1]
您可以使用sf.shapes()
来判断shapefile中有多少个形状,它将打印出详细列出所有不同形状的列表。从您的问题来看,您似乎想将其绘制为标记上的点而不是线,如果不是这种情况,那么对不起。