开发 WinPhone SDK 开发指南 覆盖物显示

覆盖物显示 最后更新时间: 2021年01月22日

覆盖物是指覆盖到地图上的所有事物,如自定义的标注、折线、多边形、圆等。覆盖物有自己的地理属性,通过设置地理属性来控制覆盖物在地图中的显示位置。高德地图 Windows Phone SDK 中包括的覆盖物主要有:标注、线(直线/折线)、多边形、圆和图层。

标注

(1)标注的添加:您可以将标注添加到地图的某个位置,标注可以使用一个标准的图标,也可以由开发者自定义图标。您可以通过 AMap.AddMarker(AMapMarkerOptions) 方法将一个标注添加到地图上,示例代码(详见demo中MapMarkerPage.xaml.cs)如下:

private void Button_DrawMarker_Click(object sender, RoutedEventArgs e)  
{  
  marker = amap.AddMarker(new AMapMarkerOptions()  
  {  
    Position=amap.Center,  
    Title="Title",  
    Snippet="Snippet",  
    IconUri=new Uri ("Images/AZURE.png",UriKind.Relative),  
  });  
}    

显示如下图所示:

(2)标注的删除: 您可以使用 AMap 类的 Clear() 方法删除全部覆盖物,也可以使用类 AMapMarker 的 Destroy() 方法删除指定标注,删除指定标注的示例代码(详见demo中MapMarkerPage.xaml.cs)如下:


private void Button_Destroy_Click(object sender, RoutedEventArgs e)  
{  
  if (marker!=null)  
  {  
    marker.Destroy();  
  }  
} 
 

(3)添加自定义信息窗体:当您在地图上点击标记时,信息窗口允许您显示信息给用户。同一时间地图仅显示一个信息窗口。如果用户点击另一个标记,当前的信息窗口将会被隐藏,新的信息窗口将会被显示。显示自定义信息窗体,需要添加对点击标记事件监听。您可以使用类 AMapMarker 的 HideInfoWindow 方法隐藏信息窗口。示例代码(详见demo中CustomerInfoWindow.xaml.cs)如下:

   
private void amap_Loaded(object sender, RoutedEventArgs e)  
{  
  ……  
  //添加点  
  marker = amap.AddMarker(opt);  
  amap.MarkerClickListener += amap_MarkerClickListener;  
}   
  
void amap_MarkerClickListener(object sender, AMapEventArgs e)  
{  
  //显示化弹出信息  
  AInfoWindow info = new AInfoWindow();  
  info.Title = "这是自定义信息窗口";  
  info.ContentText = "高德软件有限公司";  
  marker.ShowInfoWindow(info, new Point(0, 0));  
}   

显示如下图所示:

(4)动画标注: 当您在地图上添加标记时,您可以以动画的方式来显示标注,使标注拥有动态效果,并自定义动画的切换时间。您可以通过设置类 AMapMarkerOptions 的 IconUris 属性来实现动画标注的效果, 并通过设置 Periods 属性来设置动画切换间隔时间。详细示例代码(详见demo中MarkerDragPage.xaml.cs)如下:

  
aMapMarker4 = amap.AddMarker(new AMapMarkerOptions()  
{  
    Position = new LatLng(30.679879, 104.064855),  
    Anchor = new Point(0.5, 1),//图标中心点  
    Title="成都",  
    Snippet="30.679879, 104.064855",  
    IconUris = new List {   
        new Uri("Images/AZURE.png", UriKind.Relative),  
        new Uri("Images/RED.png", UriKind.Relative),   
        new Uri("Images/ROSE.png", UriKind.Relative),   
        new Uri("Images/BLUE.png", UriKind.Relative),   
        new Uri("Images/CYAN.png", UriKind.Relative),   
        new Uri("Images/GREEN.png", UriKind.Relative),   
        new Uri("Images/MAGENTAV.png", UriKind.Relative),   
        new Uri("Images/ORANGE.png", UriKind.Relative),   
        new Uri("Images/VIOLET.png", UriKind.Relative),   
        new Uri("Images/YELLOW.png", UriKind.Relative),   
    },  
    Periods = 500,//刷新周期,单位毫秒  
});   

(5)标注图标的旋转: 当您在地图上添加标注时,您可以对标注图标进行指定角度的旋转,以实现自定义的效果. 您可以通过设置类 AMapMarkerOptions 的 RotateAngle 属性来实现标注图标的旋转效果, 详细示例代码(详见demo中MarkerDragPage.xaml.cs)如下:

   
aMapMarker2 = amap.AddMarker(new AMapMarkerOptions()  
{  
    Position = new LatLng(34.7466, 113.625367),//图标的位置  
    IconUri = new Uri("Images/GREEN.png", UriKind.Relative),//图标的URL  
   Anchor = new Point(0.5, 1),//图标中心点  
    RotateAngle = 90,//旋转角度  
});  
 

显示如下图所示:

折线

(1)折线的添加:您可以通过 Amap.AddPolyline(AMapPolylineOptions) 方法将一条折线添加到地图上,也可以自定义多边形的填充颜色、边框颜色和边边框宽度,添加折线的示例代码(详见demo中MapPolylinePage.xaml.cs)如下:

private void Button_DrawPolyline_Click(object sender, RoutedEventArgs e)  
{  
  List lnglats = new List();  
  lnglats.Add(new LatLng(amap.Center.latitude - 0.02, amap.Center.longitude - 0.02));  
  lnglats.Add(new LatLng(amap.Center.latitude + 0.03, amap.Center.longitude - 0.02));  
  polyline = amap.AddPolyline(new AMapPolylineOptions()  
  {  
    Points=lnglats,  
    Color=Color.FromArgb(255,0,0,255),  
    Width=4,  
  });  
}  

显示如下图所示:

(2)折线的删除:类似标注,不做详述。

多边形

(1)多边形的添加:添加多边形的方法与折线的方法相同。添加点形成多边形的轮廓。然后调用 AMap.AddPolygon(AMapPolygonOptions) 将多边形添加到地图中,您可以自定义多边形的填充颜色、边框颜色和边边框宽度,添加多边形的示例代码(详见demo中MapPolygonPage.xaml.cs)如下:

private void Button_DrawPolygon_Click(object sender, RoutedEventArgs e)  
{  
  //绘多边形  
  List lnglats1 = new List();  
  lnglats1.Add(new LatLng(amap.Center.latitude + 0.02, amap.Center.longitude + 0.03));  
  lnglats1.Add(new LatLng(amap.Center.latitude + 0.03, amap.Center.longitude - 0.03));  
  lnglats1.Add(new LatLng(amap.Center.latitude - 0.026, amap.Center.longitude - 0.03));  
  lnglats1.Add(amap.Center);  
  lnglats1.Add(new LatLng(amap.Center.latitude - 0.04, amap.Center.longitude + 0.035));  
  polygon= amap.AddPolygon(new AMapPolygonOptions()  
  {  
    FillColor = Color.FromArgb(30, 255, 0, 255),  
    Points = lnglats1,  
    StrokeColor = Color.FromArgb(255, 102, 136, 255),  
    StrokeWidth = 2  
  });  
}  

显示如下图所示:

(2)多边形的删除:类似标注,不做详述。

(1)圆的添加:圆的基本组成元素为中心点坐标和半径(米),您可以创建 AMapCircleOptions 对象设置中心点坐标和半径,然后调用 AMap.AddCircle(AMapCircleOptions) 将圆添加到地图上,还可以自定义圆的填充颜色、边框颜色和边框宽度,添加圆代码(详见demo中MapCirclePage.xaml.cs)如下所示:

private void Button_DrawCircle_Click(object sender, RoutedEventArgs e)  
{  
  circle = amap.AddCircle(new AMapCircleOptions()  
  {  
    Center=amap.Center,  
    Radius=2000,  
  });  
}   

显示如下图所示:

(2)圆的删除:类似标注,不做详述。

图层

(1) 图层的添加: 图层元素由标注、折线、多边形和圆组成, 您可以创建 AMapLayer 对象,使用 AMapLayer 中 AddMarker、AddPolyline、AddPolygon 和 AddCircle方法添加图层元素到 AMapLayer 图层中,AMap 对象提供了添加图层的方法 AddAMapLayer,可以使用该方法将图层添加到地图上,添加图层的示例代码(详见demo中MapLayerPage.xaml.cs)如下:

AMapLayer mapLayer = new AMapLayer();  
void amap_Tap(object sender, System.Windows.Input.GestureEventArgs e)  
{  
  ……  
  amap.AddAMapLayer(mapLayer);    //添加图层到地图上  
  mapLayer.AddMarker(new AMapMarkerOptions()  //添加标注到图层上  
  {  
    Position = amap.GetProjection().FromScreenLocation(e.GetPosition(amap)),  
    IconUri = new Uri("Images/AZURE.png", UriKind.Relative),  
    Anchor=new Point(0.5,0.5),  
  });  
}  

显示如下图所示:

(2)图层元素的删除: 您可以使用AMapLayer类的Clear方法删除该图层上所有元素。

(3)图层的删除:您可以使用 AMap 类的 Clear 方法删除全部覆盖物(包括图层以及图层上的元素),也可以使用类 AMap 的 RemoveAMapLayer 方法删除指定图层,删除指定图层的示例代码(详见demo中MapMarkerPage.xaml.cs)如下:

private void Button_Click(object sender, RoutedEventArgs e)  
{  
  if (amap != null)  
  {  
    amap.RemoveAMapLayer(mapLayer);  
  }  
}  

大地曲线

(1)大地曲线的添加:您可以通过 AMap.AddPolyline(AMapPolylineOptions) 方法将一条线段通过大地曲率的转换添加到地图上,根据线段所处位置的不同,会有不同程度的弯曲。您也可以自定义该线段的填充颜色、边框颜色和边框宽度,添加折线的示例代码(详见demo中MapGeodesic.xaml.cs)如下:

private void amap_Loaded(object sender, RoutedEventArgs e)  
{  
  List lnglats = new Lis();  
  lnglats.Add(new LatLng(38.4064, 75.5687));  
  lnglats.Add(new LatLng(39.8273, 116.8392));  
  amap.AddPolyline(new AMapPolylineOptions()  
   {  
    IsGeodesic = true,  
    Color = Colors.Blue,  
    Points = lnglats,  
    Width = 4,  
   });  
}  

显示如下图所示:

(2)大地曲线的删除:类似标注,不做详述。

图片覆盖物

图片覆盖物是将一张图片以合适的大小贴在地图指定的位置上。

(1)图片覆盖物的添加:加初始化一个 AMapGroundOverlayOptions 对象来设置图片层图片区域、要显示的图片,通过 AMap.AddGroundOverlay(AMapGroundOverlayOptions) 方法将将此图片层添加到地图。添加图片覆盖物的示例代码(详见demo中GroundOverlay.xaml.cs)如下:

void amap_Loaded(object sender, RoutedEventArgs e)  
{  
  
    amap.MoveCamera(CameraUpdateFactory.NewLatLngZoom(new LatLng((39.935029 + 39.939577) / 2, (116.384377 + 116.388331) / 2), 17));  
    this.Dispatcher.BeginInvoke(() =>  
    {  
        AMapGroundOverlay go = amap.AddGroundOverlay(new AMapGroundOverlayOptions()  
        {  
            ImageUri = new Uri("Images/2.png", UriKind.Relative),  
            Bounds = new LatLngBounds(new LatLng(39.935029, 116.384377), new LatLng(39.939577, 116.388331)),  
            Visible = true,  
        });  
    });  
}  

显示如下图所示:

(2)图片覆盖物的删除:类似标注,不做详述。

返回顶部 示例中心 常见问题 智能客服 公众号
二维码