1

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"

Vikash Pandey
  • 5,407
  • 6
  • 41
  • 42
Sarah Salar
  • 193
  • 1
  • 3
  • 14

2 Answers2

3

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 :)

Vikash Pandey
  • 5,407
  • 6
  • 41
  • 42
0

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.

Vikash Pandey
  • 5,407
  • 6
  • 41
  • 42
  • if you look at my code u might see the thepoly = feature[0].gemtry. here is the problem. feature layer will clear but somehow this array does not clear. – Sarah Salar May 10 '17 at 10:12
  • i have updated my code here https://gis.stackexchange.com/questions/239693/clear-map-zoom-and-geometries-of-feature-layer?noredirect=1#comment374272_239693 – Sarah Salar May 10 '17 at 10:36