问题
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