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])
y_crn=np.array([1236000, 1236000, 958500, 958500])
x0, y0= m(0, -90)
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()):
, corner lat/lon:

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