Карты Xamarin Forms - Настройка тайлов

Я приду сегодня, чтобы поговорить о тайлах карты!

Для личного проекта и проекта моей компании мне нужно много настроить мои Xamarin.Forms.Maps. Я нашел этот учебник " Плитки пользовательской карты" в Xamarin. Формы, в которых говорится только об Android и iOS (еще раз…). Однако мне хотелось бы узнать, как это работает для WinPhone 8.1 и / или UWP.

Кроме того, поскольку он использует Mapbox, я хотел бы знать, действительно ли этот проект будет доступен в течение длительного времени? (Я спрашиваю только тех, кто знает что-то об этом проекте, потому что я не знаю оправдать, читая).

Как я знаю, существует какой-то пакет nuget об этом, но без создания того, что я действительно хочу (я хочу настроить плитки для каждой формы пластины)

Если у вас есть веб-сайт об этом или вы уже сделали это, можете ли вы дать мне несколько указаний или любую помощь, пожалуйста? Благодарю

РЕДАКТИРОВАТЬ 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, вы увидите, что URL API запроса был неверным:

Ref Overlay плитки из источника плиток

Стандартный HttpMapTileDataSource в UWP должен выглядеть следующим образом:

http://www.web/ service name.com/z=ndomzoomlevel‹&x= enjx‹&;; y=ndomy}

Он включает три заменяемых параметра для координат X и Y и уровень масштабирования: {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 !");
        }
    }

}

Скриншот:

Другие вопросы по тегам