0

今日はマップのタイルについてお話しします!

個人的なプロジェクトと私の会社のプロジェクトでは、Xamarin.Forms.Maps をたくさんカスタマイズする必要があります。このチュートリアルCustom Map Tiles in Xamarin.Formsは、Android と iOS についてのみ説明しています (もう一度..)。

また、Mapboxを使っているので、本当にこのプロジェクトが長く使えるようになっているのか知りたいです。(読んだだけではわからないので、このプロジェクトについて何か知っている人だけにお願いします)。

私が知っているように、それに関するいくつかのナゲットパッケージが存在しますが、本当に欲しいものを作成していません(各プラットフォームでタイルをカスタマイズしたい)

それについてのウェブサイトを持っている場合、またはすでにそれを行っている場合は、道順や助けを教えてもらえますか? ありがとう!

編集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 !");
        }
    }
}
4

1 に答える 1

1

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

Fiddler を使用して Web リクエストを確認すると、リクエスト API の URL が正しくないことがわかります。 ここに画像の説明を入力

タイル ソースからオーバーレイ タイルを参照する

UWP の標準 HttpMapTileDataSource は次のようになります。

http://www.webサービス名.com/z={ズームレベル}&x={x}&y={y}

これには、X 座標と Y 座標、およびズーム レベルの 3 つの置き換え可能なパラメーターが含まれています: {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 !");
        }
    }

}

スクリーンショット: ここに画像の説明を入力

于 2016-07-18T06:33:03.040 に答える