fork(1) download
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from mpl_toolkits.mplot3d import Axes3D
  4.  
  5. v_sound = 340
  6.  
  7. def calculate_distance(lat1, lon1, lat2, lon2):
  8. lat_distance = 111.263 * 1000 * abs(lat2 - lat1)
  9. mid_lat = (lat1 + lat2) / 2
  10. lon_distance = 97.304 * 1000 * abs(lon2 - lon1) * np.cos(np.radians(mid_lat))
  11. return np.sqrt(lat_distance ** 2 + lon_distance ** 2)
  12.  
  13. stations = {
  14. 'A': (110.241, 27.204, 824),
  15. 'B': (110.780, 27.456, 727),
  16. 'C': (110.712, 27.785, 742),
  17. 'D': (110.251, 27.825, 850),
  18. 'E': (110.524, 27.617, 786),
  19. 'F': (110.467, 27.921, 678),
  20. 'G': (110.047, 27.121, 575),
  21. }
  22.  
  23. fig = plt.figure(figsize=(10, 8))
  24. ax = fig.add_subplot(111, projection='3d')
  25.  
  26. for station, data in stations.items():
  27. lon, lat, elev = data
  28. ax.scatter([lon], [lat], [elev], color='red', s=100)
  29.  
  30. for station1, data1 in stations.items():
  31. for station2, data2 in stations.items():
  32. if station1 < station2:
  33. lon1, lat1 ,elev1 = data1
  34. lon2, lat2, elev2 = data2
  35. distance_m = calculate_distance(lat1, lon1, lat2, lon2)
  36. ax.plot([lon1, lon2], [lat1, lat2], [elev1, elev2], color='gray', linestyle=':')
  37. print(station2, data2)
  38. print(station1, data1)
  39.  
  40.  
  41.  
  42. ax.set_xlabel('Longitude')
  43. ax.set_ylabel('Latitude')
  44. ax.set_zlabel('Elevation (m)')
  45. plt.title('Monitoring Stations and Approximate Distances')
  46. plt.show()
Success #stdin #stdout 2.77s 57448KB
stdin
Standard input is empty
stdout
A (110.241, 27.204, 824)
B (110.78, 27.456, 727)
C (110.712, 27.785, 742)
D (110.251, 27.825, 850)
E (110.524, 27.617, 786)
F (110.467, 27.921, 678)
G (110.047, 27.121, 575)
A (110.241, 27.204, 824)
A (110.241, 27.204, 824)
B (110.78, 27.456, 727)
C (110.712, 27.785, 742)
D (110.251, 27.825, 850)
E (110.524, 27.617, 786)
F (110.467, 27.921, 678)
G (110.047, 27.121, 575)
B (110.78, 27.456, 727)
A (110.241, 27.204, 824)
B (110.78, 27.456, 727)
C (110.712, 27.785, 742)
D (110.251, 27.825, 850)
E (110.524, 27.617, 786)
F (110.467, 27.921, 678)
G (110.047, 27.121, 575)
C (110.712, 27.785, 742)
A (110.241, 27.204, 824)
B (110.78, 27.456, 727)
C (110.712, 27.785, 742)
D (110.251, 27.825, 850)
E (110.524, 27.617, 786)
F (110.467, 27.921, 678)
G (110.047, 27.121, 575)
D (110.251, 27.825, 850)
A (110.241, 27.204, 824)
B (110.78, 27.456, 727)
C (110.712, 27.785, 742)
D (110.251, 27.825, 850)
E (110.524, 27.617, 786)
F (110.467, 27.921, 678)
G (110.047, 27.121, 575)
E (110.524, 27.617, 786)
A (110.241, 27.204, 824)
B (110.78, 27.456, 727)
C (110.712, 27.785, 742)
D (110.251, 27.825, 850)
E (110.524, 27.617, 786)
F (110.467, 27.921, 678)
G (110.047, 27.121, 575)
F (110.467, 27.921, 678)
A (110.241, 27.204, 824)
B (110.78, 27.456, 727)
C (110.712, 27.785, 742)
D (110.251, 27.825, 850)
E (110.524, 27.617, 786)
F (110.467, 27.921, 678)
G (110.047, 27.121, 575)
G (110.047, 27.121, 575)