ArcGIS Engine 如何平移arcgis featureset

ArcGIS Engine 如何平移 Feature_百度知道
ArcGIS Engine 如何平移 Feature
提问者采纳
程实现吗,然后输入偏移量?编程实现的话,添加一个feature selection工具,需要获取feature的坐标;工具的话,然后移动,还是用工具
要通过编程接口实现
编程实现的话,你有什么思路吗?首先你需要获取到你的feature(可通过空间查询或者sql查询),根据类型,获取组成feature的XY坐标,然后做XY坐标的偏移,最后保存。
提问者评价
其他类似问题
为您推荐:
arcgis的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁c#+&ArcgisEngine&定制要素编辑工具
这个星期在做自定义的要素编辑工具栏,不过遇到不少的困难。
现在初步了解到大概用到的下面的接口和类:
IEngineEditor
IEngineEditTask
IEngineEditLayers
IEngineEditEvents
IEngineEditProperties
ControlsEditingSketchToolClass
ControlsEditingEditToolClass
ControlsEditingCopyCommandClass
ControlsEditingPasteCommandClass
ControlsEditingClearCommandClass
IEngineEditor、IEngineEditTask、IEngineEditLayers这三个接口,再加上Command命令和Tool可以是实现新建要素、复制、剪切、黏贴、删除、移动要素。
下面说明一下我实现新建图形功能的思路:
1、根据workspace和map开启编辑。
2、设置目标图层。
3、设置编辑操作的任务类型。
4、激活SletchTool,ControlsEditingSketchToolClass。
5、这时就可以在AxMapControl中画图形了。图形的点线面类型,SletchTool工具会根据目标图层的类型自动识别。
使用了全局变量IEngineEditor,保证在其他的模块该变量的值
private IEngineEditor m_EngineEditor = new
EngineEditorClass();
private void btnNewFeature_Click(object sender, EventArgs e)
if(m_engineEditor.EditState==esriEngineEditState.esriEngineStateNotEditing)
//Start editing the workspace of the first feature layer
//设置编辑的WorkSpace和编辑对象图层
ILayer currentLayer = mMap.get_Layer(0);
if (currentLayer is IFeatureLayer)
IFeatureLayer featureLayer = currentLayer as IFeatureL
IDataset dataset = featureLayer.FeatureClass as ID
IWorkspace workspace = dataset.W
m_engineEditor.StartEditing(workspace, mMap.Map);
((IEngineEditLayers)m_engineEditor).SetTargetLayer(featureLayer,
SetCurrentTask(ref m_engineEditor, "新建要素");
/// &summary&
/// 设置编辑的任务类型
/// &/summary&
/// &param
name="pEngineEditor"&&/param&
/// &param
name="taskName"&&/param&自己命名的任务名称
public static void SetCurrentTask(ref IEngineEditor
pEngineEditor, string taskName)
IEngineEditT
if (pEngineEditor.EditState ==
esriEngineEditState.esriEngineStateEditing)
switch (taskName)
case "新建要素":
edittask =
pEngineEditor.GetTaskByUniqueName("ControlToolsEditing_CreateNewFeatureTask");
if (edittask != null)
pEngineEditor.CurrentTask =
case "修改图形":
edittask=pEngineEditor.GetTaskByUniqueName("ReshapePolylineEditTask_Reshape
Polyline_CSharp");
if (edittask != null)
pEngineEditor.CurrentTask =
case "修改要素":
pEngineEditor.GetTaskByUniqueName("ControlToolsEditing_ModifyFeatureTask");
if (edittask != null)
pEngineEditor.CurrentTask =
删除、复制、黏贴的功能,将m_EngineEditor 置于开启编辑的状态后,直接调用下面的命令就好了
ControlsEditingEditToolClass //用于选择要素对像
ControlsEditingCopyCommandClass
ControlsEditingPasteCommandClass
ControlsEditingClearCommandClass
撤销和重做的功能
/// &summary&
/// 撒消编辑
/// &/summary&
/// &param name="m_pMap"&IMap
地图对象&/param&
public void MapUndoEdit(IMap m_pMap)
IEngineEditProperties ep = new EngineEditorClass();
ILayer m_pCurrentLayer = ep.TargetL
if (m_pCurrentLayer == null)
IFeatureLayer pFeatureLayer =
(IFeatureLayer)m_pCurrentL
IDataset pDataset = (IDataset)pFeatureLayer.FeatureC
if (pDataset == null)
IWorkspaceEdit pWorkspaceEdit =
(IWorkspaceEdit)pDataset.W
bool bHasUndos =
pWorkspaceEdit.HasUndos(ref bHasUndos);
if (bHasUndos)
pWorkspaceEdit.UndoEditOperation();
IActiveView pActiveView = (IActiveView)m_pM
pActiveView.Refresh();
/// &summary&
/// &/summary&
/// &param name="m_pMap"&IMap
地图对象&/param&
public void MapRedoEdit(IMap m_pMap)
IEngineEditProperties ep = new EngineEditorClass();
ILayer m_pCurrentLayer = ep.TargetL
if (m_pCurrentLayer == null)
IFeatureLayer pFeatureLayer =
(IFeatureLayer)m_pCurrentL
IDataset pDataset = (IDataset)pFeatureLayer.FeatureC
if (pDataset == null)
IWorkspaceEdit pWorkspaceEdit =
(IWorkspaceEdit)pDataset.W
bool bHasUndos =
pWorkspaceEdit.HasUndos(ref bHasUndos);
if (bHasUndos)
pWorkspaceEdit.RedoEditOperation();
IActiveView pActiveView = (IActiveView)m_pM
pActiveView.Refresh();
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 arcgis featureserver 的文章

 

随机推荐