clear map zoom and geometries of feature layer

ε祈祈猫儿з 提交于 2020-01-24 19:55:08

问题


i have selected feature(feature layer) from combobox and it zoom to the feature . now i want to clear combobox slection and map . and zoom map to its default zoom.

//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>

but i got error "Cannot read property 'geometry' of undefined"


回答1:


To avoid the error you can simply check the feature first, before getting the geometry.

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);
          }
        });

Note:- this will stop throwing error however it will block the extent set function also. So to setExtent you need to find something else incase of no feature found.

Hoping this will help you :)




回答2:


Well, there may be many reasons for "Cannot read property 'geometry' of undefined" error.

This is happening because you are accessing "geometry" attribute of a "undefined" element.

somewhere in your code you have added xyz.geometry. "xyz" can be any js object.

Below are the link of few similar issues.

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

Hoping above hint will help you to resolve the issue.



来源:https://stackoverflow.com/questions/43864515/clear-map-zoom-and-geometries-of-feature-layer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!