活泼 - 从像素到经度的转换错误



我正在使用snappy来尝试找出x,y坐标是什么,以便裁剪图像。

我已经使用活泼的功能做了一些测试,但我注意到它们有问题。我已经将图像中的 X,Y 转换为纬度和经度,然后使用这些坐标,我尝试将它们再次转换为 X,Y,但我没有得到相同的结果。

这个想法或最终目的是从geojson获取LatLong坐标,读取它们,并使用这些坐标获得图像中的X,Y。

请注意,路径引用的是 tiff 文件。

from snappy import ProductIO
from snappy import PixelPos, GeoPos
import numpy as np
path='/home/.../x.tiff'
###############################################################################
product = ProductIO.readProduct(path)
sg = product.getSceneGeoCoding()
def LatLon_from_XY(ProductSceneGeoCoding, x, y):
#From x,y position in satellite image (SAR), get the Latitude and Longitude
geopos = ProductSceneGeoCoding.getGeoPos(PixelPos(x, y), None)
latitude = geopos.getLat()
longitude = geopos.getLon()
return latitude, longitude
latitude, longitude = LatLon_from_XY(sg, 11048, 1365)
print('LatLong from PixelPosition')
print(latitude)
print(longitude)
### 38.3976151718
### -5.47978868123
###############################################################################
def getPixelPosFromLatLong(source, lat,lon):
if sg.canGetPixelPos() is not True:
raise Exception('Cant''t get Pixel Position from this source')
else:
pos = GeoPos(lat,lon)
pixpos = sg.getPixelPos(pos,None)
X = np.round(pixpos.getX())
Y = np.round(pixpos.getY())
return [X,Y]
[X,Y] = getPixelPosFromLatLong(path, 38.3976151718, -5.47978868123)
print('Pixel Position from LatLong')
print(X)
print(Y)
### 10715.0
### 1143.0

有没有其他方法可以使用经度从图像中获取 X,Y 像素?

对于那些想知道同样问题的人,我找到了这个解决方案:

将路径更改为不引用.tiff文件,而是引用文件夹。安全

然后,我再次编写我的函数,现在它看起来像这样:

from snappy import ProductIO
from snappy import PixelPos, GeoPos
import numpy as np
def LatLon_from_XY(ProductSceneGeoCoding, x, y):
geoPos = ProductSceneGeoCoding.getGeoPos(PixelPos(x,y),None)
lat = geoPos.getLat()
lon = geoPos.getLon()
return lat,lon
def XY_from_LatLon(ProductSceneGeoCoding, latitude, longitude):
pixelPos = ProductSceneGeoCoding.getPixelPos(GeoPos(latitude, longitude),None)
x = np.round(pixelPos.getX())
y = np.round(pixelPos.getY())
return x,y
###############################################################################
#Notice that the path does not refer to any file but to the folder .SAFE
path = '/.../X.SAFE'
product = ProductIO.readProduct(path)
sg = product.getSceneGeoCoding()
originalX = 13000
originalY = 13000
print('Original X,Y: ', originalX,originalY)
lat,lon = LatLon_from_XY(sg, originalX, originalY)
print(lat,lon)
x,y = XY_from_LatLon(sg,lat,lon)
print(x,y)
originalLat = 37.36475504265766
originalLon = -5.972416873450527
print('Original Lat,Lon: ', originalLat, originalLon)
x,y = XY_from_LatLon(sg, originalLat, originalLon)
print(x,y)
lat,lon = LatLon_from_XY(sg, x, y)
print(lat,lon)

这样,我得到几乎相同的值(13000~13006(

最新更新