清晰的地图缩放和要素图层的几何图形

时间:2017-05-09 08:12:49

标签: javascript arcgis-js-api esri-maps

我从组合框中选择了要素(要素图层),然后缩放到该要素。现在我想清除组合框选择和地图。并将地图缩放为默认缩放。

//combobox selection clear
    dijit.byId("A1").reset();
    dijit.byId("A2").reset();
    dijit.byId("A3").reset();
    dijit.byId("A4").reset();
    dijit.byId("A5").reset();

    //layer selection clear
     document.getElementById('A1_layer').clearSelection();
      document.getElementById('A2_layerC').clearSelection();
      document.getElementById('A3_layerC').clearSelection();
      document.getElementById('A4_layerC').clearSelection();
      document.getElementById('A5_layerC').clearSelection();



app = {
    zoomRow: function(id, which){

      var query = new Query();
      //var thePoly, theExtent;
      if(which == "Land"){
        query.where = "Name='" + (id).toString() + "'";
        console.info(query.where);
        query.returnGeometry = true;
        A1_layer.selectFeatures(query, FeatureLayer.SELECTION_NEW, function (features) {
          thePoly = features[0].geometry;
          theExtent = thePoly.getExtent().expand(2); //Zoom out slightly from the polygon's extent
          map.setExtent(theExtent);
        });
        esriRequest({
          url: "http://localhost:6080/arcgis/rest/services/........",
          content:{
            f:'json'
          },
          handleAs:'json',
          callbackParamName:'callback',
          timeout:15000
        }).then(lang.hitch(this,function(response){
          var store2 = new Memory({data:[]});
          dijit.byId("A2").set('store',store2);
          var data = array.map(response.features,lang.hitch(this,function(feat, index){
            var name = feat.attributes.nam;
            var dataItem = {
              id:index,
              name:name
            };
            return dataItem;
          }));
          store2 = new Memory({data:data});
          dijit.byId("A2").set('store',store2);
          document.getElementById('A2').value = "Select Room";
        }));
      }
<input id="A1" data-dojo-type="dijit/form/ComboBox" value="Select landing" onchange="app.zoomRow(document.getElementById('A1').value, 'Land');" data-dojo-props="maxHeight: 200" style="overflow:auto; width:200px; background-color: #E7FCCA "/ ><br></br>
  <input id="A2" data-dojo-type="dijit/form/ComboBox" value="Select room onchange="app.zoomRow(document.getElementById('A2').value, 'Room');"style="overflow:auto; width:200px ;background-color: #E7FCCA" /> <br></br>

但我收到错误“无法读取未定义的属性'几何'

2 个答案:

答案 0 :(得分:3)

为了避免错误,您可以在获取几何图形之前先检查该特征。

A1_layer.selectFeatures(query, FeatureLayer.SELECTION_NEW, function (features) {
        if(features && features[0] && features[0].geometry){
             thePoly = features[0].geometry;
             theExtent = thePoly.getExtent().expand(2); //Zoom out slightly from the polygon's extent
             map.setExtent(theExtent);
          }
        });

注意: - 这将停止抛出错误,但它也会阻止范围设置功能。因此,对于setExtent,您需要找到其他未找到任何功能的内容。

希望这会对您有所帮助:)

答案 1 :(得分:0)

嗯,可能有很多原因导致&#34;无法阅读属性&#39;几何&#39;未定义&#34;错误。

这种情况正在发生,因为您正在访问&#34; geometry&#34; a&#34; undefined&#34;的属性元件。

您的代码中的某处已添加xyz.geometry。 &#34; XYZ&#34;可以是任何js对象。

以下是几个类似问题的链接。

https://geonet.esri.com/thread/186541-uncaught-typeerror-cannot-read-property-geometry-of-undefined

https://gis.stackexchange.com/questions/182364/uncaught-typeerror-cannot-read-property-on-of-undefined

希望上面的提示可以帮助您解决问题。