2

我是 python 中的 shapefile 和映射的新手,所以我希望在将 shapefile 中的数据点覆盖在密度图上时获得一些帮助。

老实说,我是一个在 shapefile 中进行映射和阅读的初学者,所以到目前为止我所拥有的并不多。

我已经开始使用 pyshp,但是如果有更好的软件包可以做到这一点,那么我会喜欢任何反馈。

以下代码是创建 LA 区域的底图:

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 中的数据点,这些数据点显示为密度图顶部的标记。

4

1 回答 1

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]

你可以知道你的 shapefile 中有多少个形状sf.shapes(),它会打印一个列表,详细说明所有不同的形状。从您的问题来看,您似乎想将其绘制为标记上的点而不是线条,如果不是这种情况,对不起。

于 2019-10-07T21:37:21.290 回答