簡體   English   中英

將 XYZ 球面坐標重新映射到緯度/經度坐標

[英]Remapping XYZ spherical coordinates to Lat/Long coordinates

我在 XYZ 中有一個點的表面(所有 Z 均為 0),我將這些點 map 放到球體上。 所以我對球體上的每個點都有一個 XYZ 坐標。

我想要實現的是根據地理位置將此 XYZ 球坐標轉換為其緯度/經度平行線。 因此,例如,如果我有點 (0,0,0),我想看看如何將其表示為緯度/經度(90.0000° S,45.0000° E)的南極點。

我在網上搜索了一下,有無數的網頁解釋了這部分內容,但其中很多都在談論將 Lat/Long 轉換為 XYZ,而不是相反。 我不確定是否有一個簡單的公式可以將一個轉換為另一個。

希望有人能指出我正確的方向。

謝謝

有一個所謂的本地 ENU(東北向上)坐標系,它符合您稱為 XYZ 的坐標系。 ENU 可以轉換為以地心為中心的 XeYeZe。 從那個 XeYeZe,您可以轉換為 (lat,long,H)。

在 Python 中,您可以使用pymap3d進行所有需要的計算。 這是您可以嘗試的可運行代碼。

import pymap3d
ell_wgs84 = pymap3d.Ellipsoid('wgs84')

# Your ENU system needs origin definition (lat0, lon0, h0) +
# and also needs a reference ellipsoid: let's use `ell_wgs84` defined above
lat0, lon0, h0 = -90, 45, 0   # origin of ENU, (h is height above ellipsoid)

# Test ENU coordinates: (e1, n1, u1) by `enu2geodetic()`
e1, n1, u1     =  0.0,  0.0,  0.0  # just the origin of this ENU system
lat1, lon1, h1 = pymap3d.enu2geodetic(e1, n1, u1, \
                                      lat0, lon0, h0, \
                                      ell=ell_wgs84, deg=True)  # use wgs86 ellisoid
# this should agree with: (lat0, lon0, h0)
print(lat1, lon1, h1)  # -90.0 44.99999999999999 1.313839409243646e-12  OK!

# Inversion check by `geodetic2enu()`
# input values to convert: lat1, lon1, h1
e1k, n1k, u1k = pymap3d.geodetic2enu(lat1, lon1, h1, lat0, lon0, h0, ell=ell_wgs84, deg=True)
print(e1k, n1k, u1k)   # 0,0,0  OK

# Now arbitrary ENU to lat/long and reverse
lat112, lon112, h112 = pymap3d.enu2geodetic(1120, 100, 10, \
                                      lat0, lon0, h0, \
                                      ell=ell_wgs84, deg=True)
print(lat112, lon112, h112)
# Check
e112k, n112k, u112k = pymap3d.geodetic2enu(lat112, lon112, h112, lat0, lon0, h0, ell=ell_wgs84, deg=True)
print(e112k, n112k, u112k)   # 1120, 100, 10 OK

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM