Llevo unas semanas desarrollando mi plugin para QGIS. Va a ser bastante similar al conocido plugin GDAL Georeferencer, pero incluyendo algunas características más útiles. Hasta ahora mi código ha funcionado bastante bien, pero me he encontrado con un problema grave y no consigo resolverlo.
Me gustaría saber cómo obtener el dx/dy/residual ¿errores para los GCPs después de la excusión de gdalwarp?
Me refiero a los errores que muestra el georreferenciador GDAL en las 3 últimas columnas de la tabla GCP. Lo hicieron de alguna manera en C ++, pero no puedo averiguar cómo.
Lo que hago es simplemente:
1
gdal_translate -of GTiff [GCPs] [source.tif] [temp.tif]
2
gdalwarp -r near -order 1 -co COMPRESS=NONE [temp.tif] [final.tif]
Entonces escribo gdalinfo [temp.tif]
para que pueda ver la lista de GCP en la respuesta, pero es el archivo antes de la georeferencia. Desafortunadamente, gdalinfo [final.tif]
no da ninguna información sobre los BPC.
Sin embargo, si utilizo VRT en lugar de GeoTIff para gdal_translate
y gralwarp
salidas hay un poco más de información. Creo que podría ser un paso más allá. En [final.vrt]
Los GCPs están listados, pero sin errores (dx/dy/rms). También hay líneas denominadas <DstGeoTransform>
y < DstInvGeoTransform
>. Creo que pueden tener algo en común con los errores que quiero conseguir.
¿Alguien sabe cómo tratarla?
La solución perfecta para mí sería conseguir una fórmula para calcular las nuevas coordenadas de los GCPs utilizando la transformación de gdalwarp
. Entonces simplemente compararía las coordenadas calculadas y las que el usuario recibió haciendo clic en el lienzo del mapa.
Desgraciadamente, gdalwarp trabaja con rasters, no con puntos puros.
¿Tiene alguna idea para resolver mi problema?
Ya he buscado en el stackexchange. El tema ya se ha planteado, pero no se ha resuelto. Cómo conservar los BPC después de gdalwarp
Adjunto una parte del ejemplo final.vrt debajo de
<VRTDataset rasterXSize="547" rasterYSize="732" subClass="VRTWarpedDataset">
<GeoTransform> 2.2187573162167482e+006, 3.0844837064488870e+000, 0.0000000000000000e+000, 6.4578332124060132e+006, 0.0000000000000000e+000,-3.0844837064488870e+000</GeoTransform>
<VRTRasterBand dataType="Byte" band="1" subClass="VRTWarpedRasterBand">
<ColorInterp>Palette</ColorInterp>
...
</VRTRasterBand>
<VRTRasterBand dataType="Byte" band="2" subClass="VRTWarpedRasterBand">
<ColorInterp>Alpha</ColorInterp>
</VRTRasterBand>
<BlockXSize>512</BlockXSize>
<BlockYSize>128</BlockYSize>
<GDALWarpOptions>
<WarpMemoryLimit>6.71089e+007</WarpMemoryLimit>
<ResampleAlg>NearestNeighbour</ResampleAlg>
<WorkingDataType>Byte</WorkingDataType>
<Option name="INIT_DEST">0</Option>
<SourceDataset relativeToVRT="0">G:Python/Python/okno_QGIS/smieci/mapa_krakowa 1.vrt</SourceDataset>
<Transformer>
<ApproxTransformer>
<MaxError>0.125</MaxError>
<BaseTransformer>
<GenImgProjTransformer>
<SrcGCPTransformer>
<GCPTransformer>
<Order>2</Order>
<Reversed>0</Reversed>
<GCPList>
<GCP Id="" Pixel="158.0590" Line="178.4810" X="2.219220000000E+006" Y="6.457240000000E+006" />
<GCP Id="" Pixel="374.7860" Line="297.1410" X="2.219910000000E+006" Y="6.456890000000E+006" />
<GCP Id="" Pixel="177.6730" Line="347.1550" X="2.219290000000E+006" Y="6.456710000000E+006" />
<GCP Id="" Pixel="79.6064" Line="301.0640" X="2.219010000000E+006" Y="6.456850000000E+006" />
<GCP Id="" Pixel="232.5900" Line="468.2670" X="2.219490000000E+006" Y="6.456350000000E+006" />
<GCP Id="" Pixel="63.4254" Line="426.0980" X="2.218950000000E+006" Y="6.456450000000E+006" />
<GCP Id="" Pixel="323.7910" Line="535.4420" X="2.219770000000E+006" Y="6.456150000000E+006" />
<GCP Id="" Pixel="191.8920" Line="616.8370" X="2.219360000000E+006" Y="6.455880000000E+006" />
<GCP Id="" Pixel="218.8600" Line="162.3000" X="2.219430000000E+006" Y="6.457290000000E+006" />
<GCP Id="" Pixel="303.1980" Line="201.5260" X="2.219690000000E+006" Y="6.457170000000E+006" />
<GCP Id="" Pixel="282.1130" Line="140.7250" X="2.219620000000E+006" Y="6.457360000000E+006" />
<GCP Id="" Pixel="107.0650" Line="102.4790" X="2.219080000000E+006" Y="6.457460000000E+006" />
<GCP Id="" Pixel="264.4610" Line="67.6657" X="2.219560000000E+006" Y="6.457600000000E+006" />
<GCP Id="" Pixel="400.2830" Line="117.1890" X="2.219990000000E+006" Y="6.457460000000E+006" />
<GCP Id="" Pixel="415.9740" Line="209.3720" X="2.220050000000E+006" Y="6.457160000000E+006" />
</GCPList>
</GCPTransformer>
</SrcGCPTransformer>
<DstGeoTransform>2218757.3162167482,3.084483706448887,0,6457833.2124060132,0,-3.084483706448887</DstGeoTransform>
<DstInvGeoTransform>-719328.59025252087,0.32420336599906463,0,2093651.2645225821,0,-0.32420336599906463</DstInvGeoTransform>
</GenImgProjTransformer>
</BaseTransformer>
</ApproxTransformer>
</Transformer>
<BandList>
<BandMapping src="1" dst="1" />
</BandList>
<DstAlphaBand>2</DstAlphaBand>
</GDALWarpOptions>
</VRTDataset>