以下是从我的aspx.cs文件中拷贝出来的在ArcGIS Server中添加和删除shp图层的源码,用起来比较好用,代码出处是刘光的那本书。
如果使用,可以把添加图层的和删除的图层的代码写成一个通用的函数,如
private void addPPISHPFile(string shpFilePath, string shpFileName, string LayerName, string FieldName)
private void RemovePPISHPLayer(string LayerName)
使用就行,不多说了,关键是能解决问题。
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using ESRI.ArcGIS.Server;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer;
public partial class Default2 : System.Web.UI.Page, ICallbackEventHandler
{
public string addLayerCallback;
private string callbackResponse;
MapResourceLocal localMapResource = null;
protected void Page_Load(object sender, EventArgs e)
{
addLayerCallback = ClientScript.GetCallbackEventReference(this, "message", "processCallbackresult", "context", "postBackError", true);
}
string ICallbackEventHandler.GetCallbackResult()
{
return callbackResponse;
}
void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
{
if (eventArgument.Contains("addlayer"))
{
AddLayer();
}
else if (eventArgument.Contains("removelayer"))
{
Session["layeradded"] = false;
RemoveLayer();
}
}
#region 增加图层
//增加图层
private void AddLayer()
{
MapFunctionality agsMapFunctionality = Map1.GetFunctionality(0) as MapFunctionality;
localMapResource = (MapResourceLocal)agsMapFunctionality.Resource;
//使用ArcObjects增加图层
IServerContext mapContext = localMapResource.ServerContextInfo.ServerContext;
IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)mapContext.CreateObject("esriDataSourcesFile.ShapefileWorkspaceFactory");
IFeatureWorkspace featureWorkspace = workspaceFactory.OpenFromFile(@"D:\AGS_Data\GISData", 0) as IFeatureWorkspace;
IFeatureLayer featureLayer = (IFeatureLayer)mapContext.CreateObject("esriCarto.FeatureLayer");
featureLayer.FeatureClass = featureWorkspace.OpenFeatureClass("States.shp");
featureLayer.Name = "States";
//应用着色器
ApplyRenderer(featureLayer, mapContext);
IMapServerObjects mapServerObjects = localMapResource.MapServer as IMapServerObjects;
IMap map = mapServerObjects.get_Map(localMapResource.DataFrame);
map.AddLayer(featureLayer);
map.MoveLayer(featureLayer, 0);
//刷新服务器对象 响应添加图层
localMapResource.RefreshServerObjects();
//刷新地图与Toc
Toc1.Refresh();
Map1.CallbackResults.CopyFrom(Toc1.CallbackResults);
Map1.Refresh();
callbackResponse = Map1.CallbackResults.ToString();
}
#endregion
#region 渲染图层
//设置动态要素图层的着色器对象
private void ApplyRenderer(IFeatureLayer featureLayer, IServerContext mapContext)
{
IGeoFeatureLayer geoLayer = (IGeoFeatureLayer)featureLayer;
ISimpleRenderer simpleRender = (ISimpleRenderer)mapContext.CreateObject("esriCarto.SimpleRenderer");
IRgbColor rgbColor = (IRgbColor)mapContext.CreateObject("esriDisplay.RgbColor");
rgbColor.Red = 0;
rgbColor.Green = 0;
rgbColor.Blue = 210;
esriGeometryType geometryType = featureLayer.FeatureClass.ShapeType;
if (geometryType == esriGeometryType.esriGeometryPoint)
{
ISimpleMarkerSymbol symbol = (ISimpleMarkerSymbol)mapContext.CreateObject("esriDisplay.SimpleMarkerSymbol");
symbol.Color = (IColor)rgbColor;
simpleRender.Symbol = (ISymbol)symbol;
}
else if (geometryType == esriGeometryType.esriGeometryPolyline)
{
ISimpleLineSymbol symbol = (ISimpleLineSymbol)mapContext.CreateObject("esriDisplay.SimpleLineSymbol");
symbol.Color = (IColor)rgbColor;
simpleRender.Symbol = (ISymbol)symbol;
}
else if(geometryType == esriGeometryType.esriGeometryPolygon)
{
ISimpleFillSymbol symbol = (ISimpleFillSymbol)mapContext.CreateObject("esriDisplay.SimpleFillSymbol");
symbol.Color = (IColor)rgbColor;
simpleRender.Symbol = (ISymbol)symbol;
}
else
{
throw new Exception("不能确定图层类型!");
}
geoLayer.Renderer = (IFeatureRenderer)simpleRender;
}
#endregion
#region 删除图层
//删除图层
private void RemoveLayer()
{
MapFunctionality agsMapFunctionality = Map1.GetFunctionality(0) as MapFunctionality;
localMapResource = (MapResourceLocal)agsMapFunctionality.Resource;
//通过ArcObjects 删除动态添加的图层
IMapServerObjects mapServerObjects = localMapResource.MapServer as IMapServerObjects;
IMap map = mapServerObjects.get_Map(localMapResource.DataFrame);
ILayer workingLayer = null;
IEnumLayer enumLayer = map.get_Layers(null, true);
ILayer loopLayer = null;
while ((loopLayer = enumLayer.Next()) != null)
{
if (loopLayer.Name == "States")
{
workingLayer = loopLayer;
}
}
map.DeleteLayer(workingLayer);
//刷新服务器对象,响应删除图层
localMapResource.RefreshServerObjects();
Toc1.Refresh();
Map1.CallbackResults.CopyFrom(Toc1.CallbackResults);
Map1.Refresh();
callbackResponse = Map1.CallbackResults.ToString();
}
#endregion
protected void Button1_Click(object sender, EventArgs e)
{
AddLayer();
}
protected void Button2_Click(object sender, EventArgs e)
{
RemoveLayer();
}
}
分享到:
相关推荐
ArcEngine二次开发图层控制:添加、删除、清空图层
先双击工具栏上的ContexMenuStrip,添加删除图层和打开属性表项, 定义全局变量player 在onmousedown事件中添加代码: System.Object unk = null; System.Object data = null; if (e.button == 2) { ...
本文将介绍如何使用Spire.PDF for Java来添加和删除PDF图层,本文通过示例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
jquery表格动态添加删除行代码是一款基于jquery实现的表格里面点击按钮后可进行自动添加删除行功能代码。
vue动态表格添加删除数据代码是一款输入用户名和年龄自由添加用户信息表格,可以删除用户信息,支持批量全部删除表格数据代码。
貌似很简单的一个示例,但是在学习和工作中非常重要,往往会根据项目的需要来删除图层,达到预期效果。 【适用人群】: 使用leaflet做开发的小伙伴 ~~ 【使用场景】:使用leaflet来满足地图开发中的各种要求。~~ ...
Layui表格添加行删除保存代码是一款可用于对表格数据快速维护,展示修改功能,灵活自如。
从堆栈中添加和删除图层(堆栈相当于matplotlib轴的matplotlayers)。 将颜色条连接到其起源的图层后,将自动更新它们。 图层可以根据需要位于任意多个堆栈中。 您可以从中了解到,matplotlayers中没有循环引用。 ...
卡口添加/删除卡口图层,给图层添加/删除事件运行代码:卡口。
添加图层 c.addLayer(id); 获取画布上下文 var ctx = c.getCtx(id); 复制图层到图层 c.copyC2C(id1, id2); 删除图层 c.removeLayer(id); 建造它 这个存储库使用 Grunt 来构建源代码。 npm install grunt 反馈 ...
删除FeatureClass中满足一定条件的Feature问题及解决办法! 77 创建孤立的要素类和数据集中的要素类 78 SUM Color of vertex symbols in edit 80 要素动态跟踪的算法 83 同时闪烁满足条件的记录n次 86 旋转地图 89 ...
分层管理器应用程序需要进行许多设置和准备。主要步骤汇总如下:获取多层逐层细化图层时要使用的各个表的数据。创建一个包含特殊列和特殊元数据的新的空逐层细化表。...确定需要添加的子图元和需要删除的图元。
界址线类别可以通过ArcMap的空间筛选批量添加在界址线图层的界址线类别字段中,并不费事所以就没必要编写代码了。 界址线赋位置之前,界址线图层界址线类别字段必须上好。界址线位置完全根据界址线图层的界址线类别...
可以向照片墙中添加照片 可以删除照片墙中的照片 可以替换照片墙的照片 页面要具有很好的过渡效果,且满足响应式设计,适应不同尺寸的设备 根据需求,设计界面原型。 上方居中显示标题和作者 主题部分为网格化布局...
界址线类别可以通过ArcMap的空间筛选批量添加在界址线图层的界址线类别字段中, 并不费事所以就没必要编写代码了。 界址线赋位置之前,界址线图层界址线类别字段必须上好。界址线位置完全根据界址 线图层的界址线...
路口信号机添加/删除路口信号机图层运行代码:路口信号机。
添加、删除shp图层。 五、自定义一个简单的Task控件。 a) Common_SimpleTask。 六、实现Select Features功能;实现点的Buffer Select功能 a) Common_SelectBufferToolCSharp,做了3个MapResourceManager来处理 b) ...
图层上可以添加GMapMarker,当然也可以添加GMapPolygon和GMapRoute,后续介绍。 在地图的使用中常要求的功能就是添加自定义图标,可以点击图标、删除图标、拖动图标、高亮图标等。 下面介绍这些功能的实现(主要是...
里面包含了地图浏览,地图查询,图层要素的添加、修改、删除,最短路径分析,各种专题图册制作,自由显示标注,完全中文的符号编辑器,完全中文的Identity功能,地图测量,实现了不同空间插值等一系列功能。...
利用"小鸟飞翔动画.fla"进一步说明各部件的作用,如:添加删除图层、添加引导图 层、添加层文件夹、显示隐藏图层、锁定图层、显示轮廓和修改层名称。 (3)动画(教师用微课为学生展示:逐帧动画,移动渐变动画,...