Vytvoření atlasu mapy s titulní stránkou a rejstříkem

2. 1. 2012
  • Desktopový GIS
  • ArcGIS 10.0
  • ArcGIS 10.1
  • ArcGIS 10.2
  • ArcGIS 10.3

Cíl: Vytvoření atlasu s titulní stránkou a rejstříkem ulic. Rejstřík ulic bude odkazovat na číslo stránky a příslušnou část mapového listu (každý mapový list je rozdělen na 4 stejné části).

Základní vstup dat: liniová třída prvků reprezentující síť ulic. Je vhodné, aby každá ulice byla na začátku reprezentována právě jedním liniovým úsekem.

Krok 1: Vytvoření primárního a sekundárního indexu. Primární index si představme jako mřížku, kdy každá mřížka odpovídá jedné stránce mapového atlasu. Pokud pak každou stránku rozdělíme na 4 stejné části, mluvíme o indexu sekundárním. V obou případech se pro vytváření indexu využívá nástroje Klad mapových listů (Grid Index Features).

Při vytváření obou indexů definuje uživatel prostřednictvím nástroje Klad mapových listů velikost mřížky primárního indexu. V našem příkladu byl nastaven rozměr dlaždice na 3000 x 3000 metrů po pěti dlaždicích v každém směru. Při této specifikaci lze však využít i jiné charakteristiky, např. měřítko. Neboť nástroj Klad mapových listů můžeme spouštět voláním v rámci Python skriptu, můžeme rovněž souřadnice počátečního bodu polygonové mřížky získat programově ze vstupních dat:

xMin = str(arcpy.Describe(lyr).extent.XMin)
yMin = str(arcpy.Describe(lyr).extent.YMin)

Po vytvoření obou indexových vrstev provedeme průnik primárního i sekundárního indexu, čímž získáme sloučené atributové informace z obou indexů (s geometrií sekundárního indexu). Tato třída bude základem pro vytváření finální tabulky pro rejstřík ulic.

Krok 2: Průnik vrstvy ulic s vrstvou primárního indexu. Nástroj Průnik (Intersect) se nachází v nástrojové sadě Analýza - Překryvné operace. Tento krok je důležitý proto, aby každá ulice, pokud jde přes hranici mapového listu, byla zastoupena na obou listech.

 Krok 3: Vytvoření samostatné tabulky pro rejstřík ulic. V této fázi budeme nejprve pracovat s popisky jednotlivých ulic, abychom zachytili popisek ke každému prvku. V mapovém dokumentu nastavíme popisky ulic tak, aby existoval popisek ke každému uličnímu segmentu. V tomto případě však popisujeme již ty úseky ulic, které vznikly průnikem vrstvy ulic s primárním indexem (viz krok 2). Získané dynamické popisky převedeme na volné anotace a ty následně na body. Reprezentace popisků ulic ve formě bodů je důležitá z toho hlediska, kdy potřebujeme jednoznačnou informaci, na které dlaždici sekundárního indexu ulici nalezneme. Pro převod anotací na bod můžeme využít i python skriptu, který používá Insert/SearchCursor, například:

newAnnoPtRows = arcpy.InsertCursor("Ulice_annoBody")
for annoRow in arcpy.SearchCursor(annoLyr):
    if annoRow.SymbolID >=0 and annoRow.Status == 0:
       newAnnoPt = arcpy.Point(annoRow.shape.trueCentroid.X, annoRow.shape.trueCentroid.Y)
       newAnnoPtRow = newAnnoPtRows.newRow()
       newAnnoPtRow.shape = newAnnoPt
       newAnnoPtRow.TextString = annoRow.TextString
       newAnnoPtRows.insertRow(newAnnoPtRow)
del newAnnoPtRows

Jakmile vytvoříme bodovou reprezentaci anotací, provedeme průnik těchto bodů s třídou sekundárního indexu, kterou jsme vytvořili na konci kroku 1 (sekundární index s atributovými informacemi z primárního indexu). Výstupem bude bodová třída obohacená o atributové informace polohy v rámci primárního (tj. na které stránce) a sekundárního indexu (tj. ve kterém segmentu stránky). Protože u některých ulic může být anotace na stejné dlaždici sekundárního indexu zastoupena vícekrát, aplikujeme na tento výstup nástroj Souhrnná statistika (Summary Statistics). Výstupem bude konečná tabulka uložená v geodatabázi obsahující v každém řádku kombinaci názvu ulice, číslo stránky primárního indexu, označení sekundárního indexu a počet výskytů.

Atributová tabulka

Krok 4: Vytvoření mapového dokumentu MXD se šablonou titulní strany. Přestože titulní strana nemusí být čerpána nutně z mapového dokumentu, ale může být použit jakýkoli jiný zdroj, má tento přístup své výhody. Těmi jsou zejména dynamické prvky výkresu mapy (např. aktuální datum), či aktuální přehledová mapa.

Krok 5: Vytvoření mapového dokumentu MXD s hlavní mapovou částí. Základem dokumentu budou řízené mapové listy, jejichž řídící vrstvou bude třída primárního indexu. Připomeňme si, že primární index je polygonová třída, která vznikla nástrojem Klad mapových listů (Grid Index Features) z vrstvy ulic. To znamená, že rozsah uliční sítě určuje i rozsah mapového atlasu. Počet prvků primárního indexu je tak roven počtu stránek mapové série. Uživatel pouze pomocí parametrů nástroje Klad mapových listů definoval velikost dlaždice.

Krok 6: Export mapy a sestavení konečného PDF dokumentu. Celý proces lze znovu zpracovat pomocí Python skriptu, jehož principem je vytvoření nejprve dílčích dokumentů PDF a poté jejich spojení do jednoho. V našem příkladě je proveden export titulní stránky, poté jsou ve druhém kroku exportovány řízené mapové listy do vícestránkového dokumentu PDF. Poslední třetí krok - sestavení šablony rejstříku, naplnění této šablony daty a spojení všech PDF dokumentů do jednoho - řídí komponenta ReportLab. Jedná se o doplňkový balíček Python, který je volně ke stažení. Prostřednictvím objektu canvas je sestavena šablonová stránka dokumentu PDF (počet sloupců, kresba linek, formát písma, názvy apod.), která je posléze naplněna daty z tabulky geodatabáze. Po naplnění rejstříku daty a uložení dílčího dokumentu PDF jsou jednotlivé dokumenty spojeny do jednoho celku. Spojení se v rámci skriptu provádí příkazem appendPages a po vytvoření konečného dokumentu jsou dočasné PDF dokumenty smazány.

Uvedený příklad je jen jedním z mnoha možných aplikací Python skriptování ve verzi ArcGIS 10.0. Další ukázky využití skriptů Python je naleznete v odkazu v souvisejících informacích, stejně tak jako odkaz na blog Esri, kde se dočtete zajímavé tipy pro práci se řízenými mapovými listy.

 

 

 

 

Autor: Petr Čejka