Wybieranie funkcji według atrybutów za pomocą ogr2ogr?

17

Piszę plik kształtu po pewnym przetworzeniu; jednak w ostatnim kroku muszę dokonać wyboru według atrybutów z pliku kształtu.

Korzystam z polecenia w powłoce w celu użycia go w skrypcie Python, gdy działa.

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

Otrzymuję komunikat o błędzie:

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

Co mogę zrobić źle?

użytkownik2757128
źródło
Czy to naprawdę dokładna wiadomość dla tego polecenia?
BradHards,

Odpowiedzi:

30

Wcześniej brakuje znaku minus wherei selectnie jest to konieczne, więc powinno być:

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

lub jeśli musisz wykonać bardziej złożone zapytanie dotyczące danych wejściowych:

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

Jeśli IDjest to pole typu Integer, substytut ID='1'z ID=1.

Uwagi:

  1. -f "ESRI Shapefile"nie jest konieczne, ponieważ "ESRI Shapefile"jest to ogr2ogrdomyślny format wyjściowy;
  2. wygodnie jest pominąć -selecti użyć bezpośrednio -whereklauzuli, gdy chcesz zaznaczyć wszystkie pola.
Antonio Falciano
źródło
1
Wielkie dzięki, że to działa. Używam: ogr2ogr -where "ID = '1'" output.shp input.shp
user2757128
Jak mogę użyć tego kodu: ogr2ogr -sql "WYBIERZ * Z infile WHERE ID = '1'" outfile.shp infile.shp "w pythonie?
Shiuli Pervin
1
@ShiuliPervin można użyć instrukcji w python, używając os.system('''ogr2ogr ... ''') . pamiętaj, aby import osu góry skryptu python
geoeye
@afalciano, w przypadku instrukcji ogr2ogr -sql "SELECT * FROM infile WHERE ID='1'" outfile.shp infile.shpzamiast samego ID = 1 istnieje sposób na podanie wektora lub zestawu liczb, np. ogr2ogr -sql "SELECT * FROM infile WHERE ID IN ['1','5','29']" outfile.shp infile.shp?
hlm
@afalciano jeszcze jedna rzecz ... zamiast wypisać inny plik shp, czy istnieje sposób na uzyskanie współrzędnych wybranych wielokątów ID?
hlm