Viac

Označiť body číslami a pridať textový štítok k legende ako zoznam v programe ArcMap?


Vyvíjam sériu máp v ArcGIS 10 a nemám veľa miesta na označenie funkcií na mape. Preto som si myslel, že každú funkciu v dátovom rámci očíslím a potom štítky exportujem ako zoznam a vložím ich do legendy mapy.

Vytvorí sa teda zoznam nasledujúcim spôsobom a pridá sa do legendy

SO 1 Štítok 2 Štítok 3 Štítok

Môj súčasný pracovný postup, ako to dosiahnuť, je nasledujúci: Ručne pridávam atribút „číslo“ napríklad pre všetky oranžové body SO a potom ich označím číslom. Potom ho exportujem ako tabuľku do Excelu a potom do Illustratoru, aby som vygeneroval pekne vyzerajúcu tabuľku, a skopírujem ho späť do ArcMap ako obrázok.

Existuje v ArcGIS jednoduchší spôsob, ako to urobiť, mám urobiť veľa máp a urobiť to ručne vyžaduje veľa času? Napadá vás lepšie riešenie, ako to urobiť?


V práci sú 2 skripty.

Najprv sa vytvorí príloha - textový súbor - na stránkach poháňaných údajmi polygón uložený v FGDB, názov v TOC = Pages.

Údaje získavané do tabuľky príloh z vrstvy nazývanej „pnts“ musia mať aktívny dotaz na definíciu stránky. Na ovládanie vzhľadu budúcej tabuľky budete potrebovať textový prvok vo vašom rozložení s názvom TABLE. Toto nástroj očakáva od parametrov:

Hodnoty v zozname polí sú názvy polí z „pnts“, ktoré chcete zobraziť:

Áno, musíte zmeniť zoznam, aby vyhovoval vašim potrebám.

Skript iteruje po stránkach a robí:

  • Odstráňte existujúcu prílohu
  • Vytvorte prílohu z hodnôt prevzatých z tabuľky pnts v aktuálnom DDP.

    (Obvykle vytvorím okolo stránok malú vyrovnávaciu pamäť, pretínam ju s pnts. Tým sa vytvoria 2 pnts, kde sa vyrovnávače prekrývajú)

Na text v TABUĽKE používam písmo Calibri Light.

Scenár:

import arcpy, traceback, os, sys, numpy from arcpy import env env.overwriteoutput = True folder = arcpy.GetParameterAsText (0) allNames = arcpy.GetParameterAsText (1) fldNames = allNames.split (';') table = r'in_mem  attach '#Reference MXD a vrstvy skúste: def showPyMessage (): arcpy.AddMessage (str (time.ctime ()) + " -" + správa) def isLayerExist (mxd, lName): vrstvy = arcpy.mapping.ListLayers ( mxd, lName) ak len (vrstvy) == 0: zvýšiť vrstvu NameError, ' n'+lName+"vrstva nebola nájdená. Ukončuje sa ..."+' n' result = vrstvy [0] vrátiť výsledok mxd = arcpy.mapping. MapDocument ("AKTUÁLNE") thePagesLayer = isLayerExist (mxd, "Pages") thePointsLayer = isLayerExist (mxd, "pnts") ddp = mxd.dataDrivenPages fld = ddp.pageNameField.name Page_Names.ToTayda pre brest v arcpy.mapping.ListLayoutElements (mxd): if elm.name == "TABLE": tableTxt = elm x = elm.elementPositionX y = elm.elementPositionY ## VEC ZMENIŤ !!!!! formatS = "{: 5d} {: 8.2f} {: 8.2f} {: 8.2f} {: 8.2f} {: 8.2f} {: 8.2f} {: 8.2f}" pre ID stránky v rozsahu (1, ddp.pageCount+1): arcpy.AddMessage (pageID) ddp.currentPageID = pageID arcpy.RefreshActiveView () fOut = priečinok+os.sep+Názvy stránok [pageID-1] [0]+". txt" arcpy.SelectLayerByAttribute_management (thePoints ) linkValue = Názvy stránok [pageID-1] [0] attachName = Názvy stránok [pageID-1] [0]+". txt" arcpy.CreateTable_management ('in_memory', 'attach') arcpy.AddField_management (tabuľka, "Stránka", "TEXT", "", "", 25) arcpy.AddField_management (tabuľka, "Stránka2", "TEXT", "", "", 250) curT = arcpy.da.InsertCursor (tabuľka, ("Stránka", " Strana2 ")) theRow = (linkValue, fOut) curT.insertRow (theRow) arcpy.RemoveAttachments_management (thePagesLayer, fld, table," Page ") tbl = arcpy.da.TableToNumPyArray (thePointsLayer, fldNames) tbl = ) if len (tbl)> 0: m = 0 for rec in tbl: ## THING TO CHANGE !!!!! bit = formatS.format (rec [0], rec [1], rec [2], rec [4], rec [6], rec [3], rec [5], rec [7]) textB+= bit+'  n 'm+= 1, ak m> 54: break tableTxt.text = textB arcpy.SelectLayerByAttribute_management (thePointsLayer, "CLEAR_SELECTION") tableTxt.elementPositionX = x tableTxt.elementPositionY = y arcpy.RefreshActiveView () fileO = open ') fileO.write (textB) fileO.close () arcpy.AddAttachments_management (thePagesLayer, fld, table, "Page", "Page2") arcpy.Delete_management (fOut) okrem: message = " n *** PYTHON ERRORS* ** "; showPyMessage () message = "Informácie o sledovaní Pythonu:" + traceback.format_tb (sys.exc_info () [2]) [0]; showPyMessage () message = "Informácie o chybe Pythonu:" + str (sys.exc_type) + ":" + str (sys.exc_value) + " n"; showPyMessage ()

Príklad výstupu, ktorý používam na ovládanie toho, ako budú výtlačky vyzerať:

Upozorňujeme, že sivá časť je tu samostatným prvkom. Vo vyššie uvedenom skripte musíte tiež zmeniť riadok formátu textu.

Druhý skript tlačí (export do formátu PDF pomocou názvu DDP), predpokladá názov vrstvy DDP = stránky (ten s prílohou) a v rozložení je textový prvok s názvom TABLE

import arcpy, traceback, os, sys z arcpy import env env.overwriteoutput = True folder = arcpy.GetParameterAsText (0) aTable = arcpy.GetParameterAsText (1) #Reference MXD and Layers try: def showPyMessage (): arcpy.AddM (time.ctime ()) + " -" + správa) def isLayerExist (mxd, lName): vrstvy = arcpy.mapping.ListLayers (mxd, lName) if len (vrstvy) == 0: zvýšiť NameError, ' n' +lName +"vrstva sa nenašla. Ukončuje sa ..." +' n' result = vrstvy [0] návratový výsledok mxd = arcpy.mapping.MapDocument ("CURRENT") thePagesLayer = isLayerExist (mxd, "Pages") ddp = mxd. dataDrivenPages fld = ddp.pageNameField.name diction = {} both = arcpy.da.TableToNumPyArray (thePagesLayer, (fld, "OBJECTID")) for row in both: diction [row [0]] = row [1] Page_Names = [ riadok [0] pre riadok v oboch] vymazať oba #Referenčné prvky rozloženia stránky pre brest v arcpy.mapping.ListLayoutElements (mxd): if elm.name == "TABLE": tableTxt = elm x = elm.elementPositionX y = brest. elementPositionY pre pageID v rozsahu (1, ddp.pageCount+1): ## pre pageID v rozsahu (1,3): ddp.currentPageID = pageID baseName = Page_Names [pageID-1] OID = diction [baseName] query = "REL_OBJECTID = %s" %str (int (OID)) with arcpy.da.SearchCursor (aTable, 'DATA', query) as cursor: pre riadok v kurzore: binaryRep = riadok [0] textB = binaryRep.tobytes () if len (textB)> 0: tableTxt.text = textB else: tableTxt.text = "" tableTxt.elementPositionY = y arcpy.RefreshActiveView () ddp .exportToPDF (priečinok + os.sep + baseName + ".pdf", "CURRENT") arcpy.AddMessage ('Exportované %i %s' %(pageID, baseName)) okrem: message = " n *** PYTHON ERRORS *** "; showPyMessage () message = "Informácie o sledovaní Pythonu:" + traceback.format_tb (sys.exc_info () [2]) [0]; showPyMessage () message = "Informácie o chybe Pythonu:" + str (sys.exc_type) + ":" + str (sys.exc_value) + " n"; showPyMessage ()

Vo vyššie uvedenom príklade sú body označené ID sekcie a tabuľka poskytuje dokonalú referenciu.

Tento pár mi ušetril týždne času…

Používam 2 skripty, pretože formátovanie je náročná časť, takže spustím prvý skript iba s 2 vrstvami - bodmi a stránkami na veľmi jednoduchom mxd. Druhá funguje dobre a spustím ju na mape s niekoľkými vrstvami, zoradenou symbolikou atď

Toto je pravý horný roh jednej z výstupných stránok:


Tu sú kroky na získanie kľúčového čísla vedľa štítka v dynamickej legende.

Na hlavnej mape symbolizujete, ako chcete, potom skopírujte vrstvu a vytvorte si fiktívnu vrstvu pre legendu, kde neexistuje žiadna symbolizácia, ale všetky funkcie sú uvedené podľa názvu alebo ľubovoľného poľa, ktoré chcete. Symbolizovaná vrstva v spodnej a hornej vrstve nemá žiadnu symbolizáciu, ale sú pridané všetky hodnoty názvu.

Dvakrát kliknite na vrstvu legendy, hornú vrstvu bodu záujmu, a ku každej hodnote pridajte popis. Karta Symbolika> Kliknite pravým tlačidlom na hodnotu alebo štítok> Upraviť popis a zadajte číslo. Toto je veľmi manuálna časť, ale ak máte jednu vrstvu pre celú svoju sériu máp, bude to stáť za to. Ak máte pre tento postup veľa vrstiev, možno bude potrebné pozrieť sa na jedno z ďalších uvedených riešení.

Pridajte legendu a zahrňte iba vrstvu legendy. Pravým tlačidlom myši kliknite na položku Legenda> Vlastnosti> karta Položky> kliknite na vrstvu legendy> Štýl a vyberte ten, ktorý je tu zvýraznený.

Potom kliknite na položku Vlastnosti a upravte nastavenie popisu štítka, ako sa vám páči. Ak chcete získať to, čo je uvedené na mojom konečnom obrázku nižšie, použite tieto nastavenia.

Späť na karte Položky pre písmo vyberte položku Použiť na popis triedy, označte ho tučným písmom a zarovnajte doprava.

Aby bola legenda obmedzená na to, čo je na každej mape, začiarknite políčko „Zobraziť iba triedy, ktoré sú viditeľné v aktuálnom rozsahu mapy“.

Dúfam, že to dáva zmysel.


Pozri si video: ArcGIS Tutorial 8: Labels, symbology, Scale Bar u0026 editing Legend (Október 2021).