2

必应地图 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);
4

2 回答 2

0

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

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

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

于 2015-02-04T20:28:57.043 回答
-1

您可以通过创建自定义磁贴源来处理自定义磁贴 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 地图控件的更新即将推出,它使您可以在自定义切片图层方面拥有更大的灵活性,并且可以做到这一点。

于 2013-07-31T12:26:00.747 回答