Nettopologysuite polygon. Computes the centroid of a Geometry of any dimension.

Builder. Curve. Points. Por exemplo, com o SQL Server, você o chamaria assim. 如果要看源码,考虑到网速问题,可以去Gitee上(已从 Aug 19, 2019 · Ok I added some more tweaks and it works great now. Transforms a polygon with holes into a single self-touching (invalid) ring by joining holes to the exterior shell or to another hole. Dec 6, 2021 · Hi I have been trying to serialize a polygon to a variable using GeoJSON4STJ for Nettopologysuite. NTS 支持各种空间数据类型,如 点 It seems to be working on some of the polygons and on some it is not working at all, it gives an "found non-noded intersection". g. These are the top rated real world C# (CSharp) examples of NetTopologySuite. Object. MultiPolygon extracted from open source projects. Instances of this class are thread-safe and immutable. ) Adds a IGeometry to the linework to be polygonized. RegisterProvider(CodePagesEncodingProvider. To retrieve an encoding that is present in the . getExteriorRing(). I then tried to run the code using three line strings below which are noded at endpoints. It is often used to represent the bounding box of a Geometry , e. Computes the centroid of a Geometry of any dimension. For geometries with a high degree of overlap, this has the effect of reducing the number of vertices early Apr 13, 2021 · You need to calculate great circle distance. Operation. Valid. 0); NetTopologySuite. Polygonize. Nov 29, 2021 · I have to draw a circle with N meters diameter around some geolocation. 0); Coordinate c23 = new Coordinate(2894. with overlapping elements). Distance method returns the cartesian distance. Either orientation of the ring is allowed. WKTReader reader = new WKTReader(); // NetTopologySuite passes back a GeoApi IGeometry. NTS 是基于 Java 的 JTS(Java Topology Suite)开发的,提供了类似的功能和接口,适用于. 15. IsValid. Net Framework4. bufferZonePoints. Hull. NET 平台。. The Npgsql EF Core provider has a plugin which allows you to map the NTS types to PostGIS columns, allowing seamless reading and writing. UseSqlServer(. You can check if a geometry is valid using geometry. minimumX is the minimum of the X of all the points in all the polygons, and respectively minimumY, maximumX, maximumY. Polygon' is not supported for parameters having NpgsqlDbType 'Geometry'. Note that the EF Core NetTopologySuite plugin depends on the Npgsql ADO. . 536553, 49. PI / 180; } public static double GreatCircleDistance(double lon1, double lat1, double lon2, double lat2) { double R = 6371e3; // m double sLat1 = Math. In the case of storing a Polygon type in the Geometry? property, the exception is. The . · 我不应该用JWT的!. A ring must have either 0 or 3 or more points. C# using NetTopologySuite; // const int SRID = 432 Description I have some simple polygons stored in a MS SQL (geography column) that the database says are valid. does not have an NaN X- or Y-ordinate. Polygon3D. Factory. IO. 0 in meters squared. Converters. CreatePolygon(coordinatesArray) //this returns an IPolygon that you can cast to Polygon. NetTopologySuite Point. A Point is topologically valid if and only if: The coordinate which defines it if any) is a valid coordinate (i. Class Convex Hull. Sep 29, 2015 · 4. NET platform. 0, 1288. Geometries Assembly: NetTopologySuite. May 14, 2023 · I am trying to calculate the area of a polygon using the NetTopologySuite version 2. If the result is empty, it is an atomic geometry with the dimension of the lowest input dimension. Namespace: NetTopologySuite. Also tried with WKT Reader and combination of intersection and difference like this (I'm wondering if this is even right approach): var reader = new WKTReader(); NetTopologySuite. I am then trying to insert them into the database as Geometry types using Entity Framework Core. As the resulting shell develops, a hole might be added to what was originally another hole. If they are geographic (lat/lon) you have to apply some reprojection first (e. Orientation is a fundamental property of planar geometries (and more generally geometry on two-dimensional manifolds). Then you would transpose to the NetTopologySuite's Point object closer to the code that actually uses the Point. That first part is simple. I ended up using the ProjNet library to build my transformation and then NetTopologySuite has a utility that handles polygons. The computed hull "fills the gap" between the polygons, and does not intersect their interior. Provides an efficient method of unioning a collection of IPolygonal geometries. The WKTReader allows extracting Geometry objects from either input streams or internal strings. Line Dissolver. Inheritance. CreateGeometryFactory(4326); Geography polygon rings. Oct 21, 2020 · I have some high-res polygons, without enclaves or exclaves that I want to simplify or smooth without loosing any part of the original. GeoJson: Aug 11, 2021 · Create a LineString and a Polygon and apply the . Polygons wholly outside this extent must be disjoint to the computed union. e Lon Lat. Class Overlap. The exception ("shell is empty but holes are not") is thrown. Aug 16, 2023 · 那些惊艳的 GIS 轮子 CoordinateSharp与NetTopologySuite介绍. If the input is a polygonal geometry (IPolygon or IMultiPolygon): Mar 26, 2024 · point. The centroid of an empty geometry is null. When using the geography column type, SQL Server imposes additional requirements on the exterior ring (or shell) and interior rings (or holes). For offsetting the polygon, I use NetTopologySuite, and the Offset method of my Z_Polygon has the following implementation; public List<Z_Polygon> Offset(double distance) {. When I paste it in to QGIS using the QuickWKT plugin and run the QGIS geoalgorithms->Vector geometry tools->Check Validity it says you have a duplicate point at 120. EF Core permite la asignación a tipos de datos espaciales en la base de datos mediante tipos NTS en el modelo. Intersection method, the result will be a MultiLineString with each LineString self-intersection creating more parts. Try the following: public static double Radians(double x) { return x * Math. Computes the convex hull of a Geometry . Joiner. PointGeometryUnion Class Planar. The Polygonizer reports the follow kinds of errors: The Polygonizer (Boolean) constructor allows extracting only polygons which form a valid polygonal result. Buffer(0). The plane best fitting the polygon coordinates is computed and is represented by a Plane3D. My goal is to figure out what Coordinate or Point is within said polygon. Models a polygon lying in a plane in 3-dimensional Cartesian space. You will have to explode it afterwards to get simple LineStrings. Buffer(cirRadiusInMiles/69. Just iterate the multipolygon's points and apply a buffer to each point using the buffer method: var bufferZonePoints = new List<IGeometry>(); foreach(var point in multiPolygon. Add(point. You switched accounts on another tab or window. 0, 1277. Geometries. Since true buffer curves may contain circular arcs, computed buffer polygons are only approximations to the true geometry. This class does not support MultiPolygons which are non-valid (e. Net API that implements a core set of spatial data operations using an explicit precision model and robust geometric algorithms. I'm looking for an answer to the simplest case, is polygon A entirely contained within Polygon B. Sin(Radians(lat1)); double sLat2 = Math. This seems a bit complicated for me. Longitude,coordinate. e. The exterior ring must be oriented counterclockwise and the interior rings clockwise. NET) but creating a simple circle which is going to be my search area. Coordinate>(); Nov 8, 2019 · Polygons can be converted into LineString simply by obtaining his boundary: IGeometry pol = ; IGeometry lineString = pol. SmallHoleRemoverクラスのClean ()メソッドを呼び出します。. if your polygon sits in the eastern hemisphere then it should be +180, else if polygon is on the western hemisphere then it should be -180. Shape. In some geometric situations this definition is ill-defined. 1 it occured to me that the . A raw offset curve line is not noded - it may contain self-intersections (and usually will). Computes various kinds of common geometric shapes. 4. 【推荐】100%开源!. NET 空间几何操作库,它提供了丰富的空间数据结构和算法,用于处理和分析地理和几何数据。. Instance); The answer works fine with points. I am trying to convert lines to polygons using NetTopologySuite(a C# port of Java Topology Suite JTS). CreateGeometryFactory(srid: 4326); var searchAreCoordinate = new NetTopologySuite. CascadedPolygonUnion Class Reference. Polygons with holes and MultiPolygons are supported. Coordinate lowerLeft = new Coordinate(box. If the omission were defined as a hole (interior ring), the polygon were valid: NetTopologySuite. [Serializable] public class GeometryCollection : Geometry, IComparable, IComparable<Geometry>, IEnumerable<Geometry>, IEnumerable For a Polygon the offset curve is the boundary of the polygon buffer (which may be a MultiLineString). Net), compute the buffer, and reproject back to your geographic coordinate system. Coordinate[] coords = new Coordinate[Vertices. The offset curve is computed as a single contiguous section of the geometry buffer boundary. NetTopologySuite (NTS) validates this before sending values to the database. CreatePolygon(). West, box. 7. Point Class Reference. This is the model NTS follows when you call Geometry. g. Dissolves the linear components from a collection of Geometry s. CreatePoint(circleCenter ). JTS: generate a polygon geometry from line geomtry. However, NetTopology cannot load them. So, I drilled down more and found that it is not the difference function but it was the polygon which was screwing everything up. To correct these errors you can usually get away with doing a 0 offset buffer: geometry = geometry. Dec 26, 2019 · testFacility. Thanks for your A typically usage would be a transformation that may transform Polygons into Polygons, LineStrings or Points, depending on the geometry of the input (For instance, a simplification operation). but there is also a trick here, at the registration A LinearRing is a LineString which is both closed and simple. var gf_4326 = NetTopologySuite. Count]; Mar 6, 2019 · As DavidG mentions correctly, NetTopologySuite assumes cartesian coordinates. Feature f = new Feature(geom); edited Aug 14, 2018 at 21:55. The negative or zero-distance buffer of lines and points is always an empty Polygon . In other words, the first and last coordinate in the ring must be equal, and the ring must not self-intersect. But if you do this with polygons with holes it will return points out of order. At some point, we need both the 'union' AND 'intersection' of two geometries (functionally we want the union of the two geometries and determine the duplicate parts of that union). NegativeInfinity . Reload to refresh your session. There is no attempt to optimize the quality of the join lines. Storing Namespace NetTopologySuite. Unions MultiPolygons efficiently by using full topological union only for polygons which may overlap, and combining with the remaining polygons. Simplifies a point and ensures that the result is a valid point having the same dimension and number of components as the input, and with the components having the same topological relationship. I ran the sample console code succesfully and it generated two polylines. PointPolygon using . Perf doesn't matter since this is done during build. NET GIS solution that is fast and reliable for the . May 9, 2020 · Given that your polygon's (named poly) coordinates in meters as well you simply call var bufferedPoly = poly. Equals (Object) Object. into a set of maximal-length Line String s in which every unique segment appears once only. NTS is intended to be used in the development of applications that support the validation, cleaning Feb 19, 2020 · That brings me to the conclusion of the article. 0. Intersects(polygon) The code to create the point is: var center = new TopologyPoint(longitude, latitude) {. Coordinate(-1. 3. How do I obtain the shape at a specific coordinate using NTS. Put the following line somewhere in your code: Encoding. 右击项目的引用,打开NuGet程序包管理器,搜索 NetTopologySuite ,安装 NetTopologySuite 1. NetTopologySuite. Json. Apr 9, 2022 · 【NetTopologySuite类库】常用功能整理(1) eggcode: 是的不支持 【NetTopologySuite类库】常用功能整理(1) qq_57097591: 这个库好像不支持圆弧和曲线啊 【NetTopologySuite类库】NTS与JTS一些问题整理. 78528040323044 C# (CSharp) NetTopologySuite. Encoding. The user can control the accuracy of the approximation by specifying the number Class Orientation. Computes whether a rectangle intersects line segments. var intersect = spatialData. The number of vertices in the computed hull is determined by a target parameter. You can rate examples to help us improve the quality of examples. 0版和 NetTopologySuite. Intersection(spatialData. The geometries are indexed using a spatial index, and unioned recursively in index order. Using NettopologySuite I could do polygon. CreateGeometryFactory(4326); // WGS84 var circleCenter = new NetTopologySuite. My lines are clearly intersecting, and clearly form polygons but I get no results, and all of the lines are in the "dangles" section. The intersection of two geometries of different dimension produces a result geometry of dimension less than or equal to the minimum dimension of the input geometries. Para habilitar la asignación a tipos espaciales a través de NTS, llame al método UseNetTopologySuite en el generador de opciones DbContext del proveedor. The output linestrings run between node vertices of the input, which are vertices which have either degree 1, or degree 3 or greater. }; I think the code to create the rectangle is: // Define the four corners of the rectangle. Thank you very much. void NetTopologySuite. NetTopologySuiteのソースコード内に含まれているHoleRemoverとSmallHoleRemoverクラスを利用します。. Dim poly As geomFactory. Dim geomFactory As New GeometryFactory. Point(1. Determining triangle orientation is notoriously subject to numerical precision errors in the Dec 20, 2023 · However, when my test attempts to create a new record, I get an exception when saving changes to the db. NetTopologySuite is a direct-port of all the functionalities offered by JTS Topology Suite: NTS expose JTS in a '. Dec 20, 2019 · NetTopologySuite polygon is not valid. The text was updated successfully, but these errors were encountered: All reactions Class WKTReader. Dec 7, 2020 · as a simple polygon is a sequence of points, the bounding box of the polygon is a rectangle (itself a polygon) comprised between the [minimumX, minimumY] at southwest, and [maximumX, maximumY] at northeast. System Configuration. Mar 23, 2021 · I have a simple model that contains a NetTopologySuite Polygon: public class MyModel { [Newtonsoft. This allows it to function as a parser to read Geometry objects from text blocks embedded in other data formats (e. For collections the centroid is computed for the collection of non-empty elements of highest dimension. The polygon representation is supplied by a Polygon , containing coordinates with XYZ ordinates. TopologyPreservingSimplifier Class Reference. If they do, polygon A may be entirely contained in polygon B or polygon B may be entirely contained in polygon A. answered Nov 21, 2018 at 16:41. This class supports both Polygon s and Multi Polygon s. 2 控制台应用为例,对NTS的一些功能使用进行介绍。. net - 使用 Aug 11, 2021 · Create a LineString and a Polygon and apply the . Latitude); var circle = geometryFactory. Class Geometric. createPolygon(p. For example, with SQL Server you'd call it like this. This really depends on your application though. Then, when i have 2 points, it is easy to calculate real distance in meters, for example using Spherical Law of Cosinus. EF Core enables mapping to spatial data types in the database by using NTS types in your model. 392883 16. Geometries MultiPolygon - 11 examples found. Apr 6, 2021 · We're using the library NetTopologySuite to work with geometries/(multi)polygons (in C#). GeoJsonConverterFactory to JSON converters when we add controllers. in our code, we only need to work with NetTopologySuite. Tell us about the environment where you are experiencing the bug: NetTopologySuite version: 2. The Main Function: Coordinate c22 = new Coordinate(2889. 3190967394026893, 51. Jan 1, 2023 · Also, I know that each time if the current line is cutting and making two pieces of the current polygon, the current polygon should be removed from the final result. that was the problem. SRID = 4326. You have to perform a coordinate transformation prior to calling the distance method, e. You can create a Polygon with an array of coordinates using GeometryFactory like this: Dim coordinatesArray as Coordinate[] = YourMethodToGetCoordinates. South); Apr 18, 2017 · 2. The Well-known Text format is defined in the OpenGIS Simple A list of Geometry s with linework to be polygonized. Instance. Uses the Graham Scan algorithm. 使用方法は以下の通りです。. May 16, 2023 · NetTopologySuite (简称NTS)是一个开源的. Buffer(x) and then DouglasPeuckerSimplifier with DistanceTolerance=x. 关于. There is a lot under the umbrella of netTopology suite and it can be daunting to get started. the minimum and maximum x and y values of the Coordinate s. 您可以使用 GeometryFactory 创建一个带有坐标数组的多边形,如下所示: Dim coordinatesArray as Coordinate[] = YourMethodToGetCoordinates. Your coordinates are geographic (lat/lon). The set of extracted polygons is guaranteed to be edge-disjoint. After fiddling around for a bit I figured out that the ray casting method as used here is significantly (10 to 15 times) faster, for determining whether a point is in a The buffer operation always returns a polygonal result. NET Framework on the Windows desktop but not in . Dec 17, 2018 · Is there an efficient way to find points of type NetTopologySuite. The concave hull is constructed by removing the Class Overlap Union. Mar 24, 2023 · I used class DistanceOP to calculate the closest point in polygon to my point. Contains() method on a Polygon is too slow for my use case. Class Convex. Class Random. PositiveInfinity and Double. To get a useful area you need to transform it into a planar coordinate system and then the value of the polygon. RobustDeterminant. NET训练一个属于自己的图像分类模型,对图像进行分类就这么 Jan 7, 2013 · Hi Scott, your current polygon is described using a geographic coordinate system i. Thus the result you are getting is useless and cannot be translated into meter or miles. Buffer(1000); for an enlargement of a km. NET NetTopology plugin, which provides NetTopologySuite support at git clone of NetTopologySuite, because they don't release often and they host on SVN - synhershko/nettopologysuite Jul 23, 2019 · All said and done, you may want to reconsider using the NetTopologySuite's Point object directly within your User object, and instead use your own Location object. Aug 10, 2020 · double cirRadiusInMiles; var geometryFactory = NtsGeometryServices. (. You signed out in another tab or window. You have to make sure that once you unshift the coordinates then use the appropriate dateline values. The main issue was the coordinates along the dateline. NET way', as example using Properties, Indexers etc An excerpt from JTS website explains the capabilities of NTS too: "The JTS Topology Suite Buffer (Double, Int32) Computes a buffer region around this Geometry having the given width and with a specified accuracy of approximation for circular arcs. · 线程池遇到父子任务,有大坑,要注意!. options. IGeometry geom = reader. 1. This class would likely need to override the TransformMultiPolygon(MultiPolygon, Geometry) method to ensure that if input Polygons change type the result Tried with Intersection. Polygonizer. 2. I could able to generate coordinates for vertically oriented ellipse only. This is useful for situations where it is known that the input lines form a valid polygonal geometry (which may include Class Offset. NET Core, you need to do the following: Add to your project reference to to the System. Curves in the buffer polygon are approximated with line segments. 5好像不支持2. When Envelope objects are created or initialized, the supplied extent values NetTopologySuite. The goal of this “short” intro was to provide a starting point for using netTopology suite in your application. Area property will depend on the unit of the chosen coordinate system. 14. Merge feature data rows of a shapefile. The convex hull is the smallest convex Geometry that contains all the points in the input Geometry. 0. GeoJSON4STJ. 748851810406954); // Not sure if long-lat or lat-long. Sin(Radians Nov 15, 2021 · Stack Overflow for Teams Where developers & technologists share private knowledge with coworkers; Advertising & Talent Reach devs & technologists worldwide about your product, service or employer brand May 9, 2021 · In fact, we don't need to serialize any things manually when are using NetTopologySuite. net core 2. Nov 22, 2017 · Given two independent polygons, A and B, they may overlap, or they may not. The first and last points must be equal (in 2D). JsonConverter(typeof(MyPolygonConverter))] public NetTopologySuite. 5. Hopefully, this blog helped do exactly that so thanks for reading! 最佳答案. Add. RectangleLineIntersector. Class Prepared Polygon. May be called multiple times. Polygon poly { get; set; } } And I've build a custom converter, using NetTopologySuite. How to determine if one polygon is contained in another? 2. This is a shared interface that can be used by both libraries. Implements an algorithm to compute the sign of a 2x2 determinant for double precision values robustly. Equals (Object, Object) Object. getCoordinateSequence()); There is a little more work with MultiPolygons as you have to handle each subpolygon in turn. To enable mapping to spatial types via NTS, call the UseNetTopologySuite method on the provider's DbContext options builder. Provides an efficient method of unioning a collection of IPolygonal geometrys. Para habilitar o mapeamento para tipos espaciais por meio do NTS, chame o método UseNetTopologySuite no construtor de opções DbContext do provedor. Polygon. Kinda like an onion if the core of an onion had random shapes in it. POLYGON ((1001 2, 981. IsValidOp class. The holes are added from the lowest upwards. It may also occur in real world data which contains many disjoint polygons (e. Mar 23, 2022 · For MultiPolygons, I am then converting the array of Polygons to MultiPolygons using the geoFactory. If you need to cache the result, then feel free to do so as appropriate for your own use case. XML). Buffer(x)); Jun 12, 2015 · NetTopologySuite polygon is not valid. Sep 22, 2022 · Then I have a Z_Polygon class which has a constructor that takes a list of points as argument. Polygons which may overlap are those which intersect the common extent of the inputs. Two parameters are supported: Vertex Number fractionthe fraction of the input vertices retained in the result. Text. Jul 28, 2022 · ドーナツポリゴンの穴埋め. 17); // To me, this is 1000 meters because NetTopologySuite (NTS) is a spatial library for . For geometries with a high degree of overlap, this has the effect of reducing the number of vertices early in the process, which increases speed and robustness. TripLine); And also with difference but without an luck. Point that are inside given polygon of type NetTopologySuite. The result has the same geometric type and structure as the input. C#. NetTopologySuite (NTS) es una biblioteca espacial para . A prepared version for IPolygonal geometries. IO 1. using ProjNet: A concave hull is a possibly non-convex polygon containing all the input polygons. Simplify. eggcode: Nuget上能看到支持的版本,4. Coordinate(coordinate. The buffer of a Geometry is the Minkowski sum of the Geometry with a disc of radius distance. When being used for Point-In-Polygon determination, this case allows short-circuiting the evaluation. using Proj. Converts a Well-Known Text string to a Geometry. 0 Oct 4, 2023 · O EF Core permite mapeamento para tipos de dados espaciais no banco de dados usando tipos de NTS em seu modelo. For a collection the output is a MultiLineString containing the element offset curves. Coordinates) {. Computes the raw offset curve for a single Geometry component (ring, line or point). Allows various ways of specifying the location and extent of the shapes, as well as number of line segments used to form them. Class Prepared. So far deserialization works fine, but I am unable to serialize it. This situation is likely to occur during cascaded polygon union, since the partitioning of polygons is done heuristically and thus may group disjoint polygons which can lie far apart. 5+nts1 Apr 14, 2018 · Most of the errors you are getting are due to invalid geometries. dll The Polygons for this MultiPolygon, or null or an empty array to create the empty point. 0 Jun 10, 2020 · Basically, you need to create a new Polygon from the ExteriorRing of the input Polygon. Class Centroid. gf. IsValid, or by using the NetTopologySuite. Creates random point sets contained in a region defined by either a rectangular or a polygonal extent. InvalidCastException : Writing values of 'NetTopologySuite. Features. polygons representing parcels on different street blocks). Jul 2, 2020 · The recommended way to get an empty Polygon is to use GeometryFactory. Location = new NetTopologySuite. Mar 19, 2021 · 本文以VS2019创建的. 大型工业跨平台软件C++源码提供,建模,组态!. (0 0,10 0) (10 0,10 10) (10 10,0 0) Class Random Points Builder. IGeometry. List<NetTopologySuite. · 使用ML. I wish NetTopologySuite would have told me that instead of only have a boolean. NtsGeometryServices. 1版本。. 0及以上版本。可以net4. 引数にドーナツポリゴンの図形と、削除する穴の . Any dimension of Geometry may be added; the constituent linework will be extracted and used. Union. 2. Represents a single point. – Bogdan Dec 29, 2022 · I have written below based on examples I have seen using this package. Then when you turn those points back into a polygon it will complain about LineStrings not closing. FieldPolygon. Note that Envelopes support infinite or half-infinite regions, by using the values of Double. Functions to compute the orientation of basic geometric structures including point triplets (triangles) and rings. CodePages. This is the recommended way to interact with spatial types in Npgsql. System. 465441 and looking there indicates that you do. Boundary; Notice that if you have a polygon with holes, the boundary will return a MultiLineString for each part of the polygon. May 24, 2020 · I'm trying to learn how to use NetTopologySuite (for . Boundary. A . NET. 3D polygons are assumed to lie in a single plane. A given set of polygons has a sequence of hulls of increasing concaveness, determined by a numeric target parameter. Here is the polygon which was giving exception "found non-noded intersection": Polygon. Dec 15, 2021 · public IActionResult Structures() { var geometryFactory = NtsGeometryServices. Using NTS 1. Value 1 produces the original Nov 30, 2016 · Is there a method to merge many polygons by use NetTopologySuite?Thanks. Read(WKT); // Create a Feature (a DotSpatial object) using the GeoApi IGeometry from NetTopologySuite. You signed in with another tab or window. Union. Coordinate> coords = new List<NetTopologySuite. CreateMultiPolygon(GetPolygonArray(geoItems)) function. dll. g The final buffer polygon is computed by forming a topological graph of all the noded raw curves and tracing outside contours. Contains the Geometry class hierarchy. FeatureCollection and add NetTopologySuite. 823796) { SRID = 4326 }; To convert in the other direction and use 3857 from stored 4326 values, it's pretty easy to figure out or see Ogglas's answer Sep 18, 2018 · According to the OGC SFS geometry model the polygon is not valid because its shell (exterior ring) is a self intersecting LinearRing. Net Topology Suite (NTS) is a . The result geometry may be a heterogenous IGeometryCollection. ps qq hq vw xk ov sw wv ls dq