I've asked this question on GIS stack exchange site, but thought it would be good to post here too. The SE question is here: http://gis.stackexchange.com/questions/50394/importing-matplotlib-basemap-and-shapely

I have a python script that uses matplotlib's basemap and another part that uses shapely to do an intersection of 2 polygons. If basemap is imported before shapely and I run the intersection I get this exception:

|   intersect_poly=  grid_poly.intersection(data_poly)
File  "/sw/lib/python2.7/site-packages/shapely/geometry/base.py",  line334,  in 
 intersection
  return  geom_factory(self.impl['intersection'](self,  other))
File  "/sw/lib/python2.7/site-packages/shapely/topology.py",  line53,  in  
__call__
  "This operation produced a null geometry. Reason: unknown")
shapely.geos.TopologicalError:  This  operation produced a null geometry.  
Reason:  unknown|

If I import shapely first, everything works fine. I would assume this is because of some "funkiness" in the way they are accessing the GEOS library. I've checked that in both situations the same library file is loaded in shapely ("print shapely.geos._lgeos").

Does anyone have an idea as to why this is happening and if there is a right way of doing this? Does this happen for anyone else? In the mean time I can just make sure to import shapely first (not sure if that affects basemap yet). Otherwise maybe I'll skim through the basemap source.

I'm using OSX(10.7) with a fink install that has "libgeos3.3.3-shlibs", "libgeos3.3.1-shlibs", "libgeos3.3.1", "libgeos3.3.0-shlibs", "libgeos3.3.0", and "shapely-py27 (1.2.16-1)" installed. The current basemap version in fink is 1.0.2.

And here's a simple test script that reproduces the problem (flip the imports and it works):

|from  mpl_toolkitsimport  basemap
from  shapelyimport  geometry

g_ring=  [(-88.462425,  26.992203),  (-57.847187,  26.992203),  (-57.847187,  
17.599869),  (-88.462425,  17.599869),  (-88.462425,  26.992203)]
grid_g_ring=  [(-123.044,  59.844000000000001),  (-49.384999999999998,  
57.289000000000001),  (-65.090999999999994,  14.335000000000001),  (-113.133,  
16.369),  (-123.044,  59.844000000000001)]

data_poly=  geometry.Polygon(g_ring)
grid_poly=  geometry.Polygon(grid_g_ring)

print  grid_poly.intersection(data_poly).area|


Thanks again.  Please CC me in any replies.

-Dave
------------------------------------------------------------------------------
Free Next-Gen Firewall Hardware Offer
Buy your Sophos next-gen firewall before the end March 2013 
and get the hardware for free! Learn more.
http://p.sf.net/sfu/sophos-d2d-feb
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to