Наложение точек данных из шейп-файла на карту плотности

Я новичок в шейп-файлах и отображении в Python, поэтому я надеялся получить некоторую помощь с наложением точек данных из шейп-файла на карту плотности.

Если честно, я новичок в картографировании и чтении шейп-файлов, так что у меня пока не так много.

Я начал использовать 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))

введите здесь описание изображения

Я хочу видеть точки данных из шейп-файла в виде маркеров поверх графика плотности.


person C.G    schedule 19.07.2019    source источник


Ответы (1)


Это можно сделать с помощью pyshp. Я когда-либо использовал Matplotlib только для построения точек шейп-файлов на карте, но этот метод создаст два массива, которые будут координатами x и y каждой точки, которую вы хотите построить. Первый фрагмент используется, если у вас есть несколько фигур в вашем шейп-файле, а второй можно использовать, если у вас есть только одна фигура.

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]

И для шейп-файла только с одной фигурой:

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(), и он распечатает список с подробным описанием всех различных фигур. Из вашего вопроса выяснилось, что вы хотели нарисовать его как точки на маркере, а не линии, извините, если это не так.

person JackLidge    schedule 07.10.2019