ThinkGeo.com    |     Documentation    |     Premium Support

Rotating the whole map

Hi,



I need to rotate the whole map. So all layers (raster and vector, Google/OSM…) must be rotated in display/view.

The datum/projection or coordinates should not be manipulated.



Rotating means to apply an angle to the display. The coordinates have to stand still.

Measuring a coordinate must return the same result, rotated or not!



So it’s only a problem to view the data on the screen.





Regards

Hardy

Good luck, I and others have been asking for this for quite a while now.   
  
 The response to me has been that they do not support rotating raster images, it is not on their priority list, and they have no specific goals to provide this function in any upcoming releases.  They seem to do just fine rotating InMemoryFeatureLayer and ShapeLayer instances, but somehow they don’t consider it important to also rotate a raster layer.  This is a huge problem for us since we really need to be able to overlay an aerial/satellite image AND rotate our map, but I’ve made no headway.  The last communication I received on the matter suggested if we need it that bad we could enter into a contract with them and pay them to provide the function. I have no idea how accurate their assessment was, but it was stated that it shouldn’t take more than a week to complete.  So apparently this feature doesn’t merit even a week worth of effort for the product feature set, unless someone is willing to pay for a feature that TG will then market with their product… 
  
 You can see some of the previous conversation at this link: 
 thinkgeo.com/forums/MapSuite/tabid/143/aft/5857/Default.aspx 
 Other conversation followed via email as this feature became more and more important to us.  But as I said, I’ve made no headway.  Perhaps with more customers requesting/needing the feature it will get added to their priority list. 


Guys, 
  
 The support of raster and 3rd part layer rotation should be available pretty soon, maybe in upcoming several days. Please contact support@thinkgeo.com for a concrete date. If it’s very urgent, please give him a message for speeding the feature integration up. 
  
 Thanks, 
 Johnny

Hey there,



sounds good.

I will give them a short email.



Cheers,

Hardy

That’s very good to hear, and I hope it happens.  But that does not mesh with what Moritz told me only a few weeks ago when I was trying to get some traction with this missing feature.

Hi Guys,  



Please download the latest development version 9.0.45.0 from Product Center to have a try. Now it should support the rotation of Raster layer, but we are still working on the performance, once everything goes well, we will synchronize it to Production branch.  Here is the demo code:




RotationProjection projection = new RotationProjection(60.0);
GdiPlusRasterLayer gdiPlusRasterLayer = new GdiPlusRasterLayer(@"…\App_Data\PNG\World.png"new RectangleShape(-20037508.352, 20037508.352, 20037508.352, -20037508.352));
gdiPlusRasterLayer.ImageSource.Projection = projection;



The support of 3rd part layers (Google, Bing, OSM etc.) is still in progress now. 



BTW, the specified version is still in building now, maybe you need to wait several hours. 



Thanks,  

Johnny

Hello

I tried this approach, but it did not worked , The image not even displayed on the map.

(I downloaded the latest version 9.0.45.0)

Can you please supply a working demo.

In my project i have several LayerOverlay, each one contains a GdiPlusRasterLayer. I need to rotate each  GdiPlusRasterLayer individually



Thank you very much

Hi

I can elaborate the problem more pacifically.

after setting the RotationProjection I am refreshing the map. this cause to an exception in you feramwork "projection is not open " exception.

I searched in the forum for halp and saw that you addviced to create a custom Projection like so:



 public class CRotationProjection : RotationProjection
    {
       
        public CRotationProjection() : base() { }
        public CRotationProjection(double angle) : base(angle) { }
        public CRotationProjection(GeographyUnit sourceUnit):base(sourceUnit){}
        public CRotationProjection(double angle, GeographyUnit sourceUnit) : base(angle, sourceUnit) { }
        



        protected override void OpenCore()
        {
            base.OpenCore();
        }



        protected override void CloseCore()
        {
            IsOpen = true;
        }



        public void ForceClose()
        {
            base.Close();
        }
    }


This did helped with the exception, but the image itself is not shown on the map at all.

I will appreciate if you could attach working demo

Thank you

Hi Guys,



We almost finished a rotating sample on raster images, but still has some issues needs to fix. The attached is just a beta sample, would you please get the version 9.0.45.0 or higher to have a test? 







Thanks,



Troy

Thank you for your replay.

Did you meant to attach the code of this sample (image demo)? 

As I wrote before I already took version 9.0.45 and tried to rotate the image but the image is not even displayed on the map!!!

sample code will be much appreciated.

Miri,



Sorry I was missing the attached file yesterday. 



Thanks,

Troy

001_RasterRotation.zip (1.3 MB)

Hi all,

sorry for getting back late.



I have tested the RotationProjectioon.

And that is not what I’m looking for.



With this projection all items of a layer will be transformed. That’s wrong!



The coordinates must be the same. Only the View of the layer in the map Control should be rotated.

Getting coordinates must deliver the original coordinates.

Applying the Rotationprojection will rotate all items using a Pivot Point (0,0,0) so items will shift…



What I like to get is a property for the MapControl like




… Dim theMap as WinformsMap

    theMap.Angle=45.0





So all Layers (Raster and Vector) will be rotated in the Display of the MapControl (and not the coordinates!).



Is there any Feature which fits my Needs?



Regards

Hardy

Me again…



I have played around and there is a way to get the correct coordinates.

Sample “WorldCoordinateWithRotation” solves my Problem.

The key is to grab the coordinates and reproject them…



But it raises some new Problems:

1. When Setting the RotationProjection, a click on the map will fire an exception “KeyNotFoundException” by ThinkGeo.MapSuite.DesktopEdition.EditInteractiveOverlay.MouseDownCore(InteractionArguments interactionArguments)

2. Panning the Map doesn’t work anymore (same exception as 1.)

3. QueryTools “.QueryTools.GetFeaturesWithinDistanceOf” fails with exception "Cannot get the projection’s InternalGeographyUnit, please provide it by overriding the Projection’s GetInternalGeographyUnitCore() method."

4. Raster (GeoTIFF) will be shifted about 30 Meters North (EPSG:25832)



I’m using Developement Release 9.0.52.0.



So any ideas?



Regards

Hardy

Hi Hardy,



For the #1,2,3, we fixed the issue in version 9.0.60.0, would you please get this development branch and have a try? (This version packages may still not be available, please wait for a while). After referring the latest version, please do another changes by setting the RotationProjection SourceUnit as Meter:


projection = new RotationProjection(0.0);
projection.SourceUnit = GeographyUnit.Meter;
projection.Open();

As for #4, sorry we didn’t recreate the issue, would you mind to send your demo or a tiny data for us? If the sample/data is too large, please contact support@thinkgeo.comwiki.thinkgeo.com/wiki/Map_S…to_Support



Thanks,



Troy

Hi Troy,



be Default (Rotation.Angle=0.0) there is an Offset between Raster (GeoTIFF) and Vector (PostGIS) Geometries. Both Geometries based on EPSG 25832. Applying an angle (45.0) Raster will be shifted.

Have a look at the Screen shot. Rotating also effects TextStyles. It seems to me they will be rotated in opposide direction…










I will provide the data via ftp.



Regards

Hardy

Glad to see progress is being made on rotation.  Unfortunately, I’m completely buried in other things right now.  Hopefully I’ll be able to take a look soon.

Hi Hartwig,



Thanks for the data. I did some test: 




        
  1. First of all, I didn’t use rotation projection and load the Geotiff image file over the google layer with EPSG 25832, then I can see they are matched well. So, we can say the Geotiff file is safe and no problem. End of this reply is my test codes and result:

  2.     
  3. When I tried to restore the vector layer from Postgre backup file, I got an error message I attached. So, would you please export the vector geometries layer to shape file so we don’t need to restore? 



GoogleMapsLayer googleMapsLayer = new GoogleMapsLayer();
            googleMapsLayer.MapType = GoogleMapsMapType.Satellite;
            googleMapsLayer.TileMode = GoogleMapsTileMode.MultiTile;
            rasterLayerOverlay.Layers.Add(“Google Maps Layer”, googleMapsLayer);
 
            GeoTiffRasterLayer tiffLayer = new GeoTiffRasterLayer(@“D:\Downloads\ThinkGeo\3375_56100.tif”);
            tiffLayer.UpperThreshold = double.MaxValue;
            tiffLayer.LowerThreshold = double.MinValue;
            Proj4Projection proj4 = new Proj4Projection()
            {
                InternalProjectionParametersString = Proj4Projection.GetEsriParametersString(25832),
                ExternalProjectionParametersString = Proj4Projection.GetSphericalMercatorParametersString()
            };
            tiffLayer.ImageSource.Projection = proj4;
            rasterLayerOverlay.Layers.Add(“GeoTiff Layer”, tiffLayer);





Thanks,

Troy

error.txt (575 Bytes)


Posted By Russ on 08-24-2015 03:50 PM


Glad to see progress is being made on rotation.  Unfortunately, I’m completely buried in other things right now.  Hopefully I’ll be able to take a look soon.


Hi Russ,



Take your time and we are happy to assist you if any questions.



Thanks,



Troy

Hi,



just uploaded some Shape file data "db.zip".

Hope you will fix the rotation projection soon.



Regards

Hardy

Hi,



some more Information:

If assigning the RotationProject to a layer which is hosted by EditOverlay of the MapControl the System will Crash on the next MapClick Event…



System.Collections.Generic.KeyNotFoundException: Der angegebene Schlüssel war nicht im Wörterbuch angegeben.

   bei System.Collections.Generic.Dictionary`2.get_Item(TKey key)

   bei ThinkGeo.MapSuite.DesktopEdition.EditInteractiveOverlay.5hM=(InteractionArguments interactionArguments)

   bei ThinkGeo.MapSuite.DesktopEdition.EditInteractiveOverlay.MouseClickCore(InteractionArguments interactionArguments)

   bei ThinkGeo.MapSuite.DesktopEdition.WinformsMap.jRQ=(InteractionArguments interactionArguments)

   bei ThinkGeo.MapSuite.DesktopEdition.MouseEventAnalyzer.OnMouseEvent(CRU= e)

   bei ThinkGeo.MapSuite.DesktopEdition.MouseEventAnalyzer.CBU=(Object sender, EventArgs e)

   bei System.Windows.Forms.Timer.OnTick(EventArgs e)

   bei System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)

   bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)