ArcGIS Runtime API for .NET——Maps (2D)
地图和场景提供了地理数据的交互式显示,使您可以可视化和探索模式,回答问题并分享见解。 可以在ArcGIS系统及其他系统中打开,编辑和共享它们。 地图设计用于二维(2D)的交互,而场景设计用于三维(3D)的交互。 有关使用场景的更多信息,请参见本指南中的 场景(3D)。
你可以使用地图来:
显示底图图层,例如街道或卫星图像。
基于文件或服务访问和显示数据层,包括您创作的数据。
提供临时点,线,多边形或显示为图形的文本的上下文。
检查数据层并显示来自属性的信息。
测量距离并探索几何之间的空间关系。
将图层集合另存为网络地图,以在整个ArcGIS平台上共享。
一.地图的运作方式
地图与地图视图配合使用,可以二维显示地理内容。 地图包含一个图层集合,其中包括来自在线或本地来源的多个数据图层,以及一个提供地理环境的底图图层。 地图还可以包含用于搜索地址或地名的数据集,用于求解路线的网络,用于跟踪水和电等服务流的公用事业网络以及非空间表。 可以使用ArcGIS Runtime创建,显示,编辑和保存地图。 由于格式基于ArcGIS Web地图标准,因此这些地图可以在ArcGIS系统中统一共享。
对于离线工作流程(当您没有网络连接时),您可以打开存储在移动地图包中的地图。 可以使用ArcGIS Pro,ArcGIS Enterprise或ArcGIS Online创建移动地图包。 有关使用ArcGIS Runtime实施离线工作流的更多信息,请参见离线地图,场景和数据。
二.地图
地图包含按添加顺序显示的图层集合,最近添加的图层显示在现有图层上方。 您可以使用地图更改图层的显示顺序以及控制可见的图层,并使用用户界面控件(如列表,复选框或开关)公开此功能。 地图还包含书签的集合,类似于网络浏览器的书签,书签使您可以快速导航到地图的预定义区域。
您可以打开现有地图,也可以完全使用代码创建一个地图。 要创建地图,通常首先要添加底图图层,然后再添加一个或多个数据图层。
Esri.ArcGISRuntime.ArcGISRuntimeEnvironment.ApiKey = "YOUR_API_KEY";
var map = new Map(BasemapStyle.ArcGISNavigation);
你还可以使用其URL打开存储在门户网站(例如ArcGIS Online)中的地图。
Map webMap = new Map(new Uri("https://www.arcgis.com/home/item.html?id=acc027394bc84c2fb04d1ed317aac674"));
可以通过设置Map.InitialViewpoint属性来定义地图显示的初始范围。
三.图层
地图中的每个图层都引用来自在线服务或本地数据集的地理数据。 可以将不同类型的图层添加到地图,每个图层都设计为显示特定类型的数据。 一些图层显示图像,例如卫星图像或航空摄影,而另一些图层则由一组要素组成,这些要素使用点,线或面的几何形状表示真实世界的实体。 除几何图形外,要素还具有提供有关其表示的实体的详细信息的属性。
Layer类是ArcGIS Runtime API for .NET中使用的所有类型的层的基类。 您创建的图层类型取决于您要显示的数据类型。 例如,要显示要素数据,您可以创建一个FeatureLayer,该FeatureLayer引用在线服务(例如要素服务)或受支持的本地数据集。
Esri.ArcGISRuntime.ArcGISRuntimeEnvironment.ApiKey = "YOUR_API_KEY";
var map = new Map(BasemapStyle.ArcGISTopographic);
var trailheadsTable = new ServiceFeatureTable(new Uri("https://services3.arcgis.com/GVgbJbqm8hXASVYi/arcgis/rest/services/Trailheads_Styled/FeatureServer/0"));
var trailsTable = new ServiceFeatureTable(new Uri("https://services3.arcgis.com/GVgbJbqm8hXASVYi/arcgis/rest/services/Trails_Styled/FeatureServer/0"));
var openSpacesTable = new ServiceFeatureTable(new Uri("https://services3.arcgis.com/GVgbJbqm8hXASVYi/arcgis/rest/services/Parks_and_Open_Space_Styled/FeatureServer/0"));
map.OperationalLayers.Add(new FeatureLayer(trailheadsTable));
map.OperationalLayers.Add(new FeatureLayer(trailsTable));
map.OperationalLayers.Add(new FeatureLayer(openSpacesTable));
MainMapView.Map = map;
四.地图视图
地图视图是一种用户界面控件,在应用中显示一张地图。它包含内置功能,使用户可以通过放大和缩小,重新设置地图显示或获取有关地图中元素的其他信息。它还管理一个或多个图形叠加集合中的图形。地图视图管理的图形始终显示在地图上显示的所有图层上方。
地图视图控件还允许您执行以下操作:
访问数据层和图形的数据。
在地图上将当前位置显示为点。
在指定位置识别并选择功能。
导出当前显示的图像。
旋转地图显示。
应用时间范围来过滤要素的显示。
使用属性和空间条件过滤图层数据。
通过将地图添加到MapView控件来显示地图。对地图所做的更改(例如添加,删除或重新排序图层)将立即反映在地图视图显示中。 Map.InitialViewpoint属性将确定加载地图时显示的地图区域。还可以使用和以编程方式更改显示屏中显示的地图区域或方向。
MapView mapView = new MapView();
mapView.Map = map;
mapView.SetViewpointCenterAsync(latitude: 34.027,
longitude: -118.805,
scale: 72223.819286);
五.示例:
创建并显示地图
可以通过创建一个带有底图图层的基本地图,设置其初始范围并将其添加到地图视图中来显示基本地图。 若要了解如何添加其他数据,请参见“图层”主题。
步骤:
创建一个新的Map,将BasemapStyle传递到构造函数中。
(可选)将一个或多个数据层添加到地图。
将地图分配给应用中的MapView控件。
将地图视图“视点”设置为聚焦于地图的指定区域。
using Esri.ArcGISRuntime.UI.Controls;
using Esri.ArcGISRuntime.Mapping;
using System.Windows;
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Esri.ArcGISRuntime.ArcGISRuntimeEnvironment.ApiKey = "YOUR_API_KEY";
MainMapView.Map = new Map(BasemapStyle.ArcGISNavigation);
MainMapView.SetViewpoint(new Viewpoint(
latitude: 34.027,
longitude: -118.805,
scale: 72223.819286));
}
}
在地图视图上设置视点
加载窗口时,为地图视图设置视点。 该视点定义了一个点和地图比例尺,以显示为中心,沿着加利福尼亚南部海岸的圣莫尼卡山脉。
打开MainWindow.xaml.cs。 添加代码,其中包含与MainWindow.xaml和它定义的用户界面元素关联的代码。
添加新的必需用法:
// Copyright 2021 Esri
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Esri.ArcGISRuntime.Geometry;
using Esri.ArcGISRuntime.Mapping;
namespace DisplayAMap
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MapPoint mapCenterPoint = new MapPoint(-118.805, 34.027, SpatialReferences.Wgs84);
MainMapView.SetViewpoint(new Viewpoint(mapCenterPoint, 100000));
}