Skip to content

Instantly share code, notes, and snippets.

@RutgerK
Last active August 29, 2015 14:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RutgerK/e6d6dd99701b444427ff to your computer and use it in GitHub Desktop.
Save RutgerK/e6d6dd99701b444427ff to your computer and use it in GitHub Desktop.
mpl_path
{
"metadata": {
"name": "",
"signature": "sha256:d9b42ea0283295d435bcd11cd5b24905c822f1934f479734f8baac9b0b5c6083"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"import matplotlib.pyplot as plt\n",
"import matplotlib.path as mpath\n",
"import matplotlib.patches as patches\n",
"import ogr\n",
"import numpy as np\n",
"from copy import copy\n",
"%matplotlib inline"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def geom2path(geom):\n",
" # function to convert a OGR geometry object to\n",
" # a Matplotlib Path\n",
" \n",
" allverts = None\n",
" allcodes = None\n",
"\n",
" for poly in geom:\n",
" for ring in poly:\n",
"\n",
" listring = ring.ExportToWkt().replace('LINEARRING (','').replace(')','').split(',')\n",
" \n",
" # itertools.izip for python 2\n",
" xs, ys = zip(*[vert.split(' ') for vert in listring])\n",
" verts = np.array([xs, ys], dtype='float32')\n",
" \n",
" codes = len(xs) * [mpath.Path.LINETO]\n",
" # Make the first code a MOVETO, prevents\n",
" # a line being drawn between parts or \n",
" # between outer and inner rings.\n",
" codes[0] = mpath.Path.MOVETO\n",
"\n",
" if not allverts is None:\n",
" allverts = np.concatenate([allverts, verts], axis=1)\n",
" allcodes = np.concatenate([allcodes, codes], axis=1)\n",
" else:\n",
" allverts = verts\n",
" allcodes = codes\n",
"\n",
" mpl_path = mpath.Path(allverts.swapaxes(0,1), allcodes)\n",
" \n",
" return mpl_path"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# example from:\n",
"# http://en.wikipedia.org/wiki/Well-known_text#Geometric_objects\n",
"inwkt = 'MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),((20 35, 10 30, 10 10, 30 5, 45 20, 20 35),(30 20, 20 15, 20 25, 30 20)))'"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# parse the WKT to a OGR Geometry\n",
"geom = ogr.CreateGeometryFromWkt(inwkt)\n",
"\n",
"mpl_path, verts, codes = geom2path(geom)\n",
"\n",
"# convert to Path Patch\n",
"mypatch = patches.PathPatch(mpl_path, \n",
" facecolor='orange', lw=2)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"fig, ax = plt.subplots(subplot_kw={'aspect': 1.0,\n",
" 'xlim': [0, 50],\n",
" 'ylim': [0,50]})\n",
"\n",
"ax.add_patch(copy(mypatch))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 5,
"text": [
"<matplotlib.patches.PathPatch at 0x6629550>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nSUVORK5CYII=\n",
"text": [
"<matplotlib.figure.Figure at 0x66295f8>"
]
}
],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 5
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment