2016-07-15 1 views
0

Je viens aujourd'hui pour parler des carreaux de la carte!Xamarin Forms Maps - Personnalisation des carreaux

Pour un projet personnel et le projet de mon entreprise, j'ai besoin de personnaliser beaucoup mes Xamarin.Forms.Maps. J'ai trouvé ce tutoriel Custom Map Tiles in Xamarin.Forms qui ne parle que d'Android et iOS (une fois de plus ..) Cependant, j'aimerais savoir comment cela fonctionne pour WinPhone 8.1 et/ou UWP.

Aussi, Parce qu'il utilise Mapbox, je voudrais savoir si ce projet est vraiment fait pour être disponible depuis longtemps? (Je demande seulement à ceux qui connaissent quelque chose sur ce projet, car je ne le sais pas en lisant).

Comme je sais, certains paquet NuGet à ce sujet existe, mais sans faire ce que je veux vraiment (je veux mesure les tuiles sur chaque plateform)

Si vous avez un site à ce sujet ou si vous l'avez déjà fait, pouvez-vous me donner quelques directions ou de l'aide s'il vous plaît? Merci!

EDIT 1

J'ai trouvé ce code pour le moteur de rendu UWP, mais il ne change pas les tuiles de carte ..

[assembly: ExportRenderer(typeof(CustomMap), typeof(CustomMapRenderer))] 
namespace MapTileProject.UWP.Renderer 
{ 
    public class CustomMapRenderer : MapRenderer 
    { 
     CustomMap customMap; 
     MapControl mapControl; 

     protected override void OnElementChanged(ElementChangedEventArgs<Map> e) 
     { 
      base.OnElementChanged(e); 

      if (e.NewElement != null) 
      { 
       customMap = e.NewElement as CustomMap; 
       mapControl = Control as MapControl; 

       UpdateTiles(); 
      } 
     } 

     private void UpdateTiles() 
     { 
      Debug.WriteLine("BEGINING !"); 
      HttpMapTileDataSource dataSource = new HttpMapTileDataSource(customMap.MapTileTemplate); 
      MapTileSource tileSource = new MapTileSource(dataSource); 
      mapControl.TileSources.Add(tileSource); 
      Debug.WriteLine("END !"); 
     } 
    } 
} 

Répondre

1

trouvé ce code pour le moteur de rendu UWP, mais il ne modifie pas les mosaïques de la carte

Si vous vérifiez la requête Web à l'aide de Fiddler, vous verrez que l'URL de l'API de demande était inco rrect: enter image description here

Ref Overlay tiles from a tile source

Le HttpMapTileDataSource standard UWP devrait ressembler à ceci:

http://www.web Service name.com/z={zoomlevel} & x = {x} & y = {y}

Il comprend trois paramètres remplaçables pour les coordonnées X et Y et le niveau de zoom el: {zoomlevel}, {x}, {y}

Nous avons donc besoin de convertir votre chaîne MapTileTemplate première:

[assembly: ExportRenderer(typeof(CustomMap), typeof(CustomMapRenderer))] 
namespace MapTileProject.UWP.Renderers 
{ 
    public class CustomMapRenderer : MapRenderer 
    { 
     CustomMap customMap; 
     MapControl mapControl; 

     protected override void OnElementChanged(ElementChangedEventArgs<Map> e) 
     { 
      base.OnElementChanged(e); 

      if (e.NewElement != null) 
      { 
       customMap = e.NewElement as CustomMap; 
       mapControl = Control as MapControl; 

       UpdateTiles(); 
      } 
     } 
     /// <summary> 
     /// Convert MapTileTemplate string to fit UWP HttpMapTileDataSource 
     /// </summary> 
     /// <param name="mapTileTemplate"></param> 
     /// <returns></returns> 
     private string GetTileTemplateForUWP(string mapTileTemplate) 
     { 
      return mapTileTemplate.Replace("{z}", "{zoomlevel}"); 
     } 

     private void UpdateTiles() 
     { 
      Debug.WriteLine("BEGINING !"); 
      HttpMapTileDataSource dataSource = new HttpMapTileDataSource(GetTileTemplateForUWP(customMap.MapTileTemplate)); 
      MapTileSource tileSource = new MapTileSource(dataSource); 
      mapControl.TileSources.Add(tileSource); 
      Debug.WriteLine("END !"); 
     } 
    } 

} 

Screenshot: enter image description here

+0

Oh D'accord ! :) Semble logique maintenant> Emixam23