Lisää

Rasterin ehdollinen uudelleenluokittelu

Rasterin ehdollinen uudelleenluokittelu


Yritän tehdä NLCD-maanrasterin ehdollisen uudelleenluokituksen.

Haluan nimenomaan luokitella uudelleen kaikki kehittyneet alueet (luokitukset 22, 23, 24), jotka ovat tien lähellä (luokitus 21), uusiksi luokiksi: "kehittynyt maa tien lähellä".

Työnkulku tähän asti ArcMapin avulla on ollut:

  1. Pura tieluokka uuteen rasteriin käyttämällä "Ote ominaisuuksien mukaan"
  2. Muunna rasteri pisteeksi käyttämällä "Rasterista pisteeseen"
  3. Puskuroi näiden pisteiden ympärille käyttämällä "Puskuri"
  4. Muunna tuloksena oleva monikulmio takaisin rasteriksi käyttämällä "Monikulmio rasteri." Tällä tiedostolla on vain yksi arvo etäisyydelle tieltä ja NA: n muutoin/
  5. voitto!

Joten vaiheessa 5 minulla on ongelmia. Minun on tehtävä jonkinlainen ehdollinen uudelleenluokitus jokaiselle kolmesta asuntoluokasta. Rasterilaskurissa mielestäni ymmärsin, että sen on oltava muodossa:

Con (IsNull ("buff1_21_Buf60Rast"), "lu_1.asc", Diff ("buff2_21_Buf30Rast", "lu_1.asc"))

Epäilen, että minun on suoritettava se peräkkäin jokaisen kolmen asuntoarvon osalta. Mutta en ole aivan varma, miten tai mitä loogisista matemaattisista operaattoreista käyttää.

Ajatuksia?


Pidä koko toiminta rasterina, sinun ei tarvitse muuntaa vektoriksi/vektorista.

Tämä käyttää ArcGIS 10 -rasterilaskimen syntaksia ja olettaa, että vähimmäisetäisyytesi on 50 "yksikköä" ja ulostulon maankäyttöluokka on "234":

Con (InList ("landuse", [22,23,24]) * EucDistance (Con ("landuse" == 21,1), 50), 1)

Tämä antaa sinulle yhden arvon 1, jossa maankäyttö on 22,23 tai 24 50 yksikön sisällä tiestä (21) ja NoDatasta kaikkialla muualla. Voit sitten yhdistää sen alkuperäiseen maankäyttöön esimerkiksi seuraavilla tavoilla:

Con (IsNull ("lähellä tien rasteria"), "landuse", 234)

Voisit luultavasti yhdistää sen yhdeksi vaiheeksi, mutta en yrittänyt.

Huomaa: ArcGIS <= 9.3x syntaksi on todennäköisesti erilainen. Muistan esimerkiksi, että Workstation GRID ja vanhempi Spatial Analyst -syntaksi ovat "IN {22, 23,24}" "InList (22,23,24)" sijaan

Edit: Ja voit tehdä sen yhdellä osumalla:

Con (IsNull (InList ("landuse", [22,23,24]) * EucDistance (Con ("landuse" == 21,1), 50)), "landuse", 234)

Katso video: Kertolaskusääntö sekä ainakin yksi-laskut