أكثر

أي مكتبة .NET لحساب مساحة المضلع؟


هل توجد مكتبة .NET لحساب المنطقة المحاطة بمضلع مكون من الإحداثيات الجغرافية (خطوط الطول والعرض)؟


يحتوي SharpMap على فئة مضلع مع طريقة المنطقة. لكن قبل استدعاء ذلك ، يجب أن تفكر إسقاط إحداثيات المضلع في إسقاط منطقة متساوية لتحقيق نتائج ذات مغزى. يبدو أن SharpMap يستخدم ProjNet ، الذي يحتوي على Albers ، لكنني أرى أيضًا أنه يوجد الآن غلاف c # لـ Proj4.


تقدم NetTopologySuite ما تحتاجه ، وأكثر من ذلك بكثير: http://code.google.com/p/nettopologysuite/


هناك خيار آخر وهو استخدام مكتبة Microsoft.SqlServer.Types. على الرغم من عدم توفيره في .NET ، إلا أنه متاح كحزمة nuget ، أو يمكنك العثور عليه في تثبيت SqlServer (أو Express) (٪ programfiles٪ Microsoft SQL Server 100 SDK Assemblies) مثل Microsoft.SqlServer .Types.dll

من الواضح أنه يعتمد على Microsoft (ومكتبة أنواع SQL التي قد يكون لها مشكلات ترخيص خاصة بها) ، لذلك قد تكون الخيارات الأخرى المتوفرة خيارات أفضل ، ولكن إذا كنت تتكامل بالفعل مع SqlServer 2008 ، فقد تكون هذه طريقة جيدة اذهب.

يعد إجراء حساب للمنطقة أمرًا بسيطًا جدًا (لقد قمت بتضمين اختبار NUnit أدناه لتوضيح ذلك.

باستخدام النظام ؛ باستخدام System.Text ؛ باستخدام Microsoft.SqlServer.Types ؛ باستخدام System.Data.SqlTypes ؛ باستخدام NUnit.Framework ؛ مساحة الاسم YourNamespace {class GeometryTest {[Test] public void CheckAreaTest () {string polygon = "POLYGON ((145 -42، 147 -42، 147 -40، 145 -40، 145 -42))"؛ // wkt string over Tasmania، Australia SqlGeography geom = new SqlGeography ()؛ SqlChars geometryString = new SqlChars (new SqlString (polygon)) ؛ geom = SqlGeography.STPolyFromText (geometryString ، 4326) ؛ Assert.AreEqual (37371149986.1 ، Math.Round (geom.STArea (). Value ، 1)) ؛ }}}

ارتباط بـ System.Data.Entity.dll واستخدم كائن DbGeography مثل:

DbGeography geography = DbGeography.FromText (wktString) ؛ مزدوج؟ myArea = geography.Area ؛


شاهد الفيديو: How to Calculate Polygon Area in ArcMap (شهر اكتوبر 2021).