Airspace services consist of methods that determine when an object flying a route or an object flying within a defined cylindrical region will cross into an airspace. Supported airspace categories include Controlled airspace (classes B, C, D, E0), Local Altitude Authorization and Notification Capability (LAANC) airspaces, National Parks and Wildlife areas, Restriced Military & Special Use Area airspaces and all Airports.
You can choose which category of airspace you'd like to check for, as well defining search criteria for airspace by name or region. You may also require that the airspaces under consideration touch the surface of the Earth.
When determining airspace crossings, you can specify whether you would like the times at which the object crosses the airspace boundary, or the times when it comes within some distance of the boundary. This latter feature is called a proximity warning and is explained in more detail in the text below.
Airspace data is sourced from the US Federal Aviation Administration (FAA). See their site for more information.
This service determines which airspace regions are entered by an object following a route. The simple flight, great arc or point to point routes are supported.
The service returns airspace identifying information, the times and positions of entry and exit and optionally, the object's path while in the airspace. Both airspace intersections and airspace proximity results can be returned, see the settings below.
{ "Path": {}, "IncludePath": true, "AirspaceOptions": {options defined here}, "UseHorizontalProximity": true, "HorizontalProximityThreshold": 2000, "UseVerticalProximity": true, "VerticalProximityThreshold": 30 }
This example determines all airspaces entered by a drone following a simple flight path through the state of North Carolina, returning path data in latitude, longitude format. Note that the altitude of 100 meters will cause some airspaces to be entered, but airspaces have varying altitude boundaries. When testing the service, try changing the altitude to see which other airspaces are entered. Only the ControlledAirspace category is used to select airspaces in this example. Try changing thes categories to see how the results change.
{ "Path": { "Start": "2016-09-18T00:00:00", "Waypoints": [ { "Latitude": 35.74664809, "Longitude": -82.68041262 }, { "Latitude": 35.18442928, "Longitude": -82.42519487 }, { "Latitude": 34.96250080, "Longitude": -80.26139220 }, { "Latitude": 35.62088862, "Longitude": -80.13563273 }, { "Latitude": 35.29169471, "Longitude": -81.70022851 } ], "TurningRadius": 15, "Speed": 20, "Altitude": 100, "MeanSeaLevel": true, "OutputSettings": { "Step": 300, "TimeFormat": "UTC", "CoordinateFormat": { "Coord": "LLA" } } }, "IncludePath": true, "AirspaceOptions": { "Categories": [ "ControlledAirspace", "Restricted" ] } }
Note that path data is not returned if the amount of time the vehicle spends in the airspace is less than the step in the OutputSettings. The UnrecognizedAirspaceIds array contains airspaceIds that were sent to the service, but not recognized.
{ "UnrecognizedAirspaceIds": [], "AirspacesAccessed": [ { "Entry": { "Position": { "Latitude": 35.515029993326849, "Longitude": -82.575052140074362, "Altitude": 68.638402520037 }, "SensorStates": [], "Time": "2016-09-18T00:22:50.6729292Z" }, "Exit": { "Position": { "Latitude": 35.358665042199775, "Longitude": -82.504096839793419, "Altitude": 68.270678092177533 }, "SensorStates": [], "Time": "2016-09-18T00:38:15.9818757Z" }, "Path": [ { "Position": { "Latitude": 35.493175676002181, "Longitude": -82.5651267206106, "Altitude": 68.613741283207077 }, "SensorStates": [], "Time": "2016-09-18T00:25:00.0000000Z" }, { "Position": { "Latitude": 35.442479911758674, "Longitude": -82.542113067989462, "Altitude": 68.485032261219331 }, "SensorStates": [], "Time": "2016-09-18T00:30:00.0000000Z" }, { "Position": { "Latitude": 35.391783720961726, "Longitude": -82.5191138400917, "Altitude": 68.355610467664746 }, "SensorStates": [], "Time": "2016-09-18T00:35:00.0000000Z" } ], "AirspaceId": "ASHEVILLE CLASS C", "Name": "ASHEVILLE CLASS C", "Properties": { "Category": "ControlledAirspace" } }, { "Entry": { "Position": { "Latitude": 35.325897653757607, "Longitude": -80.192106635819826, "Altitude": 68.303955910569215 }, "SensorStates": [], "Time": "2016-09-18T04:15:11.1430085Z" }, "Exit": { "Position": { "Latitude": 35.513424687251117, "Longitude": -80.1562299190182, "Altitude": 68.303441622419044 }, "SensorStates": [], "Time": "2016-09-18T04:32:44.1125684Z" }, "Path": [ { "Position": { "Latitude": 35.377341786828325, "Longitude": -80.182272986769718, "Altitude": 68.308154698253063 }, "SensorStates": [], "Time": "2016-09-18T04:20:00.0000000Z" }, { "Position": { "Latitude": 35.430769975070369, "Longitude": -80.172053383238833, "Altitude": 68.316114202102355 }, "SensorStates": [], "Time": "2016-09-18T04:25:00.0000000Z" }, { "Position": { "Latitude": 35.484197689614604, "Longitude": -80.161827027557109, "Altitude": 68.32774408860071 }, "SensorStates": [], "Time": "2016-09-18T04:30:00.0000000Z" } ], "AirspaceId": "ALBEMARLE CLASS D", "Name": "ALBEMARLE CLASS D", "Properties": { "Category": "ControlledAirspace" } } ] }
This example determines when the drone is within a certain distance (proximity) of an airspace. The horizontal proximity distance threshold is set to 2 kilometers, and the vertical proximity distance is set to 30 meters. Instead of querying all airspaces about a possible proximity warning, only airspaces that are in the ControlledAirspace category and are within a 300 kilometer circular radius of the drone's starting position are assessed.
{ "Path": { "Start": "2016-09-18T00:00:00", "Waypoints": [ { "Latitude": 35.74664809, "Longitude": -82.68041262 }, { "Latitude": 35.18442928, "Longitude": -82.42519487 }, { "Latitude": 34.96250080, "Longitude": -80.26139220 }, { "Latitude": 35.62088862, "Longitude": -80.13563273 }, { "Latitude": 35.29169471, "Longitude": -81.70022851 } ], "TurningRadius": 15, "Speed": 20, "Altitude": 100, "MeanSeaLevel": true, "OutputSettings": { "Step": 300, "TimeFormat": "UTC", "CoordinateFormat": { "Coord": "LLA" } } }, "IncludePath": true, "AirspaceOptions": { "Categories": [ "ControlledAirspace" ], "UseRegionalAirspaceQuery": true, "RegionRadius": 300000, "RegionCenter": { "Latitude": 35.74664809, "Longitude": -82.68041262 } }, "UseHorizontalProximity": true, "HorizontalProximityThreshold": 2000, "UseVerticalProximity": true, "VerticalProximityThreshold": 30 }
{ "UnrecognizedAirspaceIds": [], "AirspacesAccessed": [ { "Entry": { "Position": { "Latitude": 35.531572032163865, "Longitude": -82.58256673254283, "Altitude": 68.645590122260884 }, "SensorStates": [], "Time": "2016-09-18T00:21:12.7819625Z" }, "Exit": { "Position": { "Latitude": 35.342198227424781, "Longitude": -82.496632606251154, "Altitude": 68.227364759191858 }, "SensorStates": [], "Time": "2016-09-18T00:39:53.4248927Z" }, "Path": [ { "Position": { "Latitude": 35.493175676002181, "Longitude": -82.5651267206106, "Altitude": 68.613741283207077 }, "SensorStates": [], "Time": "2016-09-18T00:25:00.0000000Z" }, { "Position": { "Latitude": 35.442479911758674, "Longitude": -82.542113067989462, "Altitude": 68.485032261219331 }, "SensorStates": [], "Time": "2016-09-18T00:30:00.0000000Z" }, { "Position": { "Latitude": 35.391783720961726, "Longitude": -82.5191138400917, "Altitude": 68.355610467664746 }, "SensorStates": [], "Time": "2016-09-18T00:35:00.0000000Z" } ], "AirspaceId": "ASHEVILLE CLASS C", "Name": "ASHEVILLE CLASS C", "Properties": { "Category": "ControlledAirspace" } }, { "Entry": { "Position": { "Latitude": 35.308140286522857, "Longitude": -80.195499526047755, "Altitude": 68.303295234953225 }, "SensorStates": [], "Time": "2016-09-18T04:13:31.4365901Z" }, "Exit": { "Position": { "Latitude": 35.531502151927995, "Longitude": -80.152766969922865, "Altitude": 68.2656428823735 }, "SensorStates": [], "Time": "2016-09-18T04:34:25.6197725Z" }, "Path": [ { "Position": { "Latitude": 35.323913125190323, "Longitude": -80.192485855895484, "Altitude": 68.30386199197369 }, "SensorStates": [], "Time": "2016-09-18T04:15:00.0000000Z" }, { "Position": { "Latitude": 35.377341786828325, "Longitude": -80.182272986769718, "Altitude": 68.308154698253063 }, "SensorStates": [], "Time": "2016-09-18T04:20:00.0000000Z" }, { "Position": { "Latitude": 35.430769975070369, "Longitude": -80.172053383238833, "Altitude": 68.316114202102355 }, "SensorStates": [], "Time": "2016-09-18T04:25:00.0000000Z" }, { "Position": { "Latitude": 35.484197689614604, "Longitude": -80.161827027557109, "Altitude": 68.32774408860071 }, "SensorStates": [], "Time": "2016-09-18T04:30:00.0000000Z" } ], "AirspaceId": "ALBEMARLE CLASS D", "Name": "ALBEMARLE CLASS D", "Properties": { "Category": "ControlledAirspace" } } ] }
This service determines which airspace regions are crossed by a cylinder defining a region a vehicle is in. Since no specific route is followed, If any part of the defined cylinder crosses an airspace or is contained within an airspace, it is returned by this service.
{ "Center": {"Latitude":35.54519,"Longitude":-82.54936}, "Radius": 100, "MaxAltitude": 2300, "MinAltitude": 0, "AirspaceOptions": {options defined here}, "UseHorizontalProximity": true, "HorizontalProximityThreshold": 2000, "UseVerticalProximity": true, "VerticalProximityThreshold": 30 }
Determines all airspaces crossed by a drone flying in a point flight cylinder, with radius 500 meters, at 1400 meters above sea level. See Airspace Crossings for additional examples using other parameters.
{ "Center": { "Latitude": 35.54519, "Longitude": -82.54936 }, "Radius": 500, "MaxAltitude": 1400 }
{ "UnrecognizedAirspaceIds": [], "AirspacesAccessed": [ { "AirspaceId": "MISSION HOSPITALS", "Name": "MISSION HOSPITALS", "Properties": { "Category": "Airport", "Phone": "No phone provided" } }, { "AirspaceId": "ASHEVILLE CLASS C1", "Name": "ASHEVILLE CLASS C", "Properties": { "Category": "ControlledAirspace" } } ] }
This service will return airspaceIds for airspaces defined by the input options
See Defining Airspace Options.
Find all airspaces in several categories within a 1 kilometer radius of the specified latitude and longitude
Note that the categories specified are the same ones that would be used if the categories object was left off of the input data. This is the default set of categories.
{ "Categories": [ "ControlledAirspace", "Airport", "Restricted", "SpecialUseArea", "Parks" ], "RegionCenter": { "Latitude": 38.890903, "Longitude": -77.036035, "Altitude": 0 }, "MeanSeaLevel": true, "UseRegionalAirspaceQuery": true, "RegionRadius": 1000 }
{ "AirspaceIds": [ { "AirspaceId": "RONALD REAGAN WASHINGTON NATIONAL", "Name": "RONALD REAGAN WASHINGTON NATIONAL", "Properties": { "Category": "Airport", "Phone": "703-417-8050" } }, { "AirspaceId": "WHC", "Name": "WHC", "Properties": { "Category": "Airport", "Phone": "202-877-7000" } }, { "AirspaceId": "CHILDREN'S HOSPITAL", "Name": "CHILDREN'S HOSPITAL", "Properties": { "Category": "Airport", "Phone": "202-476-5433" } }, { "AirspaceId": "WASHINGTON POST", "Name": "WASHINGTON POST", "Properties": { "Category": "Airport", "Phone": "No phone provided" } }, { "AirspaceId": "US PARK POLICE EAGLE'S NEST", "Name": "US PARK POLICE EAGLE'S NEST", "Properties": { "Category": "Airport", "Phone": "202-690-0738" } }, { "AirspaceId": "MPD 3RD DISTRICT", "Name": "MPD 3RD DISTRICT", "Properties": { "Category": "Airport", "Phone": "202-727-4368" } }, { "AirspaceId": "SPIRIT OF WASHINGTON", "Name": "SPIRIT OF WASHINGTON", "Properties": { "Category": "Airport", "Phone": "202-484-2320" } }, { "AirspaceId": "BOLLING AFB", "Name": "BOLLING AFB", "Properties": { "Category": "Airport", "Phone": "No phone provided" } }, { "AirspaceId": "MPD 2ND", "Name": "MPD 2ND", "Properties": { "Category": "Airport", "Phone": "202-727-4368" } }, { "AirspaceId": "MPD 5TH", "Name": "MPD 5TH", "Properties": { "Category": "Airport", "Phone": "202-727-4368" } }, { "AirspaceId": "GEORGETOWN UNIV HOSP HELISTOP", "Name": "GEORGETOWN UNIV HOSP HELISTOP", "Properties": { "Category": "Airport", "Phone": "202-444-3836" } }, { "AirspaceId": "PENTAGON AHP", "Name": "PENTAGON AHP", "Properties": { "Category": "Airport", "Phone": "No phone provided" } }, { "AirspaceId": "SOUTH CAPITOL STREET", "Name": "SOUTH CAPITOL STREET", "Properties": { "Category": "Airport", "Phone": "202-484-8616" } }, { "AirspaceId": "WASHINGTON-TRI AREA CLASS B AREA A2", "Name": "WASHINGTON-TRI AREA CLASS B AREA A", "Properties": { "Category": "ControlledAirspace" } }, { "AirspaceId": "WASHINGTON-TRI AREA CLASS B AREA B", "Name": "WASHINGTON-TRI AREA CLASS B AREA B", "Properties": { "Category": "ControlledAirspace" } }, { "AirspaceId": "WASHINGTON-TRI AREA CLASS B AREA C1", "Name": "WASHINGTON-TRI AREA CLASS B AREA C", "Properties": { "Category": "ControlledAirspace" } }, { "AirspaceId": "P-56A DISTRICT OF COLUMBIA", "Name": "P-56A DISTRICT OF COLUMBIA", "Properties": { "Category": "SpecialUseArea", "Type": "PA" } }, { "AirspaceId": "East Potomac Park Hains Point", "Name": "East Potomac Park Hains Point", "Properties": { "Category": "Parks" } }, { "AirspaceId": "Lafayette Square", "Name": "Lafayette Square", "Properties": { "Category": "Parks" } }, { "AirspaceId": "Pan American Annex", "Name": "Pan American Annex", "Properties": { "Category": "Parks" } }, { "AirspaceId": "Park", "Name": "Park", "Properties": { "Category": "Parks" } }, { "AirspaceId": "Pennsylvania Avenue NHS", "Name": "Pennsylvania Avenue NHS", "Properties": { "Category": "Parks" } }, { "AirspaceId": "Rawlins Park", "Name": "Rawlins Park", "Properties": { "Category": "Parks" } }, { "AirspaceId": "The Mall, Agricultural Grounds", "Name": "The Mall, Agricultural Grounds", "Properties": { "Category": "Parks" } }, { "AirspaceId": "The Mall, Smithsonian Grounds", "Name": "The Mall, Smithsonian Grounds", "Properties": { "Category": "Parks" } }, { "AirspaceId": "Triangle Park", "Name": "Triangle Park", "Properties": { "Category": "Parks" } }, { "AirspaceId": "Triangle Park (BOLIVAR [SIMON] STATUE)", "Name": "Triangle Park (BOLIVAR [SIMON] STATUE)", "Properties": { "Category": "Parks" } }, { "AirspaceId": "Washinton Monument", "Name": "Washinton Monument", "Properties": { "Category": "Parks" } }, { "AirspaceId": "West Potomac Park", "Name": "West Potomac Park", "Properties": { "Category": "Parks" } }, { "AirspaceId": "White House", "Name": "White House", "Properties": { "Category": "Parks" } }, { "AirspaceId": "Whitman (Walt) Park", "Name": "Whitman (Walt) Park", "Properties": { "Category": "Parks" } } ] }
This service checks to see if the supplied location point is within any airspaces. If this service is called in real time during a flight, to allow the service to perform best you should supply it with only a few airspaces to assess. These can be retrieved from the Select Airspaces service above, and then supplied to this service using the AirspaceId parameter in the airspace options. See Defining Airspace Options.
{ "Location":{"Latitude":37.05542,"Longitude":-76.45794, "Altitude":40}, "MeanSeaLevel": true, "AirspaceOptions": {options defined here}, "UseHorizontalProximity": true, "HorizontalProximityThreshold": 2000, "UseVerticalProximity": true, "VerticalProximityThreshold": 30, }
Determine whether the Location is within the proximity boundary or within the airspace itself for any of the supplied airspaces. The default ProximityThreshold of 2000 meters will be used. Note that if UseProximity is set to false, this service call returns 0 results.
The AirspaceIds were retrieved using the Select Airspaces service, with RegionCenter set to the same Location used here, and RegionRadius set to 100000.
{ "Location": { "Latitude": 37.05542, "Longitude": -76.45794, "Altitude": 40 }, "UseHorizontalProximity": true, "AirspaceOptions": { "AirspaceIds": [ "NORFOLK INTERNATIONAL AIRPORT CLASS C", "NORFOLK INTERNATIONAL AIRPORT CLASS C1", "NORFOLK INTERNATIONAL AIRPORT CLASS C2", "RICHARD EVELYN BYRD INTL AIRPORT CLASS C", "RICHARD EVELYN BYRD INTL AIRPORT CLASS C1", "ELIZABETH CITY CLASS D", "FORT EUSTIS CLASS D", "HAMPTON ROADS CLASS D", "NEWPORT NEWS CLASS D", "NORFOLK NAS CLASS D", "OCEANA NAS CLASS D" ] } }
Any airspaces for which the Location point is inside, will show up in the AirspacesAccessed list.
{ "UnrecognizedAirspaceIds": [], "AirspacesAccessed": [ { "AirspaceId": "HAMPTON ROADS CLASS D", "Name": "HAMPTON ROADS CLASS D", "Properties": { "Category": "ControlledAirspace" } }, { "AirspaceId": "NEWPORT NEWS CLASS D", "Name": "NEWPORT NEWS CLASS D", "Properties": { "Category": "ControlledAirspace" } } ] }