::: content
[;{.source}]{.comments} {.source}[; NOSA HEADER START{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; The contents of this file are subject to the terms of the NASA Open {.source}]{.comments} {.source}[; Source Agreement (NOSA), Version 1.3 only (the "Agreement"). You may {.source}]{.comments} {.source}[; not use this file except in compliance with the Agreement.{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; You can obtain a copy of the agreement at{.source}]{.comments} {.source}[; docs/NASA_Open_Source_Agreement_1.3.txt{.source}]{.comments} {.source}[; or {.source}]{.comments} {.source}[; https://sscweb.gsfc.nasa.gov/WebServices/NASA_Open_Source_Agreement_1.3.txt.{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; See the Agreement for the specific language governing permissions{.source}]{.comments} {.source}[; and limitations under the Agreement.{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; When distributing Covered Code, include this NOSA HEADER in each{.source}]{.comments} {.source}[; file and include the Agreement file at {.source}]{.comments} {.source}[; docs/NASA_Open_Source_Agreement_1.3.txt. If applicable, add the {.source}]{.comments} {.source}[; following below this NOSA HEADER, with the fields enclosed by {.source}]{.comments} {.source}[; brackets "[]" replaced with your own identifying information: {.source}]{.comments} {.source}[; Portions Copyright [yyyy] [name of copyright owner}{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; NOSA HEADER END{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; Copyright (c) 2013-2021 United States Government as represented by {.source}]{.comments} {.source}[; the National Aeronautics and Space Administration. No copyright is {.source}]{.comments} {.source}[; claimed in the United States under Title 17, U.S.Code. All Other {.source}]{.comments} {.source}[; Rights Reserved.{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[;+{.source}]{.comments} {.source}[; This class represents the remotely callable interface to {.source}]{.comments} {.source}[; <a href="https://www.nasa.gov/">NASA</a>'s{.source}]{.comments} {.source}[; <a href="https://spdf.gsfc.nasa.gov/">Space Physics Data Facility</a> {.source}]{.comments} {.source}[; (SPDF){.source}]{.comments} {.source}[; <a href="https://sscweb.gsfc.nasa.gov/">Satellite Situation Center</a>{.source}]{.comments} {.source}[; (SSC). The current implementation only support the {.source}]{.comments} {.source}[; <a href="https://sscweb.gsfc.nasa.gov/WebServices/REST/#Get_Locations_POST">{.source}]{.comments} {.source}[; "data locations" functionality</a>. Supporting the "text (listing){.source}]{.comments} {.source}[; locations", "conjunctions" and/or "graphs" functionality is a {.source}]{.comments} {.source}[; future possibility if there were sufficient interest.{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @copyright Copyright (c) 2013-2017 United States Government as {.source}]{.comments} {.source}[; represented by the National Aeronautics and Space Administration.{.source}]{.comments} {.source}[; No copyright is claimed in the United States under Title 17, {.source}]{.comments} {.source}[; U.S.Code. All Other Rights Reserved.{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @author B. Harris{.source}]{.comments} {.source}[;-{.source}]{.comments} {.source}[;+{.source}]{.comments} {.source}[; Creates an object representing SSC.{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @keyword endpoint {in} {optional} {type=string}{.source}]{.comments} {.source}[; {default=self->getDefaultEndpoint()}{.source}]{.comments} {.source}[; URL of SSC web service .{.source}]{.comments} {.source}[; @keyword userAgent {in} {optional} {type=string} {default=SscWs}{.source}]{.comments} {.source}[; HTTP user-agent value used in communications with SSC.{.source}]{.comments} {.source}[; @keyword sslVerifyPeer {in} {optional} {type=int} {default=1}{.source}]{.comments} {.source}[; Specifies whether the authenticity of the peer's SSL{.source}]{.comments} {.source}[; certificate should be verified. When 0, the connection{.source}]{.comments} {.source}[; succeeds regardless of what the peer SSL certificate{.source}]{.comments} {.source}[; contains.{.source}]{.comments} {.source}[; @returns a reference to a SSC object.{.source}]{.comments} {.source}[;-{.source}]{.comments} {.source}[]{#SpdfSsc::init:source}function SpdfSsc::init, $ endpoint = endpoint, $ userAgent = userAgent, $ sslVerifyPeer = sslVerifyPeer compile_opt idl2 version = '%VERSION*' currentVersionUrl = $ 'https://sscweb.gsfc.nasa.gov/WebServices/REST/spdfSscVersion.txt' if ~keyword_set(endpoint) then begin endpoint = self->getDefaultEndpoint() endif if ~keyword_set(userAgent) then userAgent = 'SscWs' obj = self->SpdfRest::init( $ endpoint, version, currentVersionUrl, $ userAgent = userAgent + '/' + version, $ sslVerifyPeer = sslVerifyPeer) return, obj end {.source}[;+{.source}]{.comments} {.source}[; Performs cleanup operations when this object is destroyed.{.source}]{.comments} {.source}[;-{.source}]{.comments} {.source}[]{#SpdfSsc::cleanup:source}pro SpdfSsc::cleanup compile_opt idl2 self->SpdfRest::cleanup end {.source}[;+{.source}]{.comments} {.source}[; Gets the default endpoint value.{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @returns default endpoint string value.{.source}]{.comments} {.source}[;-{.source}]{.comments} {.source}[]{#SpdfSsc::getDefaultEndpoint:source}function SpdfSsc::getDefaultEndpoint compile_opt idl2 endpoint = 'http' releaseComponents = strsplit(!version.release, '.', /extract) if (releaseComponents[0] ge '8') or $ (releaseComponents[0] eq '8' and $ releaseComponents[1] ge '4') then begin {.source}[; Even though earlier versions of IDL are suppose to support{.source}]{.comments} {.source}[; https, they do not (at least they do not support https to{.source}]{.comments} {.source}[; cdaweb).{.source}]{.comments}endpoint = endpoint + 's' endif return, endpoint + '://sscweb.gsfc.nasa.gov/WS/sscr/2' end{.source}[;+{.source}]{.comments} {.source}[; Gets a description of all the observatories that are available.{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @keyword httpErrorReporter {in} {optional} {.source}]{.comments} {.source}[; {type=SpdfHttpErrorReporter}{.source}]{.comments} {.source}[; used to report an HTTP error.{.source}]{.comments} {.source}[; @returns array of SpdfObservatoryDescription objects.{.source}]{.comments} {.source}[;-{.source}]{.comments} {.source}[]{#SpdfSsc::getObservatories:source}function SpdfSsc::getObservatories, $ httpErrorReporter=errorReporter compile_opt idl2 url = self.endpoint + '/observatories' observatoryDom = $ self->makeGetRequest(url, errorReporter=errorReporter) if ~obj_valid(observatoryDom) then return, objarr(1) observatoryElements = $ observatoryDom->getElementsByTagName('Observatory') observatories = objarr(observatoryElements->getLength(), /nozero) for i = 0, observatoryElements->getLength() - 1 do begin observatoryElement = observatoryElements->item(i) id = $ self->getNamedElementsFirstChildValue( $ observatoryElement, 'Id') name = $ self->getNamedElementsFirstChildValue( $ observatoryElement, 'Name') resolution = $ self->getNamedElementsFirstChildValue( $ observatoryElement, 'Resolution') startTime = $ self->getJulDate((observatoryElement->$ getElementsByTagName('StartTime'))->item(0)) endTime = $ self->getJulDate((observatoryElement->$ getElementsByTagName('EndTime'))->item(0)) geometry = $ self->getNamedElementsFirstChildValue( $ observatoryElement, 'Geometry') trajectoryGeometry = $ self->getNamedElementsFirstChildValue( $ observatoryElement, 'TrajectoryGeometry') resourceId = $ self->getNamedElementsFirstChildValue( $ observatoryElement, 'ResourceId') groupIds = $ self->getNamedElementsFirstChildValue( $ observatoryElement, 'GroupId') observatories[i] = $ obj_new('SpdfObservatoryDescription', id, name, $ resolution, startTime, endTime, geometry, $ trajectoryGeometry, resourceId, groupIds) endfor obj_destroy, observatoryDom return, observatories end {.source}[;+{.source}]{.comments} {.source}[; Gets a description of all the ground stations that are available.{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @keyword httpErrorReporter {in} {optional} {.source}]{.comments} {.source}[; {type=SpdfHttpErrorReporter}{.source}]{.comments} {.source}[; used to report an HTTP error.{.source}]{.comments} {.source}[; @returns array of SpdfGroundStation objects.{.source}]{.comments} {.source}[;-{.source}]{.comments} {.source}[]{#SpdfSsc::getGroundStations:source}function SpdfSsc::getGroundStations, $ httpErrorReporter=errorReporter compile_opt idl2 url = self.endpoint + '/groundStations' gsDom = self->makeGetRequest(url, errorReporter=errorReporter) if ~obj_valid(gsDom) then return, objarr(1) gsElements = gsDom->getElementsByTagName('GroundStation') groundStations = objarr(gsElements->getLength(), /nozero) for i = 0, gsElements->getLength() - 1 do begin gsElement = gsElements->item(i) id = $ self->getNamedElementsFirstChildValue(gsElement, 'Id') name = $ self->getNamedElementsFirstChildValue(gsElement, 'Name') latitude = $ self->getNamedElementsFirstChildValue( $ gsElement, 'Latitude') longitude = $ self->getNamedElementsFirstChildValue( $ gsElement, 'Longitude') location = obj_new('SpdfSurfaceGeographicCoordinates', $ latitude, longitude) groundStations[i] = $ obj_new('SpdfGroundStation', id, name, location) endfor obj_destroy, gsDom return, groundStations end {.source}[;+{.source}]{.comments} {.source}[; Request the specified satellite location information from SSC.{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @private{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @param locationRequest {in} {type=SpdfLocationRequest}{.source}]{.comments} {.source}[; specifies the information to get.{.source}]{.comments} {.source}[; @keyword httpErrorReporter {in} {optional} {.source}]{.comments} {.source}[; {type=SpdfHttpErrorReporter}{.source}]{.comments} {.source}[; used to report an HTTP error.{.source}]{.comments} {.source}[; @returns an SpdfSscDataResult or SpdfSscFileResult object.{.source}]{.comments} {.source}[;-{.source}]{.comments} {.source}[]{#SpdfSsc::getLocations:source}function SpdfSsc::getLocations, $ locationRequest, $ httpErrorReporter = errorReporter compile_opt idl2 url = self.endpoint + '/locations' requestDoc = obj_new('IDLffXMLDOMDocument') requestDom = $ requestDoc->appendChild( $ locationRequest->createDomElement(requestDoc)) requestDoc->save, string=xmlRequest obj_destroy, requestDoc resultDoc = self->makePostRequest(url, xmlRequest, $ errorReporter = errorReporter) if ~obj_valid(resultDoc) then return, obj_new() fileNodeList= resultDoc->getElementsByTagName('Files') if fileNodeList->getLength() eq 0 then begin dataResult = self->getDataResult(resultDoc) endif else begin dataResult = self->getFileResult(resultDoc) endelse obj_destroy, resultDoc return, dataResult end {.source}[;+{.source}]{.comments} {.source}[; Gets the node's time values from the given DOM element.{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @private{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @param domElement {in} {required} {type=IDLffXMLDOMElement}{.source}]{.comments} {.source}[; DOM element to search.{.source}]{.comments} {.source}[; @keyword name {in} {optional} {type=string} {default='Time'}{.source}]{.comments} {.source}[; name of time tag.{.source}]{.comments} {.source}[; @returns node's julday time value(s) from the given DOM element.{.source}]{.comments} {.source}[; A scalar value of !values.d_NaN is returned if no value is found.{.source}]{.comments} {.source}[;-{.source}]{.comments} {.source}[]{#SpdfSsc::getTime:source}function SpdfSsc::getTime, $ domElement, $ name = name compile_opt idl2 if keyword_set(name) then name = name else name = 'Time' nodeList = domElement->getElementsByTagName(name) if nodeList->getLength() eq 0 then return, !values.d_NaN values = dblarr(nodeList->getLength()) for i = 0, nodeList->getLength() - 1 do begin domNode = nodeList->item(i) values[i] = self->getJulDate(domNode) endfor if n_elements(values) eq 1 then return, values[0] $ else return, values end {.source}[;+{.source}]{.comments} {.source}[; Gets the specified node values from the given ssc:DataResult XML{.source}]{.comments} {.source}[; document.{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @private{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @param resultDoc {in} {type=IDLffXMLDOMDocument}{.source}]{.comments} {.source}[; SpdfSscDataResult XML document.{.source}]{.comments} {.source}[; @param type {in} {type=string}{.source}]{.comments} {.source}[; name of elements whose value is to be gotten.{.source}]{.comments} {.source}[; @returns strarr of the specified node values from the given document.{.source}]{.comments} {.source}[;-{.source}]{.comments} {.source}[]{#SpdfSsc::getDataResultText:source}function SpdfSsc::getDataResultText, $ resultDoc, type compile_opt idl2 return, self->getNamedElementsFirstChildValue(resultDoc, type) end {.source}[;+{.source}]{.comments} {.source}[; Creates an SpdfSscFileResult object from the given ssc:DataResult{.source}]{.comments} {.source}[; XML document.{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @private{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @param doc {in} {type=IDLffXMLDOMDocument}{.source}]{.comments} {.source}[; SpdfSscDataResult XML document.{.source}]{.comments} {.source}[; @returns SpdfSscFileResult object.{.source}]{.comments} {.source}[;-{.source}]{.comments} {.source}[]{#SpdfSsc::getFileResult:source}function SpdfSsc::getFileResult, $ doc compile_opt idl2 {.source}[; doc->save, filename='getFileResult.xml', /pretty_print{.source}]{.comments}statusCode = self->getDataResultText(doc, 'StatusCode') statusSubCode = self->getDataResultText(doc, 'StatusSubCode') statusText = self->getDataResultText(doc, 'StatusText') if statusCode eq '' then begin{.source}[; This will not be necessary when the server is fixed to{.source}]{.comments} {.source}[; include it in a FileResult (fix is in R2.2.7).{.source}]{.comments}statusCode = 'Success' endif if statusCode ne 'Success' then begin print, 'StatusCode: ', statusCode print, 'StatusSubCode: ', statusSubCode print, 'StatusText: ', statusText return, obj_new() endif files = self->getFiles(doc) fileResult = obj_new('SpdfSscFileResult', $ files, $ statusCode = statusCode, $ statusSubCode = statusSubCode, $ statusText = statusText) return, fileResult end{.source}[;+{.source}]{.comments} {.source}[; Creates an array of SpdfSscFileDescription objects from the given {.source}]{.comments} {.source}[; ssc:Files XML document.{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @private{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @param doc {in} {type=IDLffXMLDOMDocument}{.source}]{.comments} {.source}[; SpdfFileResult XML document.{.source}]{.comments} {.source}[; @returns objarr containing SpdfSscFileDescriptions or an objarr(1) whose{.source}]{.comments} {.source}[; first element is ~obj_valid().{.source}]{.comments} {.source}[;-{.source}]{.comments} {.source}[]{#SpdfSsc::getFiles:source}function SpdfSsc::getFiles, $ doc compile_opt idl2 {.source}[; doc->save, filename='files.xml', /pretty_print{.source}]{.comments}filesElements = $ doc->getElementsByTagName('Files') if filesElements->getLength() eq 0 then begin return, objarr(1) endif files = objarr(filesElements->getLength()) for i = 0, filesElements->getLength() - 1 do begin filesElement = filesElements->item(i) name = self->getNamedElementsFirstChildValue( $ filesElement, 'Name') mimeType = self->getNamedElementsFirstChildValue( $ filesElement, 'MimeType') length = self->getNamedElementsFirstChildValue( $ filesElement, 'Length') lastModified = self->getTime(filesElement, name='LastModified') files[i] = obj_new('SpdfSscFileDescription', $ name, $ mimeType, $ length, $ lastModified) endfor return, files end{.source}[;+{.source}]{.comments} {.source}[; Creates an SpdfSscDataResult object from the given ssc:DataResult{.source}]{.comments} {.source}[; XML document.{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @private{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @param doc {in} {type=IDLffXMLDOMDocument}{.source}]{.comments} {.source}[; SpdfSscDataResult XML document.{.source}]{.comments} {.source}[; @returns SpdfSscDataResult object.{.source}]{.comments} {.source}[;-{.source}]{.comments} {.source}[]{#SpdfSsc::getDataResult:source}function SpdfSsc::getDataResult, $ doc compile_opt idl2 doc->save, filename='getDataResult.xml', /pretty_print statusCode = self->getDataResultText(doc, 'StatusCode') statusSubCode = self->getDataResultText(doc, 'StatusSubCode') statusText = self->getDataResultText(doc, 'StatusText') if statusCode ne 'Success' then begin print, 'StatusCode: ', statusCode print, 'StatusSubCode: ', statusSubCode print, 'StatusText: ', statusText return, obj_new() endif data = self->getSatelliteData(doc) dataResult = obj_new('SpdfSscDataResult', $ data, $ statusCode = statusCode, $ statusSubCode = statusSubCode, $ statusText = statusText) return, dataResult end {.source}[;+{.source}]{.comments} {.source}[; Creates an SpdfSatelliteData object from the given ssc:SatelliteData{.source}]{.comments} {.source}[; XML document.{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @private{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @param doc {in} {type=IDLffXMLDOMDocument}{.source}]{.comments} {.source}[; SpdfSatelliteData XML document.{.source}]{.comments} {.source}[; @returns objarr containing SpdfSatelliteData or an objarr(1) whose{.source}]{.comments} {.source}[; first element is ~obj_valid().{.source}]{.comments} {.source}[;-{.source}]{.comments} {.source}[]{#SpdfSsc::getSatelliteData:source}function SpdfSsc::getSatelliteData, $ doc compile_opt idl2 {.source}[; doc->save, filename='satData.xml', /pretty_print{.source}]{.comments}satDataElements = $ doc->getElementsByTagName('Data') if satDataElements->getLength() eq 0 then begin return, objarr(1) endif satData = objarr(satDataElements->getLength()) for i = 0, satDataElements->getLength() - 1 do begin satDataElement = satDataElements->item(i) id = $ self->getNamedElementsFirstChildValue( $ satDataElement, 'Id') coordinateData = $ self->getCoordinateData(satDataElement) time = self->getTime(satDataElement) bTraceData = self->getBTraceData(satDataElement) radialLength = $ self->getDoubleSatelliteData( $ satDataElement, 'RadialLength') magneticStrength = $ self->getDoubleSatelliteData( $ satDataElement, 'MagneticStrength') neutralSheetDistance = $ self->getDoubleSatelliteData( $ satDataElement, 'NeutralSheetDistance') bowShockDistance = $ self->getDoubleSatelliteData( $ satDataElement, 'BowShockDistance') magnetoPauseDistance = $ self->getDoubleSatelliteData( $ satDataElement, 'MagnetoPauseDistance') dipoleLValue = $ self->getDoubleSatelliteData( $ satDataElement, 'DipoleLValue') dipoleInvariantLatitude = $ self->getFloatSatelliteData( $ satDataElement, 'DipoleInvariantLatitude') spacecraftRegion = $ self->getSatelliteRegionData( $ satDataElement, 'SpacecraftRegion') radialTracedFootpointRegions = $ self->getSatelliteRegionData( $ satDataElement, 'RadialTracedFootpointRegions') bGseX = $ self->getDoubleSatelliteData(satDataElement, 'BGseX') bGseY = $ self->getDoubleSatelliteData(satDataElement, 'BGseY') bGseZ = $ self->getDoubleSatelliteData(satDataElement, 'BGseZ') northBTracedFootpointRegions = $ self->getSatelliteRegionData( $ satDataElement, 'NorthBTracedFootpointRegions') southBTracedFootpointRegions = $ self->getSatelliteRegionData( $ satDataElement, 'SouthBTracedFootpointRegions') satData[i] = obj_new('SpdfSatelliteData', $ id, $ coordinateData, $ time, $ bTraceData = bTraceData, $ radialLength = radialLength, $ magneticStrength = magneticStrength, $ neutralSheetDistance = neutralSheetDistance, $ bowShockDistance = bowShockDistance, $ magnetoPauseDistance = magnetoPauseDistance, $ dipoleLValue = dipoleLValue, $ dipoleInvariantLatitude = dipoleInvariantLatitude, $ spacecraftRegion = spacecraftRegion, $ radialTracedFootpointRegions = $ radialTracedFootpointRegions, $ bGseX = bGseX, $ bGseY = bGseY, $ bGseZ = bGseZ, $ northBTracedFootpointRegions = $ northBTracedFootpointRegions, $ southBTracedFootpointRegions = $ southBTracedFootpointRegions) endfor return, satData end{.source}[;+{.source}]{.comments} {.source}[; Creates an SpdfCoordinateData object from the given ssc:SatelliteData{.source}]{.comments} {.source}[; XML element.{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @private{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @param satDataElement {in} {type=IDLffXMLDOMElement}{.source}]{.comments} {.source}[; SpdfSatelliteData XML element.{.source}]{.comments} {.source}[; @returns SpdfCoordinateData object.{.source}]{.comments} {.source}[;-{.source}]{.comments} {.source}[]{#SpdfSsc::getCoordinateData:source}function SpdfSsc::getCoordinateData, $ satDataElement compile_opt idl2 nodeList = satDataElement->getElementsByTagName('Coordinates') if nodeList->getLength() eq 0 then return, obj_new() coordinatesElement = nodeList->item(0) coordinateSystem = $ self->getNamedElementsFirstChildValue( $ coordinatesElement, 'CoordinateSystem') x = self->getNamedElementsFirstChildDoubleValue( $ coordinatesElement, 'X') y = self->getNamedElementsFirstChildDoubleValue( $ coordinatesElement, 'Y') z = self->getNamedElementsFirstChildDoubleValue( $ coordinatesElement, 'Z') latitude = self->getNamedElementsFirstChildFloatValue( $ coordinatesElement, 'Latitude') longitude = self->getNamedElementsFirstChildFloatValue( $ coordinatesElement, 'Longitude') localTime = self->getNamedElementsFirstChildDoubleValue( $ coordinatesElement, 'LocalTime') coordinateData = $ obj_new('SpdfCoordinateData', $ coordinateSystem, $ x = x, $ y = y, $ z = z, $ latitude = latitude, $ longitude = longitude, $ localTime = localTime) return, coordinateData end {.source}[;+{.source}]{.comments} {.source}[; Creates an SpdfBTraceData object from the given ssc:BTraceData{.source}]{.comments} {.source}[; XML element.{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @private{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @param satDataElement {in} {type=IDLffXMLDOMElement}{.source}]{.comments} {.source}[; SpdfSatelliteData XML element.{.source}]{.comments} {.source}[; @returns SpdfCoordinateData object.{.source}]{.comments} {.source}[;-{.source}]{.comments} {.source}[]{#SpdfSsc::getBTraceData:source}function SpdfSsc::getBTraceData, $ satDataElement compile_opt idl2 bTraceDataElements = $ satDataElement->getElementsByTagName('BTraceData') if bTraceDataElements->getLength() eq 0 then begin return, objarr(1) endif bTraceData = objarr(bTraceDataElements->getLength()) for i = 0, bTraceDataElements->getLength() - 1 do begin bTraceDataElement = bTraceDataElements->item(i) coordinateSystem = $ self->getNamedElementsFirstChildValue( $ bTraceDataElement, 'CoordinateSystem') hemisphere = $ self->getNamedElementsFirstChildValue( $ bTraceDataElement, 'Hemisphere') latitude = self->getNamedElementsFirstChildFloatValue( $ bTraceDataElement, 'Latitude') longitude = self->getNamedElementsFirstChildFloatValue( $ bTraceDataElement, 'Longitude') arcLength = self->getNamedElementsFirstChildDoubleValue( $ bTraceDataElement, 'ArcLength') bTraceData[i] = $ obj_new('SpdfBTraceData', $ coordinateSystem, $ hemisphere, $ latitude = latitude, $ longitude = longitude, $ arcLength = arcLength) endfor return, bTraceData end {.source}[;+{.source}]{.comments} {.source}[; Gets the specified double data values from the given satellite data.{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @private{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @param satDataElement {in} {type=IDLffXMLDOMElement}{.source}]{.comments} {.source}[; Satellite XML element.{.source}]{.comments} {.source}[; @param name {in} {type=string}{.source}]{.comments} {.source}[; name of satellite data to get.{.source}]{.comments} {.source}[; @returns array of double values.{.source}]{.comments} {.source}[;-{.source}]{.comments} {.source}[]{#SpdfSsc::getDoubleSatelliteData:source}function SpdfSsc::getDoubleSatelliteData, $ satDataElement, $ name compile_opt idl2 values = self->getNamedElementsFirstChildDoubleValue( $ satDataElement, name) return, values end {.source}[;+{.source}]{.comments} {.source}[; Gets the specified float data values from the given satellite data.{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @private{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @param satDataElement {in} {type=IDLffXMLDOMElement}{.source}]{.comments} {.source}[; Satellite XML element.{.source}]{.comments} {.source}[; @param name {in} {type=string}{.source}]{.comments} {.source}[; name of satellite data to get.{.source}]{.comments} {.source}[; @returns array of float values.{.source}]{.comments} {.source}[;-{.source}]{.comments} {.source}[]{#SpdfSsc::getFloatSatelliteData:source}function SpdfSsc::getFloatSatelliteData, $ satDataElement, $ name compile_opt idl2 values = self->getNamedElementsFirstChildFloatValue( $ satDataElement, name) return, values end {.source}[;+{.source}]{.comments} {.source}[; Gets the specified region data values from the given satellite data.{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @private{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[; @param satDataElement {in} {type=IDLffXMLDOMElement}{.source}]{.comments} {.source}[; Satellite XML element.{.source}]{.comments} {.source}[; @param name {in} {type=string}{.source}]{.comments} {.source}[; name of region data to get.{.source}]{.comments} {.source}[; @returns strarr of region values. An empty string is returned {.source}]{.comments} {.source}[; if the value cannot be found.{.source}]{.comments} {.source}[;-{.source}]{.comments} {.source}[]{#SpdfSsc::getSatelliteRegionData:source}function SpdfSsc::getSatelliteRegionData, $ satDataElement, $ name compile_opt idl2 values = self->getNamedElementsFirstChildValue( $ satDataElement, name) return, values end {.source}[;+{.source}]{.comments} {.source}[; Defines the SpdfSsc class.{.source}]{.comments} {.source}[;{.source}]{.comments} {.source}[;-{.source}]{.comments} {.source}[]{#SpdfSsc__define:source}pro SpdfSsc__define compile_opt idl2 struct = { SpdfSsc, $ inherits SpdfRest $ } end {.source}
:::