Last active
August 4, 2020 18:38
-
-
Save casselc/09b1ed46a86b500cabd2e14ada1a3719 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Atfmdataservice/tfmDataService, | |
:attrs | |
#:xmlns.http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema-instance{:schemaLocation | |
"urn:us:gov:dot:faa:atm:tfm:tfmdataservice TFMData_Service.xsd"}, | |
:content | |
({:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Atfmdataservice/fltdOutput, | |
:attrs {}, | |
:content | |
({:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Aflightdata/fltdMessage, | |
:attrs | |
{:acid "NKS424", | |
:airline "NKS", | |
:sensitivity "A", | |
:depArpt "KLAX", | |
:msgType "trackInformation", | |
:sourceTimeStamp "2020-07-07T23:13:52Z", | |
:sourceFacility "KMSP", | |
:cdmPart "false", | |
:fdTrigger "HCS_TRACK_MSG", | |
:arrArpt "KMSP", | |
:flightRef "135346551"}, | |
:content | |
({:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Aflightdata/trackInformation, | |
:attrs {}, | |
:content | |
({:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Aflightdatacommonmessages/qualifiedAircraftId, | |
:attrs {}, | |
:content | |
({:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Atfmdatacoreelements/aircraftId, | |
:attrs {}, | |
:content ("NKS424")} | |
{:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Atfmdatacoreelements/computerId, | |
:attrs {}, | |
:content | |
({:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Atfmdatacoreelements/facilityIdentifier, | |
:attrs {}, | |
:content ("KMSP")} | |
{:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Atfmdatacoreelements/idNumber, | |
:attrs {}, | |
:content ("284")})} | |
{:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Atfmdatacoreelements/gufi, | |
:attrs {}, | |
:content ("KL66181300")} | |
{:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Atfmdatacoreelements/igtd, | |
:attrs {}, | |
:content ("2020-07-07T20:15:00Z")} | |
{:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Atfmdatacoreelements/departurePoint, | |
:attrs {}, | |
:content | |
({:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Atfmdatacoreelements/airport, | |
:attrs {}, | |
:content ("KLAX")})} | |
{:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Atfmdatacoreelements/arrivalPoint, | |
:attrs {}, | |
:content | |
({:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Atfmdatacoreelements/airport, | |
:attrs {}, | |
:content ("KMSP")})})} | |
{:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Aflightdatacommonmessages/speed, | |
:attrs {}, | |
:content ("246")} | |
{:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Aflightdatacommonmessages/reportedAltitude, | |
:attrs {}, | |
:content | |
({:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Atfmdatacoreelements/assignedAltitude, | |
:attrs {}, | |
:content | |
({:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Atfmdatacoreelements/simpleAltitude, | |
:attrs {}, | |
:content ("038")})})} | |
{:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Aflightdatacommonmessages/position, | |
:attrs {}, | |
:content | |
({:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Atfmdatacoreelements/latitude, | |
:attrs {}, | |
:content | |
({:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Atfmdatacoreelements/latitudeDMS, | |
:attrs {:degrees "44", :direction "NORTH", :minutes "57"}, | |
:content ()})} | |
{:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Atfmdatacoreelements/longitude, | |
:attrs {}, | |
:content | |
({:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Atfmdatacoreelements/longitudeDMS, | |
:attrs {:degrees "093", :direction "WEST", :minutes "28"}, | |
:content ()})})} | |
{:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Aflightdatacommonmessages/timeAtPosition, | |
:attrs {}, | |
:content ("2020-07-07T23:13:52Z")} | |
{:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Aflightdatacommonmessages/ncsmTrackData, | |
:attrs {}, | |
:content | |
({:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Aflightdatacommonmessages/eta, | |
:attrs | |
{:etaType "ESTIMATED", :timeValue "2020-07-07T23:21:21Z"}, | |
:content ()} | |
{:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Aflightdatacommonmessages/rvsmData, | |
:attrs | |
{:currentCompliance "true", | |
:equipped "true", | |
:futureCompliance "true"}, | |
:content ()} | |
{:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Aflightdatacommonmessages/arrivalFixAndTime, | |
:attrs {:arrTime "2020-07-07T23:06:57Z", :fixName "BAINY"}, | |
:content ()} | |
{:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Aflightdatacommonmessages/departureFixAndTime, | |
:attrs {:arrTime "2020-07-07T20:36:00Z", :fixName "DAG"}, | |
:content ()} | |
{:tag | |
:xmlns.urn%3Aus%3Agov%3Adot%3Afaa%3Aatm%3Atfm%3Aflightdatacommonmessages/nextEvent, | |
:attrs | |
{:latitudeDecimal "44.85405", | |
:longitudeDecimal "-93.4310028"}, | |
:content ()})})})})})} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
<ds:tfmDataService xmlns:ds="urn:us:gov:dot:faa:atm:tfm:tfmdataservice" | |
xmlns="urn:us:gov:dot:faa:atm:tfm:tfmdataservice" | |
xmlns:fdm="urn:us:gov:dot:faa:atm:tfm:flightdata" | |
xmlns:nxce="urn:us:gov:dot:faa:atm:tfm:tfmdatacoreelements" | |
xmlns:nxcm="urn:us:gov:dot:faa:atm:tfm:flightdatacommonmessages" | |
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:us:gov:dot:faa:atm:tfm:tfmdataservice TFMData_Service.xsd"> | |
<fltdOutput> | |
<fdm:fltdMessage acid="NKS424" airline="NKS" arrArpt="KMSP" cdmPart="false" depArpt="KLAX" fdTrigger="HCS_TRACK_MSG" flightRef="135346551" msgType="trackInformation" sensitivity="A" sourceFacility="KMSP" sourceTimeStamp="2020-07-07T23:13:52Z"> | |
<fdm:trackInformation> | |
<nxcm:qualifiedAircraftId> | |
<nxce:aircraftId>NKS424</nxce:aircraftId> | |
<nxce:computerId> | |
<nxce:facilityIdentifier>KMSP</nxce:facilityIdentifier> | |
<nxce:idNumber>284</nxce:idNumber> | |
</nxce:computerId> | |
<nxce:gufi>KL66181300</nxce:gufi> | |
<nxce:igtd>2020-07-07T20:15:00Z</nxce:igtd> | |
<nxce:departurePoint> | |
<nxce:airport>KLAX</nxce:airport> | |
</nxce:departurePoint> | |
<nxce:arrivalPoint> | |
<nxce:airport>KMSP</nxce:airport> | |
</nxce:arrivalPoint> | |
</nxcm:qualifiedAircraftId> | |
<nxcm:speed>246</nxcm:speed> | |
<nxcm:reportedAltitude> | |
<nxce:assignedAltitude> | |
<nxce:simpleAltitude>038</nxce:simpleAltitude> | |
</nxce:assignedAltitude> | |
</nxcm:reportedAltitude> | |
<nxcm:position> | |
<nxce:latitude> | |
<nxce:latitudeDMS degrees="44" direction="NORTH" minutes="57"/> | |
</nxce:latitude> | |
<nxce:longitude> | |
<nxce:longitudeDMS degrees="093" direction="WEST" minutes="28"/> | |
</nxce:longitude> | |
</nxcm:position> | |
<nxcm:timeAtPosition>2020-07-07T23:13:52Z</nxcm:timeAtPosition> | |
<nxcm:ncsmTrackData> | |
<nxcm:eta etaType="ESTIMATED" timeValue="2020-07-07T23:21:21Z"/> | |
<nxcm:rvsmData currentCompliance="true" equipped="true" futureCompliance="true"/> | |
<nxcm:arrivalFixAndTime arrTime="2020-07-07T23:06:57Z" fixName="BAINY"/> | |
<nxcm:departureFixAndTime arrTime="2020-07-07T20:36:00Z" fixName="DAG"/> | |
<nxcm:nextEvent latitudeDecimal="44.85405" longitudeDecimal="-93.4310028"/> | |
</nxcm:ncsmTrackData> | |
</fdm:trackInformation> | |
</fdm:fltdMessage> | |
</fltdOutput> | |
</ds:tfmDataService> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns chucklehead.parse | |
(:require | |
[clojure.data.xml :refer [alias-uri]] | |
[clojure.java.io :refer [input-stream]] | |
[java-time :as jt] | |
[meander.epsilon :as m])) | |
(alias-uri :tx "urn:us:gov:dot:faa:atm:tfm:tfmdataservice") | |
(alias-uri :fce "urn:us:gov:dot:faa:atm:tfm:ficommondatatypes") | |
(alias-uri :fcm "urn:us:gov:dot:faa:atm:tfm:ficommonmessages") | |
(alias-uri :fm2 "urn:us:gov:dot:faa:atm:tfm:ficommonmessages2") | |
(alias-uri :fim "urn:us:gov:dot:faa:atm:tfm:flowinformation") | |
(alias-uri :fdm "urn:us:gov:dot:faa:atm:tfm:flightdata") | |
(alias-uri :frt "urn:us:gov:dot:faa:atm:tfm:rapttimeline") | |
(alias-uri :trr "urn:us:gov:dot:faa:atm:tfm:tfmrequestreplytypes") | |
(alias-uri :ax "http://www.fixm.aero/tfm/3.1") | |
(alias-uri :nxce "urn:us:gov:dot:faa:atm:tfm:tfmdatacoreelements") | |
(alias-uri :nxcm "urn:us:gov:dot:faa:atm:tfm:flightdatacommonmessages") | |
(defn- dms->decimal | |
"Returns decimal representation of the DMS coordinate specified in the map." | |
[{:keys [degrees minutes seconds direction] :or {seconds "0"}}] | |
(let [d (Integer/parseInt degrees) | |
m (Integer/parseInt minutes) | |
s (Integer/parseInt seconds) | |
dir (case direction | |
("NORTH" "EAST") 1 | |
("SOUTH" "WEST") -1)] | |
(float (* (+ d (/ m 60) (/ s 3600)) | |
dir)))) | |
(m/defsyntax speed | |
[speed] | |
`{:tag ::nxcm/speed | |
:content ((m/app Integer/parseInt ~speed))}) | |
(m/defsyntax position | |
[latitude longitude] | |
`{:tag ::nxcm/position | |
:content (m/scan | |
{:tag ::nxce/latitude | |
:content ({:tag ::nxce/latitudeDMS | |
:attrs (m/app dms->decimal ~latitude)})} | |
{:tag ::nxce/longitude | |
:content ({:tag ::nxce/longitudeDMS | |
:attrs (m/app dms->decimal ~longitude)})})}) | |
(m/defsyntax altitude | |
[altitude] | |
`{:tag ::nxcm/reportedAltitude | |
:content ({:tag ::nxce/assignedAltitude | |
:content ((m/or | |
{:tag ::nxce/simpleAltitude | |
:content (~altitude)} | |
{:tag ::nxce/blockedAltitude | |
:attrs {:min (~altitude)}} | |
(m/let [~altitude "UNKNOWN"])))})}) | |
(m/defsyntax time-at-position | |
[track-ts] | |
`{:tag ::nxcm/timeAtPosition | |
:content ((m/app jt/offset-date-time ~track-ts))}) | |
(m/defsyntax eta | |
[eta-ts eta-type] | |
`{:tag ::nxcm/eta | |
:attrs {:timeValue (m/app jt/offset-date-time ~eta-ts) | |
:etaType ~eta-type}}) | |
(m/defsyntax track-with-next | |
[latitude longitude eta-ts eta-type] | |
`{:tag ::nxcm/ncsmTrackData | |
:content (m/separated | |
(eta ~eta-ts ~eta-type) | |
{:tag ::nxcm/nextEvent | |
:attrs {:latitudeDecimal (m/app Double/parseDouble ~latitude) | |
:longitudeDecimal (m/app Double/parseDouble ~longitude)}})}) | |
(m/defsyntax route-with-next | |
[latitude longitude eta-ts eta-type] | |
`{:tag ::nxcm/ncsmRouteData | |
:content (m/separated | |
(eta ~eta-ts ~eta-type) | |
{:tag ::nxcm/nextPosition | |
:attrs {:latitudeDecimal (m/app Double/parseDouble ~latitude) | |
:longitudeDecimal (m/app Double/parseDouble ~longitude)}})}) | |
(m/defsyntax track-info | |
[track-ts speed altitude latitude longitude next-latitude next-longitude eta-ts eta-type] | |
`({:tag ::fdm/trackInformation | |
:content (m/scan | |
(speed ~speed) | |
(altitude ~altitude) | |
(position ~latitude ~longitude) | |
(time-at-position ~track-ts) | |
(m/or (track-with-next ~next-latitude ~next-longitude ~eta-ts ~eta-type) | |
(route-with-next ~next-latitude ~next-longitude ~eta-ts ~eta-type) | |
(m/let [~next-latitude 0.0 ~next-longitude 0.0 ~eta-ts (jt/offset-date-time "1942-04-01T00:00:00.000000000-00:00") ~eta-type "PROPOSED"])))})) | |
(m/defsyntax track-info-msg | |
[flight-ref track-ts aircraft-id airline departure-airport arrival-airport speed altitude latitude longitude next-latitude next-longitude eta-ts eta-type] | |
`{:tag ::fdm/fltdMessage | |
:attrs {:msgType "trackInformation" | |
:flightRef (m/app Long/parseLong ~flight-ref) | |
:acid ~aircraft-id | |
:airline ~airline | |
:depArpt (m/or (m/some ~departure-airport) | |
(m/let [~departure-airport "null"])) | |
:arrArpt (m/or (m/some ~arrival-airport) | |
(m/let [~arrival-airport "null"]))} | |
:content (track-info ~track-ts ~speed ~altitude ~latitude ~longitude ~next-latitude ~next-longitude ~eta-ts ~eta-type)}) | |
(defn trackInformation->flight-track | |
[track-xml] | |
(m/rewrite track-xml | |
(track-info-msg | |
?flight-ref | |
?track-ts | |
?aircraft-id | |
?airline | |
?departure-airport | |
?arrival-airport | |
?speed | |
?altitude | |
?latitude | |
?longitude | |
?next-lat | |
?next-long | |
?eta-ts | |
?eta-type) | |
{:flight/ref ?flight-ref | |
:flight/aircraft-id ?aircraft-id | |
:flight/airline ?airline | |
:flight/arrival-airport ?arrival-airport | |
:flight/departure-airport ?departure-airport | |
:track/at-ts ?track-ts | |
:track/latitude ?latitude | |
:track/longitude ?longitude | |
:track/next-latitude ?next-lat | |
:track/next-longitude ?next-long | |
:track/speed ?speed | |
:track/altitude ?altitude | |
:track/eta-ts ?eta-ts | |
:track/eta-type ?eta-type})) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment