如何从Sentinel-1合成孔径雷达(SAR)卫星图像的地理坐标中获取(x,y)像素位置?
我可以通过以下方式访问下载的图像信息sg
from snappy import ProductIO
path='path_name'
product = ProductIO.readProduct(path)
sg = product.getSceneGeoCoding()
但是如何在Python中使用ESA的捕捉引擎来获得所需纬度和经度的(x,y)像素位置?
答案 0 :(得分: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中看到的,这是在希腊南部的产品),我们可以在雅典坐标图像(纬度= 37.9838,经度= 23.7275)中获得(x,y)的位置>
产品名称: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)