тайлы для оффлайн telerik wpf map - PullRequest
1 голос
/ 26 марта 2020

Краткое описание проблемы

Я пытаюсь создать автономную мозаичную карту для приложения WPF, которое использует telerik. Пользователю не нужно сильно увеличивать масштаб изображения. У меня проблемы с поиском источника плиток, которые можно реализовать с помощью telerik.

Что я пробовал

Я использую RadMap из телерик для WPF. У них есть возможность реализации плиток от собственного провайдера плиток. Я пытался следовать решениям, приведенным в на этом форуме и на этом форуме. Они рекомендуют загружать плитки из Easy OpenStreetMap Downloader , но формат файла этого не делает соответствовать коду. Как видно из кода, плитки должны быть сгруппированы в папки в соответствии с уровнем масштабирования, а затем в папку в соответствии с координатой x. Однако, мне кажется, что загрузчик openstreetmaps группирует их только по координате y. Мне нужно либо загрузить загрузчик openstreetmaps, чтобы сохранить плитки в этом формате, либо найти другого поставщика, который это сделает.

Код

Вот код Telerik, из которого я пытаюсь основать свое решение:

/// <summary>
/// Tile source which read map tiles from the file system.
/// </summary>
public class FileSystemTileSource : TiledMapSource
{
    private string tilePathFormat;
    /// <summary>
    /// Initializes a new instance of the FileSystemTileSource class.
    /// </summary>
    /// <param name="tilePathFormat">Format string to access tiles in file system.</param>
    public FileSystemTileSource(string tilePathFormat)
        : base(1, 20, 256, 256)
    {
        this.tilePathFormat = tilePathFormat;
    }
    /// <summary>
    /// Initialize provider.
    /// </summary>
    public override void Initialize()
    {
        // Raise provider intialized event.
        this.RaiseIntializeCompleted();
    }
    /// <summary>
    /// Gets the image URI.
    /// </summary>
    /// <param name="tileLevel">Tile level.</param>
    /// <param name="tilePositionX">Tile X.</param>
    /// <param name="tilePositionY">Tile Y.</param>
    /// <returns>URI of image.</returns>
    protected override Uri GetTile(int tileLevel, int tilePositionX, int tilePositionY)
    {
        int zoomLevel = ConvertTileToZoomLevel(tileLevel);
        string tileFileName = this.tilePathFormat.Replace("{zoom}", zoomLevel.ToString(CultureInfo.InvariantCulture));
        tileFileName = tileFileName.Replace("{x}", tilePositionX.ToString(CultureInfo.InvariantCulture));
        tileFileName = tileFileName.Replace("{y}", tilePositionY.ToString(CultureInfo.InvariantCulture));
        if (File.Exists(tileFileName))
        {
            return new Uri(tileFileName);
        }
        else
        {
            return null;
        }
    }
}
/// <summary>
/// Map provider which read map tiles from the file system.
/// </summary>
public class FileSystemProvider : TiledProvider
{
    /// <summary>
    /// Initializes a new instance of the MyMapProvider class.
    /// </summary>
    /// <param name="tilePathFormat">Format string to access tiles in file system.</param>
    public FileSystemProvider(string tilePathFormat)
        : base()
    {
        FileSystemTileSource source = new FileSystemTileSource(tilePathFormat);
        this.MapSources.Add(source.UniqueId, source);
    }
    /// <summary>
    /// Returns the SpatialReference for the map provider.
    /// </summary>
    public override ISpatialReference SpatialReference
    {
        get
        {
            return new MercatorProjection();
        }
    }
}
public MainWindow()
{
    InitializeComponent();
    this.radMap.Provider = new FileSystemProvider("Path to OpenStreet Images\\{zoom}\\{x}\\os_{x}_{y}_{zoom}.png");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...