EO-me goes OpenSearch

EO-me – the Earth Observation Metadata Enhancer platform developed by mundialis enriches the footprints of Sentinel-2 and Landsat-8 scenes with new metadata including scene characterisations like average temperature, precipitation sums, land cover classes and human population of each tile and even dynamic values like the average NDVI at overpass time. Furthermore, EO-me allows users to filter satellite scenes based on their metadata through user defined thresholds.

Until now the EO-me data could be browsed and filtered via the graphical interface of our web application. Now EO-me can also be queried with any OpenSearch client implementation! OpenSearch is a collection of technologies based on XML for describing a search engine so search requests can be formulated in a standardized way as well as a predefined way of sharing search results which are displayed in a standardized and machine-readable format.

This blog post explains how to…

 

Initialize Search

If you are using a browser which supports OpenSearch, simply visit https://eome.mundialis.de and a hint will appear in the browser that you can add EO-me as a new search engine. This hint might appear as a plus sign near the search icon in your status bar. Follow this hint to add EO-me as your new satellite data search engine. If your browser does not support the integration or you would like to use the OpenSearch API programmatically, you can reach the OpenSearch API at https://eome.mundialis.de/eome/opensearch.action?q=. How to formulate search requests is explained below. According to the OpenSearch specification, the OpenSearch description document can be used to describe the web interface of a search engine. It is found at https://eome.mundialis.de/eome/opensearch.xml. The document helps to formulate search requests. Within it you can find the tag „Url“ with the template attribute. It describes the query string of the search request with the following parameters:

  • q – required. Can be empty to return all results or a valid ECQL-Filter to filter results
  • startIndex – default value: 0
  • count – default value: 25

 

Formulate search requests

To query EO-me OpenSearch, the ECQL (Extended Common Query Language) format is used. ECQL provides a more compact and readable syntax compared to OGC XML filters. For more details look at the ECQL documentation. It explains how to formulate various predicates e.g. to compare expressions. An expression can be an attribute, literal, or computed value. If attributes are compared with literals, have a look at our Data Documentation or the more compact CSV file where we list all available attributes with their data types. The data type needs to be known when formulating requests, e.g. the literal compared with an attribute of the data type string must be delimited by single quotes. It is also possible to formulate spatial predicates with the attribute „wkb_geometry“ or temporal predicates with the attribute „sensing_time“.

 

Searching

If you are using a browser which supports OpenSearch, type your ECQL-Filter directly into the search bar and select the EO-me search.
If your browser does not support the integration or you would like to use the OpenSearch API programmatically, follow the Url template from the description document. Replace the values in curly brackets with your request values, e.g. enter your ECQL-Filter behind the parameter “q=”.

 

Example requests

Here are some example requests:

Comments Browser search field URL
simple comparison filter satellite=’sentinel2′
https://eome.mundialis.de/eome/opensearch.action?q=satellite%3D%27sentinel2%27
set start index and number of results returned
https://eome.mundialis.de/eome/opensearch.action?q=satellite%3D%27sentinel2%27&startIndex=0&count=10
set output format to application/json https://eome.mundialis.de/eome/opensearch.action?q=satellite%3D%27sentinel2%27&format=application/json
filter with time attribute sensing_time=2016-12-06T02:01:12Z
https://eome.mundialis.de/eome/opensearch.action?q=sensing_time%3D2016-12-06T02:01:12Z
filter between time attributes sensing_time BETWEEN 2017-12-13 AND 2017-12-14
https://eome.mundialis.de/eome/opensearch.action?q=sensing_time%20BETWEEN%202017-12-13%20AND%202017-12-14
chain filter with AND resolution=100 AND soil_podzols>=841 AND satellite=’landsat8′ https://eome.mundialis.de/eome/opensearch.action? q=resolution%3D100%20AND%20soil_podzols%3E%3D841%20AND%20satellite%3D%27landsat8%27
filter with geometry functions INTERSECTS(wkb_geometry, POINT (5488045 9675519)) https://eome.mundialis.de/eome/opensearch.action?q=INTERSECTS(wkb_geometry,%20POINT%20(5488045%209675519))
filter with bounding box BBOX(wkb_geometry, 16.005, 48.0408, 16.7686, 48.4585, ‚EPSG:4326‘) https://eome.mundialis.de/eome/opensearch.action?q=BBOX(wkb_geometry,16.005,48.0408,16.7686,48.4585,%27EPSG:4326%27)

 

The example request https://eome.mundialis.de/eome/opensearch.action?q=satellite%3D%27landsat8%27&count=1 will return a response that looks like this:

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="https://www.w3.org/2005/Atom" xmlns:opensearch="https://a9.com/-/spec/opensearch/1.1/" xmlns:dc="https://purl.org/dc/elements/1.1/">
  <title>EO-me search results for: satellite='landsat8'</title>
  <link rel="alternate" type="application/atom+xml" href="https://eome.mundialis.de/eome/opensearch.action?q=satellite='landsat8'&amp;startIndex=0&amp;count=1" />
  <link rel="self" type="application/atom+xml" href="https://eome.mundialis.de/eome/opensearch.action?q=satellite%3D%27landsat8%27&amp;count=1" />
  <link rel="first" type="application/atom+xml" href="https://eome.mundialis.de/eome/opensearch.action?q=satellite='landsat8'&amp;startIndex=0&amp;count=1" />
  <link rel="next" type="application/atom+xml" href="https://eome.mundialis.de/eome/opensearch.action?q=satellite='landsat8'&amp;startIndex=1&amp;count=1" />
  <link rel="last" type="application/atom+xml" href="https://eome.mundialis.de/eome/opensearch.action?q=satellite='landsat8'&amp;startIndex=136190&amp;count=1" />
  <subtitle>Displaying 0 to 0 of 136191 total results</subtitle>
  <id>https://eome.mundialis.de/eome/opensearch.action?q=satellite%3D%27landsat8%27&amp;count=1</id>
  <updated>2018-01-03T09:33:04Z</updated>
  <dc:creator>mundialis GmbH &amp; Co. KG</dc:creator>
  <dc:date>2018-01-03T09:33:04Z</dc:date>
  <opensearch:itemsPerPage>1</opensearch:itemsPerPage>
  <opensearch:totalResults>136191</opensearch:totalResults>
  <opensearch:startIndex>1</opensearch:startIndex>
  <opensearch:Query role="request" searchTerms="satellite='landsat8'" startPage="1" />
  <opensearch:link rel="search" type="application/opensearchdescription+xml" href="https://eome.mundialis.de/eome/opensearch.xml" />
  <entry>
    <title>LC08_L1TP_196044_20180101_20180101_01_RT_MTI</title>
    <link rel="alternate" type="application/atom+xml" href="https://eome.mundialis.de/eome/opensearch.action?q=title%3D%27LC08_L1TP_196044_20180101_20180101_01_RT_MTI%27" title="ATOM XML link for LC08_L1TP_196044_20180101_20180101_01_RT_MTI" />
    <link rel="alternate" type="application/json" href="https://eome.mundialis.de/eome/opensearch.action?q=title%3D%27LC08_L1TP_196044_20180101_20180101_01_RT_MTI%27&amp;format%3Dapplication%2Fjson" title="JSON link for LC08_L1TP_196044_20180101_20180101_01_RT_MTI" />
    <link rel="enclosure" type="text/html" href="https://eome.mundialis.de/eome/product/download/l8.action?title=LC08_L1TP_196044_20180101_20180101_01_RT_MTI" title="Download index for LC08_L1TP_196044_20180101_20180101_01_RT_MTI" />
    <link rel="icon" href="https://eome.mundialis.de/eome/product/quicklook/l8.action?title=LC08_L1TP_196044_20180101_20180101_01_RT_MTI" title="Quicklook image for LC08_L1TP_196044_20180101_20180101_01_RT_MTI" />
    <author>
      <name />
    </author>
    <id>LC08_L1TP_196044_20180101_20180101_01_RT_MTI</id>
    <updated>2018-01-01T10:41:06Z</updated>
    <content type="application/xml">
      <eome:id xmlns:eome="eome">2508</eome:id>
      <eome:title xmlns:eome="eome">LC08_L1TP_196044_20180101_20180101_01_RT_MTI</eome:title>
      <eome:platform xmlns:eome="eome">LANDSAT8</eome:platform>
      <eome:sensing_time xmlns:eome="eome">2018-01-01T09:29:36Z</eome:sensing_time>
      <eome:cloudcover xmlns:eome="eome">32.62</eome:cloudcover>
      <eome:thumbnail xmlns:eome="eome">https://eome.mundialis.de/eome/product/quicklook/l8.action?title=LC08_L1TP_196044_20180101_20180101_01_RT_MTI</eome:thumbnail>
      <eome:download xmlns:eome="eome">https://eome.mundialis.de/eome/product/download/l8.action?title=LC08_L1TP_196044_20180101_20180101_01_RT_MTI</eome:download>
      <eome:filename xmlns:eome="eome">LC08_L1TP_196044_20180101_20180101_01_RT_MTI</eome:filename>
      <eome:area xmlns:eome="eome">49207.05764050774</eome:area>
      <eome:processinglevel xmlns:eome="eome">LEVEL1TP</eome:processinglevel>
      <eome:resolution xmlns:eome="eome">100.0</eome:resolution>
      <eome:sensormode xmlns:eome="eome" />
      <eome:productidentifier xmlns:eome="eome">/eodata/Landsat-8/OLI_TIRS/L1TP/2018/01/01/LC08_L1TP_196044_20180101_20180101_01_RT_MTI</eome:productidentifier>
      <eome:producttype xmlns:eome="eome">L1TP</eome:producttype>
      <eome:snowcover xmlns:eome="eome">0.0</eome:snowcover>
      <eome:published xmlns:eome="eome">2018-01-01T11:41:06Z</eome:published>
      <eome:collection xmlns:eome="eome">Landsat8</eome:collection>
      <eome:completiondate xmlns:eome="eome">2018-01-01T09:29:36Z</eome:completiondate>
      <eome:instrument xmlns:eome="eome">OLI_TIRS</eome:instrument>
      <eome:updated xmlns:eome="eome">2018-01-01T11:41:06Z</eome:updated>
      <eome:orbitnumber xmlns:eome="eome">0</eome:orbitnumber>
      <eome:bands xmlns:eome="eome">12</eome:bands>
      <eome:path xmlns:eome="eome">196</eome:path>
      <eome:row xmlns:eome="eome">44</eome:row>
      <eome:sunazimuth xmlns:eome="eome">151.22663962</eome:sunazimuth>
      <eome:sunelevation xmlns:eome="eome">38.22132488</eome:sunelevation>
      <eome:satellite xmlns:eome="eome">landsat8</eome:satellite>
      <eome:wkb_geometry xmlns:eome="eome">
        <gml:Polygon xmlns:gml="https://www.opengis.net/gml" srsName="urn:x-ogc:def:crs:EPSG:3857" srsDimension="2">
          <gml:exterior>
            <gml:LinearRing>
              <gml:posList>-205312.10284457 2773219.54065824 39706.54917105 2769247.43730284 34266.36565599 2530145.03554837 -207188.94945935 2533703.14493165 -205312.10284457 2773219.54065824</gml:posList>
            </gml:LinearRing>
          </gml:exterior>
        </gml:Polygon>
      </eome:wkb_geometry>
      <eome:dem_gmted xmlns:eome="eome">323.228228711088</eome:dem_gmted>
      <eome:pop_jrc xmlns:eome="eome">0.0</eome:pop_jrc>
      <eome:prec_cmean xmlns:eome="eome">17.2298126933444</eome:prec_cmean>
      <eome:temp_cmax xmlns:eome="eome">37.7294524836834</eome:temp_cmax>
      <eome:temp_cmean xmlns:eome="eome">27.2053048355524</eome:temp_cmean>
      <eome:temp_cmin xmlns:eome="eome">15.1035113899615</eome:temp_cmin>
      <eome:ndvi_modis xmlns:eome="eome">0.0</eome:ndvi_modis>
      <eome:lulc_globc_croppofl xmlns:eome="eome">0</eome:lulc_globc_croppofl>
      <eome:lulc_globc_croprain xmlns:eome="eome">0</eome:lulc_globc_croprain>
      <eome:lulc_globc_moscrove xmlns:eome="eome">0</eome:lulc_globc_moscrove>
      <eome:lulc_globc_mosvegcr xmlns:eome="eome">0</eome:lulc_globc_mosvegcr>
      <eome:lulc_globc_fobrevde xmlns:eome="eome">0</eome:lulc_globc_fobrevde>
      <eome:lulc_globc_foclbrde xmlns:eome="eome">0</eome:lulc_globc_foclbrde>
      <eome:lulc_globc_foopbrde xmlns:eome="eome">0</eome:lulc_globc_foopbrde>
      <eome:lulc_globc_foclneev xmlns:eome="eome">0</eome:lulc_globc_foclneev>
      <eome:lulc_globc_foopne xmlns:eome="eome">0</eome:lulc_globc_foopne>
      <eome:lulc_globc_fomibrne xmlns:eome="eome">0</eome:lulc_globc_fomibrne>
      <eome:lulc_globc_mosforgr xmlns:eome="eome">0</eome:lulc_globc_mosforgr>
      <eome:lulc_globc_mosgrafo xmlns:eome="eome">0</eome:lulc_globc_mosgrafo>
      <eome:lulc_globc_shrub xmlns:eome="eome">0</eome:lulc_globc_shrub>
      <eome:lulc_globc_herbaveg xmlns:eome="eome">0</eome:lulc_globc_herbaveg>
      <eome:lulc_globc_sparse xmlns:eome="eome">0</eome:lulc_globc_sparse>
      <eome:lulc_globc_foregflo xmlns:eome="eome">0</eome:lulc_globc_foregflo>
      <eome:lulc_globc_foperflo xmlns:eome="eome">0</eome:lulc_globc_foperflo>
      <eome:lulc_globc_grregflo xmlns:eome="eome">0</eome:lulc_globc_grregflo>
      <eome:lulc_globc_urban xmlns:eome="eome">0</eome:lulc_globc_urban>
      <eome:lulc_globc_bare xmlns:eome="eome">48983</eome:lulc_globc_bare>
      <eome:lulc_globc_water xmlns:eome="eome">0</eome:lulc_globc_water>
      <eome:lulc_globc_ice xmlns:eome="eome">0</eome:lulc_globc_ice>
      <eome:lulc_globc_nodata xmlns:eome="eome">0</eome:lulc_globc_nodata>
      <eome:lulc_modis_water xmlns:eome="eome">0</eome:lulc_modis_water>
      <eome:lulc_modis_evneefor xmlns:eome="eome">0</eome:lulc_modis_evneefor>
      <eome:lulc_modis_evbrofor xmlns:eome="eome">0</eome:lulc_modis_evbrofor>
      <eome:lulc_modis_deneefor xmlns:eome="eome">0</eome:lulc_modis_deneefor>
      <eome:lulc_modis_debrofor xmlns:eome="eome">0</eome:lulc_modis_debrofor>
      <eome:lulc_modis_mixfores xmlns:eome="eome">0</eome:lulc_modis_mixfores>
      <eome:lulc_modis_shrubclo xmlns:eome="eome">0</eome:lulc_modis_shrubclo>
      <eome:lulc_modis_shrubope xmlns:eome="eome">0</eome:lulc_modis_shrubope>
      <eome:lulc_modis_savanwoo xmlns:eome="eome">0</eome:lulc_modis_savanwoo>
      <eome:lulc_modis_savanna xmlns:eome="eome">0</eome:lulc_modis_savanna>
      <eome:lulc_modis_grass xmlns:eome="eome">0</eome:lulc_modis_grass>
      <eome:lulc_modis_wetland xmlns:eome="eome">0</eome:lulc_modis_wetland>
      <eome:lulc_modis_cropland xmlns:eome="eome">0</eome:lulc_modis_cropland>
      <eome:lulc_modis_urban xmlns:eome="eome">0</eome:lulc_modis_urban>
      <eome:lulc_modis_mosaic xmlns:eome="eome">0</eome:lulc_modis_mosaic>
      <eome:lulc_modis_ice xmlns:eome="eome">0</eome:lulc_modis_ice>
      <eome:lulc_modis_sparse xmlns:eome="eome">49102</eome:lulc_modis_sparse>
      <eome:lulc_modis_unclassi xmlns:eome="eome">0</eome:lulc_modis_unclassi>
      <eome:lulc_modis_fill xmlns:eome="eome">0</eome:lulc_modis_fill>
      <eome:soil_acrisols xmlns:eome="eome">0</eome:soil_acrisols>
      <eome:soil_albeluvisols xmlns:eome="eome">0</eome:soil_albeluvisols>
      <eome:soil_alisols xmlns:eome="eome">0</eome:soil_alisols>
      <eome:soil_andosols xmlns:eome="eome">0</eome:soil_andosols>
      <eome:soil_arenosols xmlns:eome="eome">48971</eome:soil_arenosols>
      <eome:soil_calcisols xmlns:eome="eome">0</eome:soil_calcisols>
      <eome:soil_cambisols xmlns:eome="eome">0</eome:soil_cambisols>
      <eome:soil_chernozems xmlns:eome="eome">0</eome:soil_chernozems>
      <eome:soil_cryosols xmlns:eome="eome">0</eome:soil_cryosols>
      <eome:soil_durisols xmlns:eome="eome">0</eome:soil_durisols>
      <eome:soil_ferralsols xmlns:eome="eome">0</eome:soil_ferralsols>
      <eome:soil_fluvisols xmlns:eome="eome">0</eome:soil_fluvisols>
      <eome:soil_gleysols xmlns:eome="eome">0</eome:soil_gleysols>
      <eome:soil_gypsisols xmlns:eome="eome">0</eome:soil_gypsisols>
      <eome:soil_histosols xmlns:eome="eome">0</eome:soil_histosols>
      <eome:soil_kastanozems xmlns:eome="eome">0</eome:soil_kastanozems>
      <eome:soil_leptosols xmlns:eome="eome">9</eome:soil_leptosols>
      <eome:soil_lixisols xmlns:eome="eome">0</eome:soil_lixisols>
      <eome:soil_luvisols xmlns:eome="eome">0</eome:soil_luvisols>
      <eome:soil_nitisols xmlns:eome="eome">0</eome:soil_nitisols>
      <eome:soil_phaeozems xmlns:eome="eome">0</eome:soil_phaeozems>
      <eome:soil_planosols xmlns:eome="eome">0</eome:soil_planosols>
      <eome:soil_plinthosols xmlns:eome="eome">0</eome:soil_plinthosols>
      <eome:soil_podzols xmlns:eome="eome">0</eome:soil_podzols>
      <eome:soil_regosols xmlns:eome="eome">0</eome:soil_regosols>
      <eome:soil_solonchaks xmlns:eome="eome">0</eome:soil_solonchaks>
      <eome:soil_solonetz xmlns:eome="eome">0</eome:soil_solonetz>
      <eome:soil_stagnosols xmlns:eome="eome">0</eome:soil_stagnosols>
      <eome:soil_umbrisols xmlns:eome="eome">0</eome:soil_umbrisols>
      <eome:soil_vertisols xmlns:eome="eome">0</eome:soil_vertisols>
    </content>
    <summary type="html">&lt;a href="https://eome.mundialis.de/eome/product/quicklook/l8.action?title=LC08_L1TP_196044_20180101_20180101_01_RT_MTI" target="_blank"&gt;&lt;img width="45" height="45" align="center" hspace="10" src="https://eome.mundialis.de/eome/product/quicklook/l8.action?title=LC08_L1TP_196044_20180101_20180101_01_RT_MTI" /&gt;&lt;/a&gt;&lt;p style="display:inline-block"&gt;Platform: LANDSAT8, Sensing time: 2018-01-01T09:29:36Z, Cloudcoverage: 32.62%, Mean Height: 323, Population: 0&lt;/p&gt;</summary>
  </entry>
</feed>

 

Depending on your browser, the response is recognized as an atom feed. In this case an atom feed response (with parameter count=20) will look like this:

We hope you enjoy the new EO-me OpenSearch interface!

terrestris