皮皮网

皮皮网

【德品成品 源码】【越狱双号源码】【天之盾源码】nettopologysuite源码

时间:2024-11-26 22:21:53 分类:焦点

1.如何使用nettopologysuite

nettopologysuite源码

如何使用nettopologysuite

       ä¸‹é¢æ˜¯ä¸€ä¸ªç®€å•çš„例子,演示了如何为Shape文件进行缓冲区分析:

       public void InitializeMap(SharpMap.Map map)

       {

        //创建Shape文件的数据源

        SharpMap.Data.Providers.ShapeFile shp = new SharpMap.Data.Providers.ShapeFile("rivers.shp",源码德品成品 源码 true);

        //创建NTS数据源,从Shape文件获取数据,然后调用NtsOperation方法

        SharpMap.Data.Providers.NtsProvider nts = new SharpMap.Data.Providers.NtsProvider(shp,new SharpMap.Data.Providers.NtsProvider.GeometryOperationDelegate(NtsOperation));

        //创建渲染图层

        SharpMap.Layers.VectorLayer layRivers = new SharpMap.Layers.VectorLayer("Rivers");

        layRivers.DataSource = nts;

        layRivers.Style.Fill = Brushes.Blue;

        map.Layers.Add(layRivers);

       }

       //定义一个缓冲区分析的委托

       public static void NtsOperation(List<GisSharpBlog.NetTopologySuite.Features.Feature> geoms)

       {

        foreach (GisSharpBlog.NetTopologySuite.Features.Feature f in geoms)

        f.Geometry = f.Geometry.Buffer(0.5);

       }

       ä»Žä¸Šé¢çš„例子,我们可以看到,通过.net的委托,使用NTS Data Provider,可以在SharpMap中使用NTS的空间分析方法。

       SharpMap的作者Morten Nielsen在Blog上也给出了如何在SharpMap中使用NTS的例子:

       1. 对几何对象进行空间分析,本示例是缓冲区分析;

       é¦–先创建一个NTS的数据源,代表要进行空间分析的数据,其中myShapeFileDatasource代表一个Shape文件的数据源(参加上面的示例):

       NtsProvider ntsDataSource = new NtsProvider(myShapeFileDatasource, CreateBuffers);

       åˆ›å»ºç¼“冲区:

       private void CreateBuffers(List<GisSharpBlog.NetTopologySuite.Features.Feature> features)

       {

        foreach (GisSharpBlog.NetTopologySuite.Features.Feature feature in features)

        feature.Geometry = feature.Geometry.Buffer(0.5);

       }

       2. 使用NTS做精确的交集判断,本示例通过点击,高亮选择对象,返回相应的属性。

       å¯ä»¥ä½¿'ntsDataSource'对象指向一个矢量图层对象(vectorlayer),点击并高亮选择对象。可以通过ImageButton (ASP.NET)或者PictureBox (Windows.Forms)的点击事件(Click-Event)来触发的:

       protected void imgMap_Click(object sender, ImageClickEventArgs e)

       {

        //转换图形坐标到地图坐标

        Point ClickPnt = myMap.ImageToWorld(new System.Drawing.Point(e.X, e.Y));

        SharpMap.Data.FeatureDataSet ds = new SharpMap.Data.FeatureDataSet();

        //在第一层进行查询,注意使用了NTS的ExecuteIntersectionQuery方法

        (myMap.Layers[0] as SharpMap.Layers.VectorLayer).DataSource.ExecuteIntersectionQuery(ClickPnt, ds);

        if (ds.Tables.Count > 0) //得到了结果

        {

        //增加点击选择的对象到selection图层

        //这样就新增了一个图层,因此渲染该副地图则显示选中对象

        SharpMap.Layers.VectorLayer laySelected = new SharpMap.Layers.VectorLayer("Selection");

        laySelected.DataSource = new GeometryProvider(ds.Tables[0]);

        laySelected.Style.Fill = new System.Drawing.SolidBrush(System.Drawing.Color.Yellow);

        myMap.Layers.Add(laySelected);

        }

        //渲染地图

        GenerateMap();

       }

       è¿™æ ·ï¼Œåªè¦ç‚¹å‡»åœ°å›¾ï¼Œå°±ä¼šé€‰æ‹©å¹¶é«˜äº®é€‰ä¸­å¯¹è±¡ã€‚