ThinkGeo.com    |     Documentation    |     Premium Support

Maps not rendering when Zooming or after Match

I have a GeoCoding demo application that has been running fine until this morning. All of a sudden I cannot zoom without it lagging and my search "Match" function creates the marker point however the map is shown blank after going to that coordinate.



As I mentioned there were no code changes made since yesterday however it is not working now.



What could cause this issue?



Below is my code for my map configuration. 


mapCtrl.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAliasGridFit
mapCtrl.MapResizeMode = MapResizeMode.PreserveScaleAndCenter
 
mapCtrl.MapUnit = GeographyUnit.DecimalDegree
mapCtrl.BackgroundOverlay.BackgroundBrush = New GeoSolidBrush(GeoColor.GeographicColors.ShallowOcean)
mapCtrl.CurrentExtent = New RectangleShape(-75.412903, 41.409776, -73.979187, 38.826871)
 
simpleMarkerOverlay = New SimpleMarkerOverlay()
simpleMarkerOverlay.MapControl = mapCtrl
 
simpleMarkerOverlay.DragMode = MarkerDragMode.Drag
 
mapCtrl.Overlays.Add("WMK"New WorldMapKitWmsDesktopOverlay())
mapCtrl.Overlays.Add("SimpleMarker", simpleMarkerOverlay)
 
mapCtrl.Refresh()

Here is my match function code:


Dim dataPath As String "L:\SQLite_Databases\MapSuiteGeoCoderFullData"
 
Dim results As System.Collections.ObjectModel.Collection(Of GeocoderMatch)
Dim usaGeocoder As New UsaGeocoder(dataPath, MatchMode.ExactMatch, StreetNumberMatchingMode.ExactMatch)
 
Try
    usaGeocoder.Open()
    If Me.txtZipcode.Text.Trim = "" Then
        results = usaGeocoder.Match(Me.txtAddress.Text, Me.txtCity.Text, Me.txtState.Text)
    Else
        results = usaGeocoder.Match(Me.txtAddress.Text, Me.txtZipcode.Text)
    End If
Finally
    usaGeocoder.Close()
End Try
 
simpleMarkerOverlay.Markers.Clear()
mapCtrl.Controls.Clear()
 
Dim multiPointShape As New MultipointShape()
Dim matchString As String If(SearchType = GeocoderSearchType.Street, "Street"String.Empty)
Dim searchResultItems As New System.Collections.ObjectModel.Collection(Of GeocoderMatch)()
 
Dim address As String Me.txtAddress.Text
 
Dim streetParts() As String = address.Split(New Char() {" "c})
 
Dim houseNumber As Integer
For Each housePart As String In streetParts
    If IsNumeric(housePart) Then
        houseNumber = CInt(housePart)
        Exit For
    End If
Next
 
For Each item As GeocoderMatch In results
    If String.IsNullOrEmpty(matchString) OrElse item.NameValuePairs.ContainsKey(matchString) Then
        If (item.NameValuePairs("CityAlias").Trim = Me.txtCity.Text.Trim Or item.NameValuePairs("Zip").Trim = Me.txtZipcode.Text.Trim) And _
            ((houseNumber >= CInt(item.NameValuePairs("FromAddressLeft")) And houseNumber <= CInt(item.NameValuePairs("ToAddressLeft"))) And _
                (houseNumber >= CInt(item.NameValuePairs("FromAddressRight")) And houseNumber <= CInt(item.NameValuePairs("ToAddressRight")))) Then
            AddSearchResultMarkerWithToolTip(item, multiPointShape)
            searchResultItems.Add(item)
        End If
    End If
Next
 
UpdateResultListView(searchResultItems)
 
If multiPointShape.Points.Count > 0 Then
    mapCtrl.CurrentExtent = multiPointShape.GetBoundingBox()
End If
 
mapCtrl.Refresh()

and my code to zoom to the found marker point:


    Dim dataGrid As DevExpress.XtraGrid.Views.Grid.GridView = TryCast(sender, DevExpress.XtraGrid.Views.Grid.GridView)
    Dim tag As BaseShape = BaseShape.CreateShapeFromWellKnownData(TryCast(Me.gvResults.GetRowCellValue(e.FocusedRowHandle, "CentroidPoint"), String))
    mapCtrl.CurrentExtent = DirectCast(tag, BaseShape).GetBoundingBox()
    mapCtrl.Refresh()
    Me.txtLatitude.EditValue = TryCast(Me.gvResults.GetRowCellValue(e.FocusedRowHandle, "FromLatitude"), String)
    Me.txtLongitude.EditValue = TryCast(Me.gvResults.GetRowCellValue(e.FocusedRowHandle, "FromLongitude"), String)
End Sub

As I mentioned, nothing has changed in my code over the last 24 hours.  Could it be an issue with the GeoCoder database indexes?

One additional note… I was able to debug and find that the longest process is the mapCtrl.Refresh() in the code that zooms to the marker point.  The refresh is hanging for a good minute or two before showing the marker without a map.



It also seems like your web maps are not working at maps.thinkgeo.com.  It is a bit concerning that in the last 2 weeks I’ve encountered two outages that have affected my application because you can’t keep your web services up and running.



If our apps are going to constantly go down due to your services going down, it is certainly a huge concern and will likely change our mind in going with ThinkGeo.  I wish we hadn’t spent the money for the suite before having done an extensive evaluation.

Hi Dave,



We apology for the map server down. I guess this is because, recently, we are doing an enhancement on our map server and that might make the server unstable sometimes. If this is the reason caused by our map service, I think you can also switch to use other layers like OpenStreemMap, BingMaps or GoogleMaps service for temporary until we finish the upgrade.



Would you please try your demo again? Now, I can see maps.thinkgeo.com works fine. 



Sorry for any inconvenience.



Thanks,

Troy

I’ve been able to get a BingMaps overlay working. 
  
 GoogleMaps seems to be an issue because I am not 100% sure what ClientID and Key to use.  What API should we be getting the ClientID and Key for? 
  
 As far as openStreetMaps, every one of your examples is SO outdated.  They use obsolete Methods. 
  
 Do you have a working OpenStreetMaps layer example for desktop?

Dave,



Google ClientID is mapping a business account which has no tile request limits and need to purchase in google service. You can find more information on developers.google.com/maps/…vices/auth, after the purchase, you will get a ClientID and private key from google, then you can use it in our GoogleMapOverlay.



Excepting the business account, google provides other two options: with API key and without any key, but there are some limits:


        
  • request without an API key: 1 000 Static Maps requests per IP address per 24 hour period and 50 Static Maps requests per IP address per minute

  •     
  • request with Api key: 25 000 Static Maps requests per 24 hour period.

  •     
  • request for business: depends on your payment. 



// method 1: using the default without the Api key or clientId, limitation: 1 000 Static Maps requests per IP address per 24 hour period.
    GoogleMapsLayer googlelayer = new GoogleMapsLayer();
    // method 2: using Api key, limitation: 25 000 Static Maps requests per 24 hour period.
    googlelayer.CreatingRequest += new EventHandler(googlelayer_CreatingRequest);
    // method 3: using the request for business with ClientId, No limitation
    //googlelayer.ClientId = “xxx”;
    //googlelayer.PrivateKey = “xxx”;




static void googlelayer_CreatingRequest(object sender, CreatingRequestGoogleMapsLayerEventArgs e)
{
    e.RequestUri = new Uri(e.RequestUri.AbsoluteUri + “&key={API_KEY}”);
}


More google Api key information, please refer to developers.google.com/maps/documentation/staticmaps/intro#Limits



For OpenLayerMaps samples, I think this is because most of the samples were built several years ago and we have hundreds of such samples, so some of them are not updated in time. I attached an work OpenStreetMap sample here, please check it.



Thanks,

Troy 

DesktopEditionSample_OpenStreetMap_CS_150827.zip (131 KB)

Great information. Exactly the information I was not able to find.  Thanks!

Aha, looks Google have upgraded its limit page content recently, and the above information is I saved a half year ago from google. Except the request without API key doesn’t be mentioned any more, the other limits still can be found in the new page. 



developers.google.com/maps/documentation/staticmaps/intro#Limits

developers.google.com/maps/usagelimits/?hl=en#m4b



Thanks,

Troy