ThinkGeo.com    |     Documentation    |     Premium Support

Google projections


 Hello,


 


We are loading Thinkgeo map's by default in Decimal Degree ..so..I want to load base map by default in Google Projection ( Meter and/ or Spherical Mercator)...So that I can avoid converting each lat and long to  respective Google projections.I knew its possible in Web Application .....using WmsLayer.ActiveBasLayer we can set the base layer to Google Projection. Is this something similar possible using WPF Google Layer???if not ...Do we need to convert each lat and long using ConvertToExternalProjection??


 


 


 


 wpfMap1.MapUnit = GeographyUnit.Meter;


    wpfMap1.CurrentExtent = new RectangleShape(-14180662, 5547256, -7832569, 1777465);


 


    GoogleMapsOverlay googleMapsOverlay = new GoogleMapsOverlay();


    wpfMap1.Overlays.Add(googleMapsOverlay);


 


    ManagedProj4Projection proj4 = new ManagedProj4Projection();


    proj4.InternalProjectionParameters = ManagedProj4Projection.GetWgs84ParametersString();


    proj4.ExternalProjectionParameters = ManagedProj4Projection.GetGoogleMapParametersString();


 


    double Longitude = -96.80;


    double Latitude = 33.50;


 


    proj4.Open();


    Vertex googleMapVertex = proj4.ConvertToExternalProjection(Longitude, Latitude);


    proj4.Close();


 


    InMemoryFeatureLayer inMemoryFeatureLayer = new InMemoryFeatureLayer();


    inMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.CreateSimpleCircleStyle(GeoColor.StandardColors.Red, 12);


    inMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;


 


    inMemoryFeatureLayer.InternalFeatures.Add(new Feature(googleMapVertex));


 


    LayerOverlay dynamicOverlay = new LayerOverlay();


    dynamicOverlay.Layers.Add("PointsLayer",inMemoryFeatureLayer);


    wpfMap1.Overlays.Add("DynamicOverlay", dynamicOverlay);


    


 


    wpfMap1.Refresh()



 



Hi GS,  
  
 Thanks for your question! 
  
 The end goal is to have all the elements of the map in the same projection and unit system (decimal degrees, meters). 
  
 The amount of re-projection code you need is going to be dependent on the format of your Vertexes.  
  
 If they are in Lat/Long or DecimalDegrees you will need to reproject them using ConvertToExternalProjection so that they will match up with your GoogleMapsOverlay that uses Spherical Mercator and Meters. 
  
 If your source vertex data already in the correct projection (in this case Spherical Mercator) and unit system (meters) then you would not need to re-project.

Hi Ryan,




Thanks for replying.




My source lat/long are in DecimalDegreee and there are more than 100 Pointstyle Features added to InmemoryLayers..Is there any way ..I can set base layer to Google Meter units without converting for each feature of source DecimalDegree??


 


 



Hi GS,


You can add all your Features to a Layer and then apply a projection to that layer:



//Setup Projection
                Proj4Projection proj4Projection = new Proj4Projection();
                proj4Projection.InternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(4326);
                proj4Projection.ExternalProjectionParametersString = Proj4Projection.GetGoogleMapParametersString();

                InMemoryFeatureLayer inmemoryFeatureLayer = new InMemoryFeatureLayer();
                //Add features to inmemoryFeaturelayer

                inmemoryFeatureLayer.FeatureSource.Projection = proj4Projection;