Có một Trình soạn thảo Shapefile miễn phí cho .NET không?


12

Tôi đang tìm kiếm một Thư viện OpenSource có tài liệu tốt có thể tạo và ghi vào một shapefile từ .Net. Tôi cần truy cập đòn bẩy thấp hơn: tức là tôi sẽ có thể viết tính năng theo tính năng.

Có một thư viện như vậy tồn tại?

Tôi đã điều tra và tìm thấy như sau:

  • SharpMap tuyên bố sẽ ghi vào shapefiles trong phiên bản 2.0, nhưng phiên bản đó chưa được phát hành.
  • NTS hoàn toàn không có tài liệu.
  • Trình đọc shapefile Catfood cung cấp quyền truy cập chỉ đọc.

Có bất kỳ hy vọng cho tôi? Có một thư viện có thể được sử dụng để viết một shapefile mới?


1
NTS có tài liệu - nó chỉ nằm trong mã (ví dụ code.google.com/p/nettopologysuite/source/browse/trunk/ tựa ) và một vài thử nghiệm. Đôi khi đọc tài liệu JTS giúp.
BradHards

Câu trả lời:


5

Tôi đã không sử dụng nó cho mình nhưng nhanh chóng xem tài liệu về DotSpatial , có vẻ như nó sẽ có thể làm những gì bạn muốn.

Nó có các hội đồng riêng lẻ trên NuGet nếu bạn biết bạn cần cái nào (tôi không biết).

Dưới đây là một mẫu mà ít nhất là chứng minh khả năng. Sẽ thật tuyệt nếu có một trình đọc / chuyển đổi WKT để tạo ra một mẫu dễ đọc hơn, nhưng điều đó dường như bị thiếu.


1
Tôi đã làm theo lời khuyên của bạn và tìm thấy tài liệu này ( dotspatial.codeplex.com/ ,), cho thấy những gì tôi muốn làm.
Devdatta Tengshe

9

Tôi cảm nhận được nỗi đau của bạn. Tôi đã trải qua điều tương tự với NetTopologySuite (v1.13) và đã có một số thành công khi xem xét các bài kiểm tra đơn vị.

Trước hết, bạn có thể kiểm tra thư viện DotSpatial được tham chiếu trong câu hỏi tương tự cụ thể cho các hoạt động shapefile DS

Cá nhân tôi hài lòng với thư viện NTS. Một khi bạn tìm ra mô hình đối tượng, sẽ không quá phiền phức để đặt một cái gì đó lại với nhau. Vì chủ đề này có thể sẽ được tham khảo nhiều hơn một lần ở đây là kết xuất mã nhanh để viết shapefiles từ NTS.

1) Tải xuống các nhị phân NTS (1.13.0)

2) Tham khảo các hội đồng sau đây:

-GeoAPI, NetTopologySuite, NetTopologySuite.IO, NetTopologySuite.IO.GeoTools (đoán xem phải mất bao lâu để tìm ra cái cuối cùng này là bắt buộc)

3) Viết một số mã (đây là một công việc hack 10 phút)

thêm sử dụng các câu lệnh cho NetTopologySuite, NetTopologySuite.IO, NetTopologySuite.Features, GeoAPI, GeoAPI.Geometries (xin lỗi tôi không thể tìm ra cách để SO định dạng chúng)

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

Vì vậy, không được ghi chép tốt nhưng nó khá quan trọng & bắn một khi bạn đi.


Tôi đã quên một phản hồi tương tự cụ thể với DotSpatial gis.stackexchange.com/questions/5816/ , nhưng tôi rất hài lòng với NTS.
WolfOdrade

Chính câu trả lời của bạn cho câu hỏi đó đã dẫn tôi đến vấn đề này: dotspatial.codeplex.com/ , đó là những gì tôi đang tìm kiếm.
Devdatta Tengshe

2

Trông gdal có thư viện ac #: http://trac.osgeo.org/gdal/wiki/GdalOgrInCsharp


Bạn có thể chỉ cho tôi một số tài liệu, nơi bạn có thể viết một tính năng shapefile theo tính năng, bằng cách sử dụng ràng buộc C # này không? Tôi đã thử, nhưng không tìm thấy gì.
Devdatta Tengshe

1
Nói chung, các ràng buộc SWIG không được ghi chép tốt, nhưng có một số ví dụ tốt trong github.com/OSGeo/gdal/tree/trunk/gdal/swig/csharp/apps và hầu hết các mã phải rất giống với C ++ phiên bản.
scw


1

Bạn cũng có thể xem xét MapWinGIS .

MapWinGIS.ocx được sử dụng để cung cấp chức năng GIS và ánh xạ cho bất kỳ ứng dụng dựa trên Windows Forms nào. MapWinGIS.ocx là một giao diện lập trình hệ thống thông tin địa lý (API) miễn phí và MỞ SOURCE C ++ có thể được thêm vào Biểu mẫu Windows trong Visual Basic, C #, Delphi hoặc các ngôn ngữ khác hỗ trợ ActiveX, cung cấp ứng dụng của bạn với một bản đồ.


1
+1. Dưới đây là một mẫu chứng minh việc tạo một shapefile đa giác. Một điều cần lưu ý là MapWinGIS 6 alpha sử dụng DotSpatial làm cốt lõi. Nếu bạn không cần khía cạnh UI, có thể đơn giản và trọng lượng nhẹ hơn để chỉ nhận các tập hợp có liên quan từ thư viện DotSpatial, như trong câu trả lời của tôi.
blah238



1

Mặc dù điều này đã được trả lời, một gợi ý cho bất kỳ ai xem điều này vào một ngày sau đó cũng là EGIS (Easy GIS) cho phép các shapefile được viết theo tính năng.

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

Điều này thêm một tính năng vào shapefile của sự lựa chọn và phương thức AddRecord có 7 lần quá tải.


Bạn có thể đăng một đoạn mã cho biết làm thế nào điều này có thể được thực hiện? Câu trả lời ở trạng thái hiện tại không thể tự đứng vững, trong trường hợp liên kết bị chết.
Devdatta Tengshe
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.