我正在处理的项目要求我在特定的地理(lon / lat)位置检索Landsat栅格数据。在筛选了一些教程并尝试使用GDAL,PostGIS和QGIS之后,我成功地将GeoTIFF Landsat图像导入到PostGIS栅格表中,并按该表中的地理位置访问了值。但是,结果中存在一些问题:
以下是有关我的流程的一些信息。我对GIS一般都很陌生,所以我几乎可以肯定这里有一个明显的错误:
CREATE EXTENSION postgis;
运行gdalinfo LSSampleB5.TIF
,打印以下输出:
Driver: GTiff/GeoTIFF
Files: LSSampleB5Test2.TIF
Size is 7871, 7971
Coordinate System is:
PROJCS["WGS 84 / UTM zone 19N",
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],
UNIT["degree",0.0174532925199433,
AUTHORITY["EPSG","9122"]],
AUTHORITY["EPSG","4326"]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",-69],
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",0],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
AXIS["Easting",EAST],
AXIS["Northing",NORTH],
AUTHORITY["EPSG","32619"]]
Origin = (318285.000000000000000,5216715.000000000000000)
Pixel Size = (30.000000000000000,-30.000000000000000)
Metadata:
AREA_OR_POINT=Point
Image Structure Metadata:
INTERLEAVE=BAND
Corner Coordinates:
Upper Left ( 318285.000, 5216715.000) ( 71d23'37.53"W, 47d 4'44.12"N)
Lower Left ( 318285.000, 4977585.000) ( 71d18' 9.77"W, 44d55'42.53"N)
Upper Right ( 554415.000, 5216715.000) ( 68d16'58.41"W, 47d 6' 6.11"N)
Lower Right ( 554415.000, 4977585.000) ( 68d18'36.69"W, 44d56'58.62"N)
Center ( 436350.000, 5097150.000) ( 69d49'20.56"W, 46d 1'29.87"N)
Band 1 Block=7871x1 Type=UInt16, ColorInterp=Gray
我将此输出解释为EPSG 4326格式(这可能是我的罪行),因此我运行以下命令将GeoTIFF作为PostGIS栅格导入:
raster2pgsql -s 4326 -I LSSampleB5.TIF -F -t 50x50 -d | psql -U postgres rastertest
这成功导入了一个新表。然后我使用QGIS来直观地了解发生了什么。
在Database -> DB Manager -> PostGIS -> rastertest -> public
下,我将lssampleb5添加到画布中。
我在QGIS中创建了一个新的XYZ Connection,以添加Google satillite混合图像以供参考。我使用的网址是https://mt1.google.com/vt/lyrs=y&x={x}&y={y}&z={z}
,最小和最大缩放分别为0和19。
以下是我注意到lssample图层在Google混合地图上落在西班牙海岸的事实。
我确保两个图层都在EPSG 4326投影上,没有变化。
不太沮丧继续前进,我尝试了数据库查询来获取单个像素值。由于我的样本数据落在西班牙附近,我使用QGIS对附近的有效坐标对进行采样以进行查询。查询是:
SELECT rid, ST_Value(rast, 1, ST_SetSRID(ST_Point(448956,5041439), 4326)) as b5
FROM lssampleb5
WHERE ST_Intersects(rast, ST_SetSRID(ST_Point(448956,5041439), 4326)::geometry, 1);
这返回了一个有效的行ID和ST_VALUE为5776.在QGIS显示的范围之外尝试坐标导致没有返回的条目,这不是意料之外的。
所以,首先,我不知道QGIS的坐标系使用了什么。它绝对不是原始形式的经度和纬度,但根据我的理解,EPSG 4326应该是一个地理投影。
其次,我不知道为什么QGIS错误地放置了Landsat场景,或者在这个过程中场景没有被正确转换。
答案 0 :(得分:0)
加入我们GIS SE,这就是GIS相关Q / A的地方!
为了帮助你:
PROJCRS
标记是
键在这里,它从数据中读出"WGS 84 / UTM zone 19N"
底部的EPSG参考(AUTHORITY["EPSG","32619"]]
)。EPSG:32619是基于WGS84大地水准面(基准面)的UTM projected CRS,单位为米,定义为投影距离相应的参考经络(东方)和赤道(北方)。由于您在导入期间定义了错误的CRS(即EPSG:4326),因此栅格的固有坐标值被视为度数,整个事物被放置在世界的另一端。运行UpdateRasterSRID(SELECT UpdateRasterSRID(<shema_name>, <your_raster_table>, rast, 32619);
)将栅格的元数据设置为正确的CRS并重新加载图层。