NetTopologySuite使用(1)

用DotSpatial.Topology进行的测试,即使有NetTopologySuite类库进行测试:

  1 Polygon inputGeometry = null;
  2         LineString analysisGeoemtry = null;
  3         private void button1_Click(object sender, EventArgs e)
  4         {
  5             var coords = new Coordinate[7];
  6             // Shell Coordinates
  7             var coordscheck = new Coordinate[7];
  8             double[] Xs = new double[] { 30, 260, 130, 350, 250, 330, 320, 180, 250, 50, 70, 60, 30, 260 };
  9             double[] Ys = new double[] { 140, 260, 110, 150, 230, 210, 140, 260 };
 10             for (var i = 0; i < Xs.Length / 2; i++)
 11             {
 12                 var x = Xs[i * 2];
 13                 var y = Xs[i * 2 + 1];
 14                 coords[i] = new Coordinate(x, y);
 15                 coordscheck[i] = new Coordinate(x, y);
 16             }
 17             //coordscheck[19] = new Coordinate(coords[0].X, coords[0].Y);
 18             //coords[19] = new Coordinate(coords[0].X, coords[0].Y);
 19             // Shell Rings
 20             var ring = new LinearRing(coords);
 21             var gf = new GeometryFactory();
 22             var ringCheck = gf.CreateLinearRing(coordscheck);
 23             // Hole Coordinates
 24             var coordsholecheck = new Coordinate[4];
 25             var coordshole = new Coordinate[4];
 26             for (var i = 0; i < Ys.Length / 2; i++)
 27             {
 28                 var x = Ys[i * 2];
 29                 var y = Ys[i * 2 + 1];
 30                 coordshole[i] = new Coordinate(x, y);
 31                 coordsholecheck[i] = new Coordinate(x, y);
 32             }
 33             // Hole LinearRing Arrays
 34             var hole = new LinearRing(coordshole);
 35             var holes = new ILinearRing[1];
 36             var holeCheck = gf.CreateLinearRing(coordsholecheck);
 37             var holescheck = new ILinearRing[1];
 38             holes[0] = hole;
 39             holescheck[0] = holeCheck;
 40             Polygon pg = new Polygon(ring, holes);//
 41             var polygonCheck = gf.CreatePolygon(ringCheck, holescheck);
 42             var areaCheck = polygonCheck.Area;
 43             var area = pg.Area;
 44             //
 45             inputGeometry = pg;
 46
 47             double[] Lines = new double[] { 30, 50, 320, 360 };
 48             var coords1 = new Coordinate[2];
 49             var rnd1 = new Random();
 50             var coordscheck1 = new Coordinate[2];
 51             for (var i = 0; i < Lines.Length / 2; i++)
 52             {
 53                 var x = Lines[i * 2];
 54                 var y = Lines[i * 2 + 1];
 55                 coords1[i] = new Coordinate(x, y);
 56                 coordscheck1[i] = new Coordinate(x, y);
 57             }
 58
 59             var gf1 = new GeometryFactory();
 60             var lscheck = gf1.CreateLineString(coordscheck1);
 61             LineString ls = new LineString(coords1);
 62             analysisGeoemtry = ls;
 63             intersectionOutput = analysisGeoemtry.Intersection(inputGeometry);
 64             this.Invalidate();
 65         }
 66         IGeometry intersectionOutput = null;
 67         private void Form1_Paint(object sender, PaintEventArgs e)
 68         {
 69             Graphics gc = this.CreateGraphics();
 70             if (inputGeometry != null)
 71             {
 72                 GraphicsHelper.DrawPolygon(gc, inputGeometry, new SolidBrush(Color.Red), new Pen(new SolidBrush(Color.LightYellow)), false);
 73             }
 74             if (analysisGeoemtry != null)
 75             {
 76                 GraphicsHelper.DrawLineString(gc, analysisGeoemtry, new Pen(new SolidBrush(Color.Blue)));
 77             }
 78             if (intersectionOutput != null)
 79             {
 80                 if (intersectionOutput is LineString)
 81                 {
 82                     LineString lsr = intersectionOutput as LineString;
 83                     Pen mp = new Pen(new SolidBrush(Color.Yellow));
 84                     mp.Width = 2;
 85                     GraphicsHelper.DrawLineString(gc, lsr, mp);
 86                 }
 87                 if (intersectionOutput is MultiLineString)
 88                 {
 89                     MultiLineString mlsr = intersectionOutput as MultiLineString;
 90                     for (int i = 0; i < mlsr.NumGeometries; i++)
 91                     {
 92                         if (mlsr.Geometries[i] is LineString)
 93                         {
 94                             LineString lsr = mlsr.Geometries[i] as LineString;
 95                             Pen mp = new Pen(new SolidBrush(Color.Yellow));
 96                             mp.Width = 2;
 97                             GraphicsHelper.DrawLineString(gc, lsr, mp);
 98                         }
 99                     }
100                 }
101             }
102             gc.Dispose();
103         }

时间: 2024-08-24 06:13:23

NetTopologySuite使用(1)的相关文章

[NetTopologySuite](2)任意多边形求交

任意多边形求交: private void btnPolygon_Click(object sender, EventArgs e) { double[] Xs = new double[] { 30, 260, 130, 350, 250, 330, 320, 180, 250, 50, 70, 60, 30, 260 }; double[] Ys = new double[] { 140, 260, 110, 150, 230, 210, 140, 260 }; int m = Xs.Len

C#开源项目大全

商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK Excel-读写组件-ExcelLibrary .NET集成开发环境-MonoDevelop 电话软交换机-FreeSWITCH 开源操作系统-Cosmos 坦克机器人战斗仿真引擎-Robocode GIS控件-MapWindow .NET的ORM框架-MyBatis.NET Web开发工具-Webb

C#开源大全项目

商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK Excel-读写组件-ExcelLibrary .NET集成开发环境-MonoDevelop 电话软交换机-FreeSWITCH 开源操作系统-Cosmos 坦克机器人战斗仿真引擎-Robocode GIS控件-MapWindow .NET的ORM框架-MyBatis.NET Web开发工具-Webb

GIS 网站参考

www.TimeGIS.com 开源GIS网址精选 转至3snewsOpen Source Geospatial Foundation http://osgeo.org/index.htmlMapServer — UMN MapServer http://mapserver.gis.umn.edu/GRASS GIS http://grass.itc.it/GeoTools http://docs.codehaus.org/-display/GEOTOOLS/Home/DM Solutions

C#开源大全

商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK Excel-读写组件-ExcelLibrary .NET集成开发环境-MonoDevelop 电话软交换机-FreeSWITCH 开源操作系统-Cosmos 坦克机器人战斗仿真引擎-Robocode GIS控件-MapWindow .NET的ORM框架-MyBatis.NET Web开发工具-Webb

开源GIS软件 1

1. 在线地图浏览器 GMap.NET GMap.NET 是一个强大.免费.跨平台.开源的.NET控件,它在Windows Forms 和WPF环境中能够通过Google, Yahoo!, Bing, OpenStreetMap, ArcGIS, Pergo, SigPac等实现寻找路径.地理编码以及地图展示功能,并支持缓存和运行在Mobile环境中. GMap.NET 是一个开源的GEO地图定位和跟踪程序.就像谷歌地图.雅虎地图一样,可以自动计算两地的距离,定位经纬度,与Google地图不同的

DotNet 资源大全中文版(Awesome最新版)

Awesome系列的.Net资源整理.awesome-dotnet是由quozd发起和维护.内容包括:编译器.压缩.应用框架.应用模板.加密.数据库.反编译.IDE.日志.风格指南等. API 框架 NancyFx:轻量.用于构建 HTTP 基础服务的非正式(low-ceremony)框架,基于.Net 及 Mono 平台. 官网 ASP.NET WebAPI:快捷创建 HTTP 服务的框架,可以广泛用于多种不同的客户端,包括浏览器和移动设备. 官网 ServiceStack:架构缜密.速度飞快

简单的矢量数据模型

在NetTopologySuite(NTS)的使用过程中,类似为什么New Polygon()存在LinearRingA+LinearRingB的重 载的问题一直困扰我,直到对矢量数据模型进行了深入了解. 下面是自己画的简单矢量数据继承关系图: 需要特别注意的是LinearRing,一些文章里说呢仅简单结构的闭合LineString才是LinearRing,如图: 实际在NTS中创建LinearRing时,不存在以上问题,查看了GDAL官网提供的OGRLinearRing类也没有发现问题.不知道

C#开源大全--汇总

商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK Excel-读写组件-ExcelLibrary .NET集成开发环境-MonoDevelop 电话软交换机-FreeSWITCH 开源操作系统-Cosmos 坦克机器人战斗仿真引擎-Robocode GIS控件-MapWindow .NET的ORM框架-MyBatis.NET Web开发工具-Webb