답변:
나는 너의 고통을 느낀다. NetTopologySuite (v1.13)와 동일한 종류의 작업을 수행했으며 단위 테스트를 살펴 보았습니다.
먼저 DS shapefile 작업과 관련된 유사한 질문 에서 참조 된 DotSpatial 라이브러리를 확인하십시오.
NTS 라이브러리에 개인적으로 만족합니다. 일단 객체 모델을 알아 낸 후에는 무언가를 모으는 것이 그리 쉬운 일이 아닙니다. 이 주제는 NTS에서 shapefile을 작성하기위한 빠른 코드 덤프입니다.
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);
따라서 잘 문서화되지는 않았지만 일단 가면 상당히 뾰족합니다.
shapelib도 있습니다 : http://shapelib.maptools.org/
.NET 랩퍼가 웹 페이지에 나열되어 있습니다.
FDO (Feature Data Objects) 는 SHP 공급자를 통해 SHP 읽기 / 쓰기를 수행하며 C ++ 및 .net 용 API를 가지고 있습니다.
아마 스트레칭이지만 ...
PyShp는 순수 Python에서 http://code.google.com/p/pyshp/ 에서 기능 수준 shapefile 제어 이상을 제공합니다 .
IronPython .NET CLR에서 순수 Pythin 스크립트를 실행할 수 있습니다 : http://ironpython.net/
IronPython 스크립트를 다음 스레드와 같은 .Net 라이브러리로 전환하십시오. /programming/1578010/ironpython-2-6-py-exe/9609120#9609120
이것은 이미 답변되었지만, 나중에 이것을 보는 사람을위한 제안은 EGIS (Easy GIS) 이기도 합니다.
ShapeFileWriter sfw = ShapeFileWriter.CreateWriter(dir,fileName,shapeType,dataFieldHeadings);
sfw.AddRecord(pointArray, pointCount, fieldData);
이것은 선택한 shapefile에 하나의 기능을 추가하고 AddRecord 메소드에는 7 개의 과부하가 있습니다.
EasyGIS를 추천 할 수 있습니다. https://www.easygisdotnet.com 에서 최신 버전을 다운로드하고 EGIS.ShapeFileLib
첫 번째 shapefile을 만드는 몇 줄을 포함하십시오 . 아래 코드는 하나의 속성 char 필드 "Name"과 하나의 모양 (이름이 "FirstRecord"인 사각형)으로 다각형 shapefile을 만듭니다.
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();