首页 / 浏览问题 / 云GIS / 问题详情
如何给用户自己画的点线面添加自定义属性
64EXP 2017年08月09日
比如说这样绘制的点线面

drawPoint = new SuperMap.Control.DrawFeature(paintLayer, SuperMap.Handler.Point, {multi: true});
drawLine = new SuperMap.Control.DrawFeature(paintLayer, SuperMap.Handler.Path, {multi: true});

drawPolygon = new SuperMap.Control.DrawFeature(vectorLayer, SuperMap.Handler.Polygon);、

如何添加自定义属性(师范程序里的)及修改属性(线宽颜色填充之类的)

2 个回答

您好,在SuperMap.Control.DrawFeature()中的style可以修改属性

4,524EXP 2017年08月09日

我是指自定义属性。。。

我的意思是我自己画个线画个多边形,我怎么给他添加属性
这个属性属性名和属性值都是自己定义的
可以发布需要编辑的数据集,通过地物编辑服务接口中的添加类型进行属性添加
idesktop来做?

如果你是想要对绘制的这个多边形添加自定义属性的话,例如,多边形要素对象叫vect,你要设置的属性名为 attri,值为attri,可以直接书写vect.attribute.attri = "attri"

那请问我怎么选中我想好添加自定义属性的图形?

new SuperMap.Layer.PlottingLayer 这个可以选中

new SuperMap.Layer.Vector 这个怎么选中啊
我想要的是先画好一个图形,然后有两个input 输入属性名和属性值,然后点击添加
PlottingEdit控件怎么作用在自己绘制的图形上

可以用selectfeature控件进行选择矢量图层,你可以获取input的值作为变量,然后设置属性

如图,input1,input2就是你获取你的前端的input的值

你要操作的是矢量图层VectorLayer  不是标绘图层plottingLayer   可以通过SQL查询或selectFeature控件选中你要操作的地物
还有一个问题哦,比如说最普通的

drawLine = new SuperMap.Control.DrawFeature(paintLayer, SuperMap.Handler.Path, {multi: true});

双击结束怎么退出这个控件

draw_line: function () {
      self.deactiveAll();
      drawLine.activate();
}
drawfeature控件是双击就结束绘制了,可以监听featureadded这个事件,在添加了要素之后注销,drawPolygon.events.on({"featureadded":function(){drawPolygon.deactivate()}})
paintLayer = imap.createLayer("paintLayer");
      paintLayer.style = {
              fillColor: "#ff0000",
              fillOpacity: 0.4,
              strokeColor: "#ff0000",
              strokeOpacity: 1,
              strokeWidth: 3,
              pointRadius:6
          }

      imap.addLayers([paintLayer,vectorLayerLabelText]);
      //点线面绘制
      drawPoint = new SuperMap.Control.DrawFeature(paintLayer, SuperMap.Handler.Point, {multi: true});
      drawLine = new SuperMap.Control.DrawFeature(paintLayer, SuperMap.Handler.Path, {multi: true});
      drawPoint.events.on({"featureadded":function(){drawPoint.deactivate()}});
      drawLine.events.on({"featureadded":function(){drawLine.deactivate()}});
      imap.addControls([drawPoint, drawLine]);
      debugger;
      //实例化 selectFeature 控件,调用了 onSelect 和 onUnselect 方法
      //地物被选中时调用 onSelect 方法,地物被取消选中时调用 onUnselect 方法
      var selectFeature = new SuperMap.Control.SelectFeature(paintLayer, {onSelect:onFeatureSelect,onUnselect:onUnFeatureSelect});
      //map上添加控件
      imap.addControl(selectFeature);
      //激活控件
      selectFeature.activate();
      //要素被选中时调用此函数,需要传入当前选中要素参数feature
      function onFeatureSelect(feature) {
          var userDefineShow = query(".propertUserDefine")[0];
            domStyle.set(userDefineShow, 'display', 'block');
            
      }
      //要素被取消选中时调用此函数,需要传入当前要素参数feature
      function onUnFeatureSelect(feature) {
          var userDefineHidden = query(".propertUserDefine")[0];
            domStyle.set(userDefineHidden, 'display', 'none');
      }

姐姐,我这么写,绘完之后还是单击选中不了啊
你的paintLayer是一个vetor图层吗?有报错什么的吗
是的

createLayer: function (layerName) {
      return new SuperMap.Layer.Vector(layerName);
},

不报错,就是选中不了
paintLayer = imap.createLayer("paintLayer");

这样子不就变成了imap.new SuperMap.Layer.Vector(layerName);了吗?

应该是直接paintLayer = new SuperMap.Layer.Vector(layerName)吧


createLayer: function (layerName) {
      return new SuperMap.Layer.Vector(layerName);
},

是我用dojo封装在另一个js的方法,对象是imap,调用imap对象中的createLayer方法,返回

new SuperMap.Layer.Vector(layerName),layerName是参数;我创建新图层都是这样的,没问题的。
你的要素图层在最上面吗?你用map.setLayerIndex()将图层移到最上面
没有用,我在index=5的"plottingLayer"可以选中

index=6的paintlayer选中不了,把paintlayer的index改为0也不行
paintlayer已经是在最上面了是吧?你的上面还有其他图层吗?我看你的vectorLayerLabelText应该还在paintlayer的上面吧

我这边测试了,下面一层为plottinglayer上面一层为vectorlayer是没有问题的啊

已经是第一层了,index=0了,还是不能选中

姐姐,我知道了,我前面还有一个需要点击的图层,所以一直选不了。可怎么样能让两个都有点击事件的图层都能点击呢?

还有个问题,我想叠加地图,

init: function (self) {
      layerChina400 = new SuperMap.Layer.TiledDynamicRESTLayer("China400", url, {transparent: true,cacheEnabled: true}, {maxResolution: "auto"});
      layerChina = new SuperMap.Layer.TiledDynamicRESTLayer("China", url2, {transparent: true, cacheEnabled: true}, {maxResolution:"auto"});
      layerChina400.events.on({"layerInitialized": self.addLayerIndex});
    },
    addLayerIndex: function () {
        layerIndex = new SuperMap.Layer.TiledDynamicRESTLayer("JS", url3, {transparent: true, cacheEnabled: true});
        layerIndex.events.on({"layerInitialized": self.initEnd});
        layerIndex.setOpacity(0.5);
    },

    initEnd: function () {
      map.addLayers([layerChina400,layerIndex]);
      map.setCenter(new SuperMap.LonLat(0, 0), 0);
      layerIndex.isBaseLayer = false;
      console.log(map.layers);
    },

怎么样才能把这个单选钮变成多选钮啊,就是圆的变成方的,单选钮地图不能叠加显示啊

控件绑定图层的时候,给一个数组,数组里面写你需要绑定的图层

单选钮就是说是底图,如果不是底图的话就是方的了,叠加的话要设置map的alloverlayes为true
谢谢姐姐,解决了
但是设置了alloverlayes为true,但是在获取数据的时候就会报错
报的什么错啊?设置了overlays就不能设置map.setBaseLayer
我知道的啊,没有setBaseLayer,就是加载的地图有些数据找不到,400,显示不出地图;
姐姐,如何能类似QQ截图的方法截图打印地图啊?用maptoimg.js吗?
你好 使用StyleMap类定义自己的样式,drawFeature设置handlerOptions属性下的对应styleMap
7EXP 2017年08月09日
...