arcgis里面,弹出气泡是很基本的操作。我目前知道的气泡方式,有2种。

一、点击地理对象,出气泡

这个是arcgis的固有功能,并不需要我们写什么代码。只须在加载图层时,指定一个模板参数:infoTemplate。

fl = new FeatureLayer(param.nodePath, {
id: param.id + "",
mode: FeatureLayer.MODE_ONDEMAND,
definitionExpression: param.expression,
infoTemplate: new InfoTemplate(param.title,param.template),//<-----
outFields: fields,
visible: false
});

这个所谓的模板参数,无非就是一些hmtl代码,里面指定了动态字段,如:

<b>${名称}</b><hr>类型:<b>${类型}</b><br />面积:<b>${面积}</b>(公顷)<br />所在市县:<b>${所在市} - ${所在县}</b><br />

仅此而已。图层加载以后,点击该图层上的各个地理块,即弹出infoWindow,内容按照模板设置输出。

二、提示框TooltipDialog

具体可写成当鼠标 mouseover 图层地理对象上面时,显示提示框;mouseout时提示框消失。

arcgis的弹出气泡_图层

为加强效果,mouseover时,可将边线置亮。但是,这样一来,点击地理对象,就没有infoWindow可以弹出来了。原因是,为了置亮边线,其实是在地图上加了一个Grapthic对象,覆盖在原来的地理对象上面。这时,你点击这个地理对象时就被屏蔽了,实际上点击的是该Grapthic对象,所以默认的出来infoWindow功能就没有了。

代码如下:

//定义提示框
var dialog = new TooltipDialog({
id: "tooltipDialog",
style: "position: absolute; width: 250px; font: normal normal normal 10pt Helvetica;z-index:100"
});
dialog.startup();
var highlightSymbol = new SimpleFillSymbol(//红边画笔
SimpleFillSymbol.STYLE_SOLID,
new SimpleLineSymbol(
SimpleLineSymbol.STYLE_SOLID,
new Color([255, 0, 0]), 3
),
new Color([125, 125, 125, 0.35])
);

//打开提示框
function showtip(template) {
return function (evt) {
var content = esriLang.substitute(evt.graphic.attributes, template);
var highlightGraphic = new Graphic(evt.graphic.geometry, highlightSymbol);
map.graphics.add(highlightGraphic);//红色描边

dialog.setContent(content);

domStyle.set(dialog.domNode, "opacity", 0.85);
dijitPopup.open({
popup: dialog,
x: evt.pageX,
y: evt.pageY
});
}
}
//关闭提示框
function closeDialog() {
map.graphics.clear();//擦去红色描边
dijitPopup.close(dialog);
}

function buildFeatureLayer(param) {
var fl = new FeatureLayer(param.url, {
id: param.id,
mode: FeatureLayer.MODE_ONDEMAND,
definitionExpression: param.expression,
infoTemplate: param.template,
outFields: param.fields,
visible: false
});
map.addLayer(fl);
if (param.template != null) {
fl.on("mouse-over", showtip(param.template));//mouseover时,打开提示框
}
return fl;
}
map.on("load", function () {
map.graphics.enableMouseEvents();
map.graphics.on("mouse-out", closeDialog);//mouseout时,关闭提示框
map.on("mouse-down", closeDialog);
});

其实,我想实现的效果是:mouseover时,出提示框;click时,出infoWindow。但昨天捣鼓了半天,没搞出来。留待空闲时再看看。