ThinkGeo.com    |     Documentation    |     Premium Support

How to get the Coordinate on the mouse move

Hello All 


In think geo map. i set the mouscoordinate property enabled true and set the mousecoordinatetype .


" Map1.MapTools.MouseCoordinate.MouseCoordinateType =MouseCoordinateType.LatitudeLongitude "


But when i check on the mouse move it show a different value coorespoding to the address langtitude and latitude . (see the mapimage.jpg attachment)


In this image a house icon is a address whose langitude and latitude are following.












Longitude :  -118.18516422747823


Latitude : 33.775473560763338(i get this by passing a adddress location on the Geocode result and its correct)


 


but when i put a mouse on that image icon it show a  different Longtitude and latitude in the bottom of map.  please see the attchment image .


 


 



 



Vivek,  
  
 Thanks for providing the image! 
  
 In the image I see that your MouseMove coordinates are set to something other than LatitudeLongitude, perhaps Meters or Feet? For your house icon to match, please verify that your MouseCoordinateType is set to LatitudeLongitude.

Hello Ryan 


Thanks for reply 


There is only 3 way to set the MouseCoordinateType is given below . there is no other way to set it in meter and miles.


So i just set the first one to get the LatitudeLongitude but not getting the right coordinate.


1.   Map1.MapTools.MouseCoordinate.MouseCoordinateType = MouseCoordinateType.LatitudeLongitude.


      (please see the doument  ".LatitudeLongitude..doc")


2.   Map1.MapTools.MouseCoordinate.MouseCoordinateType = MouseCoordinateType.DegreesMinutesSeconds.


      (please see the doument  ".DegreesMinutesSeconds.doc")


3.   Map1.MapTools.MouseCoordinate.MouseCoordinateType = MouseCoordinateType.LongitudeLatitude.


   its a same as First one just reverse the order of Longitude and Latitude.


 


Is there any other setting to set the mousecoordinate type instead of those which i mention above?



654-LatitudeLongitude.docx (81 KB)
655-DegreesMinutesSeconds.docx (82.6 KB)











 


The method they would need to look at to help define the map extent by the location of the points on that map:



Map1.CurrentExtent = ExtentHelper.GetBoundingBoxOfItems(Layer.InternalFeatures);<u1:p></u1:p>


<u1:p> </u1:p>


InternalFeatures is the collection of points that you want the map defined by.





<u1:p></u1:p>


For more information on the ExtentHelper and other classes see our API documentation on your local machine at: Start\All Programs\ThinkGeo\Map Suite Web Evaluation Edition 3.0\API Documentation orgis.thinkgeo.com/Support/API...fault.aspx.


 


 


Question :


 











We are not able to find any explanation about "GetBoundingBoxOfItems" on the link gis.thinkgeo.com/Support/APIDocumentation/tabid/194/Default.aspx


 



How can use the ExtentHelper.GetBoundingBoxOfItems(Layer.InternalFeatures)? 


 



Can you please provide a some example to implement this?


 


 


 


 


<u1:p></u1:p>


               


<u1:p></u1:p>



Hello 


 


I get the link to implement the layers   "








gis.thinkgeo.com/Support/Dis...fault.aspx"


But i get the Error(See attach image  errormapexten.JPG) 


Because i am using a CustomOverlays and Backgroundoverlay, StaticOverlay, DynamicOverlay  are not use when CustomOverlays using in the map .


please tell other way to zoom the map to a set of points using the CustomOverlays.


and please reply the my previous post (A post about the mouse coordinate and i also attach a two  document related to the mouse coordinate error.)


 


Thanks


Vivek Chauhan



Hi-  
 Cn we get something concrete going on this problem?  I am not sure where the disconnect is- it seems like my developers can’t figure this out but from what I am hearing it is a very basic issue.  Can we get some direction here? 
  


Hi Vivek, 



ExtentHelper.GetBoundingBoxOfItems is to calculate a big bounding box containing all the features from the parameter. 



Mouse Coordinate just displays the coordinate depending on what the MapUnit is on the map, we don't support changing it to a different one in other place; but you can change the coordinate formatting on client side. 



The attached sample indicates how to use GetBoundingBoxOfItems and format coordinate from decimal degree to meter, 



Any questions please let me know, 



Thanks, 



Howard



Hello Howard


Thanks for reply 


but i did not found any attchment with your post .


Can you please attach example code for GetBoundingBoxOfItems?


 


Thanks


Vivek Chauhan


 



Vivek,  
  
 Sorry about not posting the sample. It is now attached to Howard’s post.

OK- how does this relate to the overlays issue Vivek mentions in post 5 above?  I want them to be able to complete their work on this issue tonight- I cannot purchase this program until they have figured out how to use it.

Ian,


Can you have your team post the code that shows where they are adding the points to the Map? Points cannot be added directly to a CustomOverlay, they must first be added to a Layer object and then that Layer object is added to the CustomOverlay.


If we have a code example that shows where they are adding the points to the map we can provide you some code on how to retrieve those points and create a Extent from those points.



Vivek, Rohit: 
  
 Ryan sent me this: 
  
 Ian, 
   
 Here is the sample code from this issue: gis.thinkgeo.com/Support/DiscussionForums/tabid/143/aff/12/aft/5699/afv/topic/Default.aspx 
   
   
 using System; 
 using System.Collections.Generic; 
 using System.Collections.ObjectModel; 
 using ThinkGeo.MapSuite.Core; 
   
 namespace CSSamples.Samples.NavigateTheMap 
 { 
     public partial class ZoomToSetOfFeatures : System.Web.UI.Page 
     { 
         protected void Page_Load(object sender, EventArgs e) 
         { 
             if (!Page.IsPostBack) 
             { 
                 Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#B3C6D4")); 
                 Map1.CurrentExtent = new RectangleShape(-140, 60, 140, -60); 
                 Map1.MapUnit = GeographyUnit.DecimalDegree; 
   
                 //Declare Layer 
                 ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer(MapPath("~/SampleData/world/cntry02.shp")); 
                 worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.FromArgb(255, 243, 239, 228), GeoColor.FromArgb(255, 218, 193, 163), 1); 
                 worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; 
   
                 //Declare Layer that contains Internal Features 
                 InMemoryFeatureLayer highlightLayer = new InMemoryFeatureLayer(); 
                 highlightLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.FromArgb(100, 60, 180, 60), GeoColor.GeographicColors.DeepOcean); 
                 highlightLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.Country1("CNTRY_NAME"); 
                 highlightLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; 
                 highlightLayer.DrawingMarginPercentage = 50; 
   
                 //Add Layers to Map 
                 Map1.StaticOverlay.Layers.Add("WorldLayer", worldLayer); 
                 Map1.DynamicOverlay.Layers.Add("HighlightLayer", highlightLayer); 
   
                 
                 //Clear HighlightLayer 
                 highlightLayer.InternalFeatures.Clear(); 
   
                 //Create list of IDs for the features we want to zoomin to 
                 //This data could reside in your database or the dbf of your 
                 //shapefile as another column next to your Lat/Long columns 
                 List<string> featureIds = new List<string>(); 
                 featureIds.Add("15"); 
                 featureIds.Add("24"); 
                 featureIds.Add("60"); 
   
                 //Query the dbf of your shapefile or database for the features that match the featureIds above 
                 worldLayer.Open(); 
                 Collection<Feature> features = worldLayer.QueryTools.GetFeaturesByIds(featureIds, new string[] { "CNTRY_NAME" }); 
                 worldLayer.Close(); 
   
                 foreach (Feature feature in features) 
                 { 
                     //Add each feature that matched the featureIds above to a HighLightLayer 
                     highlightLayer.InternalFeatures.Add(feature.Id, feature); 
                 } 
             } 
         } 
   
         protected void Button1_Click(object sender, EventArgs e) 
         { 
             InMemoryFeatureLayer highlightLayer = (InMemoryFeatureLayer)Map1.DynamicOverlay.Layers["HighlightLayer"]; 
   
             if (highlightLayer.InternalFeatures.Count > 0) 
             { 
                 //Zoom the map to the bounding box of the features contained in the HightLightLayer 
                 highlightLayer.Open(); 
   
                 Map1.CurrentExtent = highlightLayer.GetBoundingBox(); 
   
                 //Use the next three lines of code if you want to scale the Current Extent 
                 //a bit larger 
                 //RectangleShape rect = highlightLayer.GetBoundingBox(); 
                 //rect.ScaleUp(30); 
                 //Map1.CurrentExtent = rect; 
   
                 highlightLayer.Close(); 
   
  
 Guys- you need to post the code you are using, you need to post more information, and you need to post everything that could possibly help Ryan and his team answer your questions.   
  
 ryan, am I correct here? 
  
 Ian 


Map1.CurrentExtent = highlightLayer.GetBoundingBox();  
  
 Vivek, Rohit: 
 Ryan and his team need to know what objects the points are being added to- in the code above, this is referenced in the 7th line as i have copied above.

   Map1.MapBackground.BackgroundBrush = New GeoSolidBrush(GeoColor.FromArgb(255, 242, 239, 233))             Map1.MapUnit = GeographyUnit.DecimalDegree                         Map1.MapTools.LoadingImage.Enabled = False             Map1.MapTools.KeyboardMapTool.Enabled = False             Map1.MapTools.MiniMap.Enabled = False             Map1.MapTools.ScaleLine.Enabled = False             Map1.MapTools.MouseCoordinate.Enabled = True             Map1.MapTools.PanZoomBar.Enabled = False             Map1.MapTools.MouseMapTool.Enabled = False             Map1.MapTools.Logo.ImageUri = New Uri(ConfigurationManager.AppSettings("Path") + "images/tfmaplogo.png")                          Dim geoCodeSettings As New GeoCodeUSASettings             Dim istr As Integer = 0             Dim geoCodeResult As GeoCodeResult = GetPositionFromAddress(Address, City, State, ZipCode, istr)                        If (geoCodeResult.Longitude = 0 And geoCodeResult.Latitude = 0) Then                 Map1.Visible = False                 rptergdview.Visible = False             Else                  rptergdview.Visible = True                 Map1.Visible = True             End If             Dim dd As String = ""             dd = Guid.NewGuid.ToString()             Map1.CustomOverlays.Clear()             Dim google As New GoogleOverlay(dd)             google.JavaScriptLibraryUri = New Uri(ConfigurationManager.AppSettings("GoogleUri"))             google.GoogleMapType = GoogleMapType.Normal             Map1.CustomOverlays.Add(google)               Dim markerOverlay As New SimpleMarkerOverlay(Guid.NewGuid.ToString())               Dim xInDecimalDegree As Double = 0             Dim yInDecimalDegree As Double = 0             Dim fromPoint As PointShape = New PointShape(geoCodeResult.Longitude, geoCodeResult.Latitude)             Dim proj4 As New Proj4Projection()             proj4.InternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(4326)             proj4.ExternalProjectionParametersString = Proj4Projection.GetGoogleMapParametersString()             proj4.Open()             Dim vertexInGoogleProjection As Vertex = proj4.ConvertToExternalProjection(geoCodeResult.Longitude, geoCodeResult.Latitude)             proj4.Close()  markerOverlay.Markers.Add(GetMarker(vertexInGoogleProjection.X, vertexInGoogleProjection.Y, "c1", "", contentHtml.ToString, -1, -1))   Private Function GetMarker(ByVal x As Double, ByVal y As Double, ByVal number As String, ByVal UserID As String, ByVal contentHtml As String, ByVal isfav As Integer, ByVal ifree As Integer) As Marker         Dim valueMarkerStyle As New ValueMarkerStyle("id")         Dim webImage As New WebImage("marker.png", 0, 0, 0, 0)         'If CheckIfFavorite(UserID) Then          If number = "c1" Then             webImage = New WebImage("images/house.png") ', 26, 26)             webImage.Text = ""         ElseIf number = "c2" Then             webImage = New WebImage("images/building.png") ', 26, 26)             webImage.Text = ""         Else             If (isfav = 1) Then                  webImage = New WebImage("images/icons/" + Session("SpecialityText") + ".gif", 30, 30)                  If (number < 9) Then                     webImage.TextOffsetX = 8                     webImage.TextOffsetY = 6                 Else                     webImage.TextOffsetX = 5                     webImage.TextOffsetY = 6                 End If             Else                 If (ifree = 1) Then                     webImage = New WebImage("images/icons/" + Session("SpecialityText") + "-paid.gif", 20, 20)                 Else                     webImage = New WebImage("images/icons/" + Session("SpecialityText") + "-free.gif", 16, 16)                 End If                 If (number < 9) Then                     webImage.TextOffsetX = 3                     webImage.TextOffsetY = 1                 Else                     webImage.TextOffsetX = -1                     webImage.TextOffsetY = 0                 End If             End If             ' webImage = New WebImage("images/marker_green.gif", 21, 25)             webImage.Text = number         End If             Dim marker As New Marker(x, y, webImage)         marker.Popup.ContentHtml = contentHtml.ToString()         marker.Popup.Width = 190         marker.Popup.Height = 50         marker.Popup.AutoPan = True         marker.Popup.IsVisible = False         webImage.FontColor = GeoColor.StandardColors.White         webImage.FontStyle = New GeoFont("Arial", 10, DrawingFontStyles.Bold)          If number = "c" Then             webImage.TextOffsetX = 4             webImage.TextOffsetY = 0             webImage.FontColor = GeoColor.StandardColors.Black          End If                   Return marker     End Function  



Ian, Vivek,



In the sample “ZoomToSetOfFeatures”, we use the following code because FeatureLayer has the simple API to get the extent we want,

Map1.CurrentExtent = highlightLayer.GetBoundingBox()

If you want to use ExtentHelper.GetBoundingBoxOfItems, you have to loop all the markers and add their positions into one collection, 



please see the following code.

Dim points As New Collection(Of BaseShape)()
For Each marker As Marker In markerOverlay.Markers
    points.Add(marker.Position)
Next
  
Map1.CurrentExtent = ExtentHelper.GetBoundingBoxOfItems(points)

Also, we have a better simple API for you,

Map1.ZoomToMarkers(markerOverlay.Markers)

If you have any queries please let me know.



Thanks,



Howard



Hello Howard


 


Thanks For Your reply


its work great ...........for my requirement..............


I get what excatly i want


Thanks again


 


now i have some problem with show the marker on the center of the map and zoom the map to such level , that it show one marker in center and all area  sourrounding to that marker under 5 miles.


mean its show all place in map which are 5 mile far for the center point of map 


i hope you get what i want 


 


 


 


Vivek 


 


 



Hi Vivek, 



You are welcome. If you want to find the extent around 5 Miles, Buffer can satisfy your requirement, please see the following code.Map1.CurrentExtent = markerPosition.Buffer(5, GeographyUnit.DecimalDegree, DistanceUnit.Mile).GetBoundingBox();
If you have any queries please let me know.



Thanks,



Howard