寻求免费的.NET开源Shapefile编写器


11

我正在寻找一个文档齐全的开源库,该库可以从.NET创建和写入shapefile。我需要较低的操纵杆访问权限,即我应该能够逐个功能地编写功能。

我已经调查并发现以下内容:

是否有一个可用于编写新shapefile的库?

Answers:


5

我还没有亲自使用过它,但很快就查看了DotSpatial的文档,看起来它应该能够满足您的要求。

如果您知道需要哪些组件(我不需要),它将在NuGet上建立单独的程序集。

这是至少证明这种可能性的样本。如果有一个WKT阅读器/转换器来制作更具可读性的示例,那将是很好的选择,但这似乎丢失了。


9

我感到你很痛苦。我使用NetTopologySuite(v1.13)进行了同样的工作,并且在单元测试方面取得了一些成功。

首先,您可能会签出DotSpatial库,该库在特定于DS shapefile操作类似问题中被引用

我个人对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添加using语句(很抱歉,我无法弄清楚如何格式化这些格式)

        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窗体的应用程序提供GIS和映射功能。MapWinGIS.ocx是基于C ++的免费和开放源代码的地理信息系统编程ActiveX控件和应用程序程序员界面(API),可以将它们添加到Windows窗体中,使用Visual Basic,C#,Delphi或其他支持ActiveX的语言来提供您的应用程序与地图。




1

尽管已经回答了这一问题,但以后建议任何人使用的建议还是EGIS(简易GIS),它允许将shapefile逐个特征地写入。

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。下面的代码创建一个Polygon shapefile,其中包含一个属性char字段“ Name”和一个形状(一个名为“ 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();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.