2016-07-15 3 views
0

私は今日、地図のタイルについて話すつもりです!Xamarinフォームマップ - タイルのカスタマイズ

人材プロジェクトと私の会社のプロジェクトでは、私のXamarin.Forms.Mapsを多くカスタマイズする必要があります。私はこのチュートリアルを見つけましたCustom Map Tiles in Xamarin.Forms AndroidとiOSについてのみ話していますが(もう一度..)しかし、私はWinPhone 8.1やUWPの仕組みを知りたいです。

また、Mapboxを使用しているので、このプロジェクトが本当に長い間利用可能になるかどうかを知りたいと思いますか? (私は読んで正義を知らないので、このプロジェクトについて何かを知っている人にしか聞いていません)。

私が知っているように、それについていくつかのnugetパッケージが存在しますが、私が本当に欲しいものにすることなく

あなたがそれについてまたはあなたがすでにそれをやった場合は、ウェブサイトを持っている場合(私は各plateformオーバーカスタムタイルにしたいです)、あなたは私にいくつかの指示や助けてくれますか?ありがとう!

EDIT 1

私はUWPレンダラのために、このコードを見つけましたが、それはマップタイルを変更しません。..

[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 !"); 
     } 
    } 
} 

答えて

1

はUWPレンダラのためにこのコードを見つけましたが、マップタイルは変更されません

Fiddlerを使用してウェブリクエストを確認すると、リクエストAPI URLがインコです修正してください: enter image description here

文献Overlay tiles from a tile source

標準HttpMapTileDataSource UWPには次のようにすべきである:

http://www.webサービスname.com/z={zoomlevel} & X = {X} Y = & {y}

X、Y座標とズームLEVエル:{zoomlevel}{X}{Y}

だから我々は、最初にあなたのMapTileTemplate文字列を変換する必要があります。

[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 !"); 
     } 
    } 

} 

スクリーンショット: enter image description here

+0

ああOK ! :)今のロジックと思われる><あなたの答えをありがとう! – Emixam23

関連する問題