0

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" at thePoly = features[0].geometry;

  • 1
    Can you please post a longer example (maybe a code sample on jsbin.com)? I'm having a hard time understanding what your "A1..." and "A1_layer" dom nodes are referring to. – GavinR May 9 '17 at 14:23
  • A1 are the feature layers i have added to the map . A1 is a combobox which populated with feature layers attributes – Sarah Salar May 10 '17 at 3:39
  • i have added more code. – Sarah Salar May 10 '17 at 4:09
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);
          }
        });

Hoping this will help you :)

  • Glad to help you once again... :) – Vikash Pandey May 11 '17 at 5:31
  • 1
    as i mentioned it is cascading filtering. if i use if condition it does not zoom to the next feature in the combobox. – Sarah Salar May 11 '17 at 6:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.