;
; 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
; Satellite Situation Center's
;
; REST Web Services from an
; Exelis Visual Information
; Solutions
; (VIS) Interactive Data Language (IDL) program. It demonstrates the
; following:
;
; - Using a JSON representation for the request and response
; entity body.
; - Requesting the magnetic conjunction of a set of satellites.
;
;
; @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:
;
; - Using a JSON representation for the request and response
; entity body.
; - Requesting the magnetic conjunction of a set of satellites.
;
; @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