Mehr

Irgendeine .NET-Bibliothek zum Berechnen der Polygonfläche?


Gibt es eine .NET-Bibliothek zum Berechnen der von einem Polygon umschlossenen Fläche aus Geokoordinaten (Lat Longs)?


SharpMap hat eine Polygonklasse mit einer Area-Methode. Aber bevor Sie das anrufen, sollten Sie überlegen projizieren die Koordinaten des Polygons in eine flächentreue Projektion um, um aussagekräftige Ergebnisse zu erzielen. Es sieht so aus, als ob SharpMap ProjNet verwendet, das Albers hat, aber ich sehe auch, dass es jetzt einen c#-Wrapper für Proj4 gibt.


NetTopologySuite bietet, was Sie brauchen und vieles mehr: http://code.google.com/p/nettopologysuite/


Eine andere Option ist die Verwendung der Microsoft.SqlServer.Types-Bibliothek. Obwohl es nicht in .NET bereitgestellt wird, ist es als Nuget-Paket verfügbar oder Sie finden es in Ihrer SqlServer- (oder Express-) Installation (%programfiles%Microsoft SQL Server100SDKAssemblies) als Microsoft.SqlServer .Types.dll

Offensichtlich basiert es auf Microsoft (und der SQL-Typenbibliothek, die ihre eigenen Lizenzierungsprobleme haben könnte), sodass die anderen bereitgestellten Optionen möglicherweise bessere Optionen sind, aber wenn Sie bereits in SqlServer 2008 integrieren, dann kann dies eine gute Möglichkeit sein, dies zu tun gehen.

Eine Flächenberechnung durchzuführen ist ziemlich einfach (ich habe unten einen NUnit-Test eingefügt, der dies demonstriert.

Verwenden des Systems; Verwenden von System.Text; Verwenden von Microsoft.SqlServer.Types; Verwenden von System.Data.SqlTypes; Verwenden von NUnit.Framework; namespace YourNamespace { class GeometryTest { [Test] public void CheckAreaTest() { string polygon = "POLYGON((145 -42 , 147 -42, 147 -40, 145 -40, 145 -42))"; //wkt-String über Tasmanien, Australien SqlGeography geom = new SqlGeography(); SqlChars GeometrieString = new SqlChars(new SqlString(Polygon)); geom = SqlGeography.STPolyFromText(geometryString, 4326); Assert.AreEqual(37371149986.1, Math.Round(geom.STArea().Value, 1)); } } }

Verknüpfen Sie System.Data.Entity.dll und verwenden Sie das DbGeography-Objekt wie:

DbGeography geography = DbGeography.FromText(wktString); doppelt? myArea = geographie.Area;


Schau das Video: QGIS 08: Fläche berechnen (Oktober 2021).