ThinkGeo.com    |     Documentation    |     Premium Support

Isolines and Google map

I converted your Isolines example into Web Edition VB and it work fine with the WorldMapKit ovelray


When I try to draw the same isoline file on a Google map it puts something (can zoom close enough) in the ocean south of Horn of Africa.


What do I need to do to plot the isolines on the Google map?


here is the code I am using to create Google overlay. If I uncoment the World Map Kit rows it works fine


 


 



        Map1.CurrentExtent = New RectangleShape(-100.555827718567, 38.0841933095704, -100.353770681213, 37.6486586797486)
        Map1.MapUnit = GeographyUnit.DecimalDegree
        'Load the well depth points and depth data from a text file into the dictionary
        'We cache this at the class level to prevent form loading it multiple times
        wellDepthPointData = GetWellDepthPointDataFromCSV(wellDepthPointDataFilePath)

        Map1.MapTools.OverlaySwitcher.Enabled = True
        Map1.MapTools.OverlaySwitcher.BackgroundColor = GeoColor.StandardColors.Gray
        Map1.MapTools.MouseCoordinate.Enabled = True
        Map1.MapTools.PanZoomBar.Enabled = True
        Map1.MapTools.ScaleLine.Enabled = True
        'Map1.MapTools.MiniMap.Enabled = True
        Map1.MapTools.Logo.Enabled = False
        Map1.MapBackground.BackgroundBrush = New GeoSolidBrush(GeoColor.FromHtml("#B3C6D4"))


        ''This loads the background maps from ThinkGeo's World Map Kit Server.
        'Dim worldMapKitOverlay As New WorldMapKitWmsWebOverlay("WorldMapKitOverlay")
        'Map1.CustomOverlays.Add(worldMapKitOverlay)

        'Background map with Google Map.
        Dim googleMapsOverlay As New GoogleOverlay("Google Map")

        googleMapsOverlay.GoogleMapType = GoogleMapType.Hybrid
        googleMapsOverlay.JavaScriptLibraryUri = New Uri(ConfigurationManager.AppSettings("GoogleUri"))
        googleMapsOverlay.IsBaseOverlay = True
        Map1.CustomOverlays.Add(googleMapsOverlay)



        'Add the grid layer, the grid cells, and the well points to the map
        Dim isoLineOverlay As New LayerOverlay("isoLineOverlay")
        Map1.CustomOverlays.Add(isoLineOverlay)

        isoLineOverlay.Layers.Add("IsoLineLayer", GetGridIsoLineLayer())
        'isoLineOverlay.Layers.Add("GridCellsLayer", GetGridFeatureLayer())
        isoLineOverlay.Layers.Add("WellsLayer", GetWellDepthPointLayer())


        isoLineOverlay.IsBaseOverlay = False



Hello Jacub, 



Welcome to use the new function. 



That’s problem is because the sample data is in Decimal Degrees while Google Maps is under Spherical Mercator. Just change the sample to use Spherical Mercator everything would be fine.  



1, in the Sample_Load method, set the map unit to Meter and Convert the original current extent to Spherical Mercator.   


Proj4Projection projection = new Proj4Projection();
        projection.InternalProjectionParametersString = Proj4Projection.GetDecimalDegreesParametersString();
        projection.ExternalProjectionParametersString = Proj4Projection.GetGoogleMapParametersString();
        projection.Open();
 
        winformsMap1.CurrentExtent = projection.ConvertToExternalProjection(new RectangleShape(-100.655827718567, 37.7441933095704, -100.613770681213, 37.7186586797486));
 
        winformsMap1.MapUnit = GeographyUnit.Meter;


2, in the method GetWellDepthPointDataFromCSV, convert every point read from CSV from Decimal Degrees to Spherical Mercator, using the similar code as following: 




private static Dictionary<PointShape, double> GetWellDepthPointDataFromCSV(string csvFilePath)
    {
        Proj4Projection projection = new Proj4Projection();
        projection.InternalProjectionParametersString = Proj4Projection.GetDecimalDegreesParametersString();
        projection.ExternalProjectionParametersString = Proj4Projection.GetGoogleMapParametersString();
        projection.Open();
 
        StreamReader streamReader = null;
        Dictionary<PointShape, double> wellDataPoints = new Dictionary<PointShape, double>();
 
        try
        {
            streamReader = new StreamReader(csvFilePath);
            string headline = streamReader.ReadLine();
            while (!streamReader.EndOfStream)
            {
                string line = streamReader.ReadLine();
 
                string[] parts = line.Split(',');
                PointShape pointShape = new PointShape(double.Parse(parts[0]), double.Parse(parts[1]));
                wellDataPoints.Add((PointShape)projection.ConvertToExternalProjection(pointShape), double.Parse(parts[2]));
            }
        }
        finally
        {
            if (streamReader != null) { streamReader.Close(); }
        }
        return wellDataPoints;
    }



3, Add the googleMapsOverlay to replace the WorldMapKit Overlay.  



OK. You will then see the isolines displaying on GoogleMap. 



Regards, 



Gary



Thanks. That worked great! 


Hello Jakub, 
  
 You are welcome, any more questions please feel free to let us know. 
  
 Regards, 
  
 Gary

Yes, I posted another question - see Are Isolines working correctly? 


Hello Jakub, 
  
 Yes, we are working on that post, and will post any news in there. 
  
 Regards, 
  
 Gary

Thanks. It is quite important for me. Need to present it to client next week. 


Hello Jakub, 
  
 Don is working on your problems, please focus in that post, we will try our best to resolve your questions. 
  
 Regards, 
  
 Gary