I have removed API access via archives. Usage was unsustainable. Access to a limited number of examples remains. I am leaving these instructions for now, but I expect they will be removed shortly.
Python Reflectometry Software Package
github | https://github.com/kristinemlarson/gnssrefl |
pypi | https://pypi.org/project/gnssrefl |
Cryosphere, Water, Snow | Use Cases |
Description of the API -using data archives
Parameter | Description | Default |
---|---|---|
station | 4 character lowercase station name | user must supply |
year | 4 character year | user must supply |
doy | day of year | user must supply |
freq | GPS frequency L1, L2, L2C,L5, or L1L2 | L1 |
pk2noise | minimum ratio of spectral peak to noise | 3 |
amp | mininum amplitude of spectral peak | 8 v/v |
h1,h2 | minimum and maximum reflector heights | 0.5,8 meters |
e1, e2 | minimum and maximum elevation angles | 5,25 degrees |
azim1, azim2 | minimum and maximum azimuth angles | 0,360 degrees |
rinex | RINEX version 2.11 or 3 | 2.11 |
archive | unavco, sopac, cddis, sonel,or all | all |
ftype | output filetype (txt or csv) | txt |
jsononly | True returns solution via json | False |
Example: for the station p038, the year 2020, day of year 135:
https://gnss-reflections.org/api?station=p038&year=2020&doy=135&archive=unavco
The API starts a task queue and opens a web page with which will ultimately be populated with a png summary of spectral characteristics, links to the reflection solution, station location summary, a google map, and station photograph (if available). Here we specified the unavco archive because we know it is the primary archive for this site.
Regardless of the method you use to query the API, you will need to wait ~10 seconds for the solution to be posted.
If you only want solution information returned in a json using your browser:
https://gnss-reflections.org/api?station=p038&year=2020&doy=135&archive=unavco&jsononly=True
returns:
{ "amp": 8, "archive": "unavco", "azim1": 0, "azim2": 360, "createdAt": "2021-04-24 11:41:11Z", "e1": 5.0, "e2": 25.0, "fileAddress": "https://gnss-reflections.org/results2/2ea83252-0377-45c1-8ad9-ee1f43b80b9e", "fileType": "rh", "h1": 0.4, "h2": 8.0, "pk2noise": 3.0, "siteId": "p038", "softwareVersion": 2.0, "startDate": "2020-05-05 00:00:00Z" }
The reflector height solution is found in the fileAddress field.
The API can be accessed via curl:
curl "https://gnss-reflections.org/api?station=p038&year=2020&doy=135&jsononly=True&archive=unavco"
or using the http utility:
http https://gnss-reflections.org/api station==p038 year==2020 doy==135 jsononly==True archive==unavco
Example: for the station p041, the year 2020, day of year 198, and L1 data:
From the command line within a browser:
curl "https://gnss-reflections.org/api?station=p041&year=2020&doy=198&freq=L1"
From the command line, wth json returned, using curl:
curl "https://gnss-reflections.org/api?station=p041&year=2020&doy=198&freq=L1&jsononly=True"
Using the http utility:
http https://gnss-reflections.org/api station==p041 year==2020 doy==198 freq==L1 jsononly==True
returns:
{ "amp": 8, "archive": "all", "azim1": 0, "azim2": 360, "createdAt": "2021-04-23 16:58:38Z", "e1": 5.0, "e2": 25.0, "fileAddress": "https://gnss-reflections.org/results2/1f943d0e-f704-4a50-a0bc-bf8213182468", "fileType": "rh", "h1": 0.4, "h2": 8.0, "pk2noise": 3.0, "siteId": "p041", "softwareVersion": 2.0, "startDate": "2020-07-07 00:00:00Z" }Errors: Non-existent station
http http://gnss-reflections.org/api station==xxxx year==2020 doy==201 jsononly==True
returns:
{ "amp": 8, "archive": "all", "azim1": 0, "azim2": 360, "createdAt": "2021-04-25 00:54:50Z", "e1": 5.0, "e2": 25.0, "fileAddress": "http://gnss-reflections.org/results2/8f4fe6c7-7d4c-4cbb-8ec6-598c4e75531e", "fileType": "rh", "h1": 0.4, "h2": 8.0, "pk2noise": 3.0, "siteId": "xxxx", "softwareVersion": 2.0, "startDate": "2020-07-07 00:00:00Z" }The fileAddress returns the error message:
No Results Could be Retrieved
Illegal Date
http http://gnss-reflections.org/api station==p038 year==2021 doy==115 jsononly==True archive==unavco
Returns:
HTTP/1.1 200 OK Connection: keep-alive Content-Length: 102 Content-Type: application/json Date: Sun, 25 Apr 2021 01:00:33 GMT Server: gunicorn/20.0.4 Via: 1.1 vegur { "errormessage": "You have chosen a day that has not happened yet (or orbits are not yet available)." }
Description of the API - using data upload option
Parameter | Description | Default |
---|---|---|
file** | Version 2.11 RINEX file, lowercase, gz or Z allowed | user must supply |
freq | GPS frequency L1, L2, L2C, or L5 | L1 |
pk2noise | minimum ratio of spectral peak to noise | 3 |
amp | minimum amplitude of spectral peak | 8 v/v |
h1,h2 | minimum and maximum reflector heights | 0.5,8 meters |
e1,e2 | minimum and maximum elevation angles | 5,25 degrees |
azim1, azim2 | minimum and maximum azimuth angles | 0,360 degrees |
ftype | output filetype (csv or txt) | txt |
Example: you have a RINEX 2.11 file that has been gzipped, p0301000.20o.gz. The command to analyze the L1 data for this site is:
curl -F "file=@p0301000.20o.gz" -F "freq=L1" -F "jsononly=True" "http://gnss-reflections.org/api"
returns:
{ "amp": 8, "archive": "local", "azim1": 0, "azim2": 360, "createdAt": "2021-04-23 18:21:47Z", "e1": 5, "e2": 25, "fileAddress": "http://gnss-reflections.org/static/files/319386247.txt", "fileType": "rh", "h1": 0.4, "h2": 8, "pk2noise": 3, "siteId": "p030", "softwareVersion": 2.0, "startDate": "2020-04-04 00:00:00Z" }
Using the http utility:
http --form POST http://gnss-reflections.org/api file@p0301000.20o.gz freq=L1 jsononly=True
returns:
HTTP/1.0 200 OK Content-Length: 358 Content-Type: application/json Date: Sat, 24 Apr 2021 00:23:59 GMT Server: Werkzeug/1.0.1 Python/3.8.7 { "amp": 8, "archive": "local", "azim1": 0, "azim2": 360, "createdAt": "2021-04-23 18:23:59Z", "e1": 5, "e2": 25, "fileAddress": "http://gnss-reflections.org/static/files/185639884.txt", "fileType": "rh", "h1": 0.4, "h2": 8, "pk2noise": 3, "siteId": "p030", "softwareVersion": 2.0, "startDate": "2020-04-04 00:00:00Z" }
Errors:
http --form POST http://gnss-reflections.org/api file@p0301000.2020o.gz freq=L1 jsononly=True
returns:
{ "errormessage": "Illegal Filename" }** You must use the geodetic naming convention for RINEX 2.11 files. Lowercase. Four character station name, three character day of year followed by a 0, a period, two character year, and o. gz and Z compression is also allowed.
Privacy policy: I do not track who uses this API or where they are from. However, I do track the number of calls for the various sections (i.e. rzones, geoid, api-rinex3, and api) and where the GNSS sites are located.