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.
Mogę polecić EasyGIS. Pobierz najnowszą wersję ze strony https://www.easygisdotnet.com , dołącz
EGIS.ShapeFileLib
i 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”).źródło