Карты 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 !");
}
}
}