ThinkGeo.com    |     Documentation    |     Premium Support

MapTools.MouseCoordinates

I need to be able to change the units of the mouse coordinates display between latlon and my project map units.  I saw a java implementation in a previous post, but I don't know how to implement that in my project.  Basically, I want to specify that the mouse coordinates display in my map coordinates (which is easy), or in lat lon, and I want to be able to change from one to the other and back again at will.  Any ideas?


Charles



Charles,


First off, I want to confirm with your  requirements. Do you mean that you want to change the display projection  for the mouse coordinates at run time? If so, please refer to the  attached source codes about how to change display projection at will.


If I misunderstand your meaning, please correct me. I look forward to your feedback about this post.


Thanks,


Khalil



002_001_ChangeDisplayProjectionRuntime.zip (2.23 KB)

Khalil, 
  
 I haven’t had any luck getting this code to work.  I assume it should be added to the sample project somewhere.  In looking at the code, I believe it actually changes the projection used in displaying the map data.  I don’t want to change the display at all.  Using MouseCoordinates, the coordinates of the mouse cursor are displayed using my current coordinate system (state plane).  I want to be able to change the displayed coordinates to latitude/longitude and back again.  I’m guessing it will require creating a projection with Proj4Projection and possibly overriding the function that draws the coordinates on the display. 
  
 Charles

Khalil, 
  
 One more question, is it possible to limit the number of decimal places displayed?  Five is OK for decimal degrees, but way too many for state plane. 
  
 Charles

There is a project in the Code Community, World Coordinates, that answers your concerns on displaying the coordinates of your map and the Lat/Lon at the mouse move event. It also shows how to limit the number of decimal places. It is a Services edition project, so you will only need the MapSuiteCore.dll reference to run it. From the code you see, I think you should be able to easily convert to Web.


code.thinkgeo.com/projects/show/worldcoordinates



Val, 
  
 Thanks for the reply.  I was hoping to use the mouse coordinates display so as not to use up any more screen real estate, but this does what I need. 
  
 Charles

Charles, 
  
 You are so welcome, any questions please let us know. 
  
 Johnny

Johnny, 
  
 The example code I have found implements a mouse move event in Java script.  I have added the mouse move event.  I can get the world coordinate using the Client API for web edition.  I can get the label element I want to update.  I believe that I need Proj4Projection to convert the world coordinate to latitude/longitude, but I can’t figure out how to implement ProjForPojection in java script.  Is this even possible? 
  
 Charles

 


Charles,
The proj4Projection is the server side API for converting the spatial Reference, I think we can use the client side ProjNet apis. The code is as following:
<script language="javascript">
        OnMapCreating = function() {
            var sourceProj = new OpenLayers.Projection("EPSG:4326");
            var targetProj = new OpenLayers.Projection("EPSG:900913");
            var point = new OpenLayers.Geometry.Point(90, 30);
            var convertedP = OpenLayers.Projection.transform(point, sourceProj, targetProj);
        }
</script>
Thanks,
Johnny

 



Johnny, 
  
 I think I’m back to square one.  I tried the code provided and didn’t get values I expected.  Perhaps you can see something wrong in my Java script: 
  
  
            var targetProj = new OpenLayers.Projection(“EPSG:4326”);   // Latitude Longitude
            var sourceProj = new OpenLayers.Projection(“EPSG:2284”);  // NAD83 Virginia South US ft
            var lonlat = Map_Map1.GetOpenLayersMap().getLonLatFromPixel(new OpenLayers.Pixel(e.clientX, e.clientY));
            var point = new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat);
            var convertedP = OpenLayers.Projection.transform(point, sourceProj, targetProj);
            var concatString = convertedP.x + “:” + convertedP.y;
            $(’#MouseCoordinate’).text(concatString);
 
 
  
 Everything seems to work except the transform.  The values of point and convertedP appear to be the same. 
  
 Even if I get this working I’m left with another problem.  I can’t find any reference for using a custom projection string with open layers.  Many of my customers use non-standard projections for which there is no EPSG number. 
  
 Any suggestions? 
  
 Charles

 


Charles,
The client Projection depends on proj4js library, which is a light weight JavaScript Library, so it’s unable to deal with all kinds of projections, I think this is the reason why your application runs into error. You can get the detail from proj4js.org/ .  If you are facing some non-standard projections, I suggest you use server side projections via AJAX and HttpHandler.
Thanks,
Johnny