【问题标题】:Windows Phone 7 Map Control with custom layer in offline modeWindows Phone 7 地图控件与离线模式下的自定义图层
【发布时间】:2023-03-05 03:12:01
【问题描述】:

您好 WP7 移动开发人员!

我正在尝试使用 Windows Phone 控件中默认提供的 Bing 地图控件。 具体来说,我正在尝试使用自定义 TileSource 来提供自定义平铺地图,该地图将作为文件夹(内容文件)存储在项目中或隔离存储中。

下面我介绍了我尝试使用的自定义类,它以 ZXY 存储格式存储在“地图”文件夹中的地图图块/图像作为内容文件。

public class CustomTileSource : Microsoft.Phone.Controls.Maps.TileSource 
{

    private string uriFormat = @"map/{0}/{1}/{2}.png";
    public string UriFormat
    {
        get { return uriFormat; }
        set { uriFormat = value; }
    }

    public override Uri GetUri(int x, int y, int zoomLevel)
    {
        var url = string.Format(UriFormat, zoomLevel, x, y);
        return new Uri(url, UriKind.Relative);
    }
}

尝试使用此功能无效,并且未显示自定义图块,尽管未引发错误。 有没有人尝试过以这种方式使用 Windows Phone 地图控制? 如果这不是正确的方法,那是哪一种?有什么解决方法吗?

提前谢谢你!

克劳迪乌

【问题讨论】:

标签: windows-phone-7 map controls tiles


【解决方案1】:

您是否将图像上的构建操作设置为Content?

【讨论】:

  • 是的..添加到项目的所有图像都将“构建操作”设置为“内容”
【解决方案2】:

例外是:

This operation is not supported on a relative URI.
   at System.Uri.get_AbsoluteUri()
   at System.Windows.Media.MultiScaleTileSource.GetTileLayerUrl(IntPtr nativeTarget, Int32 tileLevel, Int32 tileX, Int32 tileY, Int32 uTileImageIndex, IntPtr& fullTileUri, UInt32& fullTileUriLength)

如何使用 UriKind.Absolute 从独立存储、资源或媒体库中获取图像我还没有发现 ...也许你知道?

【讨论】:

  • 你不会愿意分享控制权吧?
【解决方案3】:

这似乎是一个常见问题解答问题 - Map Tile Caching for Offline Viewing - 可惜没有常见问题解答解决方案:/

【讨论】:

    【解决方案4】:

    您是否尝试过使用此问题中描述的应用程序 ID 构建绝对文件 url? Map Tile Caching for Offline Viewing

    【讨论】:

      【解决方案5】:

      我试过了,

      您是否尝试过使用此问题中描述的应用程序 ID 构建绝对文件 url?地图切片缓存以供离线查看

      地图组件不显示图像,但很简单

      Image.Source = new BitmapImage(new Uri("file:///Applications/Install/0277CC52-888B-4593-A28D-4CFF818E81E7/Install/maps/-1040122162.jpg", UriKind.Absolute));

      正在显示图像...

      【讨论】:

        【解决方案6】:

        您可以在博客http://invokeit.wordpress.com/2012/06/30/bing-mapcontrol-offline-tiles-solution-wpdev-wp7dev/找到解决方案

        一般来说,你只需要

        1. 在 TileSource 类中重写 GetUri 函数:返回 null 让 MapLayerTile 忽略此图块,并将图块信息保存到某个后台工作人员
        2. 在后台工作器中,从任何地方(隔离存储或网络)加载图块,然后手动将其添加到 MapLayer 控件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多