【问题标题】:Bing Map WPF Control , Tile Source URL, Cookies?必应地图 WPF 控件、平铺源 URL、Cookie?
【发布时间】:2013-07-30 17:57:43
【问题描述】:

Bing Map WPF 控件未在每个平铺源请求中传递 cookie(访问平铺源 URL 的身份验证详细信息)。 Bing Map WPF 中是否有任何设置或破解来启用此选项?提前致谢。

        //Tile Source URL Example
        var URL = "https://www.sample.com/Z/X_Y.png";

        //Tile Source Layer
        var tileSourceLayer = new MapTileLayer()
        {
            TileSource = new TileSource() { UriFormat = URL }
        };
        MyBingMap.Children.Add(tileSourceLayer);

【问题讨论】:

标签: wpf cookies wpf-controls bing-maps httpcookie


【解决方案1】:

我们在这个问题上挣扎了一会儿,我们提出的解决方案比理想的要复杂一些,但效果很好。

基本前提是您重载TileSource.GetUri() 方法以返回指向本地主机的路径,并带有指示真实目的地的参数(Base64 编码的 URL 以及您要发送的 cookie,每个作为 URL 参数)。

完成上述操作后,您只需在另一个线程上设置一个 HTTP 侦听器来监视给定端口。当请求到达该端口时,在设置 cookie 后将它们转发给您的地图提供者,然后将地图提供者的响应转发回 Bing 控件。

【讨论】:

    【解决方案2】:

    您可以通过创建自定义磁贴源来处理自定义磁贴 URL,该源可以像这样动态创建 URL:

    public class MyTileSource : TileSource
    {
        private string _baseTileURL = "https://www.sample.com/{2}/{0}_{1}.png";
    
        public override Uri GetUri(int x, int y, int zoomLevel)
        {
            //{0} = X
            //{1} = Y
            //{2} = Z
    
            return new Uri(string.Format(_baseTileURL, x, y, zoomLevel));
        }
    }
    

    然后你可以这样实现:

    MyTileSource tileSource = new MyTileSource();
    MapTileLayer tileLayer = new MapTileLayer()
    {
        TileSource = tileSource
    };
    
    MyMap.Children.Add(tileLayer);
    

    使用瓦片层,您将无法通过瓦片 url 请求进行 cookie。 WPF 地图控件的更新即将推出,它使您可以在自定义切片图层方面拥有更大的灵活性,并且可以做到这一点。

    【讨论】:

    • 当 Bing 控件发出对图块的请求时,这不负责将 cookie 传递给 sample.com。
    • 除非您可以将其放入 URI 中,否则它将不受支持。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 2019-01-06
    相关资源
    最近更新 更多