C# MapControl显示带偏移的Yandex贴图平铺

C# MapControl显示带偏移的Yandex贴图平铺,c#,maps,windows-phone-8.1,yandex-maps,C#,Maps,Windows Phone 8.1,Yandex Maps,我正在开发WindowsPhone8.1应用程序,我想在MapControl中显示Yandex地图,而不是Bing地图。我已经用yandex url设置了一个新的磁贴数据源。它可以工作,但平铺以较小的垂直偏移显示 偏移量不是问题,但会影响位置标记-它们在yandex瓷砖上显示的位置错误,但在bing瓷砖中显示的位置正确 问题不在于坐标,因为我是从浏览器中的原始yandex贴图中拾取坐标的 在下面的示例中,彩色瓷砖由yandex提供,灰色形状来自bing地图 在MapControl中设置yand

我正在开发WindowsPhone8.1应用程序,我想在MapControl中显示
Yandex地图
,而不是
Bing地图
。我已经用yandex url设置了一个新的磁贴数据源。它可以工作,但平铺以较小的垂直偏移显示

偏移量不是问题,但会影响位置标记-它们在yandex瓷砖上显示的位置错误,但在bing瓷砖中显示的位置正确

问题不在于坐标,因为我是从浏览器中的原始yandex贴图中拾取坐标的

在下面的示例中,彩色瓷砖由yandex提供,灰色形状来自bing地图

在MapControl中设置yandex平铺:

HttpMapTileDataSource dataSource = new HttpMapTileDataSource("http://vec02.maps.yandex.net/tiles?l=map&x={x}&y={y}&z={zoomlevel}");
MapTileSource tileSource = new MapTileSource(dataSource);
MyMapControl.TileSources.Add(tileSource);
我试图截获MapControl的平铺请求并减小
y
坐标的值,但结果完全错误

拦截请求并修改
y的值的结果


这是因为Yandex地图和Bing地图的地图投影略有不同。我不是一个预测专家,但是,你可以看到(为Bing地图实现)和(为Yandex地图实现)类之间的区别

用法示例:

    HttpMapTileDataSource dataSource = new HttpMapTileDataSource("http://vec02.maps.yandex.net/tiles?l=map&v=2.2.3&x={x}&y={y}&z={zoomlevel}");

    MapTileSource tileSource = new MapTileSource(dataSource)
    {
        Layer = MapTileLayer.BackgroundReplacement
    };

    map.Style = MapStyle.None;
    map.TileSources.Add(tileSource);

    Point bingPoint = WGS84ToBing(new Point(47.245252, 56.139498));
    Point yandexCoordinates = BingtoWGS84Mercator(new Point(bingPoint.X, bingPoint.Y));

    map.Center = new Geopoint(new BasicGeoposition() { Longitude = yandexCoordinates.X, Latitude = yandexCoordinates.Y });

Yandex的预测与谷歌和必应不同。拜访[
    HttpMapTileDataSource dataSource = new HttpMapTileDataSource("http://vec02.maps.yandex.net/tiles?l=map&v=2.2.3&x={x}&y={y}&z={zoomlevel}");

    MapTileSource tileSource = new MapTileSource(dataSource)
    {
        Layer = MapTileLayer.BackgroundReplacement
    };

    map.Style = MapStyle.None;
    map.TileSources.Add(tileSource);

    Point bingPoint = WGS84ToBing(new Point(47.245252, 56.139498));
    Point yandexCoordinates = BingtoWGS84Mercator(new Point(bingPoint.X, bingPoint.Y));

    map.Center = new Geopoint(new BasicGeoposition() { Longitude = yandexCoordinates.X, Latitude = yandexCoordinates.Y });