Types of Layers (层的类型)

本文详细介绍了ArcGIS API for Flex中各种层类型,包括基础图层和操作层,以及它们在地理信息系统开发中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查看原文:【ArcGIS】Types of Layers —— 层的类型

原文摘录:https://developers.arcgis.com/flex/guide/layers-overview.htm

Layers overview (层的概述)

当使用开发Flex ArcGIS API进行开发时这有各种类型的层使用。层API参考使用的一个术语,可以看到类似于服务。你选择哪种类型的层(服务)取决于类型的功能需要。所有的图层来源于Layer的基类(base class)


所有的图层都是从Layer类型继承而来的,可以参考下载的API中的对象模型图。
Layer
  |–TiledMapServiceLayer
  |       |–ArcGISTiledMapServiceLayer
  |–DynamicLayer
  |       |–DynamicMapServiceLayer
  |                 |–ArcGISDynamicMapServiceLayer
  |                 |–ArcGISImageServiceLayer
  |                 |–GPResultImageLayer
  |–GraphicsLayer
  |       |–FeatureLayer 
  |–ElementLayer 
        下面就按顺序认识一下这些图层吧,也包括Silverlight API中独有的FeatureLayer。
Layer:
继承自DependencyObject,并实现了INotifyPropertyChanged接口,是其他图层的基类。
TiledMapServiceLayer:
继承自Layer,是所有使用了缓存的地图服务的基类。通过它可以在程序中加入经过缓存的,来自不同数据源的地图服务。
比如ArcGIS Server的地图服务,Google Map的地图,Virtual Earth的地图等。
DynamicLayer:
继承自Layer,是动态地图服务的基类。
DynamicMapServiceLayer:
继承自DynamicLayer,对应于TiledMapServiceLayer,要使用未经过缓存的动态地图服务,就得通过扩展这个图层来实现。

(1)ArcGISTiledMapServiceLayer:

继承自TiledMapServiceLayer。这个图层扩展了TiledMapServiceLayer,支持由ArcGIS Server发布的经过缓存的地图服务。

(2)ArcGISDynamicMapServiceLayer:

继承自DynamicMapServiceLayer,针对ArcGIS Server 9.3版本发布的动态地图服务。

同理,如果要在客户端API中使用其他动态地图服务,比如OGC的WMS服务,则也需要像这个图层一样,

扩展上面的DynamicMapServiceLayer来实现。

(3)ArcGISImageServiceLayer:

继承自DynamicMapServiceLayer,针对ArcGIS Server 9.3版本发布的Image Service,因为影像服务也属于动态的地图服务。

在客户端API中,可以通过ArcGISImageServiceLayer的一些属性,方便通过浏览器来展示服务器端的影像数据,

比如通过BandIds属性,

可以快速调整影像数据显示波段的组合(RGB通道),提供不同结果供用户查看。点击这里,查看一个实例。

(4)ArcIMSMapServiceLayer:

ArcIMS发布的地图服务

(5)ArcGISLocalTiledLayer:

貌似是Android设备上开发实用的地图类

(6)CSVLayer:

支持.CSV文件,一个csv文件包含的文本用定界符来分隔作为数据,一般使用逗号,数据可以包括位置信息,

比如x,y 坐标值,CsvLayer 类让添加包括地理信息的文本文件到地图上作为要素图层变的容易,一组属性可以被定义为表示数据如何存储

(7)ElementLayer:

继承自Layer,它可以用来专门呈现Silverlight/WPF中原生的FrameworkElement,比如视频,音频等。

虽然在FillSymbol的Fill属性中也能利用Brush类来展现一段视频,但毕竟有些“小气”,在ElementLayer中可以大大方方的放置

Silverlight/WPF元素。虽然在Map控件之外,Grid等布局元素中也能放置Silverlight的东西,但是ElementLayer的优势在于:

当一些非地理数据元素随着地图范围的变化(放大,缩小,平移)的时候,无须在地图Extent变化后重新计算客户端坐标,

再改变这些元素的位置。

(8)GPResultImageLayer:

继承自DynamicMapServiceLayer,针对Geoprocessing服务所产生的结果。可以请求服务器端的GP服务将结果动态生成一张图片,

将此图片作为GPResultImageLayer图层直接添加到Map控件中。

(9)GraphicsLayer:

继承自Layer,是图形数据集中展现的地方。

GraphicsLayer是保留在内存中的一种图层(与ArcMap、ArcGIS Engine、ArcGIS Server ADF程序中的相应概念类似),

顾名思义是很多Graphic的集合,而所有与用户交互的内容通常都用Graphic来显示。比如多边形查询中用户画出的多边形,

属性/空间查询结果中的所有要素(Feature)等内容,都是Graphic。可以说,除了地图本身,基本上看到的所有与地理位置有关的东西都可

以用Graphic来表示。Graphic对象有3个重要的属性:Geometry,Symbol和Attributes。Geometry代表了一个Graphic的几何形状

(可疑是点、线、面任意一种)或地理位置,而Symbol则表示Graphic的呈现样子,比如颜色、效果,同时有了这两个属性(缺一不可)

,Graphic就可以显示到地图上了。而Attributes是键值对集合,可在里面存储任意类型的对象,比如一个要素的属性信息。

(7)FeatureLayer:

继承自GraphicsLayer,这也是ArcGIS API for Silverlight/WPF 中的亮点之一,通过它可以完成一些比较炫的功能。

FeatureLayer继承自GraphicsLayer,它与后者的区别是,GraphicsLayer中的Graphic都是人为创建出来的,

而FeatureLayer中的Graphic都是从ArcGIS Server发布的服务中读取出来的,因此FeatureLayer比GraphicsLayer多了一个URL属性。

这个URL通常指向一个ArcGIS Server发布的MapService或FeatureService的子图层(对应一个FeatureClass)。

FeatureLayer有了这个URL后,就可以读取出该服务对应子图层里的所有要素内容,因此FeatureLayer里Graphic的Geometry属性会自动

被FeatureClass的Shape字段填充,而Graphic的Attributes字段则会根据要求,被FeatureClass中的属性信息所填充。如果发布服务的

服务器是ArcGIS Server 10版本,则Graphic的Symbol属性会自动被服务的DrawingInfo信息填充。另外,FeatureLayer是客户端API中

对FeatureService的唯一载体,这是它另一个非常重要的作用(也是主要作用)。

http://www.newnaw.com/pub/sl/featurelayer.gif

(10)GeoRSSLayer:

GeoRSS是一种描述和查明互联网内容所在物理位置的方法。通过使用GeoRSS,搜索Web站点或者与地理位置有关的项目就成为可能。

此外,GeoRSS有助于将RSS feed立即分发到基于事件类型和位置的特定用户。

GeoRSS利用地理标识语言(GML),即利用可扩展标记语言 (Extensible Markup Language, XML)存储和传输地理数据的方法。

GML保持着RDF的许多特性,包括智能代理和一个用于描述和查询数据的标准语法。

在GML中,地理对象的特点被编码为文档内的元素。这些元素可以描述复杂的地理特性,如峡谷、湖泊和河流。人工制造的创造物,

如建筑物、公园和城市也可以被描述。在GML中,位置是根据几何中点、线(也称为线串或线段)或者界面(也称为多边形)来从算术上设定的。

这个过程称为地理标记(Geotagging)

(11)KMLLayer:

当你想要添加 kml/kmz 文件作为你的应用程序中一个层时,使用这种图层类型

(12)MapImageLayer:

虚拟影像地图,该MapImageLayer类用于地理参考图像添加到地图中。地图会放置地理参考图像在指定的地理范围。图像的程度应该是地图的

范围内。该图像也应该是相同的坐标系的图中。

(13)OpenStreetMapLayer:

OpenStreetMap提供了一个使用许多数据提供商主机映射数据作为缓存的瓦片的标准。OpenStreetMapLayer接受用来检索瓷砖地图瓦片服务

器的列表, 您可以包含一个以上瓦片服务器跨越多个站点请求传播切片请求

(14)VETiledLayer:

继承TiledMapServiceLayer类。该类中一个重要的方法getTileUrl (level, row, col),是获取某级某行某列的那张切片图片的url地址并返回。

通过继承这个类我们可以实现自己的切片地图图层,只需把getTileUrl方法重写即可。

(15)WMTSLayer:

WMTS (Web Map Tile Service) 是OGC 提出的缓存技术标准,即在服务器端缓存被切割成一定大小瓦片的地图,对客户端只提供这些预先定义好的单个瓦片的

服务,将更多的数据处理操作如图层叠加等放在客户端,从而缓解 GIS 服务器端数据处理的压力,改善用户体验。

WMTS 使用瓦片矩阵集(Tile matrix set)来表示切割后的地图,如图1所示。瓦片就是包含地理数据的矩形影像,一幅地图按一定的瓦片大小被切割成多个瓦片,

形成瓦片矩阵,一个或多个瓦片矩阵即组成瓦片矩阵集。不同的瓦片矩阵具有不同的分辨率,每个瓦片矩阵由瓦片矩阵标识符(一般为瓦片矩阵的序号,分辨率最

低的一层为第0层,依次向上排)进行标识

(16)WebTiledLayer:

该WebTiledLayer类提供了一个简单的方法来添加非ArcGIS Server地图瓦片的图层的地图

(17)WMSLayer:

WMSLayer实例被用来显示网络映射的数据。这种图层对应符合OGC标准的WMS或者WMTS图层,可以编辑删除修改,也可以属性查询以及空间查询,

这都需要借助支持WMS,WMTS,WFS,WFS-T标准的服务器端软件支持,比如geoserver。

ArcGISTiledMapServiceLayer和ArcGISDynamicMapServiceLayer分别用于加载ArcGIS Server发布的缓存地图服务和动态地图服务。GraphicsLayer和FeatureLayer,可以说这是API中最常用的两种图层,大部分的程序功能都要基于它们来完成。



Basemap layers (基础图层)

底图(basemao)通常是预定义的,通常称为缓存或瓦片层(cached or tiled layers)

在Arcgis api for flex中,下面的图层直接从TileMapServiceLayer进而延伸层类继承有各种类型的底图的如下

注意:该ArcGISLocalTiledLayer为移动应用而设计的,并且只支持Adobe AIR应用程序。

WebTiledLayer,它提供了一种机制来添加非ArcGIS地图瓦片地图层,自定义层扩展TiledMapServiceLayer类

Operational layers(操作层/操作层)

业务层主要侧重于动态数据。换句话说,相对于basemap,它的数据可以更频繁地改变,很多时候这些层封装相关的内容,比如地震,天气和交通数据。

业务层可以区分两种不同的方式,要么是服务器端图像结果或客户端图形

服务器端图像结果

ArcGIS的服务器主机缓存和动态数据,操作层或动态层,直接从DynamicMapServiceLayer类继承,反过来,扩展了层类。这些类型是:

客户端图形

客户端图形允许更有效地信息显示在客户端机器上。这通常是在用例涉及图形作为标记或用户输入一个任务,或者图形可以作为输出响应的任务。

客户端图形层类型包括:

  • GraphicsLayer, for more information regarding working with graphics and the GraphicsLayer, see Using Graphics
  • FeatureLayer, this layer extends GraphicsLayer. For more information regarding working with feature layers, see Feature Layer
  • CSVLayer, this layer extends FeatureLayer. For more information regarding working with the CSVLayer, see CSVLayer
  • GeoRSSLayer, this layer extends directly from the Layer class and is used to create a layer based on GeoRSS. GeoRSS is a way to add geographic information to an RSS feed
  • KMLLayer, this layer extends directly from the Layer class and is used to create a layer based on publicly accessible KML or KMZ files. For more information regarding working with KML data, please see KML support in ArcGIS Server.
除了上面列出的层类型,有一个额外的MapImageLayer类型。这个直接继承的层和用于地理图像添加到地图。它用于处理动态生成的地图图像对象。MapImage访问是两种不同的方式:

  • GroundOverlays - come back as part of KML. Every ground overlay is treated as a map image where MapImage.source is the URL to the image.
  • Geoprocessing operations - The export operation on ArcGISDynamicMapServiceLayer returns a MapImage in addition toGeoProcessor.getResultImage.


% 网络结构设计 function net = create_residual_network(input_size, output_size, num_layers) layers = []; for i = 1:num_layers layers = [layers; fullyConnectedLayer(50)]; layers = [layers; reluLayer]; end layers = [layers; fullyConnectedLayer(output_size)]; layers = [layers; regressionLayer]; net = layerGraph(layers); end % 建立神经网络 net = create_residual_network(2, 1, 5); % 输入维度2,输出维度1,5 total_points = 1000; % 定义总数据点数量 function [x_train, t_train] = generateSamplePoints(total_points) x_train = rand(total_points, 1); % 在 [0, 1] 范围内随机生成 x 点 t_train = rand(total_points, 1); % 在 [0, 1] 范围内随机生成 t 点 end % 训练数据(x, t)的生成 [x_train, t_train] = generateSamplePoints(total_points); % 自定义函数 input_data = [x_train, t_train]; % 合并输入数据 % 训练模型 for epoch = 1:10000 % 前向传播 y_pred = predict(net, input_data'); % 转置输入数据 % 计算损失 loss = computeLoss(y_pred, true_values); % 自定义计算损失函数 % 反向传播 net = updateWeights(net, loss); end x = linspace(0, 1, 100); t = linspace(0, 1, 100); [xx, tt] = meshgrid(x, t); u_exact = exact_solution(xx, tt); % 精确解的计算 u_PINN = predict(net, [xx(:), tt(:)]); % PINN结果 % 绘制图形 figure; surf(x, t, reshape(u_exact, size(xx))); title('Exact Solution'); figure; surf(x, t, reshape(u_PINN, size(xx))); title('PINN Solution'); Incorrect number or types of inputs or outputs for function predict. 出错 Last (第 32 行) y_pred = predict(net, input_data); % 转置输入数据 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
最新发布
06-18
### 统计 PyTorch 神经网络模型的数 在 PyTorch 中,可以通过遍历模型的模块来统计神经网络中的数。具体来说,可以利用 `named_modules()` 或者 `modules()` 方法迭代访问模型内部的所有子模块,并通过条件判断筛选出感兴趣的。 下面展示一种方法用于计算特定类型的数量: ```python def count_layers(model, layer_type=None): """ 计算给定类型layer_type的数。 参数: model (nn.Module): 要分析的目标模型实例。 layer_type (type or tuple of types): 需要统计的具体类型,默认为None表示统计所有非容器类。 返回: int: 符合指定条件的数量。 """ cnt = 0 for name, module in model.named_modules(): # 排除顶本身和Sequential等容器结构 if not isinstance(module, torch.nn.Sequential) and \ ((layer_type is None) or isinstance(module, layer_type)): cnt += 1 return cnt ``` 此函数接受两个参数:一个是待检测的模型对象;另一个是要查找的特定类型(如 `torch.nn.Conv2d`),如果不提供则默认统计所有的非容器型[^4]。 为了更精确地区分不同性质的,比如只关心卷积或线性变换,可以在调用上述辅助函数时传入相应的类型作为第二个参数。例如,想要知道某个 CNN 模型中有多少个卷积,可执行如下命令: ```python conv_layer_count = count_layers(your_model, torch.nn.Conv2d) print(f'Total Convolutional Layers: {conv_layer_count}') ``` 而对于希望了解整个网络中总共有多少带有权重更新能力的有效隐藏的情况,则可以直接省略第二参数: ```python total_weighted_layers = count_layers(your_model) print(f'Total Weighted Layers: {total_weighted_layers}') ``` 需要注意的是,在某些复杂架构下,可能存在嵌套较深或者特殊设计的组件,此时简单的次枚举可能无法完全覆盖所有情况。因此实际应用过程中还需根据具体情况调整逻辑以适应不同的需求[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值