Poszukuję bezpłatnego programu Shapefile Writer dla platformy .NET


11

Szukam dobrze udokumentowanej biblioteki Open Source, która może tworzyć i zapisywać pliki shapefile z .NET. Potrzebuję dostępu z niższą dźwignią, tzn. Powinienem być w stanie pisać funkcja po funkcji.

Zbadałem i znalazłem:

Czy istnieje biblioteka, której można użyć do napisania nowego pliku kształtu?

Odpowiedzi:


5

Sam go nie używałem, ale szybko przeglądam dokumentację DotSpatial , wygląda na to, że powinna być w stanie zrobić to, co chcesz.

Ma pojedyncze zestawy w NuGet, jeśli wiesz, których potrzebujesz (których ja nie potrzebuję).

Oto próbka, która przynajmniej pokazuje taką możliwość. Byłoby miło, gdyby istniał czytnik / konwerter WKT dla bardziej czytelnej próbki, ale wydaje się, że jej brakuje.


9

Czuję twój ból. Przeszedłem przez to samo z NetTopologySuite (v1.13) i odniosłem pewien sukces, patrząc na testy jednostkowe.

Po pierwsze, możesz sprawdzić bibliotekę DotSpatial, do której odwoływano się w podobnym pytaniu dotyczącym operacji na plikach kształtów DS

Jestem osobiście zadowolony z biblioteki NTS. Kiedy już wymyślisz model obiektowy, nie jest zbyt wielkim kłopotem, aby coś połączyć. Ponieważ do tego tematu prawdopodobnie będzie się odwoływać więcej niż raz, tutaj jest szybki zrzut kodu do pisania plików shapefile z NTS.

1) Pobierz pliki binarne NTS (1.13.0)

2) Odwołaj się do następujących zespołów:

-GeoAPI, NetTopologySuite, NetTopologySuite.IO, NetTopologySuite.IO.GeoTools (zgadnij, ile czasu zajęło ustalenie tego ostatniego)

3) Napisz kod (jest to 10-minutowe zadanie włamania)

dodaj za pomocą instrukcji dla NetTopologySuite, NetTopologySuite.IO, NetTopologySuite.Features, GeoAPI, GeoAPI.Geometries (przepraszam, nie wiem, jak uzyskać SO, aby je sformatować)

        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);

Więc nie jest to dobrze udokumentowane, ale warto zacząć od zrobienia zdjęcia.


2

Istnieje również shapelib: http://shapelib.maptools.org/

Opakowanie .NET jest wymienione na stronie internetowej.


1

Możesz także rozważyć MapWinGIS .

MapWinGIS.ocx służy do zapewnienia funkcji GIS i mapowania do dowolnej aplikacji opartej na Windows Forms. MapWinGIS.ocx to BEZPŁATNY i OPEN SOURCE C ++ programujący system informacji geograficznej ActiveX Control i interfejs programisty aplikacji (API), który można dodać do formularza Windows w Visual Basic, C #, Delphi lub innych językach, które obsługują ActiveX, udostępniając twoją aplikację z mapą.




1

Chociaż na to pytanie już udzielono odpowiedzi, sugestią dla osób przeglądających to w późniejszym terminie jest również EGIS (Easy GIS), który umożliwia zapisywanie plików kształtów według funkcji.

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

Dodaje to jedną funkcję do wybranego pliku kształtu, a metoda AddRecord ma 7 przeciążeń.


Czy możesz opublikować fragment kodu, który pokazuje, jak to zrobić? Odpowiedź w obecnym stanie nie może sama stać na wypadek, gdyby łącze przestało działać.
Devdatta Tengshe,

0

Mogę polecić EasyGIS. Pobierz najnowszą wersję ze strony https://www.easygisdotnet.com , dołącz EGIS.ShapeFileLibi za pomocą kilku wierszy utworzysz swój pierwszy plik kształtów. Poniższy kod tworzy plik kształtu wielokąta z jednym polem atrybutu „Nazwa” i jednym kształtem (prostokąt o nazwie „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();
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.