在我的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属性(状态为here的Windows Phone 8.1)可以很容易地做到这一点,但是我找不到有关Windows Phone 8的任何信息。

最佳答案

我自己使用新的WP8“诺基亚HERE地图”地图控件进行了尝试,但无法实现。我不得不求助于Microsoft.Phone.Controls.Maps(标记为过时)中较旧的基于“ Bing”的地图控件。

这是在旧的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中取代,较新的控件似乎也不支持图层的相同灵活性,并且如果在您的应用程序中使用,则“过时”控件在WP8.1下仍然可以令人满意地工作。

这是我的应用程序,它仍然使用较旧的控件,该控件可能正在实现您要尝试执行的操作-NZ Topo Map app for Windows Phone

10-02 01:04
查看更多