On 8/25/12 3:08 PM, klo uo wrote: > On Sat, Aug 25, 2012 at 10:19 PM, Jeff Whitaker <jsw...@fastmail.fm> wrote: >> Klo: For cylindrical equidistant maps (projection='cyl') it will be easy, >> since the corner lat/lon values are all that is needed. For other >> projections, we'll need a way to translate EPSG projection codes into >> Basemap kwargs. > Jeff, how is it done for static bitmaps as bluemarble, etopo... ? > Can't the same be done, if image fits in one of supported projections?
Klo: The image in interpolated to the Basemap projection region. This is slow - the main reason to use the WMS is to avoid this by having it done on the server side. > > According http://atlas.resources.ca.gov/arcgis/SDK/REST/export.html > `bbox` is required with syntax like: > > Syntax: <xmin>, <ymin>, <xmax>, <ymax> > > Number format for `bbox` AFAIK (but not sure) depends on `bboxSR` > projection and dense list of available projections with their code is > here: http://atlas.resources.ca.gov/arcgis/SDK/REST/pcs.html The trick is to figure out what the EPSG projection code is based on the Basemap projection info, and pass that information to the WMS server so it can do the interpolation. Here's an example for south polar stereographic: width = 12000.e3 plt.figure() basemap_url =\ "http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_Imagery_World_2D/MapServer/export?\ bbox=%d,%d,%d,%d&\ bboxSR=3412&\ imageSR=3412&\ size=800,800&\ dpi=128&\ format=png32&\ f=image" % (-width/2,-width/2,width/2,width/2) m =\ Basemap(projection='stere',resolution='i',lon_0=0,lat_0=-90,lat_ts=-70,\ width=width,height=width,rsphere=(6378273,6356889.449)) m.imshow(plt.imread(urllib2.urlopen(basemap_url)),origin='upper') m.drawmeridians(np.arange(-180,180,30),labels=[0,0,0,1],color='y') m.drawparallels(np.arange(-80,-0,10),labels=[1,0,0,0],color='y') m.drawcoastlines() plt.show() -Jeff > > So perhaps, by just providing `cyl` (bboxSR=4326) and imageSR to any > desired projection from above list will do the trick? > > Quickly now, I tried to map other projection on whole world as it was > easier not knowing Basemap that well: > > ======================================== > from mpl_toolkits.basemap import Basemap > import matplotlib.pyplot as plt > import urllib2 > > lon1 = -180; lon2 = 180; lat1 = -90; lat2 = 90 > > basemap_url = > "http://server.arcgisonline.com/ArcGIS/rest/services/World_Physical_Map/MapServer/export?\ > bbox=%d,%d,%d,%d&\ > bboxSR=4326&\ > imageSR=54030&\ > size=2000,1000&\ > format=png32&\ > f=image" % (lon1, lat1, lon2, lat2) > > m = Basemap(projection='robin', lon_0=0, resolution='c') > m.imshow(plt.imread(urllib2.urlopen(basemap_url)), origin='upper') > m.drawcoastlines() > plt.gca().axison = False > plt.title("Robinson Projection") > plt.show() > ======================================== > > Seems almost fine ;) ------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users