Шукаю безкоштовного сценарію Shapefile Opensource для .NET


11

Я шукаю добре задокументовану бібліотеку з відкритим кодом, яка може створювати та записувати у форм-файл із .NET. Мені потрібен доступ до нижнього важеля, тобто я повинен мати можливість записувати функцію за особливістю.

Я дослідив і виявив таке:

  • SharpMap стверджує, що пише у shapefiles у версії 2.0, але ця версія не вийшла.
  • NTS абсолютно не має жодної документації.
  • Зчитувач формфайлу Catfood забезпечує доступ лише для читання.

Чи є бібліотека, яку можна використовувати для написання нового формату файлів?

Відповіді:


5

Я сам не користувався цим, але швидко переглядаючи документацію для DotSpatial , схоже, він повинен вміти робити те, що ви хочете.

У NuGet у нього є індивідуальні збори, якщо ви знаєте, які саме вам потрібні (а я - ні).

Ось зразок, який принаймні демонструє можливість. Було б добре, якби був читач / перетворювач WKT, щоб зробити більш читабельний зразок, але, схоже, цього немає.


9

Я відчуваю твій біль. Я пройшов те ж саме з NetTopologySuite (v1.13) і мав певний успіх, переглядаючи одиничні тести.

По-перше, ви можете перевірити бібліотеку DotSpatial, на яку було посилатися в аналогічному запитанні, характерному для операцій з DS-файлами

Я особисто задоволений бібліотекою НТС. Після того як ви з'ясуєте об'єктну модель, це не надто суєта, щоб щось скласти разом. Оскільки на цю тему, ймовірно, буде посилатися не раз, тут є швидкий дамп код для написання форм-файлів з NTS.

1) Завантажте бінарні файли NTS (1.13.0)

2) Посилайтеся на наступні збори:

-GeoAPI, NetTopologySuite, NetTopologySuite.IO, NetTopologySuite.IO.GeoTools (здогадайтеся, скільки часу знадобилося, щоб з'ясувати, що потрібен останній)

3) Напишіть якийсь код (це 10-хвилинна робота для злому)

додайте, використовуючи оператори для NetTopologySuite, NetTopologySuite.IO, NetTopologySuite.Features, GeoAPI, GeoAPI.Geometries (вибачте, я не можу зрозуміти, як змусити SO відформатувати їх)

        string path = @"C:\data\atreides";
        string firstNameAttribute = "firstname";
        string lastNameAttribute = "lastname";

        //create geometry factory
        IGeometryFactory geomFactory = NtsGeometryServices.Instance.CreateGeometryFactory();

        //create the default table with fields - alternately use DBaseField classes
        AttributesTable t1 = new AttributesTable();
        t1.AddAttribute(firstNameAttribute, "Paul");
        t1.AddAttribute(lastNameAttribute, "Atreides");

        AttributesTable t2 = new AttributesTable();
        t2.AddAttribute(firstNameAttribute, "Duncan");
        t2.AddAttribute(lastNameAttribute, "Idaho");

        //create geometries and features
        IGeometry g1 = geomFactory.CreatePoint(new Coordinate(300000, 5000000));
        IGeometry g2 = geomFactory.CreatePoint(new Coordinate(300200, 5000300));

        Feature feat1 = new Feature(g1, t1);
        Feature feat2 = new Feature(g2, t2);

        //create attribute list
        IList<Feature> features = new List<Feature>() { feat1, feat2 };
        ShapefileDataWriter writer = new ShapefileDataWriter(path) { Header = ShapefileDataWriter.GetHeader(features[0], features.Count) };

        System.Collections.IList featList = (System.Collections.IList)features;
        writer.Write(featList);

Так, не добре задокументовано, але це досить точково і знімати, як тільки ви рухаєтесь.


2

Є також shapelib: http://shapelib.maptools.org/

На веб-сторінці вказано обгортку .NET.


1

Ви також можете розглянути MapWinGIS .

MapWinGIS.ocx використовується для забезпечення ГІС та функціонального відображення будь-якої програми на базі Windows Forms. MapWinGIS.ocx - це БЕЗКОШТОВНА та ВІДКРИТИЙ ДЖЕРЕЛА C ++, заснована на географічній інформаційній системі програмування ActiveX Control та інтерфейс програміста програми (API), які можна додати до Форми Windows у Visual Basic, C #, Delphi або інших мовах, що підтримують ActiveX, надаючи додаток з картою.



1

Можливо, розтяжка, але ...

PyShp дає вам можливість керувати файлами на рівні функцій або більше у чистому Python: http://code.google.com/p/pyshp/

IronPython дозволить вам запустити чисті сценарії Pythin у .NET CLR: http://ironpython.net/

Перетворіть сценарій IronPython у бібліотеку .Net, таку як ця нитка: /programming/1578010/ironpython-2-6-py-exe/9609120#9609120


1

Хоча на це вже відповіли, пропозиція для тих, хто перегляне це пізніше, - це також EGIS (Easy GIS), який дозволяє формувати файли за допомогою функції за допомогою функції.

ShapeFileWriter sfw = ShapeFileWriter.CreateWriter(dir,fileName,shapeType,dataFieldHeadings);
sfw.AddRecord(pointArray, pointCount, fieldData);

Це додає одну особливість до вибору файлу форм, а метод AddRecord має 7 перевантажень.


Чи можете ви опублікувати фрагмент коду, який показує, як це можна зробити? Відповідь у своєму нинішньому стані не може стояти самостійно, якщо посилання перерветься.
Devdatta Tengshe

0

Я можу порекомендувати EasyGIS. Завантажте останню версію з https://www.easygisdotnet.com , включіть EGIS.ShapeFileLibі, за допомогою кількох рядків, створіть свій перший файл форми. Код нижче створює файл форми полігону з одним полем атрибута char "Ім'я" та однією формою (прямокутник із назвою "FirstRecord").

DbfFieldDesc[] lFields = new DbfFieldDesc[1];
DbfFieldDesc fld1 = new DbfFieldDesc();
fld1.FieldName = "Name";
fld1.FieldType = DbfFieldType.Character;
fld1.FieldLength = 16;
lFields[0] = fld1;
ShapeFileWriter sfw = ShapeFileWriter.CreateWriter(sExportDir, "testShapeFile", ShapeType.Polygon, lFields);
PointD[] lPoints = new PointD[4];
lPoints[0] = new PointD(1, 1);
lPoints[1] = new PointD(1, 2);
lPoints[2] = new PointD(2, 2);
lPoints[3] = new PointD(2, 1);
String[] lFieldValues = new String[1];
lFieldValues[0] = "FirstRecord";
sfw.AddRecord(lPoints, 4, lFieldValues);
sfw.Close();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.