ThinkGeo.com    |     Documentation    |     Premium Support

Custom MouseCoordinate format

Hi,


I am enabling the Mouse Coordinate display with:


map.MapTools.MouseCoordinate.IsEnabled = true;


where map is my WpfMap object.


I then set the Geography Unit to meters with:


map.MapUnit = GeographyUnit.Meter;


because we project everything from the map default EPSG:4326 projection to the EPSG:3395 "WGS 84/World Mercator" projection for our project.


The MouseCoordinate is now displayed in meters instead of lat/long. This happens regardless of the MouseCoordinateType I set with any of the following:


map.MapTools.MouseCoordinate.MouseCoordinateType = MouseCoordinateType.Custom;


map.MapTools.MouseCoordinate.MouseCoordinateType = MouseCoordinateType.Custom;


map.MapTools.MouseCoordinate.MouseCoordinateType = DegreesMinutesSeconds


map.MapTools.MouseCoordinate.MouseCoordinateType = LatitudeLongitude


map.MapTools.MouseCoordinate.MouseCoordinateType = LongitudeLatitude


I have also tried using the CoordinateText property in a handler for the map's MouseMove event to do the conversion to lat/long myself and set the resulting text, but my text either never gets set or gets overriden so that I still only see the coordinates in meters.


Is there a way to get some event when this control is updating the text and override what it is displaying?


Thanks,


Kai



Kai,


 In order to see the values of MouseCoordinate of MapTools in Long/Lat for your Mercator map, you need to use the MouseCoordinateType Custom and the CustomFormatted event. See the code below:




public void LoadPost9790()
{
    wpfMap1.MapUnit = GeographyUnit.Meter;

    ManagedProj4Projection proj4 = new ManagedProj4Projection();
    proj4.InternalProjectionParametersString = ManagedProj4Projection.GetEpsgParametersString(4326);
    proj4.ExternalProjectionParametersString = ManagedProj4Projection.GetEpsgParametersString(3395);

    ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer(@"C:\ThinkGeo\Support\MapData\countries02B.shp");
    worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1;
    worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
    worldLayer.FeatureSource.Projection = proj4;

    LayerOverlay layerOverlay = new LayerOverlay();
    layerOverlay.Layers.Add(worldLayer);

    wpfMap1.Overlays.Add(layerOverlay);

    worldLayer.Open();
    wpfMap1.CurrentExtent = worldLayer.GetBoundingBox();
    worldLayer.Close();

    //MapTools:
    wpfMap1.MapTools.MouseCoordinate.MouseCoordinateType = MouseCoordinateType.Custom;
    wpfMap1.MapTools.MouseCoordinate.CustomFormatted += new System.EventHandler<CustomFormattedMouseCoordinateMapToolEventArgs>(MouseCoordinate_CustomMouseCoordinateFormat);
    wpfMap1.MapTools.MouseCoordinate.IsEnabled = true;

    wpfMap1.Refresh();
}

private void MouseCoordinate_CustomMouseCoordinateFormat(object sender, CustomFormattedMouseCoordinateMapToolEventArgs e)
{
    ManagedProj4Projection proj4 = new ManagedProj4Projection();
    proj4.InternalProjectionParametersString = ManagedProj4Projection.GetEpsgParametersString(3395);
    proj4.ExternalProjectionParametersString = ManagedProj4Projection.GetEpsgParametersString(4326);

    proj4.Open();
    Vertex projVertex = proj4.ConvertToExternalProjection(e.WorldCoordinate.X, e.WorldCoordinate.Y);
    proj4.Close();
           
    e.Result = DecimalDegreesHelper.GetDegreesMinutesSecondsStringFromDecimalDegreePoint(new PointShape(projVertex));
}