Bing Map WPF Control,Tile Source URL,Cookies?

时间:2013-07-30 17:57:43

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

Bing Map WPF Control未在每个Tile Source Request中传递Cookie(访问Tile Source 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);

2 个答案:

答案 0 :(得分:0)

我们对这个问题进行了一些努力,我们提出的解决方案比理想的要复杂得多,但它运作良好。

基本前提是你重载TileSource.GetUri()方法以返回指向localhost的路径,其中的参数用于指示真实目的地(Base64编码的URL以及要发送的cookie,每个都作为URL参数)。

完成上述操作后,您只需在另一个线程上设置HTTP侦听器即可查看给定端口。请求命中该端口后,在设置cookie后将它们转发给地图提供者,然后将地图提供者响应转发回Bing控件。

答案 1 :(得分:-1)

您可以通过创建自动创建网址的自定义磁贴源来处理自定义磁贴网址,如下所示:

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);

使用图块层,您将无法使用图块网址请求添加Cookie。即将推出WPF地图控件的更新,这使您可以在自定义切片图层周围获得更多灵活性,并且可以执行此操作。