REST区域关系分析方法

这篇博客介绍了如何利用REST服务进行地理空间分析,包括图元求交、图形简化和关系判断。通过ArcGIS的GeometryService,实现了图层间的Intersect和Relation操作,以确定点在多边形内的关系,并更新图形属性来展示这些关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意,所有层都需要坐标polyline2.SpatialReference   = new SpatialReference(102113);

 

对两个图元求交:

 

 (1)  private void insertGeometryService()

        { 

            MyMap.MinimumResolution = double.Epsilon;

            geometryService = new GeometryService("http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");

            //geometryService.SimplifyCompleted += new EventHandler<GraphicsEventArgs>(geometryService_SimplifyCompleted);

            geometryService.Failed += new EventHandler<TaskFailedEventArgs>(geometryService_Failed);

            query.IntersectLayer("18");//取得截取的面区域,用来做截取

        }

 

(2)    

 

        public void drawInnerYLX()

        {

            try

            {

                if ((query.IntersectGraphicsLayer != null) && (graphicList != null))//graphicList 是很的的线,比如等值线

                {//query.IntersectGraphicsLayer即刚取到的截取的面区域

                    query.IntersectGraphicsLayer.Geometry.SpatialReference     = new SpatialReference(102113);

                    geometryService.IntersectCompleted += new EventHandler<GraphicsEventArgs>(geometryService_IntersectCompleted);

                    geometryService.IntersectAsync(graphicList, query.IntersectGraphicsLayer.Geometry);

                }

            }

            catch (Exception ex) { MessageBox.Show(ex.ToString()); }

        }

 

(3)    void geometryService_IntersectCompleted(object sender, GraphicsEventArgs e)

        {

            GraphicsLayer intersectGraphicsLayer = MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer;

            intersectGraphicsLayer.ClearGraphics();

 

            foreach (Graphic g in e.Results)

            {

 

                g.Symbol = LayoutRoot.Resources["DefaultLineSymbol"] as Symbol;

                intersectGraphicsLayer.Graphics.Add(g);

            }       

 

        }

 

 

求关系类型:

 

 (1)添加需要加入分析的图层。。。

 geometryService =
    new GeometryService("http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");
            geometryService.RelationCompleted += new EventHandler<RelationEventArgs>(geometryService_RelationCompleted);
            geometryService.SimplifyCompleted += new EventHandler<GraphicsEventArgs>(geometryService_SimplifyCompleted);
            geometryService.Failed += new EventHandler<TaskFailedEventArgs>(geometryService_Failed);
            GraphicsLayer graphicsLayer = MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer;            geometryService.SimplifyAsync(graphicsLayer.graphics);

 

(2)增加二级图层:

    void geometryService_SimplifyCompleted(object sender, GraphicsEventArgs e)
        {
            GraphicsLayer pointLayer = MyMap.Layers["MyGraphicsLayer2"] as GraphicsLayer;
            geometryService.RelationAsync(
            pointLayer.Graphics,
            e.Results,
            GeometryRelation.esriGeometryRelationWithin, null);//这里还有个参数是关于图层关系的,这里是求包括在范围内

        }

(3)求得关系:

      
        void geometryService_RelationCompleted(object sender, RelationEventArgs e)
        {
            List<GeometryRelationPair> results = e.Results;
            GraphicsLayer pointLayer = MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer;
            foreach (GeometryRelationPair pair in results)
            {
                if (pointLayer.Graphics[pair.Graphic1Index].Attributes["Relation"] == null)
                {
                    pointLayer.Graphics[pair.Graphic1Index].Attributes["Relation"] =
                    string.Format("Within Polygon {0}", pair.Graphic2Index);
                }
                else
                {
                    pointLayer.Graphics[pair.Graphic1Index].Attributes["Relation"] +=
                    "," + pair.Graphic2Index.ToString();
                }

                //if (polygonLayer.Graphics[pair.Graphic2Index].Attributes["Relation"] == null)
                //{
                //    polygonLayer.Graphics[pair.Graphic2Index].Attributes["Relation"] =
                //    string.Format("Contains Point {0}", pair.Graphic1Index);
                //}
                //else
                //{
                //    polygonLayer.Graphics[pair.Graphic2Index].Attributes["Relation"] +=
                //    "," + pair.Graphic1Index.ToString();
                //}
            }

 

        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值