Source code for RCAIDE.Library.Methods.Geodesics.compute_point_to_point_geospacial_data

# RCAIDE/Library/Missions/Common/compute_point_to_point_geospacial_data.py
# 
# 
# Created:  Jul 2023, M. Clarke 

# ----------------------------------------------------------------------------------------------------------------------
#  IMPORT
# ----------------------------------------------------------------------------------------------------------------------  
import RCAIDE
from RCAIDE.Framework.Core import Units 
from scipy.interpolate import griddata
import numpy as np

# ----------------------------------------------------------------------
#  Compute Point to Point Geospacial Data
# --------------------------------------------------------------------- 
[docs] def compute_point_to_point_geospacial_data(settings): """This computes the absolute microphone/observer locations on a defined topography Assumptions: topography_file is a text file obtained from https://topex.ucsd.edu/cgi-bin/get_data.cgi Source: N/A Inputs: topography_file - file of lattide, longitude and elevation points origin_coordinates - coordinates of origin location [degrees] destination_coordinates - coordinates of destimation location [degrees] Outputs: latitude_longitude_micrphone_locations - latitude-longitude and elevation coordinates of all microphones in domain [deg,deg,m] flight_range - gound distance between origin and destination location [meters] true_course - true course angle measured clockwise from true north [radians] origin_location - cartesial coordinates of origin location relative to computational domain [meters] destination_xyz_location - cartesial coordinates of destination location relative to computational domain [meters] Properties Used: N/A """ # convert cooordinates to array origin_coordinates = np.asarray(settings.aircraft_origin_coordinates) destination_coordinates = np.asarray(settings.aircraft_destination_coordinates) # extract data from file data = np.loadtxt(settings.topography_file) Long = data[:,0] Lat = data[:,1] Elev = data[:,2] x_min_coord = np.min(Lat) y_min_coord = np.min(Long) dep_lat = origin_coordinates[0] dep_long = origin_coordinates[1] des_lat = destination_coordinates[0] des_long = destination_coordinates[1] if dep_long < 0: dep_long = 360 + dep_long if des_long< 0: des_long =360 + des_long bottom_left_map_coords = np.array([x_min_coord,y_min_coord]) x0_coord = np.array([dep_lat,y_min_coord]) y0_coord = np.array([x_min_coord,dep_long]) x1_coord = np.array([des_lat,y_min_coord]) y1_coord = np.array([x_min_coord,des_long]) x0 = RCAIDE.Framework.Analyses.Geodesics.Geodesics.Calculate_Distance(x0_coord,bottom_left_map_coords) * Units.kilometers y0 = RCAIDE.Framework.Analyses.Geodesics.Geodesics.Calculate_Distance(y0_coord,bottom_left_map_coords) * Units.kilometers x1 = RCAIDE.Framework.Analyses.Geodesics.Geodesics.Calculate_Distance(x1_coord,bottom_left_map_coords) * Units.kilometers y1 = RCAIDE.Framework.Analyses.Geodesics.Geodesics.Calculate_Distance(y1_coord,bottom_left_map_coords) * Units.kilometers lat_flag = np.where(origin_coordinates<0)[0] origin_coordinates[lat_flag] = origin_coordinates[lat_flag] + 360 long_flag = np.where(destination_coordinates<0)[0] destination_coordinates[long_flag] = destination_coordinates[long_flag] + 360 z0 = griddata((Lat,Long), Elev, (np.array([origin_coordinates[0]]),np.array([origin_coordinates[1]])), method='nearest')[0] z1 = griddata((Lat,Long), Elev, (np.array([destination_coordinates[0]]),np.array([destination_coordinates[1]])), method='nearest')[0] dep_loc = np.array([x0,y0,z0]) des_loc = np.array([x1,y1,z1]) # pack data settings.aircraft_origin_location = dep_loc settings.aircraft_destination_location = des_loc return