ThinkGeo.com    |     Documentation    |     Premium Support

Map Extent Mismatch

Hello,


I have a map that gets external zoom request from mobile source.

I've managed to serialize the request into a RectangleShape and, much like your "Find World Coordinates Where a User Clicked" sample I do a "Map1.CurrentExtent = new RectangleShape(-131.22, 55.05, -54.03, 16.91);" , but somehow I get full zoomed to a totaly different location (South Africa) no matter the values I recieve.


I have checked the RectangleShape values returned from CurrentExtent when clicked on elsewhere on the map and they are on a different scale (400000 +).


What Am I doing wrog ?


Thanks you for your help,

Runny



Hi Runny, 
  
 From your description we can’t reproduce this issue. Are there any logic to change the map extent on client side? Could you please provide us a simple sample, which will be helpful to recreate this issue and find the root cause. 
  
 Regards, 
  
 Ivan

Hi Ivan, 
  
 Even when only trying to Copy-Paste your "Find World Coordinates Where a User Clicked" sample  : 
 "Map1.CurrentExtent = new RectangleShape(-131.22, 55.05, -54.03, 16.91);" 
 "Map1.MapUnit = GeographyUnit.DecimalDegree; " 
 I get the same issue. 
  
 It seems like I have a units problem. 
 My map boundingbox for the above coordinates are in the (-14005802.189242,8331060.5653646, -10199849.677548,3233628.0239958) range. 
  
 Thank you for your help, 
 Runny 
  
  
  


Runny,


I tested the sample and set CurrentExtent the same as yours, the extent seems right, you can see my screen-shot. Do you change some other thing as well? Hope you can provide the more information to help us figure out what happened.



Thanks,


James



Runny, 
  
  Your map is not in decimal degrees (Longitude/Latitude). This is what I suspected from reading your first post. You are trying to set the extent for your map using decimal degrees when your map is obviously using a different unit (meters or feet). You need to find out the projection of your map (such as UTM, State Plane etc). And with that information, we can apply the projection for setting the current extent based on decimal degrees values. This is a very standard operation but first we need the projection information. Thank you.

Thanks James and Val, 
  
 Seems like Val has a point there. 
 I am using OpenStreetMap 
 OpenStreetMapOverlay worldMapKitOverlay = new OpenStreetMapOverlay("osmMap"); 
  
 Is that enough information to figure out what the projection is ? 
  
 Thank you, 
 Runny 
  


Runny,


 If you are using Open Map Street for your map and you get external data in Longitude/Latitude format then you need need a projection class to go from WGS84 to Spherical Mercator. See the code and the screen shot below:




    ManagedProj4Projection proj4 = new ManagedProj4Projection();
    //EPSG code for WGS84 (Longitude/Latitude) used by most mobile source.
    //spatial-reference.org/ref/epsg/4326/
    proj4.InternalProjectionParameters = ManagedProj4Projection.GetEpsgParameters(4326);
    //Spherical Mercator projection used by Google Map, Bing Map, Open Street Map etc
    proj4.ExternalProjectionParameters = ManagedProj4Projection.GetSphericalMercatorParameter();

    proj4.Open();
    Map1.CurrentExtent = proj4.ConvertToExternalProjection(new RectangleShape(-131.22, 55.05, -54.03, 16.91));
    proj4.Close();

    Map1.MapUnit = GeographyUnit.Meter;
    Map1.MapTools.MouseCoordinate.Enabled = true;

    OpenStreetMapOverlay osmOverlay = new OpenStreetMapOverlay("Open Street Map");
    Map1.CustomOverlays.Add(osmOverlay); 


Runny,


 I want to also point out that we have a sample in the Code Community that shows how to handle a case like yours. In the sample, the map is using Google Map but the logic is the same for Open Map Street because both background maps are on the same Spherical Mercator projection. It is a Web app and I invite you to check it out:


Center Map Based On Lat/Long wiki.thinkgeo.com/wiki/Map_Suite_We...Lat.2FLong



Val, 
  
 Thank you so much. 
 After implementing and testing, it works flawlessly 
  
 Thank you, 
 Runny

Runny, 
  
  You are welcome. Let us know, if you have any other questions.