首页 / 浏览问题 / 组件GIS / 问题详情
平移几何要素
22EXP 2019年01月02日
如何将选中的一些几何要素通过鼠标拖拽的方式进行平移(最好不要使用offset)

1个回答

首先开启图层可编辑,然后鼠标状态action切换成select,然后就可以任意拖动了
2,432EXP 2019年01月03日
这个可以拉伸,但是不能平移
开启图层可编辑过后,代码输入mapControl1.Action = SuperMap.UI.Action.Select2,然后选中就可以任意拖动啦,之前给你说的select有点随意,它是分两种模式的,select的话就不能进行对象编辑了,而select2可以
select2也不行,我知道你说的select2
你鼠标必须要点在几何元素上,比如你要移动一个面,选中面后,你的鼠标要点在它的边上

这我也知道啊,但是我鼠标挪过去,鼠标样式都不变,拖拽也没有效果,在SuperMap Desktop中就完全没问题

是这样的  如果你是打开的一副地图  那是由很多层图层构成的,你这段代码只是这些图层集合的第一个图层可编辑,所以把你之前的代码发来看看
加载数据的代码吗?下面是加载数据的。上面那三行代码就那么多,放在了一个按钮事件里了

//设置公用打开对话框
            openFileDialog1.Filter = "SuperMap工作控件文件(*.smwu)|*.smwu";
            //判断打开的结果,如果打开就执行下列操作
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                //避免连续打开工作空间导致程序异常
                mapControl1.Map.Close();
                workspace1.Close();
                mapControl1.Map.Refresh();
                //定义打开工作空间文件名
                string fileName = openFileDialog1.FileName;
                //打开工作控件文件
                WorkspaceConnectionInfo connectionInfo = new WorkspaceConnectionInfo(fileName);
                //打开工作空间
                workspace1.Open(connectionInfo);
                //建立MapControl与Workspace的连接
                mapControl1.Map.Workspace = workspace1;
                pResources = workspace1.Resources;
                //判断工作空间中是否有地图
                if (workspace1.Maps.Count == 0)
                {
                    MessageBox.Show("当前工作空间中不存在地图!");
                    return;
                }
                //通过名称打开工作空间中的地图
                mapControl1.Map.Open("WorldMap");
                //刷新地图窗口
                mapControl1.Map.Refresh();
                mapControl1.Action = SuperMap.UI.Action.Null;
            }
你这个是打开一个地图,而这个地图对应了很多图层,你的那个代码只是允许第一个图层可编辑

你把button中的代码换成下面这个

  mapControl1.IsMultiLayerEditEnabled = true;
           
          
           int q = mapControl1.Map.Layers.Count;
           for (int i = 0; i < q; i++)
           {
               mapControl1.Map.Layers[i].IsEditable = true;
               mapControl1.Map.Layers[i].IsSelectable = true;
               mapControl1.Action = SuperMap.UI.Action.Select2;
           
           }
我试了一下,这样当我选中的要素有面的情况就可以平移,但是当我单独选中点或者线的时候就不行。同样的数据,我这超图桌面端就能实现。
再加一段代码  mapControl1.Map.Layers[i].IsSnapable = true; 就放在for循环里 ,我不太清楚你所说的点线是什么意思,这个是开启图层可捕捉

我说的点线就是示例数据中的点线图层啊,也就是World中的河流和首都

你的意思是能选中一个面 不能选中面里面的点和线 是这个意思吗
能选中,当我选中 的要素包括面要素的时候就可以移动,当我选中的要素不包括面要素 的时候就不能移动,比如上图:我只选中线要素的时候就不能移动
你有没有定义别的选择事件,必须要所有都是select2才行
没有,没有执行任何操作和设置,加载数据后,直接点击的这个按钮
...