问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何使用nettopologysuite

发布网友 发布时间:2024-01-11 17:10

我来回答

1个回答

热心网友 时间:2024-12-02 07:34

下面是一个简单的例子,演示了如何为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();
}

这样,只要点击地图,就会选择并高亮选中对象。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我女朋友我在同事面前说她是我媳妇她默认,在她组长面前就不承认了什么... 跨省迁户口需要的手续 户口跨省迁移需要哪些手续? cf空白名字怎么打(cf空白名字怎么打2021) 关于旅行的电影 就是一个人旅行放松心灵那种 不要纪录片 模拟人生2高斯的遗产给儿子还是女儿 模拟人生2如何跟高斯结婚啊? 模拟人生2高斯怎么找到贝拉,找到后能怎么办? 我的米2插上充电器后屏幕一直闪,快速的一下显示充电一下没在充电。请 ... ...屏幕乱闪 充不进去电 用手机连接电脑也是一样 手机进入碘伏还能用吗?从充电那地方 每吨黄豆可以榨油二十分之三吨,五分之四吨黄豆可榨油多少吨,要榨油八分... 紫罗兰放卧室对身体有害吗 洗衣机可以洗就是不排水什么原因 卢布10000兑换人民币多少 记得,但是密码忘了,里面还有钱不知道怎么办? gele咋写 意思是搅和? 一个电脑,一个手机可以同时登陆一个吗? 微粒贷借款后,修改手机号的操作流程是什么 ...浸湿的衣服晾干后,常出现白色的斑迹,这是为什么? 晒柿子饼是阴干还是暴晒 光遇献祭多少次才能9翼 光遇献祭出来得多少光之翼才能9翼 攻击性人格有什么缺点? 记得,但是密码忘了,里面还有钱不知道怎么办? 手机掉碘伏里怎么办? 关于写作小说txt全集免费下载 求《高山上的夏尔巴人》高清资源 五吨大豆可榨油两顿。一顿可以可炸多少吨。要榨一吨油大豆多少吨。 5分之3吨黄豆可榨油4分之1吨,每吨黄豆可以榨油多少吨?榨1吨油需要黄豆... 索尼RX100M5A的使用感觉如何? 晒柿子饼是阴干还是暴晒 《攀登珠穆朗玛峰:夏尔巴人的故事》免费在线观看完整版高清,求百度网盘... 佳能G5x和rx100m5a买哪个 柿饼是暴晒还是晾晒 柿饼是暴晒还是晾晒 格力海岸6期是精装吗 记得,但是密码忘了,里面还有钱不知道怎么办? 一个 可以同时登陆手机和电脑吗? 记得,但是密码忘了,里面还有钱不知道怎么办 公务员必须要大学英语四级吗?请问承认不承认托福成绩 记得,但是密码忘了,里面还有钱不知道怎么办 年终一盘点,06年和朋友玩麻将50多次,竟然输掉4000多元,应该怎么办... 二十分之三千克花生仁能榨出五十分之三千克花生油,1千克花生仁能榨出... ...之前的那个手机号还可以重新申一个吗? 《写作之王》最新txt全集下载 请问索尼RX100M5A相机的硬件怎么样?有什么亮点吗? 我似乎已经看懂了“人性” 金山词霸显示:请重新尝试或检查网络连接! ...是35平方厘米,高是6厘米,这个长方体的体积是多少立方厘米? 公务员的考试有没有英语四六级的要求啊?