Revision: 4253
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4253&view=rev
Author:   jswhit
Date:     2007-11-13 12:55:29 -0800 (Tue, 13 Nov 2007)

Log Message:
-----------
now use custom libgeos pyrex wrapper, Shapely no longer needed.

Modified Paths:
--------------
    trunk/toolkits/basemap-testing/lib/matplotlib/toolkits/basemap/basemap.py

Modified: 
trunk/toolkits/basemap-testing/lib/matplotlib/toolkits/basemap/basemap.py
===================================================================
--- trunk/toolkits/basemap-testing/lib/matplotlib/toolkits/basemap/basemap.py   
2007-11-13 20:52:54 UTC (rev 4252)
+++ trunk/toolkits/basemap-testing/lib/matplotlib/toolkits/basemap/basemap.py   
2007-11-13 20:55:29 UTC (rev 4253)
@@ -14,9 +14,9 @@
 from numpy import linspace, squeeze, ma
 from matplotlib.cbook import popd, is_scalar
 from shapelib import ShapeFile
-from shapely.geometry import Polygon as PolygonShape
-from shapely.geometry import LineString as LineShape
-from shapely.geometry import Point as PointShape
+from geos import Polygon as PolygonShape
+from geos import LineString as LineShape
+from geos import Point as PointShape
 
 # basemap data files now installed in lib/matplotlib/toolkits/basemap/data
 basemap_datadir = os.sep.join([os.path.dirname(__file__), 'data'])
@@ -774,9 +774,10 @@
             maptran = pyproj.Proj(proj='stere',lon_0=lon_0,lat_0=lat_0)
             # boundary polygon for orthographic projection
             # in stereographic coorindates.
-            b = npy.asarray(self._boundarypolyll.boundary)
+            b = self._boundarypolyll.get_coords()
             blons = b[:,0]; blats = b[:,1]
-            boundarypolyxy = PolygonShape(zip(*maptran(blons,blats)))
+            b[:,0], b[:,1] = maptran(blons, blats)
+            boundarypolyxy = PolygonShape(b)
         for line in bdatmetafile:
             linesplit = line.split()
             area = float(linesplit[1])
@@ -821,14 +822,13 @@
                         lats.insert(0,-90.)
                         lons.append(lonend)
                         lats.append(-90.)
-                        poly = PolygonShape(zip(lons,lats))
-                        antart = True
                         b = npy.empty((len(lons),2),npy.float64)
                         b[:,0] = lons; b[:,1] = lats
+                        poly = PolygonShape(b)
+                        antart = True
                     else:
+                        poly = Shape(b)
                         antart = False
-                    # create Shapely geometry from lons/lons array.
-                    poly = Shape(b)
                     # create duplicate polygons shifted by -360 and +360
                     # (so as to properly treat polygons that cross 
                     # Greenwich meridian).
@@ -847,25 +847,16 @@
                             # if geometry intersection calculation fails,
                             # just move on.
                             try:
-                                poly = poly.intersection(boundarypolyll)
+                                geoms = poly.intersection(boundarypolyll)
                             except:
                                 pass
-                            # create iterable object with geometries
-                            # that intersect map region.
-                            if hasattr(poly,'geoms'): 
-                                geoms = poly.geoms
-                            else:
-                                geoms = [poly]
                             # iterate over geometries in intersection.
                             for psub in geoms:
                                 # only coastlines are polygons,
                                 # which have a 'boundary' attribute.
                                 # otherwise, use 'coords' attribute
                                 # to extract coordinates.
-                                if name == 'gshhs':
-                                    b = npy.asarray(psub.boundary)
-                                else:
-                                    b = npy.asarray(psub.coords)
+                                b = psub.get_coords()
                                 blons = b[:,0]; blats = b[:,1]
                                 # transformation from lat/lon to
                                 # map projection coordinates.
@@ -906,25 +897,16 @@
                     poly = Shape(b)
                     # if geometry instersects map projection
                     # region, and doesn't have any invalid points, process it.
-                    if goodmask.all() and boundarypolyxy.intersects(poly):
+                    if goodmask.all() and poly.intersects(boundarypolyxy):
                         # if geometry intersection calculation fails,
                         # just move on.
                         try:
-                            poly = boundarypolyxy.intersection(poly)
+                            geoms = poly.intersection(boundarypolyxy)
                         except:
                             pass
-                        # create iterable object with geometries
-                        # that intersect map region.
-                        if hasattr(poly,'geoms'): 
-                            geoms = poly.geoms
-                        else:
-                            geoms = [poly]
                         # iterate over geometries in intersection.
                         for psub in geoms:
-                            if name == 'gshhs':
-                                b = npy.asarray(psub.boundary)
-                            else:
-                                b = npy.asarray(psub.coords)
+                            b = psub.get_coords()
                             # if projection == 'ortho',
                             # transform polygon from stereographic
                             # to orthographic coordinates.
@@ -932,7 +914,7 @@
                                 # if coastline polygon covers more than 99%
                                 # of map region for fulldisk projection,
                                 # it's probably bogus, so skip it.
-                                areafrac = psub.area/boundarypolyxy.area
+                                areafrac = psub.area()/boundarypolyxy.area()
                                 if name == 'gshhs' and\
                                    self._fulldisk and\
                                    areafrac > 0.99: continue
@@ -963,7 +945,9 @@
                 rmajor = self._width
             x = rmajor*npy.cos(thetas) + rmajor
             y = rminor*npy.sin(thetas) + rminor
-            boundaryxy = PolygonShape(zip(x,y))
+            b = npy.empty((len(x),2),npy.float64)
+            b[:,0]=x; b[:,1]=y
+            boundaryxy = PolygonShape(b)
             # compute proj instance for full disk, if necessary.
             if not self._fulldisk:
                 projparms = self.projparams
@@ -1000,7 +984,9 @@
             lons = npy.array(lons1+lons2+lons3+lons4,npy.float64)
             lats = npy.array(lats1+lats2+lats3+lats4,npy.float64)
             x, y = maptran(lons,lats)
-            boundaryxy = PolygonShape(zip(x,y))
+            b = npy.empty((len(x),2),npy.float64)
+            b[:,0]=x; b[:,1]=y
+            boundaryxy = PolygonShape(b)
         else: # all other projections are rectangular.
             # left side (x = xmin, ymin <= y <= ymax)
             yy = linspace(self.ymin, self.ymax, ny)[:-1]
@@ -1018,10 +1004,10 @@
             y = y + len(xx)*[self.ymin]
             x = npy.array(x,npy.float64)
             y = npy.array(y,npy.float64)
-            boundaryxy = PolygonShape([(self.xmin,self.ymin),\
-                                       (self.xmin,self.ymax),\
-                                       (self.xmax,self.ymax),\
-                                       (self.xmax,self.ymin)])
+            b = npy.empty((4,2),npy.float64)
+            b[:,0]=[self.xmin,self.xmin,self.xmax,self.xmax]
+            b[:,1]=[self.ymin,self.ymax,self.ymax,self.ymin]
+            boundaryxy = PolygonShape(b)
         if self.projection in ['mill','merc','cyl']:
             # make sure map boundary doesn't quite include pole.
             if self.urcrnrlat > 89.9999: 
@@ -1035,7 +1021,9 @@
             lons = [self.llcrnrlon, self.llcrnrlon, self.urcrnrlon, 
self.urcrnrlon]
             lats = [llcrnrlat, urcrnrlat, urcrnrlat, llcrnrlat]
             x, y = self(lons, lats)
-            boundaryxy = PolygonShape(zip(x,y))
+            b = npy.empty((len(x),2),npy.float64)
+            b[:,0]=x; b[:,1]=y
+            boundaryxy = PolygonShape(b)
         else:
             if self.projection not in ['moll','robin','sinu']:  
                 lons, lats = maptran(x,y,inverse=True)
@@ -1051,7 +1039,9 @@
                         lons[n] = lon
                     lonprev = lon
                     n = n + 1
-        boundaryll = PolygonShape(zip(lons,lats))
+        b = npy.empty((len(lons),2),npy.float64)
+        b[:,0]=lons; b[:,1]=lats
+        boundaryll = PolygonShape(b)
         return boundaryll, boundaryxy
 
 


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to