ThinkGeo.com    |     Documentation    |     Premium Support

OpenStreetMapOverlay

Hi

I try to use the OpenStreetMapOverlay with a custom Uri




var osmOverlay = new OpenStreetMapOverlay();
var _uri = new  System.Uri("<a href="d.tiles.mapbox.com/v3/tmcw.map-j5fsp01s">d.tiles.mapbox.com/v3/tmcw.map-j5fsp01s</a>");
osmOverlay.CustomServerUris.Add(_uri);

androidMap.MapUnit = GeographyUnit.Meter;




androidMap.ZoomLevelSet = new OpenStreetMapsZoomLevelSet();
androidMap.CurrentExtent = osmOverlay.GetBoundingBox();
androidMap.Overlays.Add(osmOverlay);

No problem if I try without 

osmOverlay.CustomServerUris.Add(_uri);



But if I try with the custom Uri, there is a mixe with OSM and Mapbox (MapBox is a aerial photo)



Regards

Laurent M

Hi Laurent, 
  
 I think you maybe hadn’t use the API correct. 
  
 The “CustomServerUris” just provide a supplement for original service link, so this overlay will random pick link from original one and your custom uris for each tile, which will get better performance. 
  
 So the “CustomServerUris” should use the same tile library just like original one. 
  
 If you want use a serer replace original one, please modify the link in SendingRequest event. 
  
 Regards, 
  
 Don

Hi Don 
 Ok, but where is SendingRequest event, SendingWebRequest is obsoleted 
  
 Do you have a sample. 
  
 Regards 
 Laurent M

Hi Don



I use OpenStreetMapLayer


var osmLayer = new OpenStreetMapLayer();
osmLayer.ZoomlevelSet = new OpenStreetMapsZoomLevelSet();
osmLayer.SendingWebRequest += (object sender, SendingWebRequestEventArgs e) => osmLayer_SendingWebRequest(sender,e);
layerOverlay.Layers.Add(osmLayer);
androidMap.Overlays.Add("OSM", layerOverlay);
ManagedProj4Projection proj4 = new ManagedProj4Projection();
proj4.InternalProjectionParametersString = ManagedProj4Projection.GetDecimalDegreesParametersString();
proj4.ExternalProjectionParametersString = ManagedProj4Projection.GetGoogleMapParametersString();
proj4.Open();
androidMap.CurrentExtent = proj4.ConvertToExternalProjection(new RectangleShape(-139.2, 92.4, 120.9, -93.2)) as RectangleShape;




void osmLayer_SendingWebRequest(object sender, SendingWebRequestEventArgs e)
{
var _uri = new  System.Uri("<a href="d.tiles.mapbox.com/v3/tmcw.map-j5fsp01s">d.tiles.mapbox.com/v3/tmcw.map-j5fsp01s</a>");
e.WebRequest =System.Net.WebRequest.Create(_uri);
}



But, no error and no image on the map !



Regards



laurent M

Hi Laurent, 
  
 I guess there are 2changes we need to do to the codes provided, just outline them as following: 
  
 1, please remove the code on ZoomLevelSet and Projection as they have been defined in the OpenStreetMapsLayer properly.  
  
 2, In the SendingWebRequest event, we just need to replace the root URL template of each tile url, instead od replace all. In other words, we need to keep th x/y/z and credentials. 
  
 Thanks, 
 Johnny

Hi Johnny 
  
 In the SendingWebRequest, I tested with the uri 
  
 d.tiles.mapbox.com/v3/tmcw.map-j5fsp01s/{0}/{1}/{2}.png 
 and 
 b.tile.openstreetmap.org/{0}/{1}/{2}.png 
  
 no more 
 I removed the the code on ZoomLevelSet. 
 The projection is just for convert coordinates. I removed and used coordinates in 3857. 
  
 Thanks  
 Regards 
 Laurent M 
  
  


Hi Laurent, 
  
 Do you means you have made that works? 
  
 Because the default server is like this: 
 a.tile.openstreetmap.org/3/3/3.png 
 b.tile.openstreetmap.org/3/3/3.png 
 c.tile.openstreetmap.org/3/3/3.png 
  
 So you should replace them like: 
 a.tiles.mapbox.com/v3/tmcw.map-j5fsp01s/3/3/3.png 
 b.tiles.mapbox.com/v3/tmcw.map-j5fsp01s/3/3/3.png 
 c.tiles.mapbox.com/v3/tmcw.map-j5fsp01s/3/3/3.png 
 d.tiles.mapbox.com/v3/tmcw.map-j5fsp01s/3/3/3.png 
  
 I think that should works correct. 
  
 Regards, 
  
 Don

Hi Don 
  
 I do not understand. 
 If I try with a Uri 
 a.tiles.mapbox.com/v3/tmcw.map-j5fsp01s/3/3/3.png 
 Ok, the map display the tile 3/3/3. 
 I must parse the ResquestUri to take the x,y,z ? 
  
 Regards 
 Laurent M



If I try with


var strtile = e.WebRequest.RequestUri.LocalPath;
var _uri = new  System.Uri("<a href="d.tiles.mapbox.com/v3/tmcw.map-j5fsp01s">d.tiles.mapbox.com/v3/tmcw.map-j5fsp01s</a>" + strtile);
e.WebRequest =System.Net.WebRequest.Create(_uri);

It is ok.



Thanks

Regards

Laurent M




Hi Laurent, 
  
 I am glad to hear that works for you. 
  
 And I just found maybe you can try this: 
  
 osmOverlay.CustomServerUris.Clear(); 
 customServerUris.Add(new Uri("a.tiles.mapbox.com/v3/tmcw.map-j5fsp01s")); 
 customServerUris.Add(new Uri("b.tiles.mapbox.com/v3/tmcw.map-j5fsp01s")); 
 customServerUris.Add(new Uri("c.tiles.mapbox.com/v3/tmcw.map-j5fsp01s")); 
 customServerUris.Add(new Uri("d.tiles.mapbox.com/v3/tmcw.map-j5fsp01s")); 
  
 It should work for your requirement. 
  
 Regards, 
  
 Don

Thanks Don 
  
 It is ok 
  
 Regards 
  
 Laurent M

Hi Laurent, 
  
 Any question please let us know. 
  
 Regards, 
  
 Don