ThinkGeo.com    |     Documentation    |     Premium Support

Zoom In/Zoom Out to a certain level gives error

Hello,


I am using Google Map and after certain level of Zoom In it fires error. How can I set the limits to the levels of Zooming so that it should not fire error.


Waiting for the reply.


Thanks,


Akku



Akku,


Try to set the minimum scale for your map control as following way shows:

winformsMap1.MinimumScale = new GoogleMapZoomLevelSet().ZoomLevel05.Scale;

 
Any more questions just feel free to let me know.
 
Thanks.
 
Yale

Hii, 
  
 I have tried the code given by you but it isn’t work and fires an error message on applying this line in my code. I am using the Google Map tiles in offline mode. If I zoom In/Zoom Out to a level which is not resent in the cached tiles, then it fires an error. I want to catch the error occured on Mouse scroll  so that I can set WinformsMap1.ZoomToPreviousExtent()  if tile for that zoom level doesnot exist. 
  
 Waiting for the reply. 
 Thanks, 
 Akku

Akku, 
  
 Thanks for your input and questions. 
  
 I am curious why setting the MinimumScale to the map control will cause the exception, could you provide me a small sample application to show the problem? That would be very helpful to recreate and fix the problem. 
  
 Any more questions just feel free to let me know. 
  
 Thanks. 
  
 Yale 


Hello, 
 I am sending the code so that you can check it out: 
 
    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
        WinformsMap1.MapUnit = GeographyUnit.Meter
        WinformsMap1.BackgroundOverlay.BackgroundBrush = New GeoSolidBrush(GeoColor.FromArgb(255, 198, 255, 255))

        Dim googleOverlay As GoogleMapsOverlay = New GoogleMapsOverlay() '(@“Insert your key here!”, @“C:\GoogleCache”);
        googleOverlay.MapType = GoogleMapsMapType.RoadMap
        googleOverlay.TileCache = New FileBitmapTileCache(Application.StartupPath & “\GoogleMapsCache”, String.Empty) '“C:\Work\MovingPlane\bin\Debug\Maps”, String.Empty)

        WinformsMap1.Overlays.Add(googleOverlay)

         WinformsMap1.MinimumScale = New GoogleMapZoomLevelSet().ZoomLevel01.Scale
        WinformsMap1.ZoomToScale(WinformsMap1.ZoomLevelSet.ZoomLevel12.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20)

        Dim pointLayer As InMemoryFeatureLayer = New InMemoryFeatureLayer()
        pointLayer.Open()
        pointLayer.Columns.Add(New FeatureSourceColumn(“Text”))
        pointLayer.Close()

        'Sets the projection parameters to go from Geodetic (EPSG 4326) or decimal degrees to Google Map projection (Spherical Mercator).
        Dim proj4 As Proj4Projection = New Proj4Projection()
        proj4.InternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(4326)
        proj4.ExternalProjectionParametersString = Proj4Projection.GetGoogleMapParametersString()
        'Applies the projection to the InMemoryFeatureLayer so that the point in decimal degrees (Longitude/Latitude) can be 
        'match the projection of Google Map.
        pointLayer.FeatureSource.Projection = proj4

        'Values in Longitude and Latitude.
        Dim Longitude As Double = 77.217   '-95.2809
        Dim Latitude As Double = 28.667  '38.9543
        ’ 28.667  77.217
        'Creates the feature made of a PointShape with the Longitude and Latitude values.

        Dim GPSFeature As Feature = New Feature(New PointShape(Longitude, Latitude))

        ‘Format the Longitude and Latitude into a nice string as Degrees Minutes and Seconds
        Dim LongLat As String = DecimalDegreesHelper.GetDegreesMinutesSecondsStringFromDecimalDegreePoint(GPSFeature)
        ‘LongLat = "28° 35’ N 77° 12’ E"
        'Sets the InMemoryFeatureLayer to have it displayed with Square symbol and with text.
        GPSFeature.ColumnValues.Add(“Text”, LongLat)
        pointLayer.InternalFeatures.Add(GPSFeature)

        pointLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.CreateSimplePointStyle(PointSymbolType.Square, GeoColor.StandardColors.Red, GeoColor.StandardColors.Black, 2, 12)
        pointLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.CreateSimpleTextStyle(“Text”, “Arial”, 12, DrawingFontStyles.Bold, GeoColor.StandardColors.Black, GeoColor.StandardColors.White, 3, -10, 10)

        pointLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20

        Dim pointOverlay As LayerOverlay = New LayerOverlay()
        pointOverlay.Layers.Add(“PointLayer”, pointLayer)
        'pointOverlay.Layers.Add(“GoogleMapLayer”, googleMapLayer)
        WinformsMap1.Overlays.Add(“PointOverlay”, pointOverlay)

        'Sets the extend of the map based on the GPS point.
        proj4.Open()
        Dim projVertex As Vertex = proj4.ConvertToExternalProjection(Longitude, Latitude)
        proj4.Close()

        Dim extendWidth As Double = 2300
        Dim extendHeight As Double = 1200

         WinformsMap1.CurrentExtent = New RectangleShape((projVertex.X - extendWidth), (projVertex.Y + extendHeight), (projVertex.X + extendWidth), (projVertex.Y - extendHeight))

        WinformsMap1.Refresh()
    End Sub
 
 
  
 And if remove the line given below the code runs perfectly. 
  
  WinformsMap1.MinimumScale = New GoogleMapZoomLevelSet().ZoomLevel05.Scale  
  
 And yes my problem is that I want to catch the error occured on Mouse scroll so that I can set 
   WinformsMap1.ZoomToPreviousExtent()  
 if tile for that zoom level doesnot exist in the cached Google Map Tiles.  
  
 Thanks, 
 Akku 


Akku,


Thanks for your input.


I am not sure when and how you called the ZoomToPreviousExtent API, see the sample in my attachment, it works well like a champ.
 
Any more questions just feel free to let me know.
 
Thanks.
 
Yale

Post7586.zip (13 KB)

Yale, 
  
 Thanks now its working. 
  
 Regards, 
 Akku

Akku, 
  
 Thanks for letting me know your status, I appreciate it very much. 
  
  
 Any more questions just feel free to let me know. 
 Thanks. 
  
 Yale