; ; NOSA HEADER START ; ; The contents of this file are subject to the terms of the NASA Open ; Source Agreement (NOSA), Version 1.3 only (the "Agreement"). You may ; not use this file except in compliance with the Agreement. ; ; You can obtain a copy of the agreement at ; docs/NASA_Open_Source_Agreement_1.3.txt ; or ; https://sscweb.gsfc.nasa.gov/WebServices/NASA_Open_Source_Agreement_1.3.txt. ; ; See the Agreement for the specific language governing permissions ; and limitations under the Agreement. ; ; When distributing Covered Code, include this NOSA HEADER in each ; file and include the Agreement file at ; docs/NASA_Open_Source_Agreement_1.3.txt. If applicable, add the ; following below this NOSA HEADER, with the fields enclosed by ; brackets "[]" replaced with your own identifying information: ; Portions Copyright [yyyy] [name of copyright owner] ; ; NOSA HEADER END ; ; Copyright (c) 2017 United States Government as represented by ; the National Aeronautics and Space Administration. No copyright is ; claimed in the United States under Title 17, U.S.Code. All Other ; Rights Reserved. ; ;

;+ ; This program is an example to demonstrate calling the ; <a href=“https://sscweb.gsfc.nasa.gov/“>Satellite Situation Center’s</a> ; <a href=“https://sscweb.gsfc.nasa.gov/WebServices/REST/”> ; REST Web Services</a> from an ; <a href=“http://www.harrisgeospatial.com/“>Exelis Visual Information ; Solutions</a> ; (VIS) Interactive Data Language (IDL) program. It demonstrates the ; following: ; <ul> ; <li>Using a JSON representation for the request and response ; entity body.</li> ; <li>Requesting the magnetic conjunction of a set of satellites.</li> ; </ul> ; ; @copyright Copyright (c) 2017 United States Government as ; represented by the National Aeronautics and Space Administration. ; No copyright is claimed in the United States under Title 17, ; U.S.Code. All Other Rights Reserved. ; ; @author B. Harris ;-

;+ ; This procedure is an example to demonstrate calling the SSC REST ; Web Services from an IDL program. It demonstrates the following: ; <ul> ; <li>Using a JSON representation for the request and response ; entity body.</li> ; <li>Requesting the magnetic conjunction of a set of satellites.</li> ; </ul> ; @requires 8.2 ;- pro SpdfSscWsExample2 compile_opt idl2

conjunctionReq = '{' + $
    '"Request": {' + $
        '"BfieldModel": {' + $
            '"ExternalBFieldModel": {' + $
                '"@class": "gov.nasa.gsfc.sscweb.schema.Tsyganenko89CBFieldModel",' + $
                '"KeyParameterValues": "KP_3_3_3"' + $
            '},' + $
            '"InternalBFieldModel": "IGRF",' + $
            '"TraceStopAltitude": 1' + $
        '},' + $
        '"ConditionOperator": "ALL",' + $
        '"Conditions": [' + $
            '"java.util.ArrayList",' + $
            '[' + $
                '{' + $
                    '"@class": "gov.nasa.gsfc.sscweb.schema.SatelliteCondition",' + $
                    '"Satellite": [' + $
                        '"java.util.ArrayList",' + $
                        '[' + $
                            '{' + $
                                '"BfieldTraceDirection": "SOUTH_HEMISPHERE",' + $
                                '"Id": "barrel1a"' + $
                            '},' + $
                            '{' + $
                                '"BfieldTraceDirection": "SOUTH_HEMISPHERE",' + $
                                '"Id": "rbspa"' + $
                            '},' + $
                            '{' + $
                                '"BfieldTraceDirection": "SOUTH_HEMISPHERE",' + $
                                '"Id": "rbspb"' + $
                            '}' + $
                        ']' + $
                    '],' + $
                    '"SatelliteCombination": 1' + $
                '},' + $
                '{' + $
                    '"@class": "gov.nasa.gsfc.sscweb.schema.LeadSatelliteCondition",' + $
                    '"ConjunctionArea": {' + $
                        '"@class": "gov.nasa.gsfc.sscweb.schema.BoxConjunctionArea",' + $
                        '"CoordinateSystem": "GEO",' + $
                        '"DeltaLatitude": 3.0,' + $
                        '"DeltaLongitude": 10.0' + $
                    '},' + $
                    '"Satellite": [' + $
                        '"java.util.ArrayList",' + $
                        '[' + $
                            '{' + $
                                '"BfieldTraceDirection": "SOUTH_HEMISPHERE",' + $
                                '"Id": "barrel1a"' + $
                            '}' + $
                        ']' + $
                    '],' + $
                    '"TraceType": "B_FIELD"' + $
                '}' + $
            ']' + $
        '],' + $
        '"Description": "Magnetic conjunction of at least 1 RBSP satellites with BARREL 1A (lead satellite).",' + $
        '"ExecuteOptions": {' + $
            '"ResultEmailAddress": null,' + $
            '"WaitForResult": true' + $
        '},' + $
        '"ResultOptions": {' + $
            '"FormatOptions": {' + $
                '"Cdf": null,' + $
                '"DateFormat": "YYYY_DDD",' + $
                '"DegreeDigits": 2,' + $
                '"DegreeFormat": "DECIMAL",' + $
                '"DistanceDigits": 1,' + $
                '"DistanceFormat": "INTEGER_KM",' + $
                '"LatLonFormat": "LAT_90_LON_360",' + $
                '"LinesPerPage": 55,' + $
                '"TimeFormat": "HH_HHHH"' + $
            '},' + $
            '"IncludeQueryInResult": true,' + $
            '"QueryResultType": "XML",' + $
            '"SubSatelliteCoordinateSystem": "GEO",' + $
            '"SubSatelliteCoordinateSystemType": "SPHERICAL",' + $
            '"TraceCoordinateSystem": "GEO"' + $
        '},' + $
        '"TimeInterval": {' + $
            '"End": [' + $
                '"javax.xml.datatype.XMLGregorianCalendar",' + $
                '"2013-02-14T00:00:00.000+0000"' + $
            '],' + $
            '"Start": [' + $
                '"javax.xml.datatype.XMLGregorianCalendar",' + $
                '"2013-01-29T00:00:00.000+0000"' + $
            ']' + $
        '}' + $
    '}' + $
'}'

; openw, 3, ‘conjunction.json’ ; printf, 3, conjunctionReq ; close, 3 ; json = json_parse(conjunctionReq) ; help, json

catch, errorStatus
if (errorStatus ne 0) then begin

    catch, /cancel

    requestUrl->GetProperty, RESPONSE_CODE=rspCode, $
         RESPONSE_HEADER=rspHdr, RESPONSE_FILENAME=rspFn

    PRINT, 'rspCode = ', rspCode
    PRINT, 'rspHdr= ', rspHdr
    PRINT, 'rspFn= ', rspFn

    obj_destroy, requestUrl

endif


userAgent = 'User-Agent: SpdfSscWsExample2 (' + $
    !version.os + ' ' + !version.arch + ') IDL/' + !version.release

sscUrl = 'http://sscweb-dev.sci.gsfc.nasa.gov/WS/sscr/2/conjunctions'
urlComponents = parse_url(sscUrl)

headers = [userAgent, $
           'Content-Type: application/json', $
           'Accept: application/json']

; headers = ‘Content-Type: application/json’

requestUrl = obj_new('IDLnetURL')
requestUrl->setProperty, $
    headers=headers, $
    url_scheme=urlComponents.scheme, $
    url_host=urlComponents.host, $
    url_port=urlComponents.port, $
    url_path=urlComponents.path

result = requestUrl->put(conjunctionReq, /buffer, /post, url=sscUrl)

; print, result ; result = ‘/home/btharris/Projects/Spdf/sscWebServices/src/idl/PutRsp.dat’

; spawn, ‘python -mjson.tool ’ + result, prettyResult ; print, prettyResult

conjunctionRes = json_parse(result)

queryResult = conjunctionRes['QueryResult']

; print, queryResult

status = queryResult['StatusCode']
print, status
queryRequest = queryResult['QueryRequest']
queryDescription = queryRequest['Description']
print, queryDescription

conjunctions = (queryResult['Conjunction'])[1]

; print, conjunctions print, ‘Conjunctions:’ for i = 0, n_elements(conjunctions) - 1 do begin

    print, format='(%"%d")',i
    conjunction = conjunctions[i]

; print, conjunction timeInterval = conjunction[‘TimeInterval’] startTime = (timeInterval[‘Start’])[1] endTime = (timeInterval[‘End’])[1] print, ’ ’, startTime, ’ - ’, endTime

    satDescriptions = conjunction['SatelliteDescription']
    for j = 0, n_elements(satDescriptions) - 1 do begin

    satDescription = (conjunction['SatelliteDescription'])[1,j]

; print, satDescription sat = (satDescription[‘Satellite’]) print, ’ ’, sat, ’ Latitude Longitude Radius’ description = (satDescription[‘Description’])[1,0] location = description[‘Location’] lat = location[‘Latitude’] lon = location[‘Longitude’] radius = location[‘Radius’] print, ’ ’, lat, lon, radius traceDescription = description[‘TraceDescription’] arcLength = traceDescription[‘ArcLength’] traceLoc = traceDescription[‘Location’] traceLat = traceLoc[‘Latitude’] traceLon = traceLoc[‘Longitude’] traceTarget = traceDescription[‘Target’] targetDistance = traceTarget[‘Distance’] targetLeadSatellite = traceTarget[‘LeadSatellite’] print, ’ Trace: ArcLength Latitude Longitude’ print, ’ ’, arcLength, traceLat, traceLon print, ’ Target: Distance LeadSatellite’ print, ’ ’, targetDistance, ’ ’, targetLeadSatellite endfor endfor

obj_destroy, requestUrl

end