Картирование Python: нанесение избирательной границы на карту улиц? - PullRequest
0 голосов
/ 31 мая 2019

Я бы подумал, что это будет так просто, что это будет почти пример 1 в любой картографической документации. Но, похоже, нет ... Я хочу нанести на карту границы электората на карту улиц, используя картографию. Я могу загрузить ГИС-данные электората в форме MapInfo или ShapeFile. Когда я пытался сделать это год назад, единственный способ найти это - извлечь координаты широты / долготы многоугольника MapInfo и построить их с помощью matplotlib.

Я пытаюсь быть немного элегантнее в этом году. С файлом MapInfo я могу изолировать свой электорат с помощью

import geopandas as gpd

v = gpd.read_file('VicMaps/vic-july-2018-mid-mif/E_VIC18.MIF')
cg = v.loc[7].geometry

Мои попытки извлечь отдельную границу из шейп-файла приведены ниже.

Другая проблема заключается в том, что, когда я пытаюсь запустить это в jupyter, попытка составить карту приводит к сбою ядра (python 3.4).

Где-то должны быть примеры этого, но пока я не нашел пример, который работает с моими данными. Это то, что я до сих пор собирал вместе из разных полезных ответов на вопросы других людей:

import matplotlib.pyplot as plt
import cartopy.crs as ccrs
from cartopy.io.shapereader import Reader
from cartopy.io.img_tiles import OSM

shp = Reader('VicMaps/E_AUGFN3_region.shp')

fig = plt.figure(figsize=(16,16))

tiler = OSM()
ax = plt.axes(projection=tiler.crs)
ax.set_extent([144.956158, 145.085398, -37.813662,  -37.690999])

for r, g in zip(shp.records(), shp.geometries()):
    if r.attributes['Elect_div'] == 'Cooper':
        ax.add_geometries(g, ccrs.Geodetic())

plt.show()

Но что происходит, так это то, что ядро ​​просто «неожиданно» умирает.

Если бы кто-нибудь мог указать мне в направлении решения, я был бы рад! Кроме того: я не предан картопи; если есть лучший пакет, я буду его использовать.

Спасибо!

...