Hi Peter,

On Mon, Feb 14, 2011 at 4:03 PM, Peter Tittmann <[email protected]> wrote:
> Hi all,
> I am in need of making maps from postgis data and am sort of stymied by the
> range of options and difficulty in finding an example. My apologies if its
> out there and I've just not been able to find it. My goal is to be able to
> plot multiple point, polygon, and possibly raster layers on a matplotlib
> figure.
> Iv'e tried Jose Gomez-Dans example
> (http://sites.google.com/site/jgomezdans/ogr,pythonymatplotlib) but he seems
> to be just using postgis to get the SRID of the display extent argument
> transformed.
>
> I've tried the example from
> here: http://trac.gispython.org/lab/browser/Shapely/trunk/examples/world.py?rev=749
> substituting an ExecuteSQL for GetLayersByName like this:
> import ogr
> import pylab
> from numpy import asarray
> from shapely.wkb import loads
> source = ogr.Open("PG:host=localhost dbname=fb user=*** password= ***")
> borders = source.ExecuteSQL("select std_id as stand, boundary from
> vaneck.vaneck_units")
>
> fig = pylab.figure(1, figsize=(4,2), dpi=300)
> while 1:
>     feature = borders.GetNextFeature()
>     if not feature:
>         break
>
>     geom = loads(feature.GetGeometryRef().ExportToWkb())
>     a = asarray(geom)
>     pylab.plot(a[:,0], a[:,1])
> pylab.show()
> but asarray cannot process the syntax:
> Traceback (most recent call last):
>   File "<stdin>", line 20, in <module>
> IndexError: invalid index
>
> At this point I'm inclined to generate the wdb using a query via Psycopg
> (instead of the above OGR method) but am stuck trying  to figure out how to
> plot the multi polygon returned to shapely using matplotlib.
> I'd be most grateful for any suggestions.
> Peter

The asarray function only works on geometric objects that have a
coordinate sequence attribute: line strings and rings. If your objects
are multipolygons or polygons, you'll need to access their parts and
rings:

  for polygon in geom:
      a = asarray(polygon.exterior)
      pylab.plot(a[:,0], a[:,1])
      for ring in polygon.interiors:
          b = asarray(ring)
          pylab.plot(b[:,0], b[:,1])


-- 
Sean
_______________________________________________
Community mailing list
[email protected]
http://lists.gispython.org/mailman/listinfo/community

Reply via email to