Why are the projection coordinates of the Basemap south polar stereo map not consistent with the coordinates of the datasets in the same projection?

Some satellite-based Earth observation devices provide latitude / longitude information, while others provide X / Y coordinates within a given grid projection (and some of them have both, see example). My approach in the second case is to set up a Basemap map that has the same parameters (projection, ellipsoid, map origin) as given by the data provider so that these X / Y values ​​are equal to the coordinates of the base map. However, if I do, the geolocation is not consistent with other datasets, including the Basemap coastline. I experienced this with three different datasets from different reliable sources. For a minimal example, I am using Landsat data provided by the US Geological Survey, which includes both the X / Y coordinates of the south polar stereographic grid and the corresponding lat / lon coordinates for all four corners of the image.

From the Landsat metafile we get (ID: LC82171052016079LGN00):

CORNER_UL_LAT_PRODUCT = -66.61490 -61.31816 CORNER_UR_LAT_PRODUCT CORNER_UL_LON_PRODUCT = = = CORNER_UR_LON_PRODUCT -68.74325 -58.04533 -67.68721 CORNER_LL_LON_PRODUCT CORNER_LL_LAT_PRODUCT = = = CORNER_LR_LAT_PRODUCT -67.01109 -69.94052 -64.18581 CORNER_UL_PROJECTION_X_PRODUCT CORNER_LR_LON_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

, lat/lon X/Y:

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()): enter image description here , corner lat/lon: enter image description here

lat/lon, , , (, this), X/Y, Basemap. , , , .

, , Basemap, .

+4
1

, , lat_ts projection='spstere'. , , lat_ts=-90. , .

, projection='stere' , :

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

.

+2

All Articles