小数度数到 utm 的转换,python
degree decimal to utm conversion, python
当我尝试使用 anaconda 中的可用库将度数十进制坐标转换为 utm 时,我感到很惊讶utm
。
我的坐标看起来像:
lon = array([83.71666667, 83.7 , 83.6 , 83.65 , 83.6 ,
83.88333333, 83.56666667, 83.88333333, 83.96666667, 83.75 ,
83.7 , 83.1 , 83.21666667, 83.73333333, 83.65 ,
83.4 , 83.56666667, 84. , 83.78333333, 83.68333333,
83.6 , 83.48333333, 83.3 , 83.38333333, 83.61666667,
83.98333333, 83.43333333, 83.53333333, 84.05 , 84.21666667,
83.15 , 83.06666667, 83.26666667, 83.25 , 83.8 ,
84.9 , 84.36666667, 84. , 83.88333333, 84.61666667,
84.35 , 84.41666667, 84.61666667, 83.81666667, 84.11666667,
83.81666667, 83.8 , 84.1 , 84.23333333, 84.28333333,
83.96666667, 84.01666667, 83.8 , 84.61666667, 84.1 ,
83.76666667, 84.13333333, 83.75 , 83.78333333, 83.91666667,
85. , 84.28333333, 84.41666667, 84.53333333, 85.13333333,
85.05 , 85.01666667, 84.81666667, 84.98333333, 84.43333333,
85.38333333, 84.81666667, 85.01666667, 84.93333333, 85.25 ,
85.18333333, 85.31666667, 85.3 , 85.11666667, 85.41666667,
85.25 , 85.54722 ])
纬度值为:
lat = array([28.78333333, 28.75 , 28.26666667, 28.48333333, 28.63333333,
28.81666667, 28.35 , 29.05 , 29.18333333, 28.18333333,
28.21666667, 28.4 , 28.6 , 28.4 , 28.03333333,
28.38333333, 28.15 , 29.1 , 28.96666667, 28.9 ,
28.46666667, 28.38333333, 28.05 , 28.56666667, 28.13333333,
29.18333333, 27.95 , 27.86666667, 27.68333333, 27.68333333,
27.93333333, 27.55 , 28.01666667, 28.06666667, 27.86666667,
28.36666667, 28.28333333, 28.21666667, 28.1 , 28.06666667,
28.13333333, 27.93333333, 28. , 27.88333333, 28.11666667,
28.26666667, 28.3 , 28.03333333, 28.55 , 27.96666667,
28.26666667, 28.06666667, 28.38333333, 28.2 , 28.36666667,
27.98333333, 27.86666667, 28.26666667, 28.26666667, 28.08333333,
28.48333333, 28.76666667, 27.61666667, 27.58333333, 27.55 ,
27.41666667, 27.41666667, 27.55 , 27.43333333, 27.06666667,
28.28333333, 28.05 , 27.91666667, 27.86666667, 27.8 ,
27.71666667, 28.01666667, 28.1 , 28.01666667, 27.75 ,
27.75 , 28.20946 ])
当我制作散点图时它看起来很正常:
将坐标转换为 utm 后,点的分布完全改变,看起来很奇怪,如下图所示:
我用来转换的代码是:
import utm
X = []
Y = []
for i in np.arange(len(lat)):
LAT,LON,Z,S = utm.from_latlon(lat[i],lon[i])
X = np.append(X,LON)
Y = np.append (Y,LAT)
如评论中所建议:我切换 lon lat positn 即,
plt.scatter (Y,X)
它给出:
是我做错了什么,还是这个结果是正确的?
答案可能对其他人有帮助,所以我发布了我的解决方案。我发现 pyproj
比 utm
效果更好。在pyproj中我们可以指定utm区域。
import pyproj
from pyproj import Proj
myProj = Proj("+proj=utm +zone=45U, +north +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
lon_,lat_ = myProj(lon, lat)
plt.scatter(lon_,lat_)
而且身材还不错!
当我尝试使用 anaconda 中的可用库将度数十进制坐标转换为 utm 时,我感到很惊讶utm
。
我的坐标看起来像:
lon = array([83.71666667, 83.7 , 83.6 , 83.65 , 83.6 ,
83.88333333, 83.56666667, 83.88333333, 83.96666667, 83.75 ,
83.7 , 83.1 , 83.21666667, 83.73333333, 83.65 ,
83.4 , 83.56666667, 84. , 83.78333333, 83.68333333,
83.6 , 83.48333333, 83.3 , 83.38333333, 83.61666667,
83.98333333, 83.43333333, 83.53333333, 84.05 , 84.21666667,
83.15 , 83.06666667, 83.26666667, 83.25 , 83.8 ,
84.9 , 84.36666667, 84. , 83.88333333, 84.61666667,
84.35 , 84.41666667, 84.61666667, 83.81666667, 84.11666667,
83.81666667, 83.8 , 84.1 , 84.23333333, 84.28333333,
83.96666667, 84.01666667, 83.8 , 84.61666667, 84.1 ,
83.76666667, 84.13333333, 83.75 , 83.78333333, 83.91666667,
85. , 84.28333333, 84.41666667, 84.53333333, 85.13333333,
85.05 , 85.01666667, 84.81666667, 84.98333333, 84.43333333,
85.38333333, 84.81666667, 85.01666667, 84.93333333, 85.25 ,
85.18333333, 85.31666667, 85.3 , 85.11666667, 85.41666667,
85.25 , 85.54722 ])
纬度值为:
lat = array([28.78333333, 28.75 , 28.26666667, 28.48333333, 28.63333333,
28.81666667, 28.35 , 29.05 , 29.18333333, 28.18333333,
28.21666667, 28.4 , 28.6 , 28.4 , 28.03333333,
28.38333333, 28.15 , 29.1 , 28.96666667, 28.9 ,
28.46666667, 28.38333333, 28.05 , 28.56666667, 28.13333333,
29.18333333, 27.95 , 27.86666667, 27.68333333, 27.68333333,
27.93333333, 27.55 , 28.01666667, 28.06666667, 27.86666667,
28.36666667, 28.28333333, 28.21666667, 28.1 , 28.06666667,
28.13333333, 27.93333333, 28. , 27.88333333, 28.11666667,
28.26666667, 28.3 , 28.03333333, 28.55 , 27.96666667,
28.26666667, 28.06666667, 28.38333333, 28.2 , 28.36666667,
27.98333333, 27.86666667, 28.26666667, 28.26666667, 28.08333333,
28.48333333, 28.76666667, 27.61666667, 27.58333333, 27.55 ,
27.41666667, 27.41666667, 27.55 , 27.43333333, 27.06666667,
28.28333333, 28.05 , 27.91666667, 27.86666667, 27.8 ,
27.71666667, 28.01666667, 28.1 , 28.01666667, 27.75 ,
27.75 , 28.20946 ])
当我制作散点图时它看起来很正常:
将坐标转换为 utm 后,点的分布完全改变,看起来很奇怪,如下图所示:
我用来转换的代码是:
import utm
X = []
Y = []
for i in np.arange(len(lat)):
LAT,LON,Z,S = utm.from_latlon(lat[i],lon[i])
X = np.append(X,LON)
Y = np.append (Y,LAT)
如评论中所建议:我切换 lon lat positn 即,
plt.scatter (Y,X)
它给出:
是我做错了什么,还是这个结果是正确的?
答案可能对其他人有帮助,所以我发布了我的解决方案。我发现 pyproj
比 utm
效果更好。在pyproj中我们可以指定utm区域。
import pyproj
from pyproj import Proj
myProj = Proj("+proj=utm +zone=45U, +north +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
lon_,lat_ = myProj(lon, lat)
plt.scatter(lon_,lat_)
而且身材还不错!