Background basemaps in Basemap

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 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 :wink:

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.

All right, that's the right way anyway

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.

Yes, and also to pass right `size` parameter as aspect ratio needs to be correct
Do you want me to try to pair both projections (Basemap name and WKID
and WKT as they call it)?

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()

Looks beautifully :slight_smile:

As said later today I'll look at Nokia maps and then will try to look
for WMS servers.

···

On Sun, Aug 26, 2012 at 12:18 AM, Jeff Whitaker <jswhit@...146...> wrote:

As said later today I'll look at Nokia maps and then will try to look
for WMS servers.

Nokia map services are OK, and can be used even without applying for
free account, but they brand every map with their logo even for
professional licence.
REST services (http://api.maps.nokia.com/en/restmaps/overview.html)
are very limited, in one projection and mapped according central point
instead bounding box. They offer
(http://api.maps.nokia.com/en/index.html) other approaches like JS,
JAVA, HTML5 and perhaps some more advanced service can be deduced from
there in Python, but it's not worth perhaps.

BTW I checked one WMS server
(http://wms.jpl.nasa.gov/wms.cgi?request=GetCapabilities). It has
tiling service (GetTileService) and mapping service (GetMap) but only
in standard projection EPSG:4326

Here are maps provided:
1 - WMS Global Mosaic, pan sharpened
2 - WMS Global Mosaic, not pan sharpened
3 - CONUS mosaic of 1990 MRLC dataset
4 - SRTM reflectance magnitude, 30m
5 - Current global view of the earth, morning
6 - Current global view of the earth in the afternoon
7 - Blue Marble Next Generation, Global MODIS derived image
8 - Blue Marble, Global MODIS derived image
9 - SRTM derived global elevation, 3 arc-second, hue mapped
10 - Global 1km elevation, seamless SRTM land elevation and ocean depth
11 - SRTM derived global elevation, 3 arc-second
12 - United States elevation, 30m
13 - Digital Elevation Map of the United States, DTED dataset, 3
second resolution, grayscale
14 - Digital Elevation Map of the United States, DTED dataset, 3
second resolution, hue mapped
15 - ASTER DEM, tiled only, 1.5 arc-second per pixel

Only first two offer international locations (from Landsat)

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.

All right, that's the right way anyway

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.

Yes, and also to pass right `size` parameter as aspect ratio needs to be correct
Do you want me to try to pair both projections (Basemap name and WKID
and WKT as they call it)?

Klo: Since epsg codes comprise a very small subset of possible Basemap projections, it may be better to just allow Basemap to accept an epsg kwarg. That keyword would be required in order to use a WMS to display a map background. This may be tricky though, since Basemap needs more information to define a map projection region than is provided by the epsg code. We may have to start with just a few supported epsg codes and then add more as necessary.

I added a testwms.py example to my fork (https://github.com/jswhit/basemap.git) that shows how to use three different map projections (epsg codes).

-Jeff

-Jeff

···

On 8/26/12 5:44 AM, klo uo wrote:

On Sun, Aug 26, 2012 at 12:18 AM, Jeff Whitaker <jswhit@...146...> wrote:

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()

Looks beautifully :slight_smile:

As said later today I'll look at Nokia maps and then will try to look
for WMS servers.

I'm not sure if I understand projection problem, as arcgis webservice
provides thousands of projections, but then you know better.
I thought that the code will be just one function which would accept
Map name, then coordinates and projection code will be deduced from
Basemap function initiation?

Here is same server from agency where you work according your
signature: maps.ngdc.noaa.gov/rest/services it provides additional
maps on same server as arcgis

I also checked many WMS servers, first with XML editor but then with
Gaia, which was excellent help in determining that many WMS servers
just return their capabilities, but does not provide service as
described in capabilities response. Some offer tilling features, for
possible future interactive zooming in Basemap :wink:

Here is one http://maps.dwd.de/geoserver/wms?request=GetCapabilities&service=WMS&version=1.1.1
which offers bluemarble in many projection. Additionally it offers
some German datasets, but does not offer tilling service.

Perhaps we could look just for servers with get map service but also
tilling support and support for various projections.

···

On Sun, Aug 26, 2012 at 9:56 PM, Jeff Whitaker wrote:

Klo: Since epsg codes comprise a very small subset of possible Basemap
projections, it may be better to just allow Basemap to accept an epsg kwarg.
That keyword would be required in order to use a WMS to display a map
background. This may be tricky though, since Basemap needs more information
to define a map projection region than is provided by the epsg code. We may
have to start with just a few supported epsg codes and then add more as
necessary.

I added a testwms.py example to my fork
(https://github.com/jswhit/basemap.git) that shows how to use three
different map projections (epsg codes).

Klo: Since epsg codes comprise a very small subset of possible Basemap
projections, it may be better to just allow Basemap to accept an epsg kwarg.
That keyword would be required in order to use a WMS to display a map
background. This may be tricky though, since Basemap needs more information
to define a map projection region than is provided by the epsg code. We may
have to start with just a few supported epsg codes and then add more as
necessary.

I added a testwms.py example to my fork
(https://github.com/jswhit/basemap.git) that shows how to use three
different map projections (epsg codes).

I'm not sure if I understand projection problem, as arcgis webservice
provides thousands of projections, but then you know better.
I thought that the code will be just one function which would accept
Map name, then coordinates and projection code will be deduced from
Basemap function initiation?

Klo: WMS servers use EPSG codes to define map projections - Basemap uses a set of kwargs. We need some way of inferring epsg codes from the Basemap kwargs. Alternatively, we could extend Basemap so it can accept EPSG codes. But, there are many EPSG codes that don't correspond to allowable Basemap projections, and valid Basemap projections that don't correspond to EPSG codes. It's not obvious to me how to proceed.

Here is same server from agency where you work according your
signature: maps.ngdc.noaa.gov/rest/services it provides additional
maps on same server as arcgis

I also checked many WMS servers, first with XML editor but then with
Gaia, which was excellent help in determining that many WMS servers
just return their capabilities, but does not provide service as
described in capabilities response. Some offer tilling features, for
possible future interactive zooming in Basemap :wink:

Maybe it's better not have the function accept a OWSLib wms object - that way we don't have to tie ourselves to a particular WMS server.

-Jeff

···

On 8/26/12 9:07 PM, klo uo wrote:

On Sun, Aug 26, 2012 at 9:56 PM, Jeff Whitaker wrote:

Here is one http://maps.dwd.de/geoserver/wms?request=GetCapabilities&service=WMS&version=1.1.1
which offers bluemarble in many projection. Additionally it offers
some German datasets, but does not offer tilling service.

Perhaps we could look just for servers with get map service but also
tilling support and support for various projections.

------------------------------------------------------------------------------
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

Thanks for explaining Jeff, but aren't we using arcgis REST service
which accepts more then 4500 projections? Are you saying Basemap
offers projection that's not listed here:
http://atlas.resources.ca.gov/arcgis/SDK/REST/gcs.html

EPSG codes may be important to WMS. And providing WMS feature is maybe
question how. Any GIS tool has WMS service support. Some WMS servers
provide tiling capabilities and that also can be considered for future
feature of fast zooming in Basemap. Most of them seem to offer just
EPSG:4326 and there are servers with many projections (not as many as
arcgis REST service)
But at this point of static map servers we can just use urllib module
and do requested WMS function which will return the map without using
any additional function or package

I'm validating public WMS servers and these days I'll report again. As
mentioned many simply aren't working, many are localized, etc.
Hope will find nice usage for some selected

···

On Mon, Aug 27, 2012 at 2:34 PM, Jeff Whitaker wrote:

Klo: WMS servers use EPSG codes to define map projections - Basemap uses a
set of kwargs. We need some way of inferring epsg codes from the Basemap
kwargs. Alternatively, we could extend Basemap so it can accept EPSG codes.
But, there are many EPSG codes that don't correspond to allowable Basemap
projections, and valid Basemap projections that don't correspond to EPSG
codes. It's not obvious to me how to proceed.

Here is same server from agency where you work according your
signature: maps.ngdc.noaa.gov/rest/services it provides additional
maps on same server as arcgis

I also checked many WMS servers, first with XML editor but then with
Gaia, which was excellent help in determining that many WMS servers
just return their capabilities, but does not provide service as
described in capabilities response. Some offer tilling features, for
possible future interactive zooming in Basemap :wink:

Maybe it's better not have the function accept a OWSLib wms object - that
way we don't have to tie ourselves to a particular WMS server.

We have a WMS server that uses basemap to display unstructured ocean model data. We just limit the set of projections to a select few (just the most common ones), and have a mapping between EPSG and the required Basemap kwargs. It sometimes requires some implementation of proj4 prior to getting to the Basemap part of the code. I can see that it could be useful and not to difficult to add an EPSG kwarg for a few most common projections and how they would be used by Basemap users.

Alexander Crosby

RPS-ASA

···

On Mon, 2012-08-27 at 06:34 -0600, Jeff Whitaker wrote:

On 8/26/12 9:07 PM, klo uo wrote:
> On Sun, Aug 26, 2012 at 9:56 PM, Jeff Whitaker wrote:
>> Klo: Since epsg codes comprise a very small subset of possible Basemap
>> projections, it may be better to just allow Basemap to accept an epsg kwarg.
>> That keyword would be required in order to use a WMS to display a map
>> background. This may be tricky though, since Basemap needs more information
>> to define a map projection region than is provided by the epsg code. We may
>> have to start with just a few supported epsg codes and then add more as
>> necessary.
>>
>> I added a testwms.py example to my fork
>> ([https://github.com/jswhit/basemap.git](https://github.com/jswhit/basemap.git)
) that shows how to use three
>> different map projections (epsg codes).
> I'm not sure if I understand projection problem, as arcgis webservice
> provides thousands of projections, but then you know better.
> I thought that the code will be just one function which would accept
> Map name, then coordinates and projection code will be deduced from
> Basemap function initiation?
Klo: WMS servers use EPSG codes to define map projections - Basemap uses a set of kwargs. We need some way of inferring epsg codes from the Basemap kwargs. Alternatively, we could extend Basemap so it can accept EPSG codes. But, there are many EPSG codes that don't correspond to allowable Basemap projections, and valid Basemap projections that don't correspond to EPSG codes. It's not obvious to me how to proceed.
>
> Here is same server from agency where you work according your
> signature: maps.ngdc.noaa.gov/rest/services it provides additional
> maps on same server as arcgis
>
> I also checked many WMS servers, first with XML editor but then with
> Gaia, which was excellent help in determining that many WMS servers
> just return their capabilities, but does not provide service as
> described in capabilities response. Some offer tilling features, for
> possible future interactive zooming in Basemap ;)
Maybe it's better not have the function accept a OWSLib wms object - that way we don't have to tie ourselves to a particular WMS server.
-Jeff
>
> Here is one [http://maps.dwd.de/geoserver/wms?request=GetCapabilities&service=WMS&version=1.1.1](http://maps.dwd.de/geoserver/wms?request=GetCapabilities&service=WMS&version=1.1.1)
> which offers bluemarble in many projection. Additionally it offers
> some German datasets, but does not offer tilling service.
>
> Perhaps we could look just for servers with get map service but also
> tilling support and support for various projections.
>
> ------------------------------------------------------------------------------
> 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/](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](https://lists.sourceforge.net/lists/listinfo/matplotlib-users)


------------------------------------------------------------------------------
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/](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](https://lists.sourceforge.net/lists/listinfo/matplotlib-users)

Klo: WMS servers use EPSG codes to define map projections - Basemap uses a
set of kwargs. We need some way of inferring epsg codes from the Basemap
kwargs. Alternatively, we could extend Basemap so it can accept EPSG codes.
But, there are many EPSG codes that don't correspond to allowable Basemap
projections, and valid Basemap projections that don't correspond to EPSG
codes. It's not obvious to me how to proceed.

Here is same server from agency where you work according your
signature: maps.ngdc.noaa.gov/rest/services it provides additional
maps on same server as arcgis

I also checked many WMS servers, first with XML editor but then with
Gaia, which was excellent help in determining that many WMS servers
just return their capabilities, but does not provide service as
described in capabilities response. Some offer tilling features, for
possible future interactive zooming in Basemap :wink:

Maybe it's better not have the function accept a OWSLib wms object - that
way we don't have to tie ourselves to a particular WMS server.

Thanks for explaining Jeff, but aren't we using arcgis REST service
which accepts more then 4500 projections? Are you saying Basemap
offers projection that's not listed here:
http://atlas.resources.ca.gov/arcgis/SDK/REST/gcs.html

Klo: Yes. And vice versa, some of those 4500 projections aren't supported by Basemap.

Anyway, I went ahead and created a prototype 'wmsmap' method. You can try it by cloning my fork (https://github.com/jswhit/basemap) and running examples/testwms.py. I created an extra kward 'epsg' for creating Basemap instances. To use the wmsmap function, you have to use that keyword. Give it a try and let me know what you think.

-Jeff

···

On 8/27/12 11:24 AM, klo uo wrote:

On Mon, Aug 27, 2012 at 2:34 PM, Jeff Whitaker wrote:

EPSG codes may be important to WMS. And providing WMS feature is maybe
question how. Any GIS tool has WMS service support. Some WMS servers
provide tiling capabilities and that also can be considered for future
feature of fast zooming in Basemap. Most of them seem to offer just
EPSG:4326 and there are servers with many projections (not as many as
arcgis REST service)
But at this point of static map servers we can just use urllib module
and do requested WMS function which will return the map without using
any additional function or package

I'm validating public WMS servers and these days I'll report again. As
mentioned many simply aren't working, many are localized, etc.
Hope will find nice usage for some selected

------------------------------------------------------------------------------
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

--
Jeffrey S. Whitaker Phone : (303)497-6313
Meteorologist FAX : (303)497-6449
NOAA/OAR/PSD R/PSD1 Email : Jeffrey.S.Whitaker@...259...
325 Broadway Office : Skaggs Research Cntr 1D-113
Boulder, CO, USA 80303-3328 Web : http://tinyurl.com/5telg

Jeff it looks great, everything is parametrized including server name
and map name, so it should work for any additional service.
However on Windows with Python 2.7 and Basemap 1.0.5 I get an error
while trying to run the script:

···

On Mon, Aug 27, 2012 at 9:32 PM, Jeff Whitaker wrote:

Klo: Yes. And vice versa, some of those 4500 projections aren't supported
by Basemap.

Anyway, I went ahead and created a prototype 'wmsmap' method. You can try it
by cloning my fork (https://github.com/jswhit/basemap) and running
examples/testwms.py. I created an extra kward 'epsg' for creating Basemap
instances. To use the wmsmap function, you have to use that keyword. Give
it a try and let me know what you think.

========================================
Traceback (most recent call last):
  File "testwms.py", line 39, in <module>
    m=Basemap2(epsg=epsg,resolution='h',width=width,height=height)
TypeError: __init__() got an unexpected keyword argument 'epsg'

I than added initial empty "epsg" arg to original Basemap class
declaration, but then after some time processing I get:

warning: width and height keywords ignored for Cylindrical Equidistant
projectionEPSG:
Traceback (most recent call last):
  File "testwms.py", line 47, in <module>
    m.drawparallels(np.arange(0,80,1),labels=[1,0,0,0])
  File "testwms.py", line 15, in wmsmap
    if not hasattr(self,'epsg'):
AttributeError: 'Basemap2' object has no attribute 'epsg'

So I leave it for now and assume it's some tiny issue not obvious at
this time to me.

I'll continue WMS search, but yesterday I spent couple of hours just
to look at those beautiful maps provided on arcgis server. I explored
on all and it's so nicely done and with high resolution zoom. They are
annotated though, but again, see i.e. Ocean Basemap, or overlay with
transparency over some more colored topo map like GEBCO_08 from
maps.ngdc.noaa.gov server - just great. World Topo also...

Klo: Yes. And vice versa, some of those 4500 projections aren't supported
by Basemap.

Anyway, I went ahead and created a prototype 'wmsmap' method. You can try it
by cloning my fork (https://github.com/jswhit/basemap) and running
examples/testwms.py. I created an extra kward 'epsg' for creating Basemap
instances. To use the wmsmap function, you have to use that keyword. Give
it a try and let me know what you think.

Jeff it looks great, everything is parametrized including server name
and map name, so it should work for any additional service.
However on Windows with Python 2.7 and Basemap 1.0.5 I get an error
while trying to run the script:

Klo: Just added a pull request for this

https://github.com/matplotlib/basemap/pull/73

Regarding your windows error - you have to rebuild basemap to get the needed updates (it's not just a matter of running the testwms.py script).

-Jeff

···

On 8/28/12 9:56 AM, klo uo wrote:

On Mon, Aug 27, 2012 at 9:32 PM, Jeff Whitaker wrote:

Traceback (most recent call last):
   File "testwms.py", line 39, in <module>
     m=Basemap2(epsg=epsg,resolution='h',width=width,height=height)
TypeError: __init__() got an unexpected keyword argument 'epsg'

I than added initial empty "epsg" arg to original Basemap class
declaration, but then after some time processing I get:

warning: width and height keywords ignored for Cylindrical Equidistant
projectionEPSG:
Traceback (most recent call last):
   File "testwms.py", line 47, in <module>
     m.drawparallels(np.arange(0,80,1),labels=[1,0,0,0])
   File "testwms.py", line 15, in wmsmap
     if not hasattr(self,'epsg'):
AttributeError: 'Basemap2' object has no attribute 'epsg'

So I leave it for now and assume it's some tiny issue not obvious at
this time to me.

I'll continue WMS search, but yesterday I spent couple of hours just
to look at those beautiful maps provided on arcgis server. I explored
on all and it's so nicely done and with high resolution zoom. They are
annotated though, but again, see i.e. Ocean Basemap, or overlay with
transparency over some more colored topo map like GEBCO_08 from
maps.ngdc.noaa.gov server - just great. World Topo also...

------------------------------------------------------------------------------
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

--
Jeffrey S. Whitaker Phone : (303)497-6313
Meteorologist FAX : (303)497-6449
NOAA/OAR/PSD R/PSD1 Email : Jeffrey.S.Whitaker@...259...
325 Broadway Office : Skaggs Research Cntr 1D-113
Boulder, CO, USA 80303-3328 Web : http://tinyurl.com/5telg

Jeff it looks great, everything is parametrized including server name
and map name, so it should work for any additional service.
However on Windows with Python 2.7 and Basemap 1.0.5 I get an error
while trying to run the script:

Klo: Just added a pull request for this

https://github.com/matplotlib/basemap/pull/73

Regarding your windows error - you have to rebuild basemap to get the needed
updates (it's not just a matter of running the testwms.py script).

Thanks will do that right now.

I was just investigating possibility of returning clear map without
annotations where it is possible.
For example World_Topo_Map
(http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer)
has additional layers and according layers parameter in export
function (http://atlas.resources.ca.gov/arcgis/SDK/REST/export.html):

···

========================================
Description: Determines which layers appear on the exported map. There
are four ways to specify which layers are shown:

    show: Only the layers specified in this list will be exported.
    hide: All layers except those specified in this list will be exported.
    include: In addition to the layers exported by default, the layers
specified in this list will be exported.
    exclude: The layers exported by default excluding those specified
in this list will be exported.

Syntax: [show | hide | include | exclude]:layerId1,layerId2
where layerId1, layerId2are the layer ids returned by the map service resource

Example: layers=show:2,4,7

if we add additional parameter "&layers=hide:5,6,7,8,9" I expected
annotations to be gone, but unfortunately not there yet

Will look further if it's somehow possible to clear annotations.

Jeff, I just thought to mention this: function name "wmsmap" maybe
should be changed to "restmap" as for WMS servers will need to do
another template. Here is example urllib call for sample WMS function
GetMap:

···

========================================
basemap_url = "\
http://geonetwork3.fao.org/ows/14097?\
request=GetMap&\
service=WMS&\
version=1.1.1&\
layers=country_bnd&\
format=image/svg%2Bxml&\
bgcolor=0xFFFFFF&\
transparent=TRUE&\
srs=EPSG:4326&\
bbox=-180,-137.464503042596,180,137.464503042596&\
width=986&\
height=753\
"

Jeff, I just thought to mention this: function name "wmsmap" maybe
should be changed to "restmap" as for WMS servers will need to do
another template. Here is example urllib call for sample WMS function
GetMap:

Klo: Let's move this discussion over to the pull request

https://github.com/matplotlib/basemap/pull/73

-Jeff

···

On 8/28/12 12:09 PM, klo uo wrote:

========================================
basemap_url = "\
http://geonetwork3.fao.org/ows/14097?\
request=GetMap&\
service=WMS&\
version=1.1.1&\
layers=country_bnd&\
format=image/svg%2Bxml&\
bgcolor=0xFFFFFF&\
transparent=TRUE&\
srs=EPSG:4326&\
bbox=-180,-137.464503042596,180,137.464503042596&\
width=986&\
height=753\
"

--
Jeffrey S. Whitaker Phone : (303)497-6313
Meteorologist FAX : (303)497-6449
NOAA/OAR/PSD R/PSD1 Email : Jeffrey.S.Whitaker@...259...
325 Broadway Office : Skaggs Research Cntr 1D-113
Boulder, CO, USA 80303-3328 Web : http://tinyurl.com/5telg