簡體   English   中英

為什么底圖南極立體地圖投影坐標與同一投影中的數據集不一致?

[英]Why are Basemap south polar stereographic map projection coordinates not agreeing with those of data sets in the same projection?

一些基於衛星的地球觀測產品提供緯度/經度信息,而其他產品提供給定網格投影內的X / Y坐標(並且還有一些具有兩者,參見示例)。 我在第二種情況下的方法是設置一個底圖貼圖,該貼圖具有與數據提供者給定的相同參數(投影,橢圓體,貼圖原點),其方式是給定的X / Y值等於底圖坐標。 但是,如果我這樣做,地理定位與包括Basemap海岸線在內的其他數據集不一致。 我從不同的可靠來源獲得了三種不同的數據集。 對於最小的例子,我使用美國地質調查局提供的Landsat數據,其中包括南極立體網格的X / Y坐標和圖像所有四個角的相應緯度/經度坐標。

從我們得到的Landsat元文件(ID:LC82171052016079LGN00):

CORNER_UL_LAT_PRODUCT = -66.61490 CORNER_UL_LON_PRODUCT = -61.31816 CORNER_UR_LAT_PRODUCT = -68.74325 CORNER_UR_LON_PRODUCT = -58.04533 CORNER_LL_LAT_PRODUCT = -67.68721 CORNER_LL_LON_PRODUCT = -67.01109 CORNER_LR_LAT_PRODUCT = -69.94052 CORNER_LR_LON_PRODUCT = -64.18581 CORNER_UL_PROJECTION_X_PRODUCT = -2259300.000 CORNER_UL_PROJECTION_Y_PRODUCT = 1236000.000 CORNER_UR_PROJECTION_X_PRODUCT = -1981500.000 CORNER_UR_PROJECTION_Y_PRODUCT = 1236000.000 CORNER_LL_PROJECTION_X_PRODUCT = -2259300.000 CORNER_LL_PROJECTION_Y_PRODUCT = 958500.000 CORNER_LR_PROJECTION_X_PRODUCT = -1981500.000 CORNER_LR_PROJECTION_Y_PRODUCT = 958500.000

...

GROUP = PROJECTION_PARAMETERS MAP_PROJECTION = “PS” DATUM = “WGS84” ELLIPSOID = “WGS84” VERTICAL_LON_FROM_POLE = 0.00000 TRUE_SCALE_LAT = -71.00000 FALSE_EASTING = 0 FALSE_NORTHING = 0 GRID_CELL_SIZE_PANCHROMATIC = 15.00 GRID_CELL_SIZE_REFLECTIVE = 30.00 GRID_CELL_SIZE_THERMAL = 30.00 ORIENTATION = “NORTH_UP” RESAMPLING_OPTION = “CUBIC_CONVOLUTION” END_GROUP = PROJECTION_PARAMETERS

通過使用具有正確地圖投影的底圖,我們應該能夠從X / Y值導出角點lat / lon值:

import numpy as np
from mpl_toolkits.basemap import Basemap

m=Basemap(resolution='h',projection='spstere', ellps='WGS84', boundinglat=-60,lon_0=180, lat_ts=-71)

x_crn=np.array([-2259300,-1981500,-2259300,-1981500])# upper left, upper right, lower left, lower right
y_crn=np.array([1236000, 1236000, 958500, 958500])# upper left, upper right, lower left, lower right

x0, y0= m(0, -90)
#Basemap coordinates at the south pole
#note that (0,0) of the Basemap is in a corner of the map, 
#while other data sets use the south pole. 
#This is easy to take into account:
lon_crn, lat_crn = m(x0-x_crn, y0-y_crn, inverse=True)


print 'lon_crn: '+str(lon_crn)
print 'lat_crn: '+str(lat_crn)

哪個回報:

lon_crn: [-61.31816102 -58.04532791 -67.01108782 -64.1858106 ]
lat_crn: [-67.23548626 -69.3099076  -68.28071626 -70.47651326]

正如你所看到的那樣,經度與圖元文件中的經度一致,但緯度是低的。

我可以通過以下方式估算緯度:

lat_crn=(lat_crn+90.)*1.0275-90.

但這真的不令人滿意。

如果使用圖元文件中的X / Y角坐標(紅色底圖drawcoastlines() ),則這是圖像的定位方式: 在此輸入圖像描述 這就是使用角落lat / lon的樣子: 在此輸入圖像描述

在這種情況下,我可以簡單地使用緯度/經度坐標,但如前所述,存在僅由X / Y坐標提供的數據集( 如此 ),這使得依賴底圖投影非常重要。 我知道還有其他模塊可以將數據重新投影為潛在的解決方法,但它應該可以在沒有其他模塊的情況下工作,並且重新投影本身可能會引入錯誤。

由於這個問題出現在不同的數據集中,我想相信它是底圖模塊中的一個錯誤,但我也可能會一次又一次地犯同樣的錯誤或者有錯誤的期望。

我做了一些實驗,似乎改變lat_tsprojection='spstere'沒有影響。 事實上,似乎隱含地假設投影緯度為lat_ts=-90. 無論你指定什么價值。

我使用projection='stere'取得了更大的成功,因此您將在示例中構建Basemap,如下所示:

m=Basemap(width=5400000., height=5400000., projection='stere',
          ellps='WGS84', lon_0=180., lat_0=-90., lat_ts=-71.)

您可能更喜歡設置角的緯度和經度,而不是應用程序的繪圖的寬度和高度。

暫無
暫無

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

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