【问题标题】:Map control: Remove or hide default map layer地图控制:移除或隐藏默认地图图层
【发布时间】:2014-09-16 17:52:45
【问题描述】:

在我的 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 的任何信息。

【问题讨论】:

    标签: c# xaml windows-phone-8


    【解决方案1】:

    我自己尝试使用新的 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-06
      • 2012-12-02
      • 1970-01-01
      • 2014-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多