使用javascript / dojo使用svg迭代arcGis映射的不同元素

时间:2012-11-20 10:46:06

标签: javascript dojo svg arcgis

我正在使用具有不同图层和元素的特定地图。地图是使用arcGis创建的,它会创建一个<svg></svg>标签,其中包含所有元素(建筑物,道路等)。

我的问题是,我可以使用javascript / dojo在框架内迭代地图的不同对象吗?

主要思想是在地图客户端内更改建筑物或方形的颜色。有什么想法吗?

HTML:

使用Javascript:

basemap = new esri.layers.ArcGISTiledMapServiceLayer("http://...", {});
map.addLayer(basemap);

非常感谢。

2 个答案:

答案 0 :(得分:0)

假设你的SVG已经在DOM中可用,你问题的答案就是...

  var elements = document.querySelectorAll("svg *");
  for (var i = 0; i < elements.length; ++i) {
     if(condition) elements[i].setAttribute("fill", "red");
  }

然而,当你在迭代所有内容时,这是非常浪费的。如果元素“名称”是id s那么你可以做...

  ["B45","K56","L67"].forEach(function(name){
    var element = document.getElementById(name);
    if (element) element.setAttribute("fill", "red");
  });

答案 1 :(得分:0)

我设法创建了一个可以迭代所有元素的空查询,如下所示:

      //initialize query task
      queryTask = new esri.tasks.QueryTask("https://...");

      //initialize query
      query = new esri.tasks.Query();
      query.returnGeometry = true;
      query.outFields = ["SPAT_NAME"];
      query.where = "1=1";

      //execute query
      queryTask.execute(query,function(results){
        console.log(results);
        console.log(elements);
        for (var i=0, il=results.features.length; i<il; i++) {
          var featureAttributes = results.features[i].attributes;
          //do stuff
          }
        }
      });