在密度图上叠加Shapefile数据点

时间:2019-07-19 16:12:18

标签: python maps shapefile density-plot pyshp

我是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))

enter image description here

我想查看来自shapefile的数据点,这些数据点显示为密度图顶部的标记。

1 个答案:

答案 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中有多少个形状,它将打印出详细列出所有不同形状的列表。从您的问题来看,您似乎想将其绘制为标记上的点而不是线,如果不是这种情况,那么对不起。