Selecionando recursos por atributos usando ogr2ogr?

17

Estou escrevendo um shapefile após algum processamento; no entanto, na etapa final, preciso fazer uma seleção por atributos do shapefile.

Estou usando o comando em um shell com o objetivo de usá-lo em um script Python quando ele funciona.

ogr2ogr -f "ESRI Shapefile" -select * where ID="1" outfile.shp infile.shp

Estou recebendo a mensagem de erro:

FAILURE: 
Unable to open datasource `Downloads' with the following drivers.

O que eu poderia estar fazendo de errado?

user2757128
fonte
Essa é realmente a mensagem exata para esse comando?
BradHards

Respostas:

30

Você perdeu um sinal de menos antes wheree o selectnão é necessário; portanto, deve ser:

ogr2ogr -where ID="1" outfile.shp infile.shp

ou se você precisar fazer uma consulta mais complexa nos dados de entrada:

ogr2ogr -sql "SELECT * FROM infile WHERE ID='1'" outfile.shp infile.shp

Se IDfor um campo do tipo Inteiro, substitua ID='1'por ID=1.

Notas:

  1. -f "ESRI Shapefile"não é necessário porque "ESRI Shapefile"é o ogr2ogrformato de saída padrão;
  2. é conveniente pular -selecte usar diretamente a -wherecláusula quando você quiser selecionar todos os campos.
Antonio Falciano
fonte
1
Muito obrigado, funciona. Estou usando: ogr2ogr -where "ID = '1'" output.shp input.shp
user2757128
Como posso usar este código: ogr2ogr -sql "SELECT * FROM infile WHERE ID = '1'" outfile.shp infile.shp "em python?
Shiuli Pervin
1
@ShiuliPervin, você pode usar a instrução em python usando os.system('''ogr2ogr ... ''') . certifique-se import osno topo do seu script python
GeoEye
@afalciano, para a declaração em ogr2ogr -sql "SELECT * FROM infile WHERE ID='1'" outfile.shp infile.shpvez de apenas ID = 1, existe uma maneira de fornecer um vetor ou um conjunto de números, por exemplo ogr2ogr -sql "SELECT * FROM infile WHERE ID IN ['1','5','29']" outfile.shp infile.shp?
Hlm
@afalciano mais uma coisa ... em vez de escrever outro arquivo shp, existe uma maneira de obter apenas as coordenadas dos polígonos de identificação selecionados?
Hlm