Windows 10 Universal App自定义地图

时间:2015-11-08 09:51:25

标签: geolocation maps windows-10 win-universal-app

我想创建一个飞机导航应用程序。因为对于飞行员来说,Bing地图是无用的,我需要创建一个自己的地图纹理的航空地图。

我找不到任何线索如何开始。是否有Bing地图的SDK,我可以在其中创建自己的纹理/叠加层? 我是否需要从岩石底部开始创建图片并更改其位置,以便相关部分位于设备的可见区域?

我需要以下功能:

  • 在地图上显示当前位置。
  • 通过坐标
  • 添加一些自定义POI

1 个答案:

答案 0 :(得分:0)

经过一番研究后,我自己想出来了。 如果你有相同的场景,这里是大部分代码

Uri格式: "https://webserver/tiles/{zoomlevel}/{x}/{y}.png";

private void InitMap()
    {
        _gps = new Geolocator();
        pointBuffer = cologne;
        image = RandomAccessStreamReference.CreateFromUri(new Uri("ms-appx:///Assets/images/airplane.png"));
        MyMap.Style = MapStyle.None;

        //Setup Icao Layer
        _icaoTileSource = new MapTileSource();
        var _tileLayer = new HttpMapTileDataSource();
        _tileLayer.UriFormatString = IcaoUri;
        _icaoTileSource.DataSource = _tileLayer;
        MyMap.TileSources.Add(_icaoTileSource);

        //Setup VFR Layer
        _vfrTileSource = new MapTileSource();
        var _vfrtileLayer = new HttpMapTileDataSource();
        _vfrtileLayer.UriFormatString = VfrUri;
        _vfrTileSource.DataSource = _vfrtileLayer;

        //Setup Low Level Layer
        _lowlvlTileSource = new MapTileSource();
        var _lowlvltileLayer = new HttpMapTileDataSource();
        _lowlvltileLayer.UriFormatString = LowLvlUri;
        _lowlvlTileSource.DataSource = _lowlvltileLayer;

        airplane = new MapIcon()
        {
            Title = "My Position",
            Image = image,
            Visible = true,
            Location = cologne,
            NormalizedAnchorPoint = new Point(0.5, 0.5)

        };
        _tileLayer.AllowCaching = true;
        MyMap.MapElements.Add(airplane);
        systemSetCenter = true;
        MyMap.Center = cologne;
        MyMap.ZoomLevel = 10;
        _vm.ZoomLevel = MyMap.ZoomLevel;
        MyMap.ZoomLevelChanged += (s, e) =>
        {
            if(s.ZoomLevel > maxZoomLevel)
            {
                s.ZoomLevel = maxZoomLevel;
            }
            _vm.ZoomLevel = s.ZoomLevel;
        };
    }