地图控件:删除或隐藏默认地图图层

时间:2014-09-16 17:52:45

标签: c# xaml windows-phone-8

在我的Windows Phone 8应用程序中,我使用自定义TileSource,以便将默认地图背景与自定义磁贴重叠,这样:

C#:

public class CustomTileSource : TileSource
{
   public CustomTileSource()
   {
      UriFormat ="http://myurl/{0}/{1}/{2}.png";
   }

   public override Uri GetUri(int x, int y, int zoomLevel)
   {

      if (zoomLevel > 0 && zoomLevel <= 18)
      {
          var url = string.Format(UriFormat, zoomLevel, x, y);
          return new Uri(url);
       }
       //if zoom level is not supported, return null
        return null;
    }
}

XAML:

...
xmlns:maps="clr-namespace:Microsoft.Phone.Maps.Controls;assembly=Microsoft.Phone.Maps"
xmlns:tileSource="clr-namespace:Mappa"
...

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
   <maps:Map x:Name="Map" Center="45,9" ZoomLevel="14">
      <maps:Map.TileSources>
         <tileSource:CustomTileSource />
      </maps:Map.TileSources>
    </maps:Map>
</Grid>

我的问题是我需要删除默认地图图层以隐藏标签(地铁站,社区名称等)。

我知道这可以通过带有MapTileLayer.BackgroundReplacement属性的Windows Phone 8.1(状态为here)轻松完成,但我找不到有关Windows Phone 8的任何信息。

1 个答案:

答案 0 :(得分:1)

我自己尝试使用新的WP8&#34;诺基亚HERE地图&#34;地图控制,但无法实现这一点。我不得不求助于回到年龄较大的&#34; Bing&#34;基于Microsoft.Phone.Controls.Maps中的地图控件(标记为已废弃)。

以下是如何删除较旧的Microsoft.Phone.Controls.Maps控件中的其他图层:

for (var i = Map.Children.Count - 1; i >= 0; i--)
{
    MapTileLayer tileLayer = Map.Children[i] as MapTileLayer;
    if (tileLayer != null)
    {
        Map.Children.RemoveAt(i);
    }
}

尽管WP8中已经取代了旧的地图控件,但较新的控件似乎并不支持与图层相同的灵活性,并且过时的&#34;如果在您的应用程序中使用,控件仍然可以在WP8.1下运行。

这是我的应用仍然使用较旧的控件,这可能会实现您尝试做的事情 - NZ Topo Map app for Windows Phone