Existe um gravador de código-fonte gratuito para Openspeed para .NET?

12

Estou procurando uma biblioteca OpenSource bem documentada que possa criar e gravar em um shapefile a partir do .Net. Preciso de acesso mais baixo à alavanca: ou seja, eu devo escrever recurso por recurso.

Existe uma biblioteca desse tipo?

Eu investiguei e encontrei o seguinte:

Há alguma esperança para mim? Existe uma biblioteca que pode ser usada para escrever um novo shapefile?

Devdatta Tengshe
fonte
1
O NTS possui documentação - está apenas no código (por exemplo, code.google.com/p/nettopologysuite/source/browse/trunk/… ) e em alguns testes. Às vezes, a leitura de documentos JTS ajuda.
21713 BradHards

Respostas:

5

Eu não o usei, mas olhando rapidamente para a documentação do DotSpatial , parece que ele deve poder fazer o que você deseja.

Ele possui assemblies individuais no NuGet, se você sabe quais deles você precisa (o que eu não).

Aqui está uma amostra que pelo menos demonstra a possibilidade. Seria bom se houvesse um leitor / conversor WKT para criar uma amostra mais legível, mas isso parece estar faltando.

blah238
fonte
1
Segui seu conselho e encontrei este documento ( dotspatial.codeplex.com/… ), que mostra o que eu quero fazer.
Devdatta Tengshe
9

Eu sinto sua dor. Passei pelo mesmo tipo de coisa com o NetTopologySuite (v1.13) e tive algum sucesso ao examinar os testes de unidade.

Primeiro, você pode conferir a biblioteca DotSpatial que foi referenciada em uma pergunta semelhante específica das operações do shapefile do DS

Pessoalmente, estou feliz com a biblioteca do NTS. Depois de descobrir o modelo de objeto, não é muito difícil juntar algo. Como esse tópico provavelmente será mencionado mais de uma vez, aqui está um rápido despejo de código para escrever shapefiles do NTS.

1) Faça o download dos binários NTS (1.13.0)

2) Faça referência aos seguintes conjuntos:

-GeoAPI, NetTopologySuite, NetTopologySuite.IO, NetTopologySuite.IO.GeoTools (adivinhe quanto tempo levou para descobrir que este último era necessário)

3) Escreva algum código (este é um trabalho de invasão de 10 minutos)

adicione instruções using para NetTopologySuite, NetTopologySuite.IO, NetTopologySuite.Features, GeoAPI, GeoAPI.Geometries (desculpe, não consigo descobrir como fazer com que o SO os formate)

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

Portanto, não está bem documentado, mas é preciso apontar e disparar quando você começar.

WolfOdrade
fonte
Eu esqueci uma resposta semelhante especificamente ao DotSpatial gis.stackexchange.com/questions/5816/… , mas estou bastante satisfeito com o NTS.
WolfOdrade
Foi você a responder a essa pergunta, o que me levou a isso: dotspatial.codeplex.com/… , que era o que eu estava procurando.
Devdatta Tengshe
2

Parece que gdal possui uma biblioteca de # #: http://trac.osgeo.org/gdal/wiki/GdalOgrInCsharp

CLJ
fonte
Você pode me mostrar alguma documentação, onde é possível escrever um recurso de shapefile por recurso, usando esta ligação C #? Eu tentei, mas não encontrei nada.
Devdatta Tengshe
1
Geralmente, as ligações SWIG não estão bem documentadas, mas há um bom número de exemplos em github.com/OSGeo/gdal/tree/trunk/gdal/swig/csharp/apps , e a maior parte do código deve ser muito semelhante ao C ++ versão.
ACS
2

Há também shapelib: http://shapelib.maptools.org/

Um wrapper .NET está listado na página da web.

Uffe Kousgaard
fonte
1

Você também pode considerar o MapWinGIS .

O MapWinGIS.ocx é usado para fornecer funcionalidade de GIS e mapeamento a qualquer aplicativo baseado em Windows Forms. O MapWinGIS.ocx é um sistema de informações geográficas baseado em C ++, com ABERTURA GRATUITA e ABERTA, que programa controle ActiveX e API (interface do programador de aplicativos) que podem ser adicionados a um formulário do Windows em Visual Basic, C #, Delphi ou outros idiomas compatíveis com o ActiveX, fornecendo ao seu aplicativo com um mapa

Hornbydd
fonte
1
+1. Aqui está um exemplo demonstrando a criação de um shapefile de polígono. Uma coisa a notar é que o MapWinGIS 6 alpha usa DotSpatial em seu núcleo. Se você não precisar do aspecto da interface do usuário, pode ser mais simples e mais leve obter apenas os assemblies relevantes da biblioteca DotSpatial, como na minha resposta.
precisa saber é o seguinte
1

O Feature Data Objects (FDO) faz leitura / gravação em SHP através de seu provedor SHP e possui uma API para C ++ e .net

jumpinjackie
fonte
1

Embora isso já tenha sido respondido, uma sugestão para quem visualiza isso posteriormente é também o EGIS (Easy GIS), que permite que os arquivos de forma sejam escritos recurso por recurso.

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

Isso adiciona um recurso ao shapefile de escolha e o método AddRecord possui 7 sobrecargas.

Alfie Goodacre
fonte
Você poderia postar um snippet de código que mostra como isso pode ser feito? A resposta em seu estado atual não pode permanecer por si só, caso o link fique inoperante.
Devdatta Tengshe