ipyleaflet icon indicating copy to clipboard operation
ipyleaflet copied to clipboard

Querying ImageServer APIs that don't have WMS or tile servers

Open tsutterley opened this issue 2 years ago • 3 comments

Would it be possible to build a class to query ESRI ImageServer APIs (similar to an ImageMapLayer within ESRI leaflet)? I am wishing to query the Reference Elevation Map of Antarctica (REMA) and ArcticDEM that are both available through ESRI. While ArcticDEM does have a hillshade map available through WMS, there are many more layers available through the ImageServer. As far as I can tell, the capability to query these servers is currently missing in ipyleaflet.

The procedure would be to build a querying string with the bbox of the current map and a few parameters for the ImageServer API. I think it would be similar to the ImageOverlay class.

The complete list of parameters are:

  • 'bbox': bounding box for reducing image
  • 'size': width and height of the output image
  • 'f': response format ('image' streams the bytes directly)
  • 'format': image format (e.g. 'png')
  • 'transparent': transparency
  • 'bboxSR': EPSG code of the bounding box
  • 'imageSR': EPSG code of the output image (here the leaflet map projection)
  • 'pixelType': data type of the raster image (e.g. 'F32')
  • 'interpolation': method for interpolating to output
  • 'compressionQuality': lossy quality if using jpeg
  • 'bandIds': bands (and order of bands) to export
  • 'noData': pixel value representing no data
  • 'noDataInterpretation': how to interpret no data (all bands or single band)
  • 'renderingRule': rules (json) for rendering
  • 'mosaicRule': rules (json) for mosaicking
  • 'time': time instance or extent for image (unix time)

An example querying string is below. https://elevation2.arcgis.com/arcgis/rest/services/Polar/AntarcticDEM/ImageServer/exportImage?bbox=-104.86324392412149%2C+-82.5699189540039%2C+-96.80920292433169%2C+-71.52713368167746&bboxSR=4326&imageSR=3031&format=png&pixelType=F32&f=image which renders:

tsutterley avatar Mar 01 '22 02:03 tsutterley

Hi @tsutterley, I see you added Esri Arctic and Antarctic Basemaps to xyzservices, nice! Did you manage to show them with ipyleaflet? You can have a look at #612 for more information about custom projections. But yes I think it could be interesting to query ESRI ImageServer APIs, that would allow to visualize a lot of new data. Would you like to open a PR? We can help you with the ipyleaflet code base.

davidbrochart avatar Mar 01 '22 02:03 davidbrochart

Hi @davidbrochart, thanks!

Yes! I did get them working in ipyleaflet. I was working off #612 (which helped a lot), and ended up making EPSG3031 a Bunch object containing the resolutions of the different tile layers. I also needed to change the projection names (where they were an EPSG code) to include the colon (e.g. 'EPSG:3031'). I was planning on putting in a PR here with those changes once there was a new release of xyzservices.

For now, I'll open a PR to start with the ImageServer API work :+1:

tsutterley avatar Mar 01 '22 17:03 tsutterley

Just looking at this, great work @tsutterley! I really like those ESRI basemaps.

betolink avatar Jun 05 '22 06:06 betolink