ThinkGeo.com    |     Documentation    |     Premium Support

Countries02.shp and Coordinates

Hi,


I am looking to display the CurrentExtent of the map on load to the size of the world map (Countries02.shp as provided in the evaluation edition), as well as display accurate coordinates (lat\long) information. I tried to follow the sample code, but they do not properly explain how to go about changing the CurrentExtent to suit my needs, and the coordinates that are calculated are totally wrong.


I am really new to programming, so any help would be much appreciated!



Hi Christopher,
 
Thanks for using our product, do you mean that you want to make the CurrentExtent to display the full world map? If so, please adjust your map Control’s Height to be the half of its width, and use custom zoom levels,
 

            ShapeFileFeatureLayer layer = new ShapeFileFeatureLayer(@"…/…/sampledata/data/countries02.shp");

            double scale = 360.0 / winformsMap1.Width * 96 * 4374754;

            for (int i = 0; i < 20; i++)
            {
                layer.ZoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(scale) { DefaultAreaStyle = AreaStyles.Country1 });
                winformsMap1.ZoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(scale));
                scale /= 2;
            }

            LayerOverlay overlay = new LayerOverlay();
            overlay.Layers.Add(layer);
            winformsMap1.Overlays.Add(overlay);
            winformsMap1.CurrentExtent = new RectangleShape(-180, 90, 180, -90);

            winformsMap1.Refresh();

 
Regards,
Edgar

 Hi Edgar,


Thanks I'll look into that...but I also want to be able to get coordinates (lat/long) for the countries02.shp file provided in the samples. Currently using wiki.thinkgeo.com/wiki/Map_S...oordinates, I'm not able to get correct coordinates. They are off by a lot and I'm assuming the issue is that in the example given, the map is a static image and not the winforms map control.



Just tried the code you provided and yes that is exactly what I'm looking for in terms of the extent!


Thanks again Edgar!



You’re welcome Christopher, if you have any other questions please let us know. 
  
 Regards, 
 Edgar

Hi Edgar,


Actually yes, I did ask about coordinates for the winforms map control (using the Countries02.shp file). Please refer to above!



Christopher, 
  
 Sorry about that, what coordinates did you get? It works fine for me. 
  
 Thanks, 
 Edgar

Could you provide me with some sample code for your coordinates calculations? Or are they the same as the ones provided in the example?


In the coordinates I got, the equator is too far south (like, ~26° to the south), and the coordinates are shifted every time the map is panned.



I'm using the same sample as yours and changed nothing, here attached is my result. BTW, what version are you using?


 
Regards,
Edgar

Oh. Of course the sample program works just fine. But I want to adapt the code for use on the winforms map control object instead of a static image map like the one in the example. That's why I got incorrect coordinates. Maybe you could enlighten me as to how best to go about calculating coordinates in such a case?


 


I'm using Map Suite 6.0 btw...



You can use the MouseMove event to get the coordinates 
  
  void winformsMap1_MouseMove(object sender, MouseEventArgs e) 
         { 
             double x = (double)e.X / winformsMap1.Width * winformsMap1.CurrentExtent.Width + winformsMap1.CurrentExtent.UpperLeftPoint.X; 
             double y = winformsMap1.CurrentExtent.UpperLeftPoint.Y - (double)e.Y / winformsMap1.Height * winformsMap1.CurrentExtent.Height; 
  
             label1.Text = x + ", " + y; 
  
         } 
  
 Regards, 
 Edgar

 That would just give the X, Y coordinates right? I need the Lat/Long...



Oh I see, you can use the projection to get the projected points and add the N/S to the coordinates refer to the code in the sample.



Vertex vertex = proj4Projection.ConvertToExternalProjection(x, y); 



label1.Text = vertex.X + ", " + vertex.Y; 



Hope it helps, 

Edgar



 Alright, I'll check it out. Thanks again!



You’re welcome, please let us know if it works. 
  
 Regards, 
 Edgar

Hi Edgar,


Thanks for all your help! The code worked like a charm.


 


Regards,


Christopher



Glad to hear that, if you have any other questions please let us know. 
  
 Regards, 
 Edgar