.NET için Ücretsiz Açık Kaynak Shapefile Writer Arama


11

.NET'ten bir şekil dosyası oluşturabilen ve yazabilen iyi belgelenmiş, Açık Kaynak Kütüphanesi arıyorum. Daha düşük kaldıraç erişimine ihtiyacım var.

Aşağıdakileri araştırdım ve buldum:

Yeni bir şekil dosyası yazmak için kullanılabilecek bir kütüphane var mı?

Yanıtlar:


5

Kendim kullanmadım, ancak DotSpatial'ın belgelerine hızlıca baktığımda, istediğinizi yapabilmesi gerekiyor gibi görünüyor.

Hangisine ihtiyacınız olduğunu (hangisi olmadığımı) biliyorsanız NuGet üzerinde bireysel meclisleri var .

İşte en azından olasılığı gösteren bir örnek . Daha okunabilir bir örnek yapmak için bir WKT okuyucu / dönüştürücü varsa iyi olurdu, ancak bu eksik gibi görünüyor.


9

Acını hissediyorum. NetTopologySuite (v1.13) ile aynı şeyleri yaşadım ve birim testlerine bakarken biraz başarılı oldum.

Öncelikle, DS şekil dosyası işlemlerine özgü benzer bir soruda referans gösterilen DotSpatial kütüphanesine göz atabilirsiniz.

NTS kütüphanesinden şahsen mutluyum. Nesne modelini anladıktan sonra, bir şeyleri bir araya getirmek çok fazla yaygara değildir. Bu konuya bir kereden fazla atıfta bulunulacağından, burada NTS'den şekil dosyaları yazmak için hızlı bir kod dökümü.

1) NTS (1.13.0) İkili Dosyalarını İndirin

2) Aşağıdaki montajlara bakın:

-GeoAPI, NetTopologySuite, NetTopologySuite.IO, NetTopologySuite.IO.GeoTools (bu sonuncunun ne kadar sürdüğünü tahmin et)

3) Bazı kodlar yazın (bu 10 dakikalık bir kesmek işi)

NetTopologySuite, NetTopologySuite.IO, NetTopologySuite.Features, GeoAPI, GeoAPI.Geometries için deyimler kullanarak ekleme (üzgünüm bunları biçimlendirmek için SO nasıl elde edileceğini anlayamıyorum)

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

Yani, iyi belgelenmiş değil ama gittikten sonra oldukça nokta ve ateş.


2

Ayrıca shapelib var: http://shapelib.maptools.org/

Web sayfasında bir .NET sarmalayıcısı listelenir.


1

MapWinGIS'i de düşünebilirsiniz .

MapWinGIS.ocx, Windows Forms tabanlı herhangi bir uygulamaya GIS ve eşleme işlevselliği sağlamak için kullanılır. MapWinGIS.ocx ÜCRETSİZ ve AÇIK KAYNAK C ++ tabanlı bir coğrafi bilgi sistemi programlama ActiveX Denetimi ve uygulama programcısı arabirimi (API) olup, Visual Basic, C #, Delphi veya ActiveX'i destekleyen diğer dillerdeki Windows Formuna uygulamanızı sağlar bir harita.




1

Bu daha önce yanıtlanmış olmasına rağmen, bunu daha sonraki bir tarihte görüntüleyen herkes için bir öneri de şekil dosyalarının özelliklerine göre yazılmasına izin veren EGIS (Easy GIS) 'dir.

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

Bu, şekil dosyasına bir özellik ekler ve AddRecord yönteminde 7 aşırı yükleme vardır.


Bunun nasıl yapılabileceğini gösteren bir kod pasajı gönderebilir misiniz? Mevcut durumdaki cevap, bağlantının kopması durumunda kendi başına duramaz.
Devdatta Tengshe

0

EasyGIS'i tavsiye edebilirim. En son sürümü https://www.easygisdotnet.com adresinden indirin , ekleyin EGIS.ShapeFileLibve birkaç şekil içeren ilk şekil dosyanızı oluşturun. Aşağıdaki kod, bir "karakter" öznitelik alanı ve bir şekil ("İlk Kayıt" adında bir dikdörtgen) içeren bir Çokgen şekil dosyası oluşturur.

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();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.