Выбор объектов по атрибутам с помощью ogr2ogr?

17

Я пишу шейп-файл после некоторой обработки; однако, на последнем шаге мне нужно сделать выборку по атрибутам из шейп-файла.

Я использую команду в оболочке с целью использования ее в скрипте Python, когда она работает.

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

Я получаю сообщение об ошибке:

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

Что я могу делать не так?

user2757128
источник
Это действительно точное сообщение для этой команды?
BradHards

Ответы:

30

Вы пропускаете знак минус whereи раньше, и selectэто не обязательно, поэтому должно быть:

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

или если вам нужно сделать более сложный запрос к вашим входным данным:

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

Если IDэто поле типа Integer, заменить ID='1'на ID=1.

Примечания:

  1. -f "ESRI Shapefile"не требуется, потому что "ESRI Shapefile"это ogr2ogrвыходной формат по умолчанию;
  2. Удобно пропустить -selectи использовать предложение непосредственно -where, когда вы хотите выбрать все поля.
Антонио Фальчано
источник
1
Большое спасибо, это работает. Я использую: ogr2ogr -where "ID = '1'" output.shp input.shp
user2757128
Как я могу использовать этот код: ogr2ogr -sql "SELECT * FROM infile WHERE ID = '1'" outfile.shp infile.shp "в python?
Шиули Первин
1
@ShiuliPervin вы можете использовать выражение в Python с помощью os.system('''ogr2ogr ... ''') . обязательно import osв верхней части вашего сценария Python
Geoeye
@afalciano, для утверждения ogr2ogr -sql "SELECT * FROM infile WHERE ID='1'" outfile.shp infile.shp вместо просто ID = 1 есть ли способ предоставить вектор или набор чисел, например ogr2ogr -sql "SELECT * FROM infile WHERE ID IN ['1','5','29']" outfile.shp infile.shp?
СВА
@afalciano еще одна вещь ... вместо записи другого файла shp, есть ли способ просто получить координаты выбранных полигонов ID?
СВА