Search code examples
c#mapswindows-phone-8.1yandex-maps

MapControl displays Yandex Maps tiles with offset


I'm developing Windows Phone 8.1 application and I want to display Yandex Maps instead of Bing Maps in MapControl. I've set a new tile datasource with yandex url. It works, but tiles are displayed with a small vertical offset.

The offset only is not a problem, but it affects on placemarks - they are displayed in wrong position on yandex tiles, but correct in bing tiles.

The problem is not in coordinates because I pick them from original yandex maps in browser.

In example below, colored tiles are provided by yandex and gray shape is from bing maps.

Tile offset example

Setting yandex tiles in MapControl:

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

I've tried to intercept MapControl's tile request and decrement the value of y coordinate but the result was completely wrong.

Result of intercepting request and modifying value of y

enter image description here

MSDN: MapControl tile overlay


Solution

  • This is due to the fact that Yandex Maps and Bing Maps have slightly different map projections. I am not an expert on projections however, you can see the difference in MercatorProjection (implemented for Bing Map) and MercatorProjectionYandex (implemented for Yandex Maps) classes implemented for Great Maps for Windows Forms & Presentation.