JS API模块之FeatureLayer要素点击查询
一、PopupTemplate实现
var featureLayer = new FeatureLayer({
url: "...",
});
map.add(featureLayer);
featureLayer.when(() => {
let popupTemplate = {
title: featureLayer.title,
outFields: ["*"],
content: [{
type: "fields",
fieldInfos: featureLayer.fields.map(item=>({fieldName:item.name}))
}]
};
// console.log(popupTemplate);
featureLayer.popupTemplate = popupTemplate;
})
实现效果
二、View实现
var featureLayer = new FeatureLayer({
url: "...",
});
// 创建一个GraphicLayer,用来绘制查询结果
var graphicsLayer = new GraphicsLayer();
map.add(graphicsLayer);
map.add(featureLayer);
view.on("click", (event)=> {
view.hitTest(event).then(function (results) {
console.log("results:",results);
if (results.results.length) {
addGraphics(results.results);
}
});
});
function addGraphics(result) {
graphicsLayer.removeAll();
result.forEach(function (item) {
if (item.graphic.geometry.type == "point") {
} else if (item.graphic.geometry.type == "polyline") {
} else if (item.graphic.geometry.type == "polygon") {
const fillSymbol = {
type: "simple-fill",
color: [227, 139, 79, 0.8],
outline: {
color: [255, 255, 255],
width: 1,
},
};
var g = new Graphic({
geometry: item.graphic.geometry,
symbol: fillSymbol,
spatialReference: map.spatialReference
});
}
// console.log(Object.prototype.toString.call(feature));
graphicsLayer.add(g);
view.goTo(g);
});
}
实现效果
三、FeatureLayer实现
var featureLayer = new FeatureLayer({
url: "...",
});
// 创建一个GraphicLayer,用来绘制查询结果
var graphicsLayer = new GraphicsLayer();
map.add(graphicsLayer);
map.add(featureLayer);
// Set up a click event handler and retrieve the screen point
view.on("click", (event) => {
// 查询的是attributes的内容
let query = featureLayer.createQuery();
query.geometry = event.mapPoint;
query.spatialRelationship = "intersects";
featureLayer.queryFeatures(query).then(function (results) {
// 返回一个要素集合
console.log("results:", results);
if(results.features.length>0)
addGraphics(results.features);
})
})
function addGraphics(result) {
graphicsLayer.removeAll();
result.forEach(function (feature) {
if (feature.geometry.type == "point") {
} else if (feature.geometry.type == "polyline") {
} else if (feature.geometry.type == "polygon") {
const fillSymbol = {
type: "simple-fill",
color: [227, 139, 79, 0.8],
outline: {
color: [255, 255, 255],
width: 1,
},
};
var g = new Graphic({
geometry: feature.geometry,
symbol: fillSymbol,
spatialReference: map.spatialReference
});
}
// console.log(Object.prototype.toString.call(feature));
graphicsLayer.add(g);
view.goTo(g);
});
}
实现效果
四、FeatureLayerView实现
var featureLayer = new FeatureLayer({
url: "...",
});
let highlight;
view.on("click", (event) => {
view.whenLayerView(featureLayer).then(function (layerView) {
// 查询的是attributes的内容
let query = layerView.createQuery();
query.geometry = event.mapPoint;
query.spatialRelationship = "intersects";
layerView.queryFeatures(query).then(function (result) {
console.log("result:", result);
if (highlight) {
highlight.remove();
}
if (result.features.length) {
highlight = layerView.highlight(result.features);
view.goTo(result.features[0].geometry);
}
})
});
})
实现效果
我们可以看到FeatureLayer和FeatureLayerView查询的返回结果几乎一致,那区别在哪里呢?
FeatureLayer
FeatureLayerView
可以看出,FeatureLayer
返回的attributes是属性表所有字段及内容,而FeatureLayerView
返回的attributes只含有部分属性表的字段及内容。
所以在使用query.where
指定属性查询的时候,就有所区别了。
另外,FeatureLayer
的查询会向后台发送请求,而FeatureLayerView
不会。
view
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!