Introdução ao GDAL
O GDAL (Biblioteca de Abstração de Dados Geoespaciais) é uma biblioteca de conversão de dados espaciais de raster de código aberto sob o contrato de licença X/MIT. Ele usa modelos de dados abstratos para expressar os formatos de arquivo suportados. Ele também possui uma série de ferramentas de linha de comando para conversão e processamento de dados.
Site oficial do GDAL: http://www.gdal.org/, ele pode suportar vários formatos de dados de mapa popular atualmente, incluindo mapas de raster e vetor, para obter detalhes, consulte o site oficial. Esta biblioteca é desenvolvida usando C/C ++. Requer autocompilação quando usado em Java. Não vou falar sobre o processo de compilação específico aqui. Vamos dar uma olhada no conteúdo principal deste artigo.
Exemplo do método java para ler e escrever shapefile usando GDAL
Leia o arquivo shp e converta -o em JSON
importar org.gdal.ogr. // Para apoiar os caminhos chineses, adicione o seguinte código gdal.setConfigoption ("gdal_filename_is_utf8", "sim"); // Para fazer o suporte ao campo da tabela de atributos chinês, adicione a seguinte frase gdal.setConfigoption ("shape_encoding", ""); String strvectorfile = "d: //test//node.shp"; // Abra o arquivo DataSource DS = OGR.OPEN (STRVECTORFILE, 0); if (ds == null) {System.out.println ("Falha no arquivo aberto!"); retornar; } System.out.println ("Abra o arquivo com sucesso!"); Driver dv = og.getdriverbyName ("geojson"); if (dv == null) {System.out.println ("Open Driver falhou!"); retornar; } System.out.println ("Abra o motorista com sucesso!"); dv.copyDataSource (ds, "d: //test//node.json"); System.out.println ("Conversão bem -sucedida!"); }} Escreva um arquivo shp
importar org.gdal.ogr. readshpobj.WriteVectorFile (); } estático void writeVectorFile () {String strvectorFile = "d: //test//test.shp"; OGR.RegisterAll (); gdal.setConfigoption ("gdal_filename_is_utf8", "não"); gdal.setConfigoption ("shape_encoding", "cp936"); String strdrivername = "shapefile shapi"; org.gdal.ogr.driver odriver = og.getdriverbyName (strdrivername); if (odriver == null) {System.out.println (strvectorFile + "Driver não está disponível! /n"); retornar; } DataSource ODS = ODRIVER.CRATEADATATASOURCE (STRVECTORFILE, NULL); if (ODS == null) {System.out.println ("Criar arquivo vetorial [" + strvectorfile + "] falhou! /n"); retornar; } Camada olayer = ods.createlayer ("testpolygon", null, og.wkbpolygon, null); if (Olayer == null) {System.out.println ("Criação da camada falhou! /n"); retornar; } // Crie a tabela de atributos abaixo // Crie um atributo inteiro chamado fieldId ofieldid = new FieldDefn ("FieldID", Og.oftInteger); OLAYER.CREATEFIELD (OFIELDID); // Crie um atributo de caractere chamado featureName, com um comprimento de personagem de 50 fielddefn ofLieldName = new FieldDefn ("FieldName", Og.OftString); OFILEDNAME.SETWIDTH (100); OLAYER.CREATEFIELD (OFILEDNAME); Excelenteefn odefn = OLAYER.GETLAYERDEFN (); // Criar recurso do triângulo deeatureTriangle = novo recurso (ODEFN); OFeatureTriangle.setfield (0, 0); OFeatureTriangle.setfield (1, "Triângulo"); Geometria geomtriangle = geometria.createfromwkt ("polygon ((0 0,20 0,10 15,0 0))"); OFeatureTriangle.setGeometria (Geomtriangle); Olayer.CreateFeature (OFEATURETRIANGLE); // Crie recurso de retângulo OFEATRECTANGLANGE = novo recurso (ODEFN); OFEATRERECTANGLANGEL.SETFIELD (0, 1); OFEATRERECTANGLANG.SETFIELD (1, "retângulo"); Geometria geomrectangle = geometry.createfromwkt ("poligon ((30 0,60 0,60 30,30 30,30 0))"); OFEATRECRECTANGLANG.SETGEOMETRIA (GEOMRECTANGLE); OLAYER.CREATEFETURE (OFEATRECTANGLAN); // Crie recurso do Pentágono de OfAturePENTAGON = novo recurso (ODEFN); OFEATUREPENTAGON.SETFIELD (0, 2); OFEATUREPENTAGON.SETFIELD (1, "Pentágono"); Geometria geompentágono = geometria.createfromwkt ("Polygon ((70 0,85 0,90 15,80 30,65 15,70 0))"); OFATUREPENTAGON.SETGEOMETRIA (GEOMPENTAGON); Olayer.CreateFeature (OFEATUREPENTAGON); ods.synctodisk (); System.out.println (" /n Criação do conjunto de dados está concluída! /N"); }}Get test.dbf, test.shp, test.shx.
test.dbf é o seguinte:
Abra a forma como segue
Resumir
O acima é o conteúdo inteiro deste artigo. Espero que o conteúdo deste artigo seja de ajuda para o seu estudo ou trabalho. Se você tiver alguma dúvida, pode deixar uma mensagem para se comunicar.