lt.geologyidea.com
Daugiau

Įrankis funkcijų klasei, įskaitant laukų pavadinimus/tipą, generuoti

Įrankis funkcijų klasei, įskaitant laukų pavadinimus/tipą, generuoti


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.


Bandau sukurti įrankį, kuris sugeneruotų funkcijų klasę, o tada užpildys laukus tinkamu stulpelio pavadinimu ir formatu pagal CSV failą.

Ar kam nors pasisekė tai padaryti anksčiau?

Ieškau modelio ar kodo pavyzdžių, jei kas nors turi kažką panašaus.

Ar kas nors matė internete mokomuosius dokumentus, kuriuose pateikiama tokio tipo užklausa?

Aš naudoju „Arc 10.2“. ESRI: Arcpy


„Labas, ^Nebula93 ^,

Norėdami sukurti įrankį „Sukurti funkcijų klasę“ ir „Pridėti lauką“, turite nustatyti kelis parametrus CSV arba scenarijuje, kad įrankis būtų abstraktus ir apibendrinamas, kaip norite.

Pavyzdžiui, jūsų funkcijų klasei jums reikia kintamojo, kokio tipo geometrija tai yra (Taškas, Poligonas?) ir kokioje koordinačių sistemoje ji yra (WGS84, NAD83 JAV gretimas?).

Jūsų CSV lentelėje kiekvienas stulpelis taip pat turės nurodyti norimų sukurti laukų parametrą, pvz., Lauko pavadinimas, Lauko slapyvardis, Lauko ilgisir kt.

Sukūrus pastolius/konstrukciją, kaip bus nuskaityti parametrai, tikrasis įgyvendinimas nėra per sunkus.

Čia yra scenarijaus, kuris atlieka šį triuką, pavyzdys. Įrankių dėžėje turite sukurti skeleto įrankį, kurio parametrai yra šie:

  1. CSV lentelė (tipas: failas, kryptis: įvestis, filtras: „csv“)
  2. Išvesties funkcijų klasė (tipas: funkcijų klasė, kryptis: išvestis)
  3. Geometrijos tipas (tipas: eilutė, kryptis: įvestis, filtras: reikšmių sąrašas [TAŠKAS, DAUGIATAŠTIS, POLILINAS, POLYGONAS]
  4. Koordinačių sistema (tipas: erdvinė nuoroda)

Tada sukurkite aukščiau aprašytą kodą. Atrodo maždaug taip. Žodynas ** kwarg išpakavimas (ačiū @dmahr) ir komentarai yra nereikalingi, tačiau jis parodo scenarijaus logiką ir tai, kaip kažkas mažiau patyręs „Python“ gali lengvai pakoreguoti parametrą.

__author__ = "John K. Tran" __contact__ = "[email protected]" __credits__ = "http://gis.stackexchange.com/questions/155497/tool-for-generating-feature-class-inciding-field- names-type "importuoti arcpy importuoti csv importuoti os arcpy.SetProgressor (" numatytasis "," Pradedamas scenarijus ... ") csvtable = arcpy.GetParameterAsText (0) # Jūsų CSV šablonas. fc = arcpy.GetParameterAsText (1) # Išvesties funkcijų klasė. geometrytype = arcpy.GetParameterAsText (2) # Išvesties funkcijų klasės geometrijos tipas. spatialref = arcpy.GetParameter (3) # Išvesties funkcijų klasės koordinačių sistema. # Sukurkite funkcijų klasę. arcpy.SetProgressorLabel ("Funkcijų klasės kūrimas") # Prieš iškviesdami funkciją, galite patobulinti šiuos CreateFeatureclass_management parametrus. CreateFeatureClassParameters = {"out_path": os.path.dirname (fc), "out_name": os.path.basename (fc), "geometry_type": geometrytype, "template": Nėra, "has_m": "DISABLED", " has_z ":" DISABLED "," spatial_reference ": spatialref," config_keyword ": Nėra," spatial_grid_1 ": Nėra," spatial_grid_2 ": Nėra," spatial_grid_3 ": None} arcpy.CreateFeatureclass_management (** CreateFeatureClassPair ir išsaugokite tam tikrą antraštės informaciją žodyne. arcpy.SetProgressorLabel ("Skaitoma CSV lentelė") csv.register_dialect ("xls", delimiter = ",", lineterminator = " n") f = open (csvtable, "r") reader = csv.reader (f, " xls ") header = reader.next () headerdict = dict () indeksui, vertė sąraše (header): headerdict [value] = index # Sukurkite lauką kiekvienai CSV eilutei, remdamiesi anksčiau gauta antraštės informacija. eilutei skaitytuve: arcpy.SetProgressorLabel („Pridedamas laukas {0}“. formatas (eilutė [headerdict [„Lauko pavadinimas“]])) # Prieš iškviesdami funkciją, galite patikslinti šiuos AddField_management parametrus. AddFieldParameters = {"in_table": fc, "field_name": eilutė [headerdict ["Field Name"]], "field_type": row [headerdict ["Field Type"]], "field_precision": Nėra, "field_scale": Nėra , "field_length": row [headerdict ["Field length (If Type = TEXT)"]], "field_alias": row [headerdict ["Field Alias"]], "field_is_nullable": "NULLABLE", "field_is_required": " NEREIKALINGI "," field_domain ": Nėra} arcpy.AddField_management (** AddFieldParameters) # Užbaikite scenarijų. f. close () arcpy.ResetProgressor ()

Galiausiai, kadangi įrankis nuskaito CSV, kad perduotų įvestis „AddField_management“, CSV galėtų atrodyti maždaug taip:

Lauko pavadinimas, lauko tipas, lauko ilgis (jei tipas = TEKSTAS), lauko slapyvardis The, TEXT, 50, John Great, FLOAT ,, Paul Seafarer, SHORT ,, Jones

FYI, ESRI įrankio informacijos puslapiai yra būtini. Praneškite man, jei jums reikia pagalbos.