C1Maps提供流畅的缩放、平移以及在屏幕和地理坐标之间进行映射的能力。同时您也可以在地图中添加自定义的元素。它可以从多种数据源中获取地图数据。包括 Microsoft 出品的 Live MapsTM,还可以导入地图图像文件(KML)。C1Map 支持添加标记元素,包括按钮、图表和 Label 等,标记特定地理坐标。
这篇文章中我们将在地图上添加图钉去标记特定地理位置。我们可以通过 Click 事件添加图钉,同时,我们可以删除或拖拽现有图钉。
首先,创建 WPF 工程,添加 C1Maps 控件到页面上。
<c1:C1Maps Name="c1Maps1" Zoom="1" />
这里设置缩放值为 1 。C1Maps 包含 3 种内置地图数据源,地图数据均从在线数据源获取,包括 Aerial,,Road 和 Hybrid 视图。默认为 Aerial 视图,所以我们通过以下代码设置为 Road 视图:
//Add shading parameter VirtualEarthRoadSource.UriFormat += "&shading=hill"; //Set map source c1Maps1.Source = new VirtualEarthRoadSource();
我们使用以下图片来代表图钉。我们需要需要在工程目录下创建 " Resource” 文件夹,把图片添加到该文件夹,设置 Build Action 属性为 Resource。
接下来,我们需要添加 ImageReource 到 XAML 页面。从而我们可以使用代码添加图片资源。添加以下代码到页面:
<Window.Resources> <ImageSource x:Key="PushPin">Resources/Pushpin.png</ImageSource> </Window.Resources>
在后台添加以下代码:
var items = new C1MapItemsLayer(); c1Maps1.Layers.Add(items); c1Maps1.MouseLeftButtonUp += new MouseButtonEventHandler(c1Maps1_MouseLeftButtonUp); Random rnd = new Random(); for (int i = 0; i < 10; i++) { Point pt = new Point(-80 + rnd.Next(160), -80 + rnd.Next(160)); AddPin(pt); }
以下代码添加 Items Layer 到 C1Maps 控件。这里随机生成 10 个坐标添加图片。
void AddPin(Point pt) { Image pin = new Image(); pin.Source = (ImageSource)FindResource("PushPin"); C1MapCanvas.SetPinpoint(pin, new Point(10, 31)); C1MapCanvas.SetLatLong(pin, pt); var items = this.c1Maps1.Layers[0] as C1MapItemsLayer; items.Items.Add(pin); }
DEMO 下载: