ค้นหา Opfileource Shapefile Writer สำหรับ. NET


11

ฉันกำลังมองหา Open Source Library ที่มีเอกสารที่ดีที่สามารถสร้างและเขียนลงใน shapefile จาก. NET ฉันต้องการการเข้าถึงคานล่างเช่นฉันควรจะสามารถเขียนคุณสมบัติตามคุณสมบัติ

ฉันได้ตรวจสอบแล้วและพบสิ่งต่อไปนี้:

  • SharpMapอ้างว่าเขียนถึงรูปร่างไฟล์ใน v 2.0 แต่รุ่นนั้นยังไม่วางจำหน่าย
  • NTSไม่มีเอกสารอย่างแน่นอน
  • Catfood shapefile readerให้การเข้าถึงแบบอ่านอย่างเดียว

มีไลบรารีที่สามารถใช้เพื่อเขียน shapefile ใหม่ได้หรือไม่?

คำตอบ:


5

ฉันไม่ได้ใช้ด้วยตัวเอง แต่ดูที่เอกสารประกอบของDotSpatialอย่างรวดเร็วดูเหมือนว่าควรจะสามารถทำสิ่งที่คุณต้องการได้

มีแอสเซมบลีแต่ละตัวบนNuGetถ้าคุณรู้ว่าคุณต้องการอันไหน (ซึ่งฉันไม่ได้)

นี่คือตัวอย่างที่อย่างน้อยก็แสดงให้เห็นถึงความเป็นไปได้ มันจะดีถ้ามีตัวอ่าน / ตัวแปลง WKT เพื่อทำตัวอย่างที่อ่านได้มากกว่า แต่ดูเหมือนว่าจะหายไป


9

ฉันรู้สึกถึงความเจ็บปวดของคุณ. ฉันผ่านสิ่งเดียวกันกับ NetTopologySuite (v1.13) และประสบความสำเร็จในการดูการทดสอบหน่วย

ก่อนอื่นคุณอาจตรวจสอบห้องสมุด DotSpatial ซึ่งอ้างอิงในคำถามที่คล้ายกันเฉพาะสำหรับการดำเนินงานของ DS shapefile

ฉันมีความสุขเป็นการส่วนตัวกับห้องสมุด NTS เมื่อคุณเข้าใจรูปแบบวัตถุแล้วมันก็ไม่ยุ่งยากที่จะรวบรวมบางสิ่งเข้าด้วยกัน เนื่องจากหัวข้อนี้มีแนวโน้มที่จะถูกอ้างถึงมากกว่าหนึ่งครั้งนี่คือการถ่ายโอนข้อมูลรหัสด่วนสำหรับการเขียน shapefiles จาก NTS

1) ดาวน์โหลดไบนารี NTS (1.13.0)

2) อ้างอิงชุดประกอบต่อไปนี้:

-GeoAPI, NetTopologySuite, NetTopologySuite.IO, NetTopologySuite.IO.GeoTools (เดาว่าต้องใช้เวลานานแค่ไหนในการหาอันสุดท้ายนี้)

3) เขียนโค้ด (นี่คืองานแฮ็ค 10 นาที)

เพิ่มการใช้คำสั่งสำหรับ NetTopologySuite, NetTopologySuite.IO, NetTopologySuite.Features, GeoAPI, GeoAPI.Geometries (ขออภัยฉันไม่สามารถหาวิธีที่จะจัดรูปแบบเหล่านี้ได้)

        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 wrapper แสดงอยู่บนเว็บเพจ


1

นอกจากนี้คุณยังสามารถพิจารณาMapWinGIS

MapWinGIS.ocx ใช้เพื่อมอบ GIS และฟังก์ชั่นการทำแผนที่ให้กับแอพพลิเคชั่นที่ใช้ Windows Forms MapWinGIS.ocx เป็นฟรีและเปิดแหล่งที่มาทางภูมิศาสตร์ C ++ การเขียนโปรแกรมระบบข้อมูล ActiveX การควบคุมและการประยุกต์ใช้โปรแกรมอินเตอร์เฟซโปรแกรมเมอร์ (API) ที่สามารถเพิ่มลงในแบบฟอร์ม Windows ใน Visual Basic, C #, Delphi หรือภาษาอื่น ๆ ที่สนับสนุน ActiveX ด้วยแผนที่



1

อาจจะยืด แต่ ...

PyShp ช่วยให้คุณควบคุมรูปร่างได้ในระดับฟีเจอร์หรือมากกว่าใน Python บริสุทธิ์: http://code.google.com/p/pyshp/

IronPython ให้คุณเรียกใช้สคริปต์ Pythin ล้วนๆบน. NET CLR: http://ironpython.net/

เปลี่ยนสคริปต์ IronPython เป็นไลบรารี. Net เช่นเธรดนี้: /programming/1578010/ironpython-2-6-py-exe/9609120#9609120


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 แรกของคุณ รหัสด้านล่างนี้สร้างรูปหลายเหลี่ยม shapefile ที่มีหนึ่งช่องถ่านคุณลักษณะ "ชื่อ" และหนึ่งรูปร่าง (สี่เหลี่ยมผืนผ้าที่มีชื่อ "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();
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.