C# MapControl显示带偏移的Yandex贴图平铺
我正在开发WindowsPhone8.1应用程序,我想在MapControl中显示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
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 });