ThinkGeo.com    |     Documentation    |     Premium Support

Decimal Degree format at mousemove

hi


i am using GeoTiffRasterLayer to show TIFF file. I can see at mousemove event coordinates are in METERS. i want to display in DECIMAL DEGREE. i am putting my code so some one can suggest me the updates.


 



Private



 Sub winformsMap1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles winformsMap1.MouseMove"toolStripStatusLabelScreen").Text = "X:" & e.X & " Y:" & e.YDim pointShape As PointShape = ExtentHelper.ToWorldCoordinate(winformsMap1.CurrentExtent, New ScreenPointF(e.X, e.Y), winformsMap1.Width, winformsMap1.Height)"toolStripStatusLabelWorld").Text = "(world) X:" & Math.Round(pointShape.X, 4) & " Y:" & Math.Round(pointShape.Y, 4)End Sub

Regards,


Zeeshan



statusStrip1.Items(


 


statusStrip1.Items(


 



ZEESHAN,


 


We have a sample to show your requirement at code community, you can download it and have a look.


wiki.thinkgeo.com/wiki/Map_Suite_Desktop_Edition_All_Samples#World_Coordinates


 


You will learn how to display world coordinates at the mouse event. Notice that the Layer is in Mercator projection and we use a projection conversion to display Longitude and Latitude in addition to the world coordinates values in meters from the Mercator projection.


 


Thanks,


 


James


 



hi james!


I have download the sample code and applied code to my project. but still coordinates are not coming correctly. I would like to explore the properties of my TIFF file during executing in ArcMap so you can understand what projection i need to do fix. (Note: TIFF file is created in ArcMap using below mentioned properties/Spatial reference)


Projection: Transverse_Mercator

False_Easting: 500000.000000

False_Northing: 0.000000

Central_Meridian: 45.000000

Scale_Factor: 0.999600

Latitude_Of_Origin: 0.000000

Linear Unit: Meter (1.000000)


Geographic Coordinate System: GCS_WGS_1984

Angular Unit: Degree (0.017453292519943299)

Prime Meridian: Greenwich (0.000000000000000000)

Datum: D_WGS_1984

  Spheroid: WGS_1984

    Semimajor Axis: 6378137.000000000000000000

    Semiminor Axis: 6356752.314245179300000000

    Inverse Flattening: 298.257223563000030000

 


I am sending my code too if there is some changings required then kindly help me.

 



 


Dim proj4 As New Proj4Projection()
Private Sub testing_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
 
winformsMap1.MapUnit = GeographyUnit.Meter
winformsMap1.BackgroundOverlay.BackgroundBrush = New GeoSolidBrush(GeoColor.GeographicColors.ShallowOcean)
 
proj4.InternalProjectionParametersString = "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs" 'Mercator
 
proj4.ExternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(4326) 
 
Dim worldImageLayer As New GeoTiffRasterLayer("..\..\Map\kuwait_big.tif")
worldImageLayer.UpperThreshold = Double.MaxValue
worldImageLayer.LowerThreshold = 0
 
Dim staticOverlay As New LayerOverlay()
staticOverlay.Layers.Add("WorldImageLayer", worldImageLayer)
winformsMap1.Overlays.Add(staticOverlay)
 
worldImageLayer.Open()
winformsMap1.CurrentExtent = worldImageLayer.GetBoundingBox()
 
winformsMap1.Refresh()
 
End Sub
 
Private Sub winformsMap1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles winformsMap1.MouseMove
 
Dim pointShape As PointShape = ExtentHelper.ToWorldCoordinate(winformsMap1.CurrentExtent, New ScreenPointF(e.X, e.Y), winformsMap1.Width, winformsMap1.Height)
proj4.Open()
Dim geoVertex As Vertex = proj4.ConvertToExternalProjection(pointShape.X, pointShape.Y)
proj4.Close()
statusStrip1.Items("toolStripStatusLabelScreen").Text = "X:" & e.X & " Y:" & e.Y
statusStrip1.Items("toolStripStatusLabelWorld").Text = "(world) X:" & Math.Round(geoVertex.X, 4) & " Y:" & Math.Round(geoVertex.Y, 4)
 
End Sub
 
Regards,
Zeeshan

ZEESHAN, 
  
 I have reviewed your sample code, I think it should work. Could you provide the sample tiff file to us so we can recreate your problem? 
  
 Thanks, 
  
 James

I am sending TIFF sample file.


 


Regards,


Zeeshan



ZEESHAN, 
  
 Thanks for your sample data, I can recreate your problem however I am still working on the solution. 
  
 I will keep update this thread if I find anything. 
  
 Thanks, 
  
 James 


HI james


i am waiting for the solution. This is very important for us. If you think there is some problem in creating TIFF then i can send you original JPEG file so you can set projection using ARC tools and can create TIFF. But with me in ArcMap its showing coordinates accurate in meters as well as in Decimal Degree.


 


Regards,


Zeeshan



Zeeshan,


  My name is Val and I am a GIS specialist at ThinkGeo. Let me jump into the conversation because I immediatly noticed something incorrect in the projection string you have set for the internal projection based on the spatial reference you provided.


 The string  "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs" is not set correctly for proj4.InternalProjectionParametersString based on the spatial reference. The reference longitude (+lon) is incorrect as well as the false easting (+x):



Projection: Transverse_Mercator

False_Easting: 500000.000000

False_Northing: 0.000000

Central_Meridian: 45.000000

Scale_Factor: 0.999600

Latitude_Of_Origin: 0.000000

Linear Unit: Meter (1.000000)


Geographic Coordinate System: GCS_WGS_1984

Angular Unit: Degree (0.017453292519943299)

Prime Meridian: Greenwich (0.000000000000000000)

Datum: D_WGS_1984

  Spheroid: WGS_1984

    Semimajor Axis: 6378137.000000000000000000

    Semiminor Axis: 6356752.314245179300000000

    Inverse Flattening: 298.257223563000030000

 



 I did some research and it turns out that the spatial reference you provided correspond to UTM zone 39N spatial-reference.org/ref/epsg/32639/ with EPSG code 32639. So I would replace the proj4  code by:



    ManagedProj4Projection proj4 = new ManagedProj4Projection();
    proj4.InternalProjectionParameters = ManagedProj4Projection.GetEpsgParametersString(32639); // UTM zone 39N
    proj4.ExternalProjectionParameters = ManagedProj4Projection.GetEpsgParametersString(4326); //WGS84


HI Val !


Thanks for your cooperation. Coordinates are accurate now. But i have another question related to projection almost. I am putting Bitmap overlay at GeoTiffRasterLayer. But i cant see image on defined positions. i am pasting my code here


 


Sub Car()


Dim inMemoryFeatureLayer As New InMemoryFeatureLayer()


proj4.Open()


Dim pos As Vertex = proj4.ConvertToInternalProjection(47.4305, 29.3834)


proj4.Close()


inMemoryFeatureLayer.FeatureSource.Projection = proj4


inMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.PointType = PointType.Bitmap


inMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.Image = New GeoImage("..\..\Images\sedan.png")


inMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.RotationAngle = 360


inMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20


inMemoryFeatureLayer.InternalFeatures.Add("Car", New Feature(New PointShape(pos.X, pos.Y)))


 


Dim car_overlay As New LayerOverlay()


car_overlay.Layers.Add("CarOverlay", inMemoryFeatureLayer)


winformsMap1.Overlays.Add(car_overlay)


End Sub


Regards,


Zeeshan



ZEESHAN,


Thanks for your post.
 
Could you have a real quick try not setting the projection for the inmemoryFeatureLayer as the point added is already projected?
 

Sub Car()
Dim inMemoryFeatureLayer AsNew InMemoryFeatureLayer()
proj4.Open()
Dim pos As Vertex = proj4.ConvertToInternalProjection(47.4305, 29.3834)
proj4.Close()
‘inMemoryFeatureLayer.FeatureSource.Projection = proj4
inMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.PointType = PointType.Bitmap
inMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.Image = New GeoImage("..\..\Images\sedan.png")
inMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.RotationAngle = 360
inMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20
inMemoryFeatureLayer.InternalFeatures.Add("Car", New Feature(New PointShape(pos.X, pos.Y)))
 
Dim car_overlay AsNew LayerOverlay()
car_overlay.Layers.Add("CarOverlay", inMemoryFeatureLayer)
winformsMap1.Overlays.Add(car_overlay)
EndSub

 
Any questions please feel free to let me know.
 
Thanks.
 
Yale

Dear Yale!


i tried positions without setting projection but nothing comes on the map.


 


Sub Car()
Dim inMemoryFeatureLayer As New InMemoryFeatureLayer()
inMemoryFeatureLayer.FeatureSource.Projection = proj4
inMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.PointType = PointType.Bitmap
inMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.Image = New GeoImage("..\..\Images\sedan.png")
inMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.RotationAngle = 360
inMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20
inMemoryFeatureLayer.InternalFeatures.Add("Car", New Feature(New PointShape(47.3677, 29.3901)))
 
Dim car_overlay As New LayerOverlay()
car_overlay.Layers.Add("CarOverlay", inMemoryFeatureLayer)
winformsMap1.Overlays.Add(car_overlay)
End Sub
 
Even I tried withoutinMemoryFeatureLayer.FeatureSource.Projection = proj4 but not works
 
Regards,
Zeeshan

Hi Yale!


I tried without setting projection the inmemoryfeaturelayer but displaying nothing.


 


Sub Car()
Dim inMemoryFeatureLayer As New InMemoryFeatureLayer()
inMemoryFeatureLayer.FeatureSource.Projection = proj4
inMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.PointType = PointType.Bitmap
inMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.Image = New GeoImage("..\..\Images\sedan.png")
inMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.RotationAngle = 360
inMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20
inMemoryFeatureLayer.InternalFeatures.Add("Car", New Feature(New PointShape(47.3677, 29.3901)))
 
Dim car_overlay As New LayerOverlay()
car_overlay.Layers.Add("CarOverlay", inMemoryFeatureLayer)
winformsMap1.Overlays.Add(car_overlay)
End Sub
 
Even I tried withoutinMemoryFeatureLayer.FeatureSource.Projection = proj4 but not works
 
Regards,
Zeeshan

Sorry i pasted twice.

Zeehan,


 Since you are going from WGS84 to UTM for your point at longitude 47.3677 and latitude 29.3901, you need to use another projection class with the internal and external projection strings reversed from your first projection class. So use this class instead and set it for the projection property of your InMemoryFeatureLayer. Remember that by setting the projection property to that projection class, all the features that you are going to add to that InMemoryFeatureLayer are going to have to be in Longitude/Latitude (WGS84) as your point. Internally all the features in that InMemoryFeatureLayer will be projected from WGS84 to UTM.


 


 



ManagedProj4Projection WGS84toUTMproj = new ManagedProj4Projection();
WGS84toUTMproj.InternalProjectionParameters = ManagedProj4Projection.GetEpsgParametersString(4326); //WGS84
WGS84toUTMproj.ExternalProjectionParameters = ManagedProj4Projection.GetEpsgParametersString(32639); // UTM zone 39N

inMemoryFeatureLayer.FeatureSource.Projection = WGS84toUTMproj;


 


All is done so far. Thanks Val


Regards,


Zeeshan


 



ZEESHAN, 
  
 Thanks for letting us know your status. 
  
 Any questions please feel free to let me know. 
  
 Thanks. 
  
 Yale