• 要素图层范围查询属性arcgis api for js(featuretable根据上篇的优化)原创


    上篇介绍了如何使用要素图层范围查询属性,实际运用时有些无法满足我的需求。于是我做了如下的一些优化:

    1、根据属性名字可以进行模糊查询:即写一个博即可搜寻到与含博的所有字段

    var sql_name="name Like '%"+name+"%'";//将需要模糊查询的字段,按格式书写

    2、查询不再是并查询。而是既可以单独查询又可以并查询。

    if (submin==""||submax=="") {
             sql_r=sql_name;
            }
            else if(name==""){
              sql_r=sql_gdp;
    
            }
            else{
              sql_r=sql_gdp+"and "+sql_name;
            }
             myFeatureLayer.setDefinitionExpression(sql_r);
    

      3、进入后便可以点击属性表,使之高亮显示。

    function loadTable(){
              myFeatureLayer = new FeatureLayer("http://localhost:6080/arcgis/rest/services/%E6%9C%80%E5%90%8E%E7%9A%84%E5%9B%BE%E5%B1%82/%E4%B8%9D%E7%BB%B8%E4%B9%8B%E8%B7%AF/FeatureServer/0",{
                mode: FeatureLayer.MODE_ONDEMAND,
                outFields: ["*"],
                visible: true,
                id: "fLayer"
              });
     myFeatureLayer.setSelectionSymbol(symbol);
    map.addLayer(myFeatureLayer);
    myFeatureTable = new FeatureTable({
                featureLayer : myFeatureLayer,
                map : map,
                showAttachments: true,
                // only allows selection from the table to the map 
                syncSelection: true, 
                zoomToSelection: true, 
                gridOptions: {
                  allowSelectAll: true,
                  allowTextSelection: true,
                },
                editable: true,
                outFields: ["name","description","grp2015"],
                fieldInfos: [
                  {
                    name: 'name', 
                    alias: '城市名字', 
                    editable: false
                  },
                  {
                    name: 'description', 
                    alias: '描述',
                  },
                  {
                    name: 'grp2015', 
                    alias: '经济'
                  },
                ],
              }, 'myTableNode');
    
              myFeatureTable.startup();
    

      全部代码如下:

    <!DOCTYPE html>
    <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/>
      <title>FeatureTable Formatting</title>
      <link rel="stylesheet" href="https://js.arcgis.com/3.21/dijit/themes/claro/claro.css">
      <link rel="stylesheet" href="https://js.arcgis.com/3.21/esri/css/esri.css">
      <script src="https://js.arcgis.com/3.21/"></script>
      <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
    
      <style>
        html, body, #map {
           100%;
          height: 100%;
          margin: 0;
          padding: 0;
        }
       .claro .dijitSplitContainer-child, .claro .dijitBorderContainer-child {
         border: 0 #b5bcc7 solid; 
    }
    }
      </style>
      <script>
        require([
          "esri/layers/FeatureLayer",
          "esri/dijit/FeatureTable",
          "esri/geometry/Extent",
          "esri/symbols/SimpleMarkerSymbol",
          "esri/symbols/SimpleLineSymbol",
          "esri/Color",
          "esri/map",
          "dojo/dom-construct",
          "dojo/dom",
          "dojo/number",
          "dojo/parser",
          "dojo/ready",
          "dojo/on",
          "dojo/_base/lang",
          "dijit/registry",
          "dijit/form/Button",
          "dijit/layout/ContentPane",
          
          "dijit/layout/BorderContainer",
          "dijit/form/TextBox"
        ], function (
          FeatureLayer, FeatureTable, Extent, SimpleMarkerSymbol, SimpleLineSymbol, Color, Map,
          domConstruct, dom, dojoNum, parser, ready, on,lang,
          registry, Button, ContentPane, BorderContainer, TextBox
        ) {
     var selectionSymbol;
          parser.parse();
          var symbol= new esri.symbol.SimpleMarkerSymbol();
                        symbol.setSize(35);
                        symbol.setColor(new dojo.Color([250,128,114,0.3]));
    
          ready(function(){
    
             var sr = new esri.SpatialReference({
                wkid: 4326
            });
            var startExtent = new esri.geometry.Extent(-88.27, 17.47, -88.16, 17.54, sr);
            map = new esri.Map("map", {
                logo: false,
                center: [83.75, 33.75],
                zoom: 3
                //                sliderPosition:"top-right"
            });
            map.addLayer(new esri.layers.ArcGISTiledMapServiceLayer("http://map.geoq.cn/arcgis/rest/services/ChinaOnlineCommunity/MapServer"));
    
            map.on("load", loadTable);
    var myFeatureLayer;var myFeatureTable;
            function loadTable(){
              myFeatureLayer = new FeatureLayer("http://localhost:6080/arcgis/rest/services/%E6%9C%80%E5%90%8E%E7%9A%84%E5%9B%BE%E5%B1%82/%E4%B8%9D%E7%BB%B8%E4%B9%8B%E8%B7%AF/FeatureServer/0",{
                mode: FeatureLayer.MODE_ONDEMAND,
                outFields: ["*"],
                visible: true,
                id: "fLayer"
              });
              myFeatureLayer.setSelectionSymbol(symbol);
     
              map.addLayer(myFeatureLayer);
    
        
               myFeatureTable = new FeatureTable({
                featureLayer : myFeatureLayer,
                map : map,
                showAttachments: true,
              
                zoomToSelection: true, 
                gridOptions: {
                  allowSelectAll: true,
                  allowTextSelection: true,
                },
                editable: true,
                outFields: ["name","description","grp2015"],
                fieldInfos: [
                  {
                    name: 'name', 
                    alias: '城市名字', 
                    editable: false
                  },
                  {
                    name: 'description', 
                    alias: '描述',
                  },
                  {
                    name: 'grp2015', 
                    alias: '经济'
                  },
                ],
              }, 'myTableNode');
    
              myFeatureTable.startup();
    
              // listen to show-attachments event
              myFeatureTable.on("show-attachments", function(evt){
                console.log("show-attachments event - ", evt);
              });
    
            }
             on(dom.byId("sqlque"), "click", function (e) {
              if ($('#bot').is(":hidden")) {$('#bot').show();}
              else{$('#bot').hide();}
              map.removeLayer(myFeatureLayer);
              var sql_r;
            var submin = dom.byId("submin").value;//序号最小值
            var submax = dom.byId("submax").value;//最大值
            //判断输入是否在范围内
            if (submin<0||submin>40000){alert("请输入最小值");} //最小值
            if (submax<0||submax>40000){alert("请输入最大值");} //最大值
            var sql_gdp="grp2015 >="+submin+"and grp2015<="+submax;  //序号SQL查询字符串
            var name = dom.byId("name_test").value;//name的值
            var sql_name="name Like '%"+name+"%'";
            if (submin==""||submax=="") {
             sql_r=sql_name;
            }
            else if(name==""){
              sql_r=sql_gdp;
    
            }
            else{
              sql_r=sql_gdp+"and "+sql_name;
            }
             myFeatureLayer.setDefinitionExpression(sql_r);
              myFeatureLayer.setSelectionSymbol(symbol); 
                myFeatureLayer.on("click", function(evt) {
               var idProperty = myFeatureLayer.objectIdField;
               var feature, featureId, query1;
               if (evt.graphic && evt.graphic.attributes && evt.graphic.attributes[idProperty]) {
                   feature = evt.graphic; //获取要素形状
                   featureId = feature.attributes[objectid]; //获取要素ID
                   //实例化查询参数
                   query1 = new Query();  
                   query1.returnGeometry = true;  
                   query1.objectIds = [featureId];
                   query1.where = "1=1";  //取查询中的全部数据
                   myFeatureLayer.selectFeatures(query1, FeatureLayer.SELECTION_NEW);
               }
             });
             map.addLayer(myFeatureLayer); //添加要素查询结果图层
    
             myFeatureTable.refresh(); //更新要素表格
    });
    
          });
        });
      </script>
    </head>
    <body class="claro esri">
     <div data-dojo-type="dijit/layout/BorderContainer" data-dojo-props="design:'headline'"
            style=" 100%; height: 100%;">
            <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'top'" style="height: 40px;">
                GDP:<input id="submin" />to
                <input id="submax" /><br>
                name:
                <input id="name_test" />
                <button id="sqlque">
                    查询</button>
            </div>
            <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'center', splitter:true"
                style="height: 60%">
                <div id="map">
                </div>
            </div>
            <div id="bot" data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'bottom', splitter:true"
                style="height: 40%">
                <div id="myTableNode">
                </div>
            </div>
        </div>
    </body>
    </html>

    
    

     本文链接:http://www.cnblogs.com/HuangDaDa/p/7379956.html

  • 相关阅读:
    IDEA中用jetty启动项目时,url 404
    Mysql 性能查询
    RabbitMQ 安装
    Ubuntu安装kubernetes
    .net 4 调用WCF时报错 Type 'System.Threading.Tasks.Task`1[]' cannot be serialized
    Windows XP SP2上安装.net 4
    angular学习的一些Mark
    [转]对 td 使用 overflow:hidden; 无效的几点错误认识
    静态方法与非静态方法的区别
    二进制字符串的权限管理
  • 原文地址:https://www.cnblogs.com/HuangDaDa/p/7379956.html
Copyright © 2020-2023  润新知