.NET 용 무료 오픈 소스 쉐이프 파일 작성기


11

.NET에서 shapefile을 작성하고 작성할 수있는 잘 문서화 된 공개 소스 라이브러리를 찾고 있습니다. 레버 접근을 낮추어야합니다. 기능별로 기능을 작성할 수 있어야합니다.

나는 조사하고 다음을 발견했다.

  • SharpMap 은 v 2.0에서 shapefile에 쓰라고 주장하지만 해당 버전은 릴리스되지 않았습니다.
  • NTS 에는 문서가 전혀 없습니다.
  • Catfood shapefile 리더 는 읽기 전용 액세스를 제공합니다.

새로운 shapefile을 작성하는 데 사용할 수있는 라이브러리가 있습니까?

답변:


5

나는 그것을 직접 사용하지 않았지만 DotSpatial 의 문서를 빨리 보았습니다 . 원하는 것을 할 수 있어야하는 것처럼 보입니다.

필요한 어셈블리 를 알고 있다면 NuGet 에 개별 어셈블리 가 있습니다.

다음은 가능성을 보여주는 샘플 입니다. 더 읽기 쉬운 샘플을 만들기 위해 WKT 리더 / 컨버터가 있으면 좋을 것입니다.


9

나는 너의 고통을 느낀다. 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);

따라서 잘 문서화되지는 않았지만 일단 가면 상당히 뾰족합니다.


2

shapelib도 있습니다 : http://shapelib.maptools.org/

.NET 랩퍼가 웹 페이지에 나열되어 있습니다.


1

MapWinGIS 도 고려할 수 있습니다 .

MapWinGIS.ocx는 모든 Windows Forms 기반 응용 프로그램에 GIS 및 매핑 기능을 제공하는 데 사용됩니다. MapWinGIS.ocx는 Visual Basic, C #, Delphi 또는 ActiveX를 지원하는 다른 언어로 Windows Form에 추가하여 앱을 제공 할 수있는 무료 및 오픈 소스 C ++ 기반 지리 정보 시스템 프로그래밍 ActiveX 컨트롤 및 API (응용 프로그램 프로그래머 인터페이스)입니다. 지도와 함께.




1

이것은 이미 답변되었지만, 나중에 이것을 보는 사람을위한 제안은 EGIS (Easy GIS) 이기도 합니다.

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

이것은 선택한 shapefile에 하나의 기능을 추가하고 AddRecord 메소드에는 7 개의 과부하가 있습니다.


이 작업을 수행하는 방법을 보여주는 코드 스 니펫을 게시 할 수 있습니까? 현재 상태의 답변은 링크가 끊어 질 경우 자체적으로 견딜 수 없습니다.
Devdatta Tengshe

0

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();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.