Skip to content

Latest commit

 

History

History
281 lines (199 loc) · 8.94 KB

README.md

File metadata and controls

281 lines (199 loc) · 8.94 KB

OGC Environmental Data Retrieval API Query Parser

The OGC Environmental Data Retrieval API query parser makes it easy to use the EDR queries in your python project.

PyPI PyPI - License PyPI - Python Version Sonar Quality Gate Code style: black Codecov

Install

pip install edr-query-parser

Usage

Collection Name Example

from edr_query_parser import EDRQueryParser
edr_query = EDRQueryParser('https://somewhere.com/collections/my_collection/position?parameter-name=param1,param2'
                           '&coords=POINT(57.819 -3.966)&datetime=2019-09-07T15:50-04:00/2019-09-07T15:50-05:00'
                           '&f=geoJSON&crs=84&z=500/400')

print(edr_query.collection_name) #my_collection

Query Type Example

from edr_query_parser import EDRQueryParser

edr_query = EDRQueryParser('https://somewhere.com/collections/my_collection/position?parameter-name=param1,param2'
                           '&coords=POINT(57.819 -3.966)&datetime=2019-09-07T15:50-04:00/2019-09-07T15:50-05:00'
                           '&f=geoJSON&crs=84&z=500/400')

if edr_query.instance_id: #is it an instance
    print(edr_query.instance_id)
else:
    print(edr_query.query_type.is_position) # True
    print(edr_query.query_type.is_radius) # False
    print(edr_query.query_type.is_locations) # False
    print(edr_query.query_type.is_corridor) # False
    print(edr_query.query_type.is_area) # False
    print(edr_query.query_type.is_trajectory) # False
    print(edr_query.query_type.is_cube) # False
    print(edr_query.query_type.is_items) # False
    print(edr_query.query_type.value) # position

location ID Example

from edr_query_parser import EDRQueryParser

edr_query = EDRQueryParser('https://somewhere.com/collections/my_collection/locations/aberdeen?'
                           'parameter-name=param1,param2&datetime=2019-09-07T15:50-04:00/2019-09-07T15:50-05:00&'
                           'f=geoJSON&crs=84&z=500/400')

if edr_query.query_type.is_locations:
    print(edr_query.location_id) #aberdeen

item ID Example

from edr_query_parser import EDRQueryParser

edr_query = EDRQueryParser('https://somewhere.com/collections/my_collection/items/2019-09-07')

if edr_query.query_type.is_items:
    print(edr_query.item_id) #2019-09-07

coords Example

The EDR query parser returns a WKT object

from edr_query_parser import EDRQueryParser

edr_query = EDRQueryParser('https://somewhere.com/collections/my_collection/position?'
                           'coords=POINT(57.819 -3.966)&datetime=2019-09-07T15:50-04:00/2019-09-07T15:50-05:00'
                           '&parameter-name=parameter1,parameter2&f=geoJSON&crs=84&z=all')

if edr_query.coords.is_set:
    print(edr_query.coords.coords_type) # Point
    if edr_query.coords.coords_type == 'Point':
        print(edr_query.coords.coordinates[0]) # 57.819
        print(edr_query.coords.coordinates[1]) # -3.966

parameter-name Example

from edr_query_parser import EDRQueryParser

edr_query = EDRQueryParser('https://somewhere.com/collections/my_collection/'
                           'position?coords=POINT(57.819 -3.966)'
                           '&datetime=2019-09-07T15:50-04:00/2019-09-07T15:50-05:00'
                           '&parameter-name=parameter1,parameter2&f=geoJSON&crs=84&z=all')

if edr_query.parameter_name.is_set:
    print(edr_query.parameter_name.list) # [parameter1, parameter2]

datetime Parameter Example

The EDR query parser converts the datetime parameter into a number of properties with the date properties being expressed as a datetime object

from edr_query_parser import EDRQueryParser

edr_query = EDRQueryParser('https://somewhere.com/collections/my_collection/'
                           'position?coords=POINT(57.819 -3.966)'
                           '&datetime=2019-09-07T15:50-04:00/2019-09-07T15:50-05:00'
                           '&parameter-name=parameter1,parameter2&f=geoJSON&crs=84&z=all')

if edr_query.datetime.is_set:
    if edr_query.datetime.is_interval:
        print(edr_query.datetime.interval_from.timestamp(), edr_query.datetime.interval_to.timestamp())
    elif edr_query.datetime.is_interval_open_end:
        print(edr_query.datetime.interval_open_end.timestamp())
    elif edr_query.datetime.is_interval_open_start:
        print(edr_query.datetime.interval_open_start.timestamp())
    else:
        print(edr_query.datetime.exact.timestamp())

f Parameter Example

from edr_query_parser import EDRQueryParser

edr_query = EDRQueryParser('https://somewhere.com/collections/my_collection/position?parameter-name=param1,param2'
                           '&coords=POINT(57.819 -3.966)&datetime=2019-09-07T15:50-04:00/2019-09-07T15:50-05:00'
                           '&f=geoJSON&crs=84&z=500/400')

print(edr_query.format.value) # geoJSON

z Parameter Example

from edr_query_parser import EDRQueryParser

edr_query = EDRQueryParser('https://somewhere.com/collections/my_collection/'
                           'position?coords=POINT(57.819 -3.966)'
                           '&datetime=2019-09-07T15:50-04:00/2019-09-07T15:50-05:00'
                           '&parameter-name=parameter1,parameter2&f=geoJSON&crs=84&z=12/240')

if edr_query.z.is_set:
    if edr_query.z.is_interval:
        print(edr_query.z.interval_from, edr_query.z.interval_to)
    if edr_query.z.is_list:
        print(edr_query.z.interval_from, edr_query.z.list)

crs Parameter Example

from edr_query_parser import EDRQueryParser

edr_query = EDRQueryParser('https://somewhere.com/collections/my_collection/'
                           'position?coords=POINT(57.819 -3.966)'
                           '&datetime=2019-09-07T15:50-04:00/2019-09-07T15:50-05:00'
                           '&parameter-name=parameter1,parameter2&f=geoJSON&crs=84&z=12/240')

print(edr_query.crs.value) # 84

bbox Parameter Example

from edr_query_parser import EDRQueryParser

edr_query = EDRQueryParser('https://somewhere.com/collections/my_collection/items/some_item/?bbox=12,13,20,21')

print(edr_query.bbox.list) # [12.0, 13.0, 20.0, 21.0]

Pagination limit Parameter Example

from edr_query_parser import EDRQueryParser

edr_query = EDRQueryParser('https://somewhere.com/collections/my_collection/items?limit=100')

print(edr_query.limit.value) # 100

Pagination next Parameter Example

from edr_query_parser import EDRQueryParser

edr_query = EDRQueryParser('https://somewhere.com/collections/my_collection/items?next=token123')

print(edr_query.next.value) # "token123"

corridor-height Parameter Example

from edr_query_parser import EDRQueryParser

edr_query = EDRQueryParser('https://somewhere.com/collections/my_collection/corridor?corridor-height=12'
                           '&corridor-width=5')

print(edr_query.corridor_height.value) # "12"

corridor-width Parameter Example

from edr_query_parser import EDRQueryParser

edr_query = EDRQueryParser('https://somewhere.com/collections/my_collection/corridor?corridor-height=12'
                           '&corridor-width=5')

print(edr_query.corridor_width.value) # "5"

width-units Parameter Example

from edr_query_parser import EDRQueryParser

edr_query = EDRQueryParser('https://somewhere.com/collections/my_collection/corridor?width-units=km')

print(edr_query.width_units.value) # "km"

height-units Parameter Example

from edr_query_parser import EDRQueryParser

edr_query = EDRQueryParser('https://somewhere.com/collections/my_collection/corridor?height-units=km')

print(edr_query.height_units.value) # "km"

within Parameter Example

from edr_query_parser import EDRQueryParser

edr_query = EDRQueryParser('https://somewhere.com/collections/my_collection/radius?within=10&within-units=km')

print(edr_query.within.value) # "10"

within-units Parameter Example

from edr_query_parser import EDRQueryParser

edr_query = EDRQueryParser('https://somewhere.com/collections/my_collection/radius?within=10&within-units=km')

print(edr_query.within_units.value) # "km"