This cloud API enables other applications to use OpenAthena's terrain-raycast method for geo-locating any point within drone imagery.
OpenAthena™ can instantly and precisely geolocate any single pixel of any single drone image. It does this by combining drone position and orientation data with a digital twin of terrain elevation.
OpenAthena obtains precise ground coordinates (median error < 10 meters) for any single drone image pixel, without the need for any special hardware. This is extremely useful for use of drones for search and rescue, public safety, defense technology, and more.
For more information, visit https://OpenAthena.com
To obtain an API key for testing and evaluation, please contact inquiries@theta.limited
OpenAthena API Summary:
?apikey=YOUR_API_KEY_HERE
GET
/api/v1/openathena/dem
(return DEM cache entries)
None
http code content-type response 200
application/json
JSON array of DEM cache entries; key is cache
404
application/json
Invalid DEM query
GET
/api/v1/openathena/dem/{name}
(return cache entry for specific DEM filename)
name type data type description {name}
required string digital elevation model filename
http code content-type response 200
application/json
JSON object containing DEM cache entry; key is cacheEntry
404
application/json
DEM entry not found
GET
/api/v1/openathena/dem?lat={lat}&lon={lon}
(Search for and retrieve a cache entry for a particular lat,lon location)
name type data type description lat
required float/decimal latitude e.g. 33.837470333333336 lon
required float/decimal longitude e.g. -84.52259847222223
http code content-type response 200
application/json
JSON object containing matching DEM cache entry; key is cacheEntry
404
application/json
Unable to find matching cache entry
GET
/api/v1/openathena/dem/count
(Get number of cache entries)
None
http code content-type response 200
application/json
JSON object containing number of entries; key is demCacheCount
404
application/json
Invalid DEM query
GET
/api/v1/openathena/dem/date
(Get date/time of last cache refresh)
None
http code content-type response 200
application/json
JSON object containing string date/time of cache refresh; key is demCacheDate
404
application/json
Invalid DEM query`
GET
/api/v1/openathena/dem/bytes
(Get size of cache)
None
http code content-type response 200
application/json
JSON object containing size in bytes of cache, key is demCacheSize
404
application/json
Invalid DEM query
POST
/api/v1/openathena/dem?lat={lat}&lon={lon}&len={len}
(Fetch a new DEM centered at lat,lon size len by len meters)
name type data type description lat
required float/decimal latitude e.g. 33.837470333333336 lon
required float/decimal longitude e.g. -84.52259847222223 len
required integer len (meters) of side of bounding box (e.g. 10000) dataset
optional string dataset to use: SRTM, THREEDEP, COP30, EUDTM, DEFAULT
http code content-type response 200
application/json
returned cache filename 404
application/json
Invalid DEM query
POST
/api/v1/openathena/dem/alt?lat={lat}&lon={lon}[>ype={gtype}]
(Return the terrain alt for lat,lon; may induce a DEM download)
name type data type description lat
required float/decimal latitude e.g. 33.837470333333336 lon
required float/decimal longitude e.g. -84.52259847222223 gtype
optional gtype
Optional elevation dataset (see gtype
above)
http code content-type response 200
application/json
JSON object containing altitude info; the fields are terrainAltWGS84
terrainAltAMSL
terrainEGM96Offset
demDescription
400
application/json
Invalid inputs, no matching DEM, etc.
GET
/api/v1/openathena/drone?search={string}
(Search for a drone info database entry)
name type data type description string
required string drone search string (e.g. dji or fisheye)
http code content-type response 200
application/json
JSON array of matching drones 404
application/json
Invalid or no search string
GET
/api/v1/openathena/{makeModel}
(Get entries matching make/model string)
name type data type description makeModel
required string make/model string to match
http code content-type response 200
application/json
JSON array of matching drones 404
application/json
Invalid drone query
GET
/api/v1/openathena/drone/count
(Get number of entries in the drone info database)
None
http code content-type response 200
application/json
JSON object containing number of entries 404
application/json
Invalid drone query
GET
/api/v1/openathena/drone/date
(Get the date of the drone information database)
None
http code content-type response 200
application/json
JSON object containing date
of drone info database404
application/json
Invalid drone query
For geolocating pixels within a drone image, the drone image itself need not be uploaded. Instead, the required metadata is provided via the POST method and sent to the OpenAthenaCore API server. All values should be passed via JSON as quoted strings even if they are floats, ints, etc.
For altitude, either GPS altitude (HAE) in meters or MSL altitude in meters must be provided.
OpenAthenaCore analyzes drone image metadata using elevation data automatically downloaded from OpenTopography.org. By default, OpenAthenaCore downloads data from the COP30 digital surface model dataset. Other datasets are now supported if your OpenTopography subscription level provides access to them. To specify a different elevation dataset, set and pass the gtype parameter in your location API calls. (gtype is short for GeoTiffDataSetType.)
gtype parameter values
Value Description SRTMGL1
Shuttle Radar Topography Mission Global 30m 3DEP
USGS 1/3 arc-second Digital Elevation Model 10m DTED2
DTED2+ 1 arc sec 30m EUDTM
Continental Europe Digital Terrain Model 30m COP30
Copernicus Global DSM 30m DEFAULT
Default/SRTMGL1 30m MARITIME
OpenAthenaCore internal, use over oceans
OpenAthenaCore bundles a database of known drones/cameras and references that database for camera intrinsics using the drone make and model included in the image metadata. Callers can optionally include drone camera intrinsics parameters. Those optional parameters or intrinsics are documented below.
optional drone camera intrinsics
key name data type description example isThermal
boolean true if thermal camera; false otherwise default false widthPixels
int pixel width of full resolution camera image 5472 heightPixels
int pixel height of full resolution camera image 3648 lensType
string perspective or fisheye 'perspective' only supported at present ccdWidthMMPerPixel
float width of each pixel (in mm) 12.83332/5472.0 ccdHeightMMPerPixel
float height of each pixel (in mm) 8.55554/3648.0 radialR1
float first radial distortion coefficient for the camera lens default is 0.0 radialR2
float second radial distorion coefficient default is 0.0 radialR3
float third radial distorion coefficient default is 0.0 tangentalT1
float first tangential distortion coefficient for the camera lens default is 0.0 tangentalT2
float second tangential distortion coefficient default is 0.0
POST
/api/v1/openathena/locationsimple
(Return simplified geolocation of pixel within a drone image via provided metadata)
name type data type description none
required JSON object JSON object containing image metadata
key name type data type description example Name
optional string Unique string for cache lookup example42.jpg GPS Latitude
required float latitude +- decimal degrees 33.837470333 GPS Longitude
required float longitude +- decimal degrees -84.522598472 Focal Length
required float focal length of image 6.72 Focal Length 35
optional float 35mm equivalent focal length 24.0 ImageWidth
required int width in pixels of image 4032 ImageHeight
required int height in pixels 3024 Camera:Roll
required float degrees 0.0 Digital Zoom Ratio
required float zoom ratio 1.0 GPS Altitude
semi-required float altitude in WGS84 HAE meters (see note above) 437.920107 MSL Altitude
semi-required float altitude in MSL meters (see note above) 101.233 drone:GimbalPitchDegree
required float degree pitch of gimbal or camera 41.40 drone:GimbalYawDegree
required float compass heading in degrees 156.30 tiff:Make
required string make of drone DJI tiff:Model
required string drone model FC8482 Date/Time Original
optional string YYYY:MM:DD HH:MM:SS 2024:06:21 09:15:00 xprop
optional float image coordinates as a proportion 0-1.0, measured from the top left increasing rightwards and downwards 0.50 is default yprop
optional float image coordinates as a proportion 0-1.0, measured from the top left increasing rightwards and downwards 0.50 is default maritimemode
deprecated boolean Set for calculations over oceans false gtype
optional gtype
Elev dataset to use if possible COP30 (see list above) drone camera intrinsics
optional see above see above for key, type, description
http code content-type response 200
application/json
JSON object containing simplified geolocation information 400
application/json
Location error
key name data type description example targetLat
float target latitude 33.8358084243378 targetLon
float target longitude -84.5207742586809 targetAltHAE
float target altitude 309.8363786905352 targetDistanceMeters
float distance to target 281.2324945266905 predictedCE
float predicted error, meters 11.521343585384802 TLE_Cat
String predicted error category CAT_2 elevationDataModel
String dataset that elevation data came from Copernicus Global DSM 30m
POST
/api/v1/openathena/location
(Return detailed geolocation data of pixel within a drone image via provided metadata)
name type data type description none
required JSON object JSON object containing image metadata
key name type data type description example Name
optional string Unique string for cache lookup example42.jpg GPS Latitude
required float latitude +- decimal degrees 33.837470333 GPS Longitude
required float longitude +- decimal degrees -84.522598472 Focal Length
required float focal length of image 6.72 Focal Length 35
optional float 35mm equivalent focal length 24.0 ImageWidth
required int width in pixels of image 4032 ImageHeight
required int height in pixels 3024 Camera:Roll
required float degrees 0.0 Digital Zoom Ratio
required float zoom ratio 1.0 GPS Altitude
semi-required float altitude in WGS84 HAE meters (see note above) 437.920107 MSL Altitude
semi-required float altitude in MSL meters (see note above) 101.233 drone:GimbalPitchDegree
required float degree pitch of gimbal or camera 41.40 drone:GimbalYawDegree
required float compass heading in degrees 156.30 tiff:Make
required string make of drone DJI tiff:Model
required string drone model FC8482 Date/Time Original
optional string YYYY:MM:DD HH:MM:SS 2024:06:21 09:15:00 xprop
optional float image coordinates as a proportion 0-1.0, measured from the top left increasing rightwards and downwards 0.50 is default yprop
optional float image coordinates as a proportion 0-1.0, measured from the top left increasing rightwards and downwards 0.50 is default maritimemode
deprecated boolean Set for calculations over oceans false gtype
optional gtype
Elev dataset to use if possible COP30 (see list above) drone camera intrinsics
optional see above see above for key, type, description
http code content-type response 200
application/json
JSON object containing detailed geolocation information 400
application/json
Location error
key name data type description targetLon
float longitude decimal degrees targetLat
float latitude decimal degrees targetDistanceMeters
float distance to target in meters targetAltHAE
float target alt, height in meters above ellipsoid targetAltEGM96
float target alt, meters EGM96/MSL finalTheta
float final target theta, degrees linearError
float estimate of linear error in meters predictedCE
float predicted circular error in meters TLE_Cat
string predicted circular error category imageSelectedProportionY
float target proportion in image, y-axis 0.0-1.0 imageSelectedProportionX
float target proportion in image, x-axis 0.0-1.0 imageHeight
float pixels imageWidth
float pixels imageDateTimeUTC
string UTC date/time image taken pitchOffsetDegSelectedPoint
float target pitch offset, degrees finalAZ
float final target azimuth, degrees digitalZoomRatio
float zoom factor calculationDateTimeUTC
string UTC date/time of calculation azimuthOffsetUserCorrection
float user azimuth correction, degrees cameraRollAngleDeg
float camera roll, degrees isCameraModelRecognized
boolean is drone camera in drone database droneElevationHAE
float drone alt in meters, height above ellipsoid model
string drone manufacturer make
string model lensType
string lens type perspective or fisheye f_x
float lens intrinsics f_y
float lens intrinsics droneLatitude
float decimal degrees droneLongitude
float longitude decimal degrees cameraSlantAngleDeg
float camera theta in degrees yawOffsetDegSelectedPoint
float target azimuth offset, degrees filename
string image filename if present focalLength
float focal length for this image targetUTM
String target location in UTM coordinates droneVerticalDatum
String vertical datum drone reports altitude terrainAltUnderDroneHAE
float terrain alt in meters, height above ellipsoid demFilename
String filename of digital elevation model elevationDataModel
String dataset that elevation data came from
GET
/api/v1/openathena/up
(Simple query to test if host is up and API key is valid)
None
http code content-type response http code content-type response --------------- --------------------- ----------------------------------------------- 200
application/json
Server status; key is status
405
application/json
Permission denied
Examples API calls using curl in bash or derivatives like zsh.
(csh requires backslashes to escape newline characters.) Care must be taken with URLs and strings as shells differ on
how to escape special characters like &
and
=
.
Get a list of the DEM cache entries:
curl 'https://api.openathena.com/api/v1/openathena/dem?apikey=YOUR_API_KEY_HERE'
Search for DJI FC2204 in the drone info database:
curl 'https://api.openathena.com/api/v1/openathena/drone?apikey=YOUR_API_KEY_HERE&search=djifc2204'
Search for Teal in the drone info database:
curl 'https://api.openathena.com/api/v1/openathena/drone?apikey=YOUR_API_KEY_HERE&search=teledyne'
Search for fisheye lens drones in the drone info database:
curl 'https://api.openathena.com/api/v1/openathena/drone/?search=fisheye&apikey=YOUR_API_KEY_HERE'
Get a count of the number of entries in the Drone database.
curl 'https://api.openathena.com/api/v1/openathena/drone/count?apikey=YOUR_API_KEY_HERE'
Download a DEM for a 15000 square meter area centered around GPS coordinates 33.829647,-84.518281
curl -X POST 'https://api.openathena.com/api/v1/openathena/dem?lat=33.829647&lon=-84.518281&len=15000&apikey=YOUR_API_KEY_HERE'
The example below resolves a location for a pixel in an image with the
following metadata. The pixel location is proportionally specified as
a proportion of the image (0-1.0,0-1.0) with the upper left corner
being (0,0) and x increases rightwards while y increases downwards.E.g. (0.5,0.5) would be the center of the image and (1.0,1.0) would be the bottom right corner.
The image itself does not need to be uploaded -- merely the necessary
metadata. The documentation as to the exact format of the metadata
will be provided. It uses the simple
location request that
provides simplified geolocation data on return.
curl -X POST 'https://api.openathena.com/api/v1/openathena/locationsimple?apikey=YOUR_API_KEY_HERE' -H "Content-Type: application/json" -d '
{"GPS Latitude" : "33.837470333333336",
"GPS Longitude" : "-84.52259847222223",
"Focal Length" : "6.72",
"ImageWidth" : "4032",
"ImageHeight" : "3024",
"Camera:Roll" : "0.0",
"Digital Zoom Ratio" : "1.0",
"GPS Altitude" : "437.920107",
"drone:GimbalPitchDegree" : "41.40",
"drone:GimbalYawDegree" : "156.30",
"tiff:Make" : "DJI",
"tiff:Model" : "FC8482",
"xprop" : "0.25",
"yprop" : "0.25",
}'
This query produces the following output
{
"location": {
"TLE_Cat": "CAT_2",
"targetDistanceMeters": 281.2324945266905,
"predictedCE": 11.521343585384802,
"targetLon": -84.5207742586809,
"targetAltHAE": 309.8363786905352,
"targetLat": 33.8358084243378
}
}
The example below resolves a location for a pixel in an image with the following metadata. The pixel location is proportionally specified as a proportion of the image (0-1.0,0-1.0) with the upper left corner being (0,0) and x increases rightwards while y increases downwards. E.g. (0.5,0.5) would be the center of the image and (1.0,1.0) would be the bottom right corner. The image itself does not need to be uploaded -- merely the necessary metadata.
curl -X POST 'https://api.openathena.com/api/v1/openathena/location?apikey=YOUR_API_KEY_HERE' -H "Content-Type: application/json" -d '
{"Name": "uniquename",
"GPS Latitude" : "33.837470333333336",
"GPS Longitude" : "-84.52259847222223",
"Focal Length" : "6.72",
"Focal Length 35" : "24.0",
"ImageWidth" : "4032",
"ImageHeight" : "3024",
"Camera:Roll" : "0.0",
"Digital Zoom Ratio" : "1.0",
"GPS Altitude" : "437.920107",
"drone:GimbalPitchDegree" : "41.40",
"drone:GimbalYawDegree" : "156.30",
"tiff:Make" : "DJI",
"tiff:Model" : "FC8482",
"Date/Time Original" : "2024:06:21 09:15:00",
"xprop" : "0.25",
"yprop" : "0.25",
}'
This query produces the following output:
{
"location": {
"gimbalYawDegree": 156.3,
"targetDistanceMeters": 281.2324945266905,
"linearError": 5.9,
"pitchOffsetDegSelectedPoint": 14.283329579602897,
"imageDateTimeUTC": "2024-06-21T13:15:00Z",
"imageSelectedProportionY": 0.25,
"imageSelectedProportionX": 0.25,
"targetCK42GKLat": 3748425.64455343,
"targetAltHAE": 309.8363786905352,
"finalAZ": 137.6430348057406,
"digitalZoomRatio": 1,
"calculationDateTimeUTC": "2024-09-03T00:46:46Z",
"azimuthOffsetUserCorrection": 0,
"slantRange": 281.2324945266905,
"targetMGRS": "16SGC2941846715",
"cameraRollAngleDeg": 0,
"isCameraModelRecognized": "true",
"droneElevationHAE": 437.920107,
"droneLongitude": -84.52259847222223,
"targetCK42Lon": -84.52088576188001,
"targetLon": -84.5207742586809,
"model": "fc8482",
"make": "dji",
"lensType": "perspective",
"targetAltEGM96": 279.16968582042205,
"f_x": 3019.3246480906096,
"imageWidth": 4032,
"f_y": 3013.5185649268224,
"targetCK42Lat": 33.83710905735875,
"finalTheta": 27.1166704203971,
"focalLength35": 24,
"droneLatitude": 33.837470333333336,
"targetLat": 33.8358084243378,
"imageHeight": 3024,
"cameraSlantAngleDeg": 41.4,
"TLE_Cat": "CAT_2",
"yawOffsetDegSelectedPoint": -18.656965194259424,
"predictedCE": 11.521343585384802,
"gimbalPitchDegree": 41.4,
"targetCK42GKLon": 46729499.953724496,
"targetUTM": "16 N 729418.1 3746715.77",
"focalLength": 6.72
}
}
© 2025 Theta Informatics LLC
CAGE: 9Q433
SAM.gov UEI: KZ7PCDTMVRD5
DUNS#: 129898542