Daugiau

Skaitykite sluoksnio failo turinį naudodami „ArcPy“?

Skaitykite sluoksnio failo turinį naudodami „ArcPy“?


Turiu rastrų rinkinį (visus atskirose geoduomenų bazėse), kuriuos bandau įdėti į MOSAIC naudodamasis python scenarijumi. Turiu daugybę jų, todėl galvojau, kad paprasčiausias būdas tai padaryti būtų sukurti .lyr failą, kuriame būtų visi rastrai, kuriuos noriu pridėti, tada scenarijaus skaitymas per tą sluoksnio failą ir rastrų pridėjimas naudojant „AddRastersToMosaicDataset_management“. Problema ta, kad man nepavyko perskaityti sluoksnio failo turinio. Panašu, kad ši eilutė sulaužo mano kodą:layerfile = arcpy.mapping.MapDocument (r "S: path_to_layer.lyr"). Bandau sugauti klaidos pranešimąišskyrus: spausdinti arcpy.GetMessages ()bet niekas nespausdina.

Galvojau išbandyti kitą metodą ir vietoj sluoksnio failo naudoti „mxd“. Sukūriau „mxd“ tik su rastrais, kuriuos norėjau pridėti, bet negalėjau perskaityti rastro kelio (vis dėlto „Shefefiles“ pavyko). Čia yra mano kodas:

importuoti arcpy mxd = arcpy.mapping.MapDocument (r "S:  path_to_mxd.mxd") dataframes = arcpy.mapping.ListDataFrames (mxd) duomenų rėmui duomenų rėmuose: lyr aplanke arcpy.mapping.ListLayers (mxd, "", duomenų rėmelis ): desc = arcpy.Describe (lyr) spausdinti desc.catalogPath #print (arcpy.Describe (lyr) .catalogPath)

Tai atspaus kelią į formos failą, bet duos„IOError“: „Raster_Name“ neegzistuojakai sluoksnis yra rastras.

Šiuo metu mano vienintelis darbo sprendimas yra rankiniu būdu sugeneruoti tekstinį failą su keliu į kiekvieną rastrą ir perskaityti tą eilutę po eilutės. Nenoriu, kad turėčiau sugeneruoti teksto failą kiekvienam MOSAIC, kurį man reikia sukurti. Jaučiu, kad turiu 4 galimus kelius, kuriais galėčiau eiti, ir užstrigau kiekviename. Ar kas nors gali man padėti?

  • perskaitykite .lyr failą arba mxd ir ištraukite rastrinių duomenų rinkinių kelius; arba
  • konvertuoti .lyr arba mxd į tekstinį failą, kuriame išvardyti esančių duomenų rinkinių keliai?

Jūsų kodas bando gauticatalogPathgrupės sluoksnio, kuriame yra jūsų rastrai, ypatybė, kurios nėra. Vietoj to norėčiau gautiduomenų šaltinisypatybė, patikrinus, ar ji tikrai taikoma supalaiko ()metodas (grupės sluoksniai nepalaiko šios savybės).

Jūsų kodas atrodys taip:

importuoti arcpy mxd = arcpy.mapping.MapDocument (r "S:  path_to_mxd.mxd") dataframes = arcpy.mapping.ListDataFrames (mxd) duomenų rėmui duomenų rėmuose: lyr aplanke arcpy.mapping.ListLayers (mxd, "", duomenų rėmelis ): jei lyr.supports (dataSource): atspausdinkite lyr.dataSource

Norėdami gauti daugiau informacijos, žr. „Sluoksnio ypatybės ir metodai“ pagalbos puslapį.

Jei norite laikytis @ Hélène pasiūlymo ir visus rastrus įrašyti į gdb, naudokite funkciją arcpy.ListRasters (). Jei visi jūsų rastrai yra toje pačioje darbo srityje, tai iš tiesų būtų paprasčiau nei įdėti viską į „mxd“, kad gautumėte savo sąrašą.


Tiesą sakant, iš tikrųjų galite naudoti šaltinio duomenų bazes kaip įvesties kelią į „AddRastersToMosaicDataset“ įrankį - tai labai supaprastina dalykus, nes, pavyzdžiui, „reikia“ pereiti per aplanką (-us), kuriame yra duomenų bazės, darant prielaidą, kad įkeliate failų geoduomenų bazės rastrus tik:

import os, arcpy, sys path_geodata = r "Kelias į tėvų aplanką, kuriame yra jūsų duomenų bazės" path_mosaic = r "PATH TO YOUR MOSAIC" keliui, pogrupiams, failams, esantiems os.walk (path_geodata): spausdinkite kelią, jei path.lower (). endswith (". gdb") == True: raster_type = "Rastro duomenų rinkinys" pabandykite: arcpy.AddRastersToMosaicDataset_management (path_mosaic, raster_type, path, "UPDATE_CELL_SIZES", "UPDATE_BOUNDARY", "UPDATE_OVERVIEWS" 1500 "," # "," # "," SUBFOLDERS "," EXCLUDE_DUPLICATES "," BUILD_PYRAMIDS "," CALCULATE_STATISTICS "," BUILD_THUMBNAILS "," # "," NO_FORCE_SPATIAL_REFER_info "," trac = = trac ", išskyrus tipą. () spausdinti „klaidos reikšmę“, str (reikšmė) pranešimui diapazone (0, arcpy.GetMessageCount ()): jei arcpy.GetSeverity (msg) == 2: spausdinti pranešimą