Наслагване на точки от данни на Shapefile върху карта на плътността

Нов съм в шейп файловете и картографирането в python, така че се надявах да получа помощ с наслагването на точки от данни от шейп файл върху карта на плътността.

Честно казано, аз съм начинаещ в картографирането и четенето във шейп файлове, така че това, което имам досега, не е много.

Започнах да използвам 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))

въведете описание на изображението тук

Искам да видя точки от данни от шейп файла, показани като маркери в горната част на диаграмата на плътността.


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