您的位置:首页 > 其它

点线面缓冲分析(转自esri中国社区)

2011-08-10 10:32 459 查看
点线面缓冲分析

//缓冲分析主要是生产缓冲图形,再用缓冲图形执行空间查询。

//把需要缓冲的对象放在sesssion中,这样可以对同一个缓冲对象执行多个条件的缓冲分析

ESRI.ArcGIS.ADF.Web.Geometry.Geometry geo = (ESRI.ArcGIS.ADF.Web.Geometry.Geometry)(map1.Page.Session["BufferAnalyesGeometry"]);

double dis;

if (!Double.TryParse(eventArg,out dis))

{

dis = 0.0;

}

//获取mxd配置文件中的图层属性信息

ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapFunctionality qfunc =

(ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapFunctionality)map1.GetFunctionality("地图名");

//获取对象缓冲图形

if (qfunc.Resource is ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapResourceLocal)

{

ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapResourceLocal ags_mr = (ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapResourceLocal)qfunc.Resource;

ESRI.ArcGIS.Server.IServerContext sc = ags_mr.ServerContextInfo.ServerContext;

ESRI.ArcGIS.ADF.ArcGISServer.MapDescription mapdescription;

mapdescription = qfunc.MapDescription;

//定义Com对象的点

ESRI.ArcGIS.Geometry.IGeometry igeo=null;

//点缓冲自定义方法,线、面缓冲用AO控件方法

ESRI.ArcGIS.ADF.Web.Geometry.Polygon nplygon;

if (geo is ESRI.ArcGIS.ADF.Web.Geometry.Point)

{

//生成点的缓冲图形

ESRI.ArcGIS.ADF.Web.Geometry.Point cp=(ESRI.ArcGIS.ADF.Web.Geometry.Point)geo;

common.Utils uts = new common.Utils();

ESRI.ArcGIS.ADF.Web.Geometry.PointCollection pc = uts.getMapPointBuffer(cp.X, cp.Y,dis, 1);

ESRI.ArcGIS.ADF.Web.Geometry.Ring r1= new ESRI.ArcGIS.ADF.Web.Geometry.Ring();

r1.Points = pc;

ESRI.ArcGIS.ADF.Web.Geometry.RingCollection rc = new ESRI.ArcGIS.ADF.Web.Geometry.RingCollection();

rc.Add(r1);

nplygon = new ESRI.ArcGIS.ADF.Web.Geometry.Polygon();

nplygon.Rings = rc;

}

else

{

if (geo is ESRI.ArcGIS.ADF.Web.Geometry.Polyline)

{

//线转换

ESRI.ArcGIS.ADF.Web.Geometry.Polyline pl = (ESRI.ArcGIS.ADF.Web.Geometry.Polyline)geo;

ESRI.ArcGIS.Geometry.IPointCollection com_polyline_pointcollection =

(ESRI.ArcGIS.Geometry.IPointCollection)sc.CreateObject("esriGeometry.Polyline");

object Missing = Type.Missing;

foreach (ESRI.ArcGIS.ADF.Web.Geometry.Path new_adf_path in pl.Paths)

{

ESRI.ArcGIS.Geometry.IPointCollection com_pointcollection = (ESRI.ArcGIS.Geometry.IPointCollection)sc.CreateObject("esriGeometry.Path");

foreach (ESRI.ArcGIS.ADF.Web.Geometry.Point new_adf_point in new_adf_path.Points)

{

ESRI.ArcGIS.Geometry.IPoint com_point = (ESRI.ArcGIS.Geometry.IPoint)

ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.Converter.ToIGeometry(new_adf_point, sc);

com_pointcollection.AddPoint(com_point, ref Missing, ref Missing);

}

com_polyline_pointcollection.AddPointCollection(com_pointcollection);

}

ESRI.ArcGIS.Geometry.IPolyline projpoly = (ESRI.ArcGIS.Geometry.IPolyline)com_polyline_pointcollection;

igeo = projpoly;

}

else

{

igeo = (ESRI.ArcGIS.Geometry.IGeometry)ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.Converter.ToIGeometry(geo, sc);

}

//利用AO中缓冲区分析

ESRI.ArcGIS.Geometry.ITopologicalOperator topop = (ESRI.ArcGIS.Geometry.ITopologicalOperator)igeo;

ESRI.ArcGIS.Geometry.IPolygon bufferPolygon;

bufferPolygon = (ESRI.ArcGIS.Geometry.IPolygon)topop.Buffer(dis);

//

// 定义valueobject的点

ESRI.ArcGIS.ADF.ArcGISServer.PolygonN buffer_polyn;

// 进行comobject到valueobject之间的转换

buffer_polyn = (ESRI.ArcGIS.ADF.ArcGISServer.PolygonN)

ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.Converter.ComObjectToValueObject

(bufferPolygon, sc, typeof(ESRI.ArcGIS.ADF.ArcGISServer.PolygonN));

nplygon = (ESRI.ArcGIS.ADF.Web.Geometry.Polygon)ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.Converter.ToAdfPolygon(buffer_polyn);

}

//在Buffer图层中显示结果

ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapFunctionality mapFunct = (ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapFunctionality)map1.GetFunctionality(mapBufferName);

ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapResource gResource = (ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapResource)mapFunct.Resource;

gResource.Graphics.Tables.Clear();

ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer glayer = new ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer();

gResource.Graphics.Tables.Add(glayer);

ESRI.ArcGIS.ADF.Web.Display.Graphics.GraphicElement ge1 = new ESRI.ArcGIS.ADF.Web.Display.Graphics.GraphicElement(nplygon,System.Drawing.Color.SeaGreen);

ge1.Symbol.Transparency = 70.0;

glayer.Add(ge1);

//刷新地图

map1.RefreshResource(gResource.Name);

string[] lids = m_queryString["Layers"].Split(",".ToCharArray());

//执行空间查询

。。。。

。。。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: