浅谈ArcGIS移动开发中的基本变量:Graphic、Geometry、Feature、GraphicsOverlay、FeatureLayer、FeatureTable、Symbol

一、Graphic

       即图形,包含Geometry几何、attributes属性(可选,通常使用 java.util.Map创建)和Symbol符号。

二、GraphicsOverlay

       可译为图形覆盖(物),用于容纳要显示在MapView上的临时图形,如查询或分析的结果,高亮,变化的事物、绘制的图形等,GraphicsOverlay由Graphic图形组成,因此也可看做Graphic图形的列表,GraphicsOverlay可通过Renderer进行渲染,分为静态和动态两种渲染模式。

 

三、Geometry

       即几何形状,表示一个空间要素对象,它定义了空间位置和几何形体关系。在编程中是所有空间对象的基类,直接子类有Envelope, MultiPath, MultiPoint, Point, Segment等。Geometry的继承关系图如下:

      Geometry的特性:
         (1)不可变。
         (2)具有空间参考。
         (3)具有z值和m值。
         (4)可由Json转换获得,也可转为Json。
         (5)可利用Builders创建或修改 。

      关于Geometry的创建,可参照:ArcGIS Runtime SDK for Android 入门(6):绘制几何图形

 

四、Feature

       即要素,表示来自FeatureTable的要素,提供对所有Feature要素的Field字段、属性的数值、几何形状(如果设置了的话)的访问。功能表具有固定的结构,例如,无法添加、删除或修改字段。

五、FeatureLayer

      即要素图层,表示一个由Feature要素组成的图层。

六、FeatureTable

       表示一个包含多个要素的数据表,这个表定义了要素的Field字段、几何形状类型和空间参考。FeatureTable同样可以表示没有几何类型和空间参考的非空间数据。FeatureTable的结构是固定的,用于创建FeatureLayer,当FeatureLayer添加到地图上时,它将在地图中显示FeatureTable中的Feature要素。

 

★ Feature与Graphic的区别:

      公共特征:
          (1)表示真实世界的对象。
          (2)具有几何和属性。
      不同特征:
          (1)来源不同。
          (2)应用场景不同。

      总结如下表:

特征

 要素(Feature

图形(Graphic

显示方法

MapViewMap中的一个要素图层

MapView中的一个GraphicsOverlay

保留时间

存储在数据存储或者地图的要素表中

仅存在于应用的内存中

几何类型

不同几何类型的图形不能存在同一图层中

不同几何类型的图形可存在同GraphicsOverlay

属性

同一个数据存储或者要素图层中的要素共享相同的属性模式

同一GraphicsOverlay的不同几何彼此间的属性模式可不同

符号

通过要素服务或要素图层的渲染器渲染

单个渲染或者根据GraphicsOverlay渲染器渲染

查询模式

通过map view

通过map view


七、Symbol

       Symbol是对Graphic对象进行符号样式设置的接口,所有符号样式类都实现了Symbol接口,Symbol接口关系图如下:

      

     关于符号的创建与渲染,可参照:ArcGIS Runtime SDK for Android 学习(7):创建图形符号实例

实现多边形选择FeatureLayer的要素,可以通过使用ArcGIS API for JavaScriptGeometryEngine类来实现。具体步骤如下: 1. 定义多边形 首先,定义一个多边形,可以使用ArcGIS API for JavaScript的Polygon类来创建。例如: ```javascript var polygon = new Polygon({ "rings": [[[0, 0], [0, 10], [10, 10], [10, 0], [0, 0]]], "spatialReference": { "wkid": 4326 } }); ``` 这个多边形由五个点组成,可以通过rings属性设置。这里的空间参考系为4326。 2. 获取FeatureLayer 使用ArcGIS API for JavaScriptFeatureLayer类获取要素图层。例如: ```javascript var featureLayer = new FeatureLayer({ url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3" }); ``` 这里获取的是Census地图服务的第3个图层。 3. 查询要素 使用FeatureLayer类的queryFeatures方法查询要素。例如: ```javascript var query = featureLayer.createQuery(); query.geometry = polygon; query.spatialRelationship = "intersects"; featureLayer.queryFeatures(query).then(function(result) { // 处理查询结果 }); ``` 这里的查询条件为多边形和图层的交集。 4. 高亮显示选的要素 查询结果包含了符合条件的要素,可以遍历这些要素,对它们进行高亮显示。例如: ```javascript var features = result.features; for (var i = 0; i < features.length; i++) { var feature = features[i]; feature.symbol = new SimpleFillSymbol({ color: [255, 0, 0, 0.5], style: "solid", outline: { color: [255, 0, 0], width: 1 } }); featureLayer.graphics.add(new Graphic(feature.geometry, feature.symbol)); } ``` 这里使用SimpleFillSymbol类创建一个红色的填充符号,将选的要素的符号设置为该填充符号,并将它们添加到图层上。 完整代码如下: ```javascript require([ "esri/Map", "esri/views/MapView", "esri/layers/FeatureLayer", "esri/geometry/Polygon", "esri/geometry/geometryEngine", "esri/symbols/SimpleFillSymbol", "esri/Graphic" ], function(Map, MapView, FeatureLayer, Polygon, geometryEngine, SimpleFillSymbol, Graphic) { var polygon = new Polygon({ "rings": [[[0, 0], [0, 10], [10, 10], [10, 0], [0, 0]]], "spatialReference": { "wkid": 4326 } }); var featureLayer = new FeatureLayer({ url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3" }); var map = new Map({ basemap: "gray-vector", layers: [featureLayer] }); var view = new MapView({ container: "viewDiv", map: map, center: [-122.4194, 37.7749], zoom: 12 }); view.when(function() { var query = featureLayer.createQuery(); query.geometry = polygon; query.spatialRelationship = "intersects"; featureLayer.queryFeatures(query).then(function(result) { var features = result.features; for (var i = 0; i < features.length; i++) { var feature = features[i]; feature.symbol = new SimpleFillSymbol({ color: [255, 0, 0, 0.5], style: "solid", outline: { color: [255, 0, 0], width: 1 } }); featureLayer.graphics.add(new Graphic(feature.geometry, feature.symbol)); } }); }); }); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值