Преобразование географических координат (длина, широта) в положение в пикселях (x, y) для изображения SAR Sentinel-1.

Как я могу получить положение пикселя (x, y) из географических координат на спутниковом изображении Sentinel-1 Synthetic Aperture Radar (SAR)?

Я могу получить доступ к информации о загруженном изображении sg как

from snappy import ProductIO

path='path_name'
product = ProductIO.readProduct(path)
sg = product.getSceneGeoCoding()

Но как я могу получить положение (x, y) в пикселях для желаемой широты и долготы, используя механизм привязки ESA в Python?


person Ioannis Nasios    schedule 05.07.2018    source источник


Ответы (1)


Используя приведенную ниже пользовательскую функцию, мы можем легко преобразовать любую (широту, долготу) в ее положение (x, y) на изображении, при условии, что широта и долгота находятся в пределах нашего продукта.

from snappy import GeoPos
def XY_from_LatLon(ProductSceneGeoCoding, latitude, longitude):
    #From Latitude, Longitude satellite image (SAR), get the x, y position in image
    pixelPos = ProductSceneGeoCoding.getPixelPos(GeoPos(latitude, longitude), None)
    x = pixelPos.getX()
    y = pixelPos.getY()
    if str(x)=='nan':
        raise ValueError('Latitude or Longitude out of this product')
    else:
        return x, y

UPD: Обновленная функция ниже должна работать с большим количеством версий оснастки.

import jpy
import snappy
def XY_from_LatLon(ProductSceneGeoCoding, latitude, longitude):
    geoPosType = jpy.get_type('org.esa.snap.core.datamodel.PixelPos')
    geocoding = ProductSceneGeoCoding.getSceneGeoCoding()
    pixel_pos = geocoding.getPixelPos(snappy.GeoPos(latitude, longitude), geoPosType())
    if str(pixel_pos.x)=='nan':
        raise ValueError('Latitude or Longitude out of this product')
    else:
        return int(np.round(pixel_pos.x)), int(np.round(pixel_pos.y))

Например. для данного продукта ниже (как мы можем видеть в scihub, это продукт в южной Греции ), мы можем получить положение (x, y) в изображении координат Афин (широта = 37,9838, долгота = 23,7275) как

Название продукта: S1A_IW_GRDH_1SDV_20170821T162310_20170821T162335_018024_01E414_C88B

path='path to S1A_IW_GRDH_1SDV_20170821T162310_20170821T162335_018024_01E414_C88B.SAFE'
product = ProductIO.readProduct(path)
sg = product.getSceneGeoCoding()
x, y = XY_from_LatLon(sg, 37.9838, 23.7275)
x, y
# (13705.242822312131, 14957.933651457932)
person Ioannis Nasios    schedule 05.07.2018