0

I would have thought this would be so simple it would be almost example 1 in any mapping documentation. But it seems not... I want to map the boundary of an electorate over a street map, using cartopy. I can download the GIS data of the electorates in either MapInfo or ShapeFile form. When I tried to do this a year ago, the only way I could find to do it was to extract the lat/long coordinates of the MapInfo polygon, and plot them with matplotlib.

I'm trying to be a bit more elegant this year. With the MapInfo file, I can isolate my particular electorate with

import geopandas as gpd

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

My efforts to extract a particular single boundary from a shapefile are given below.

The other issue is that when I try to run this in jupyter, attempts at plotting a map causes the kernel (python 3.4) to crash.

There must be examples of this somewhere, but so far I haven't found an example which works with my data. This is what I have so far, cobbled together from various helpful answers to other people's questions:

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()

But what happens is that the kernel just dies "unexpectedly".

If anybody could point me in the direction of a solution, I'd be delighted! Also: I'm not wedded to cartopy; if there's a better package I'll use it.

Thanks!

Alasdair
  • 1,300
  • 4
  • 16
  • 28

0 Answers0