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
···
On 8/25/12 3:08 PM, klo uo wrote:
On Sat, Aug 25, 2012 at 10:19 PM, Jeff Whitaker <jswhit@...146...> wrote:
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 urllib2lon1 = -180; lon2 = 180; lat1 = -90; lat2 = 90
basemap_url = "Export Map (World_Physical_Map)
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