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 (typical 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.
Show
For geolocating a specific pixel within a drone image, the drone image itself
does not need to be uploaded. Instead, the required camera position and orientation metadata is provided via
the POST method and sent to the OpenAthena Core API server. All values
should be passed via JSON as quoted strings even if they are floats,
ints, etc.
For altitude, either GPS Altitude (defined as height above the WGS84 ellipsoid
[HAE] in meters) or MSL Altitude (defined as height above mean sea level [AMSL] in meters) must be provided. HAE and AMSL are actually
two different vertical datums which are deceptively similar, but can
be off as much as 30 meters from each other in a typical case. Whether the drone platform reports its altitude in HAE or AMSL depends on the flight control software and even firmware version being used. Using
one incorrectly for the other will add at least 20-30 meters of
targeting error to OpenAthena's terrain-raycast.
See this web
page
for an explainer on the difference between HAE and AMSL vertical
datums for elevation.
OpenAthena Core analyzes drone image metadata using elevation data
automatically downloaded from OpenTopography.org. By default,
OpenAthena Core downloads data from the COP30 digital surface model
dataset. The downloaded elevation data, or DEMs, are stored in a
demcache directory (configured via openathenacore.properties or via
command-line argument) and are cached in memory.
Other datasets are now supported if your OpenTopography subscription
level provides access to them. To specify a different elevation
dataset, set and pass the dataset parameter, where appropriate, in
API. This type may also be referred to, in query parameters, as
dataset.)
dataset parameter values
OpenAthena Core bundles a database of camera calibration values
(camera intrinsics) for known drone camera make and
models. These camera
intrinsic values are necessary for calculating the pitch and yaw angle
of any off-center image pixel. OpenAthena Core references this
database to find matching calibration values for the camera make and
model name included in your API request.
Alternatively, if your camera make and model name are not in
OpenAthena's drone models database (such as for a custom camera), you
can include camera intrinsics parameters directly within your API
request instead.
These optional parameters for camera intrinsics are documented below.
optional drone camera intrinsics
See this
link
for an explanation of these camera instrinsic parameters.
See this
link for a link
to Theta's open source camera calibration tool which calculates these values using a few dozen images taken of a B/W checkerboard calibration pattern poster. Theta has prints of this poster available for order, email info@theta.limited for details.
| key name | data type | description | example |
|---|
isThermal | boolean | true if thermal camera; false otherwise | default false |
widthPixels | int | pixel width of full resolution camera sensor | 5472 |
heightPixels | int | pixel height of full resolution camera sensor | 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 |
Location calculation Request
POST
/api/v1/openathena/locationsimple
(Return simplified geolocation of pixel within a drone image via provided metadata)
Parameters
| name | type | data type | description |
|---|
none | required | JSON object | JSON object containing image metadata |
POST Body JSON Object Key/Value Pairs
| 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 |
GPS Altitude | semi-required | float | altitude in WGS84 Height Above Elipsoid (HAE) meters (see note above) | 437.920107 |
MSL Altitude | semi-required | float | altitude in Above Mean Sea Level (AMSL) meters according to EGM96 Geoid (see note above) | 101.233 |
Focal Length | required | float | focal length of image | 6.72 |
Focal Length 35 | optional | float | 35mm equivalent focal length | 24.0 |
ImageWidth | required | int | image width in pixels (scaled values are OK) | 4032 |
ImageHeight | required | int | image height in pixels (scaled vales are OK) | 3024 |
Camera:Roll | required | float | degrees roll of camera relative to ground (clockwise from camera perspective is positive) | 0.0 |
GimbalPitchDegree | required | float | degree pitch of gimbal or camera; measured in degrees downward from horizon | 41.40 |
GimbalYawDegree | required | float | compass heading in degrees; north is 0 and increasing clockwise | 156.30 |
Camera Make | required | string | manufacturer name of drone camera | DJI |
Camera Model | required | string | model name of drone camera | FC8482 |
Digital Zoom Ratio | optional | float | digital zoom (centered crop) ratio, leave at 1.0 if digital crop has not been applied to image | 1.0 |
timestamp_iso8601 | optional | string | ISO8601 format time stamp YYYY-MM-DDTHH:mm:ss.sssZ | 2026-01-25T21:28:43.123Z |
xprop | optional | float | x position of target within image frame as a proportion 0-1.0, measured from the left edge increasing rightward | 0.50 is default |
yprop | optional | float | y position of target within image frame as a proportion 0-1.0, measured from the top edge increasing downwards | 0.50 is default |
dataset | optional | string | Terrain elevation dataset to use for calculations, if possible | COP30 (see list above) |
drone camera intrinsics | optional | see above | only needed if camera make and model not in database; see above for key names and descriptions | |
cottype | optional | string | Type value to include CoT messages | a-p-G (see COT specs) |
cotuid | optional | string | CoT UID to include in CoT messages | OpenAthenaCore-November01-668 |
Responses
| http code | content-type | response |
|---|
200 | application/json | JSON object containing simplified geolocation information |
400 | application/json | Location error |
Returned JSON location Object Key/Value Pairs
| 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)
Parameters
| name | type | data type | description |
|---|
none | required | JSON object | JSON object containing image metadata |
POST Body JSON Object Key/Value Pairs
| 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 |
GPS Altitude | semi-required | float | altitude in WGS84 Height Above Elipsoid (HAE) meters (see note above) | 437.920107 |
MSL Altitude | semi-required | float | altitude in Above Mean Sea Level (AMSL) meters according to EGM96 Geoid (see note above) | 101.233 |
Focal Length | required | float | focal length of image | 6.72 |
Focal Length 35 | optional | float | 35mm equivalent focal length | 24.0 |
ImageWidth | required | int | image width in pixels (scaled values are OK) | 4032 |
ImageHeight | required | int | image height in pixels (scaled vales are OK) | 3024 |
Camera:Roll | required | float | degrees roll of camera relative to ground (clockwise from camera perspective is positive) | 0.0 |
GimbalPitchDegree | required | float | degree pitch of gimbal or camera; measured in degrees downward from horizon | 41.40 |
GimbalYawDegree | required | float | compass heading in degrees; north is 0 and increasing clockwise | 156.30 |
Camera Make | required | string | manufacturer name of drone camera | DJI |
Camera Model | required | string | model name of drone camera | FC8482 |
Digital Zoom Ratio | optional | float | digital zoom (centered crop) ratio, leave at 1.0 if digital crop has not been applied to image | 1.0 |
timestamp_iso8601 | optional | string | ISO8601 format time stamp YYYY-MM-DDTHH:mm:ss.sssZ | 2026-01-25T21:28:43.123Z |
xprop | optional | float | x position of target within image frame as a proportion 0-1.0, measured from the left edge increasing rightward | 0.50 is default |
yprop | optional | float | y position of target within image frame as a proportion 0-1.0, measured from the top edge increasing downwards | 0.50 is default |
dataset | optional | string | Terrain elevation dataset to use for calculations, if possible | COP30 (see list above) |
drone camera intrinsics | optional | see above | only needed if camera make and model not in database; see above for key names and descriptions | |
cottype | optional | string | Type value to include CoT messages | a-p-G (see COT specs) |
cotuid | optional | string | CoT UID to include in CoT messages | OpenAthenaCore-November01-668 |
polarOrigin | optional | string | Origin coordinates for use in calculating polar coordiantes of target (lat,lon or MGRS) | 33.836739,-84.522274 or 16S GC 29277 46817 |
polarOriginAlt | optional | float | Altitude in meters above MSL | 242 |
Responses
| http code | content-type | response |
|---|
200 | application/json | JSON object containing detailed geolocation information |
400 | application/json | Location error |
Returned JSON location Object Key/Value Pairs
| 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 |
targetAltEGM | float | target alt, meters EGM/Geoid/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 |
imageFilename | 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 |
cotuid | String | if CoT was sent, message UID value |
cottype | String | if CoT was sent, event type value |
polarStatus | String | if polar coord requested, "OK" or error description |
polarOrigin | String | if polar coord requested, polar origin |
polarOriginAlt | float | if polar coord requested, polar origin alt (AMSL) |
polarSlangRangeMeters | float | if polar coord requested, range from origin to target (meters) |
polarElevationAngleDeg | float | if polar coord requested, elev angle (deg) from origin to target |
polarElevationDelta | float | if polar coord requested, elev delta from origin to target (meters) |
polarGridAzMrad | float | if polar coord requested, AZ in milliradians (0–≈6283 mrad) |
polarGridAzMils6400 | float | if polar coord requested, AZ in NATO mils (0–6400) relative to grid north |
polarGroundRangeMeters | float | if polar coord requested, ground range from origin to target (meters) |
MISB Location Request
OpenAthena can also analyze drone telemetry directly from
Motion Imagery Standards Board (MISB)
format video metadata.
OpenAthena maps the metadata from MISB into its internal format
obviating the need to translate it syntactically and semantically.
Supporting MISB telemetry, natively, makes integrating OpenAthena into
a drone software pipeline much more straightforward.
For altitude, either Sensor Ellipsoid Height altitude (WGS84
height above ellipsoid or HAE in meters) or Sensor True Altitude
(altitude above mean sea level or AMSL in meters) must be provided.
HAE and AMSL are actually two different vertical datums which are
deceptively similar, but can be off as much as 30 meters from each
otrher in a typical case. Using one incorrectly for the other will
add at least 20-30 meters of targeting error to OpenAthena's
terrain-raycast.
In MISB metadata, the orientation of the drone or aircraft platform is
separate from the relative orientation of the gimbal or sensor to the
platform. Thus, OpenAthena performs a Euler angle composition to
calculate the actual orientation of the camera before performing its
terrain-raycast algorithm.
POST
/api/v1/openathena/locationmisbsimple
(Return simplified geolocation of pixel within a MISB drone image via provided metadata)
Parameters
| name | type | data type | description |
|---|
none | required | JSON object | JSON object containing image metadata |
POST Body JSON Object Key/Value Pairs
| key name | type | data type | description | example |
|---|
Name | optional | string | Unique string for cache lookup | misb-frame-xx |
Sensor Latitude | required | float | latitude +- decimal degrees | 33.837470333 |
Sensor Longitude | required | float | longitude +- decimal degrees | -84.522598472 |
Sensor Ellipsoid Height | semi-required | float | altitude in WGS84 Height Above Elipsoid (HAE) meters (see note above) | 437.920107 |
Sensor True Altitude | semi-required | float | altitude in Above Mean Sea Level (AMSL) meters according to EGM96 Geoid (see note above) | 101.233 |
Sensor Relative Azimuth Angle | required | float | relative rotation angle of sensor to platform longitudinal axis. Rotation angle between platform longitudinal axis and camera pointing direction as seen from above the platform. | 10.0 |
Sensor Relative Elevation Angle | required | float | Angle of sensor to platform longitudinal-transverse plane; negative angles down | -5.0 |
Sensor Relative Roll Angle | required | float | Relative roll angle of sensor to aircraft platform. Top of image is zero degrees. Positive angles are clockwise when looking from behind camera | 5.0 |
Platform Heading Angle | required | float | platform compass heading in degrees; north is 0 and increasing clockwise | 156.30 |
Platform Pitch Angle | required | float | platform pitch angle between longitudinal axis and horizontal plane; positive when platform nose is above horizontal plane | 5.0 |
Platform Roll Angle | required | float | platform angle between transverse axis and transvers-longitudinal plane. Positive angles for lowered right wing | 0.0 |
Sensor Horizontal Field of View | required | float | Sensor horizontal field of view 0..180 | 150.00 |
Sensor Vertical Field of View | required | float | Sensor vertical field of view 0..180 | 55.0 |
Precision Time Stamp | optional | integer | Unix epoch time (UTC) in microseconds since 1970-01-01T00:00:00Z | 1773682200123456 |
xprop | optional | float | x position of target within image frame as a proportion 0-1.0, measured from the left edge increasing rightward | 0.50 is default |
yprop | optional | float | y position of target within image frame as a proportion 0-1.0, measured from the top edge increasing downwards | 0.50 is default |
dataset | optional | string | Terrain elevation dataset to use for calculations, if possible | COP30 (see list above) |
cottype | optional | string | Type value to include CoT messages | a-p-G (see COT specs) |
cotuid | optional | string | CoT UID to include in CoT messages | OpenAthenaCore-November01-668 |
polarOrigin | optional | string | Origin coordinates for use in calculating polar coordiantes of target (lat,lon or MGRS) | 33.836739,-84.522274 or 16S GC 29277 46817 |
polarOriginAlt | optional | float | Altitude in meters above MSL | 242 |
Responses
| http code | content-type | response |
|---|
200 | application/json | JSON object containing detailed geolocation information |
400 | application/json | Location error |
Returned JSON location Object Key/Value Pairs
| 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/locationmisb
(Return detailed geolocation of pixel within a MISB drone image via provided metadata)
Parameters
| name | type | data type | description |
|---|
none | required | JSON object | JSON object containing image metadata |
POST Body JSON Object Key/Value Pairs
| key name | type | data type | description | example |
|---|
Name | optional | string | Unique string for cache lookup | misb-frame-xx |
Sensor Latitude | required | float | latitude +- decimal degrees | 33.837470333 |
Sensor Longitude | required | float | longitude +- decimal degrees | -84.522598472 |
Sensor Ellipsoid Height | semi-required | float | altitude in WGS84 Height Above Elipsoid (HAE) meters (see note above) | 437.920107 |
Sensor True Altitude | semi-required | float | altitude in Above Mean Sea Level (AMSL) meters according to EGM96 Geoid (see note above) | 101.233 |
Sensor Relative Azimuth Angle | required | float | relative rotation angle of sensor to platform longitudinal axis. Rotation angle between platform longitudinal axis and camera pointing direction as seen from above the platform. | 10.0 |
Sensor Relative Elevation Angle | required | float | Angle of sensor to platform longitudinal-transverse plane; negative angles down | -5.0 |
Sensor Relative Roll Angle | required | float | Relative roll angle of sensor to aircraft platform. Top of image is zero degrees. Positive angles are clockwise when looking from behind camera | 5.0 |
Platform Heading Angle | required | float | platform compass heading in degrees; north is 0 and increasing clockwise | 156.30 |
Platform Pitch Angle | required | float | platform pitch angle between longitudinal axis and horizontal plane; positive when platform nose is above horizontal plane | 5.0 |
Platform Roll Angle | required | float | platform angle between transverse axis and transvers-longitudinal plane. Positive angles for lowered right wing | 0.0 |
Sensor Horizontal Field of View | required | float | Sensor horizontal field of view 0..180 | 150.00 |
Sensor Vertical Field of View | required | float | Sensor vertical field of view 0..180 | 55.0 |
Precision Time Stamp | optional | integer | Unix epoch time (UTC) in microseconds since 1970-01-01T00:00:00Z | 1773682200123456 |
xprop | optional | float | x position of target within image frame as a proportion 0-1.0, measured from the left edge increasing rightward | 0.50 is default |
yprop | optional | float | y position of target within image frame as a proportion 0-1.0, measured from the top edge increasing downwards | 0.50 is default |
dataset | optional | string | Terrain elevation dataset to use for calculations, if possible | COP30 (see list above) |
cottype | optional | string | Type value to include CoT messages | a-p-G (see COT specs) |
cotuid | optional | string | CoT UID to include in CoT messages | OpenAthenaCore-November01-668 |
polarOrigin | optional | string | Origin coordinates for use in calculating polar coordiantes of target (lat,lon or MGRS) | 33.836739,-84.522274 or 16S GC 29277 46817 |
polarOriginAlt | optional | float | Altitude in meters above MSL | 242 |
Responses
| http code | content-type | response |
|---|
200 | application/json | JSON object containing detailed geolocation information |
400 | application/json | Location error |
Returned JSON location Object Key/Value Pairs
| 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 |
targetAltEGM | float | target alt, meters EGM/Geoid/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 |
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 |
droneElevationHAE | float | drone alt in meters, height above ellipsoid |
droneLatitude | float | decimal degrees |
droneLongitude | float | longitude decimal degrees |
cameraSlantAngleDeg | float | camera theta in degrees |
yawOffsetDegSelectedPoint | float | target azimuth offset, degrees |
imageFilename | string | image filename if present |
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 |
cotuid | String | if CoT was sent, message UID value |
cottype | String | if CoT was sent, event type value |
polarStatus | String | if polar coord requested, "OK" or error description |
polarOrigin | String | if polar coord requested, polar origin |
polarOriginAlt | float | if polar coord requested, polar origin alt (AMSL) |
polarSlangRangeMeters | float | if polar coord requested, range from origin to target (meters) |
polarElevationAngleDeg | float | if polar coord requested, elev angle (deg) from origin to target |
polarElevationDelta | float | if polar coord requested, elev delta from origin to target (meters) |
polarGridAzMrad | float | if polar coord requested, AZ in milliradians (0–≈6283 mrad) |
polarGridAzMils6400 | float | if polar coord requested, AZ in NATO mils (0–6400) relative to grid north |
polarGroundRangeMeters | float | if polar coord requested, ground range from origin to target (meters) |
Show
Examples API calls using curl in bash or derivatives like zsh.
(csh invocation 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 'http://localhost:8000/api/v1/openathena/dem?apikey=YOUR_API_KEY_HERE'
Search for DJI FC2204 in the drone info database:
curl 'http://localhost:8000/api/v1/openathena/drone?apikey=YOUR_API_KEY_HERE&search=djifc2204'
Search for Teal in the drone info database:
curl 'http://localhost:8000/api/v1/openathena/drone?apikey=YOUR_API_KEY_HERE&search=teledyne'
Search for fisheye lens drones in the drone info database:
curl 'http://localhost:8000/api/v1/openathena/drone/?search=fisheye&apikey=YOUR_API_KEY_HERE'
Get a count of the number of entries in the Drone database.
curl 'http://localhost:8000/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 'http://localhost:8000/api/v1/openathena/dem?lat=33.829647&lon=-84.518281&len=15000&apikey=YOUR_API_KEY_HERE'
The example below for a locationsimple request 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. For example, (0.5,0.5) is the image center and (1.0,1.0) is 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.
# basic locationsimple calc. request
curl -X POST 'http://localhost:8000/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": 538.4465179534826,
"predictedCE": 11.312282733045901,
"targetLon": -84.30760707719494,
"targetAltHAE": 289.11412578910085,
"elevationDataModel": "Copernicus Global DSM 30m",
"targetLat": 33.87054790517167
}
}
The example below is for a locationsimple calculation request using a specific DEM dataset. See dataset parameter values in section Analyzing Drone Images for a list of available datasets.
# LocationSimple with specific DEM dataset
curl -X POST 'http://localhost:8000/api/v1/openathena/locationsimple?apikey=YOUR_API_KEY_HERE' -H "Content-Type: application/json" -d '
{"Name": "uniquename",
"GPS Latitude" : "33.873739",
"GPS Longitude" : "-84.311059",
"Focal Length" : "6.72",
"ImageWidth" : "4032",
"ImageHeight" : "3024",
"Camera:Roll" : "0.0",
"Digital Zoom Ratio" : "1.0",
"GPS Altitude" : "537.920107",
"drone:GimbalPitchDegree" : "41.40",
"drone:GimbalYawDegree" : "156.30",
"tiff:Make" : "DJI",
"tiff:Model" : "FC8482",
"xprop" : "0.25",
"yprop" : "0.25",
"dataset" : "3dep"
}'
The query produces the following output:
{
"location": {
"TLE_Cat": "CAT_2",
"targetDistanceMeters": 547.4541272533297,
"predictedCE": 11.312282733045901,
"targetLon": -84.30754933250704,
"targetAltHAE": 284.9516058069391,
"elevationDataModel": "USGS 1/3 arc-second Digital Elevation Model 10m",
"targetLat": 33.87049452266936
}
}
The example below is for a locationsimple calculation request using custom camera intrinsics (camera calibration) values. This is useful for performing calculation requests for drone camera make+models with calibration values not yet in OpenAthena's droneModels.json database.
# locationsimple with a custom camera
curl -X POST 'http://localhost:8000/api/v1/openathena/locationsimple?apikey=YOUR_API_KEY_HERE' -H "Content-Type: application/json" -d '
{"Name": "uniquename",
"GPS Latitude" : "33.873739",
"GPS Longitude" : "-84.311059",
"Focal Length" : "6.72",
"ImageWidth" : "4032",
"ImageHeight" : "3024",
"Camera:Roll" : "0.0",
"Digital Zoom Ratio" : "1.0",
"GPS Altitude" : "537.920107",
"drone:GimbalPitchDegree" : "41.40",
"drone:GimbalYawDegree" : "156.30",
"tiff:Make" : "CUSTOM",
"tiff:Model" : "DRONEMODEL",
"isThermal" : "false",
"widthPixels": "4032",
"heightPixels": "3024",
"ccdWidthMMPerPixel": "0.002225663181466/1.0",
"ccdHeightMMPerPixel": "0.002221383424304/1.0",
"lensType": "perspective",
"radialR1": "0.14007904012723732",
"radialR2": "-0.39797006527367595",
"radialR3": "0.4837999442176295",
"tangentialT1": "-0.0033106377888616196",
"tangentialT2": "0.002201030939220962",
"xprop" : "0.25",
"yprop" : "0.25"
}'
This query produces the following output
{
"location": {
"TLE_Cat": "CAT_2",
"targetDistanceMeters": 538.4465179534826,
"predictedCE": 11.312282733045901,
"targetLon": -84.30760707719494,
"targetAltHAE": 289.11412578910085,
"elevationDataModel": "Copernicus Global DSM 30m",
"targetLat": 33.87054790517167
}
}
The example below for a location calcuation request 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. For example, (0.5,0.5) is the image center and (1.0,1.0) is the bottom right corner.
The image itself does not need to be uploaded -- merely the necessary
metadata. The location request provides additional, more verbose output compared to locationsimple
# location (verbose) request
curl -X POST 'http://localhost:8000/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",
"targetAltEGM": 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
}
}