mirror of
https://github.com/meteoinfo/MeteoInfo.git
synced 2025-12-08 20:36:05 +00:00
better support for coordinates conversion between cartesian and geographic
This commit is contained in:
parent
94983e6888
commit
278c1b6043
@ -1,13 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<MeteoInfo File="milconfig.xml" Type="configurefile">
|
||||
<Path OpenPath="D:\Working\MIScript\Jython\mis\io\radar">
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io\savefig"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types"/>
|
||||
<Path OpenPath="D:\Working\MIScript\Jython\mis\toolbox\miml">
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\no_opengl"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\surf"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\array\complex"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\volume"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\array"/>
|
||||
@ -16,17 +12,23 @@
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\geoshow"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io\radar"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\toolbox"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\toolbox\miml\cluster"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\toolbox\miml"/>
|
||||
</Path>
|
||||
<File>
|
||||
<OpenedFiles>
|
||||
<OpenedFile File="D:\MyProgram\java\MeteoInfoDev\toolbox\meteoview3d\_reload.py"/>
|
||||
<OpenedFile File="D:\MyProgram\java\MeteoInfoDev\toolbox\meteoview3d\mainGUI.py"/>
|
||||
<OpenedFile File="D:\Working\MIScript\Jython\mis\io\radar\radar_cma_base_grid_3d.py"/>
|
||||
<OpenedFile File="D:\Working\MIScript\Jython\mis\io\radar\radar_cma_base_grid_3d_geo_to_nc.py"/>
|
||||
<OpenedFile File="D:\Working\MIScript\Jython\mis\io\radar\grid3d_to_nc.py"/>
|
||||
<OpenedFile File="D:\Working\MIScript\Jython\mis\io\radar\test_plot_grid_3d_nc.py"/>
|
||||
<OpenedFile File="D:\Working\MIScript\Jython\mis\toolbox\miml\cluster\dbscan_1.py"/>
|
||||
</OpenedFiles>
|
||||
<RecentFiles>
|
||||
<RecentFile File="D:\MyProgram\java\MeteoInfoDev\toolbox\meteoview3d\_reload.py"/>
|
||||
<RecentFile File="D:\MyProgram\java\MeteoInfoDev\toolbox\meteoview3d\mainGUI.py"/>
|
||||
<RecentFile File="D:\Working\MIScript\Jython\mis\io\radar\radar_cma_base_grid_3d.py"/>
|
||||
<RecentFile File="D:\Working\MIScript\Jython\mis\io\radar\radar_cma_base_grid_3d_geo_to_nc.py"/>
|
||||
<RecentFile File="D:\Working\MIScript\Jython\mis\io\radar\grid3d_to_nc.py"/>
|
||||
<RecentFile File="D:\Working\MIScript\Jython\mis\io\radar\test_plot_grid_3d_nc.py"/>
|
||||
<RecentFile File="D:\Working\MIScript\Jython\mis\toolbox\miml\cluster\dbscan_1.py"/>
|
||||
</RecentFiles>
|
||||
</File>
|
||||
<Font>
|
||||
@ -34,5 +36,5 @@
|
||||
</Font>
|
||||
<LookFeel DockWindowDecorated="true" LafDecorated="true" Name="FlatDarkLaf"/>
|
||||
<Figure DoubleBuffering="true"/>
|
||||
<Startup MainFormLocation="-7,0" MainFormSize="1387,825"/>
|
||||
<Startup MainFormLocation="-7,-7" MainFormSize="1293,685"/>
|
||||
</MeteoInfo>
|
||||
|
||||
@ -95,9 +95,10 @@ class RadarDataFile(DimDataFile):
|
||||
|
||||
:return: (*array*) Grid 3d data.
|
||||
"""
|
||||
xg, yg = np.meshgrid(x, y)
|
||||
if x.ndim == 1:
|
||||
x, y = np.meshgrid(x, y)
|
||||
|
||||
r = self.datainfo.getGrid3DData(product, xg._array, yg._array, z._array, h)
|
||||
r = self.datainfo.getGrid3DData(product, x._array, y._array, z._array, h)
|
||||
return np.array(r)
|
||||
|
||||
def get_vcs_data(self, product, start_point, end_point):
|
||||
|
||||
@ -3,7 +3,8 @@ import mipylib.numeric as np
|
||||
from org.meteoinfo.data.meteodata.radar import Transform
|
||||
|
||||
|
||||
__all__ = ['antenna_to_cartesian','antenna_to_geographic']
|
||||
__all__ = ['antenna_to_cartesian','antenna_to_geographic','get_aeqd_projection',
|
||||
'geographic_to_cartesian','cartesian_to_geographic']
|
||||
|
||||
|
||||
def antenna_to_cartesian(distance, azimuth, elevation, h=None):
|
||||
@ -57,12 +58,12 @@ def antenna_to_cartesian(distance, azimuth, elevation, h=None):
|
||||
|
||||
return x, y, z
|
||||
|
||||
def antenna_to_geographic(lon, lat, distance, azimuth, elevation, h=None):
|
||||
def antenna_to_geographic(rlon, rlat, distance, azimuth, elevation, h=None):
|
||||
"""
|
||||
Convert antenna coordinate to geographic (longitude/latitude) coordinate.
|
||||
|
||||
:param lon: (*float*) Longitude of the radar.
|
||||
:param lat: (*float*) Latitude of the radar.
|
||||
:param rlon: (*float*) Longitude of the radar.
|
||||
:param rlat: (*float*) Latitude of the radar.
|
||||
:param distance: (*array*) Distances to the center of the radar gates (bins) in meters.
|
||||
:param azimuth: (*array*) Azimuth angle of the radar in degrees.
|
||||
:param elevation: (*array*) Elevation angle of the radar in degrees.
|
||||
@ -71,7 +72,45 @@ def antenna_to_geographic(lon, lat, distance, azimuth, elevation, h=None):
|
||||
:return: Geographic coordinate.
|
||||
"""
|
||||
x, y, z = antenna_to_cartesian(distance, azimuth, elevation, h)
|
||||
proj = geolib.projinfo(proj='aeqd', lon_0=lon, lat_0=lat)
|
||||
rlon, rlat = geolib.project(x, y, fromproj=proj)
|
||||
lon, lat = cartesian_to_geographic(rlon, rlat, x, y)
|
||||
|
||||
return rlon, rlat, z
|
||||
return lon, lat, z
|
||||
|
||||
def get_aeqd_projection(rlon, rlat):
|
||||
"""
|
||||
Get azimuth equidistant projection.
|
||||
|
||||
:param rlon: (*float*) Radar longitude.
|
||||
:param rlat: (*float*) Radar latitude.
|
||||
|
||||
:return: Azimuth equidistant projection.
|
||||
"""
|
||||
return geolib.projinfo(proj='aeqd', lon_0=rlon, lat_0=rlat)
|
||||
|
||||
def geographic_to_cartesian(rlon, rlat, lon, lat):
|
||||
"""
|
||||
Convert cartesian coordinates to geographic coordinates.
|
||||
|
||||
:param rlon: (*float*) Radar longitude.
|
||||
:param rlat: (*float*) Radar latitude.
|
||||
:param lon: (*array*) Longitude coordinates in degrees.
|
||||
:param lat: (*array*) Latitude coordinates in degrees.
|
||||
|
||||
:return: Cartesian coordinates in meters from the radar (x, y).
|
||||
"""
|
||||
proj = get_aeqd_projection(rlon, rlat)
|
||||
return geolib.project(lon, lat, toproj=proj)
|
||||
|
||||
def cartesian_to_geographic(rlon, rlat, x, y):
|
||||
"""
|
||||
Convert geographic coordinates to cartesian coordinates.
|
||||
|
||||
:param rlon: (*float*) Radar longitude.
|
||||
:param rlat: (*float*) Radar latitude.
|
||||
:param x: (*array*) X coordinates in meters.
|
||||
:param y: (*array*) Y coordinates in meters.
|
||||
|
||||
:return: Cartesian coordinates in meters from the radar (x, y).
|
||||
"""
|
||||
proj = get_aeqd_projection(rlon, rlat)
|
||||
return geolib.project(x, y, fromproj=proj)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user