美文网首页
ArcGis-FeatureLayer小结

ArcGis-FeatureLayer小结

作者: 写前端的大叔 | 来源:发表于2020-04-19 11:14 被阅读0次

好久没来更新了,趁周末有一点点时间,来总结下前两周的知识点,最近一直在做arcgis相关的工作,主要是在FeatureLayer图层上做一些操作,比如点击查询要素并高亮,根据行政区划加载要素图层、要素统计,要素样式设置,属性编辑等功能。下面就根据这些知识来总结下怎么用的。

1.加载图层

1.1图层初始化

ArcGis中加载矢量图层主要采用的是FeatureLayer这个类来加载,实例化FeatureLayer需要传递图层的地址,还可以设置一些额外的参数,比如设置需要返回的属性信息等。具体代码如下所示:

require([
            "esri/map",
            "esri/layers/FeatureLayer",
            "esri/symbols/SimpleMarkerSymbol",
            "esri/symbols/SimpleFillSymbol",
            "esri/symbols/SimpleLineSymbol",
            "esri/Color",
            "esri/graphic",
            "dojo/domReady!"
        ],
            function (
                Map,
                FeatureLayer,
                SimpleMarkerSymbol,
                SimpleFillSymbol,
                SimpleLineSymbol,
                Color,
                Graphic
            ) {


                var map = new Map("map", {
                    basemap: "dark-gray",
                    center: [-97.395, 37.537],
                    zoom: 5
                });

                var url = "https://services.arcgis.com/V6ZHFr6zdgNZuVG0/arcgis/rest/services/NCAA_Tourney_2015/FeatureServer/1";
                var featureLayer = new FeatureLayer(url, {
                    mode: FeatureLayer.MODE_ONDEMAND,
                    outFields: ["*"],
                });
                map.addLayer(featureLayer);

            });

1.2条件加载

在加载FeatureLayer的时候,可以设置一些条件来加载矢量数据,比如只加载某个行政区内的数据,可以设置如下所示:

//过滤,只需要查询用户所在行政区划的数据
featureLayer.setDefinitionExpression("XZQDM" + " like '" + this.xzqdm + "%'");

其实就是写一条SQL语句,然后再通过setDefinitionExpression函数,将SQL传递给FeatureLayer进行条件查询。

1.3样式设置

FeatureLayer虽然可以在做图的时候,直接将样式设置好,但为了方便前端修改颜色,也可以在前端通过代码来设置样式信息,当某个字段的值不一样时,可以设置不同的样式,下面以Rd_64_Result字段为例,当字段的值为W时设置一咱样式 ,为L时设置另一种样式,如下所示:

var recordRenderer = new UniqueValueRenderer(defaultSymbol, "Rd_64_Result");
recordRenderer.addValue("W", new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE, 7, null, new Color([255, 0, 0])));
recordRenderer.addValue("L", new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE, 7, null, new Color([0, 0, 255])));
featureLayer.setRenderer(recordRenderer);

2.要素点击查询

要素点击查询,主要有两种方式,一种是直接给FeatureLayer添加点击事件,来获取要素信息,但这种方式只能获取到一个要素信息,如果有重叠的要素,将无法获取到,另一种是使用坐标点来查询点击区域的所有要素信息,这种方式虽然可以查询到重叠的点,但也有不好的一点,就是需要请求网络,当矢量数据很多的时候,点击一下要等很久才能查询出来,总之各有各的优点,具体要看业务需求。

2.1点击获取要素信息

该种方式主要是给FeatureLayer添加click事件,然后再获取要素相关信息,如下所示:

featureLayer.on("click", function (evt) {
                    var attr = evt.graphic.attributes;
                    var geometry = evt.graphic.geometry
                    attr["Rd_64_Result"] = "AA"
                });

2.2点击查询要素

该方式主要是走网络请求的方式来查询要素信息,首先获取到坐标点,然后再根据坐标点来构造一个圆,给圆设置一个半径,然后中查询与该圆相交的要素信息,如下所示:

this.map.on('click',function(evt){
//查询10米内的数据,点击的时候方便选中
var point = evt.mapPoint;
var circleGeometry = new Circle(point,{
      "radius": 10
});
self.selectQuery.geometry = circleGeometry;
//查询
self.featureLayer.selectFeatures(self.selectQuery, FeatureLayer.SELECTION_NEW);
 })

查询返回结果

dojo.connect(featureLayer, "onSelectionComplete", function (features) {
  dojo.forEach(features, function (feature) {
  var attributes = feature.attributes;
})

3.要素属性编辑

当需要个性要素属性时,我们一开始可能想到的方式就是后台提供一个接口来进行更改,其实FeatureLayer就已经支持属性编辑了,不过在发布FeatureLayer图层的时候需要将图层设置成可编辑的,前端就可以使用applyEdits来进行修改属性信息了,如下所示:

featureLayer.on("click", function (evt) {
     var attr = evt.graphic.attributes;
     attr["Rd_64_Result"] = "AA"
     var graphic = new Graphic(evt.graphic.geometry,"",attr);
     featureLayer.applyEdits(null,[graphic],null);//编辑要素
     //刷新图层
     featureLayer.refresh();
});

applyEdits方法支持三个参数,分别是新增修改删除。类型为数组,可以批量操作。

4.要素统计

同样的,在ArcGis中可以直接使用FeatureLayer的一些方法来查询统计信息,不需要后台提供服务接口,当然,如果一些比较复杂的统计需求,最好是后台提供接口了,这里主要是以简单的统计来分类,比如根据某个字段的值进行统计,具体的实现方法如下所示:

                var queryTask,query,statDef;
                queryTask = new QueryTask(this.configInfo.featureUrl);
                query = new Query();
                query.outFields = ["*"];
                statDef = new StatisticDefinition();
                //统计总和
                statDef.statisticType = "sum";
                 // 统计的字段
                statDef.onStatisticField = "MJ";
                statDef.outStatisticName = "MJ";//字段名称
                
                query.returnGeometry = false;
                query.where = "Rd_64_Result=1 and XZQDM = '" + this.xzqdm + "'";
                query.outStatistics = [ statDef ];//返回的统计信息
                query.groupByFieldsForStatistics = ["SFQL"];//根据某个字段分组
                queryTask.execute(query, function(result){
                    if(result){
                        var features = result.features;
                        if(features && features.length >0){
                            var attributes = features[0].attributes
                            var SUM_MJ = attributes['SUM_MJ'];//返回的统计信息
                        }
                    }
                }, function(e){
                });

个人博客

相关文章

  • ArcGis-FeatureLayer小结

    好久没来更新了,趁周末有一点点时间,来总结下前两周的知识点,最近一直在做arcgis相关的工作,主要是在Featu...

  • 训练营 总结

    昨天做了个小结,今天做个小结的小结,其实应该这么说,昨天小结了个人收获,今天小结一下总体的情况。 非常令我意外,一...

  • Unity3D开发特效组件之TrailRenderer(三)

    本节要点 小结 本节要点 小结

  • 2017小结

    当豆瓣疯狂推送2017观影小结音乐小结阅读小结各种小结的时候,才意识到这一年又快走到头了。 往年的小结都比较磨叽,...

  • 2018.11.23 目标任务

    今日任务 1. 省实验中学宣讲会; 2. 全年小结; 3. 半年小结与全年小结抄写。 加油ヽ(≧Д≦)ノ 全年小结...

  • 渗透命令行

    本文仅作学习记录,如有侵权,请联系删除 Linux命令小结: wmic命令小结: cmd命令小结: powersh...

  • 【C4D】方块组合

    独角兽配色??? 收工打卡 小结 不需要小结 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...

  • UITextView、UITextFeild、block界面传值

    1、UITextView小结 2、UITextFeild小结 UITextFeild参考链接 3、dictiona...

  • find的常见用法

    小结

  • iOS实录16:GCD使用小结(二)

    iOS实录16:GCD使用小结(二) iOS实录16:GCD使用小结(二)

网友评论

      本文标题:ArcGis-FeatureLayer小结

      本文链接:https://www.haomeiwen.com/subject/juomvhtx.html