arcgis api for js中MapImageLayer如何移除MapImage
使用MapImageLayer在map中添加影像,部分代码如下,已实现了影像添加,可是使用removeImage函数,却无法对其移除,求各位指导!
var img=new esri.layers.MapImage({
'extent':obj.ext,
'href':obj.path});
if(v=="glyphicon glyphicon glyphicon-eye-close")
{
//添加影像
imglayer.addImage(img);
v="glyphicon glyphicon glyphicon-eye-open";
document.getElementById(spid).className=v;
}
else
{
//移除影像
imglayer.removeImage(img);
//map.addLayer(imglayer);
v="glyphicon glyphicon glyphicon-eye-close";
document.getElementById(spid).className=v;
}
有几个问题补充一下,
1、由于我需要叠加的image比较多,而且每张image是分开单独按钮控制的,(image数目不确定)我不可能先把所有的MapImage创建好,然后控制它的添加和移除,我只能点击按钮,实时获取image的extent和href进行创建,再对其进行图层的添加或移除操作,是不是按照我这样的做法每次创建的MapImage都是不一样的?那我该如何实现我所需的功能?我看了API,创建MapImage的时候也没办法对其确定id之类的。
2、我实现的功能是这样的场景,通过查询可以得到一些查询结果,每个记录都有一个按钮控制这个记录的image的添加与移除。第一次点击按钮后,后台获取image的extent和href,再将其返回前台,添加image到map中,第二次点击按钮,则将该image给移除。就这样的情形,不知道您有没有什么解决方案?
var img=new esri.layers.MapImage({
'extent':obj.ext,
'href':obj.path});
if(v=="glyphicon glyphicon glyphicon-eye-close")
{
//添加影像
imglayer.addImage(img);
v="glyphicon glyphicon glyphicon-eye-open";
document.getElementById(spid).className=v;
}
else
{
//移除影像
imglayer.removeImage(img);
//map.addLayer(imglayer);
v="glyphicon glyphicon glyphicon-eye-close";
document.getElementById(spid).className=v;
}
有几个问题补充一下,
1、由于我需要叠加的image比较多,而且每张image是分开单独按钮控制的,(image数目不确定)我不可能先把所有的MapImage创建好,然后控制它的添加和移除,我只能点击按钮,实时获取image的extent和href进行创建,再对其进行图层的添加或移除操作,是不是按照我这样的做法每次创建的MapImage都是不一样的?那我该如何实现我所需的功能?我看了API,创建MapImage的时候也没办法对其确定id之类的。
2、我实现的功能是这样的场景,通过查询可以得到一些查询结果,每个记录都有一个按钮控制这个记录的image的添加与移除。第一次点击按钮后,后台获取image的extent和href,再将其返回前台,添加image到map中,第二次点击按钮,则将该image给移除。就这样的情形,不知道您有没有什么解决方案?
1 个回复
goldenlimit - Major in MIS and minor in GIS, graduated from University of Alabama. GIS is not a simply tool but a way of exploring the unknow
赞同来自:
https://jsfiddle.net/mma6sqmm/
这是我添加的新的截图,getImage() method 返回的Object值:
根据你的说法,看起来你需要做很多query和计算来添加或者去掉这些MapImage,
根据我对我们JavaScript API 的了解,MapImage和MapImageLayer这两个Class都是相当于一个helper的类,其主要目的是帮助你把得到的图片,简单转化然后加载到地图上,并不需要很多method或者做很多额外的计算。所以这也是为什么你看到MapImage的properties就只有几个。
如果你需要处理很多Raster数据,应该应用ArcGIS Server Image Service来帮助你做很多数据处理: http://server.arcgis.com/zh-cn ... s.htm
如果你非要用MapImage和MapImageLayer这个两个类去做query,你会遇到很多问题:
1. 如果你有n个图片,你必须需要事先创建n个MapImage和n个MapImageLayer,这样做的原因是因为MapImageLayer无法去控制单个MapImage的可见度。只能控制整个图层的可见度。
2. 正如我之前所说,因为这两个类都是简单类型的,没有query函数,所以你自己还要手动添加函数去实现查找和排序每个layer的extent 然后再跟你当前屏幕的extent去做对比,把查找出来符合的extent MapImageLayer显示出来,把不符合的隐藏,又要做一次循环,这样又要做n次排序..
3. 你可以自己去实践下,当你查找MapImageLayer这个对象时,你会发现里面没有任何图层,只能通过.getImages()这个method获取到一个Object array,而里面仅仅只有你image的extent和herf,甚至连ID都没有,不是很容易判断哪一个元素对应的哪一个MapImage:
你可以参考这个更新的sample,可能会帮助你理解:
https://jsfiddle.net/mma6sqmm/1/
要回复问题请先登录或注册