ThinkGeo.com    |     Documentation    |     Premium Support

Reprojecting Raster

Hi all,


I like to add RasterLayer to my map.


The map is projected with SphericalMercator. The RasterLayers will be from different coordinate system so I like to reproject them. MapUnit is Meter.


Therefore I use the ImageSource Property from GdiPlusRasterLayer:


Dim ImageProjection As New Proj4Projection

ImageProjection.ExternalProjectionParametersString = Proj4Projection.GetSphericalMercatorParametersString

ImageProjection.InternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(BaseSrid)

ImageProjection.Open()

                MyRasterLayer.ImageSource.Projection = ImageProjection


Where "BaseSrid" is the correct EPSG code for the raster image.


Problems:


The raster image will not be drawn and when I zoom, pan or move the mouse system crashes with an exception.


I have read some of the other topics in this forum but without any success.


What to do?


Regards


Hardy



Hi Hardy,



I have tried our “world.tif” file with your code, but the layer displays well. I am guessing the issue might be related with your raster image, would you mind to send us your data or the whole sample here, or email to forumsupport@thinkgeo.com? If the data is still too large, then please follow the guide to setup a ftp for your account wiki.thinkgeo.com/wiki/Map_S…to_Support



Thanks,
Troy




Hi Troy,


I have tested with some other data and EPSG=25832. It's working fine. Data is it the right place.


Maybe there is a problem with used files or the projection parameters.


I have also used the data in QGIS, which displays the data in a correct way. Attached you'll find the tif I'm using.


Regards


Hardy



Luftbilder.zip (1.72 MB)

Hi Hardy,



Thanks for the data. 
In my end, I can show the image with the projection. But seem the place is not correct, as when I compare with Bing layer, they are not the same place and the image is clipped also.  Please see the attached screenshot.



But if I comment out the projection, the image shows well, but the place is in sea.

So, I can sure the issue must be on the projection. would you let me know where you got its projection information(EPSG=25832)? Also, could you please show how the image match with Bing or Google layer? I will download the QGIS and play it to see if it works with the image.



Any more information please feel free to let us know.

Thanks,

Troy







026_Untitled.png (75.4 KB)

Hi Troy,


OK: EPSG for the raster is 31467. I have added a zip with a screen shot from QGIS also containing a backup from a PostGIS table with reference geometry. The table's EPSG is 25832. You can use the record with gid=24 as reference. Please compare to screen shot.


In an other project I'm using EPSG 25832 for vector and raster and this work's fine. So I'm not sure if the projection fails or if the raster/tfw file is corrupt.


But seems to me that there is a mismatch using the projection 31467?


Thanks


Hardy 



Hi Hardy,



I think I figure out the reason, it is caused by the proj4 string and yes, your raster epsg is 31467 but not 25832. Please try the blow codes:


Proj4Projection proj4 = new Proj4Projection();
proj4.InternalProjectionParametersString = “+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs”;//Proj4Projection.GetEpsgParametersString(31467);
proj4.ExternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(3857);
proj4.Open();
rasterLayer.ImageSource.Projection = proj4;

I test the above code along with Bing layer and they totally match each other now.



However, The wired thing is the above proj4 string I got is from QGIS, but the correct EPSG 31467 should be “+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs” which is from spatialreference.org/ref/eps…e-3/proj4/ (equal with “Proj4Projection.GetEpsgParametersString(31467)”).

But once I use the latter proj4 string, I will get an exception to prevent the image display. So, I am guessing I will do some investigations on it.



Btw, seems your attached files are missing.

Hope it helps.

Troy

Hi Troy,


I tried to upload again...but I can't upload the zip.. now it's working.




temp.zip (1.06 MB)
001_temp.zip (1.06 MB)

Hi Hardy,



Sorry I didn’t notice you are using VB.Net, Now, please try the below codes and it should work.


Dim proj4 As New Proj4Projection()
proj4.InternalProjectionParametersString = “+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs”
'Proj4Projection.GetEpsgParametersString(31467);
proj4.ExternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(3857)
proj4.Open()
rasterLayer.ImageSource.Projection = proj4

Then, we can see it totally matches with BingLayer



Please let us know if you have any questions.

Thanks,

Troy

Hi Troy,


it's working. But I think it's a bit confusing to overwrite the parameter. This should be done in the underlaying projection library.


Otherwise it's fine to see MapSuite is able to overwrite and we can get a workaround.


Regards


Hardy



Hi Hardy,



Based on my observation and investigations, the proj4 which is from QGis:

+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs

However, map suite get a result with Proj4Projection.GetEpsgParametersString(31467); and this result is the same as spatialreference.org/ and Esri’s as well.

+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel + units=m +no_defs



As we know the spatialreference is a reliable organization for projection but based on our test previous, seem the former string is a correct one. So I have no idea why an offset is required from the string and I am guessing this is a special area with coordination system in Germany. I also got some information about this offset from this site but it is in Germany. forum.openstreetmap.org/viewtopic.php?id=12723



Currently, I am afraid it is hard for us to do any fix as we don’t know if this is a known proj4 issue on EPSG 31467.

Thanks for your understanding.

Troy

Hi Troy,


the offset is based on "Potsdam Datum". This are parameters for Helmert Transformation with 6 Parameters. In Germany we have several projections depending on Gauss-Krüger and in which area you are using the coordinates. "Potsdam "Datum" is/was the official datum from government. (EPSG 31466-31468)


But now to avoid some trouble Germany uses only ETRS89 (EPSG 25832) as all other in European Union.


Regards


Hardy



Hi Hardy, 
  
 Thanks for the explanation on its background and it is very helpful for us to evaluate. Currently, our development team will take a look at it and hope they can come up with a good solution for that. 
  
 Thanks, 
 Troy