JSON -> Web Map
Kromě klasického grafického prostředí pro vytváření obsahu v aplikacích, jako je ArcGIS Pro nebo MapViewer, může být pro určitý druh práce vhodné vytvořit webovou mapu pomocí skriptování. Hlavní roli při vytváření obsahu touto cestou hraje soubor JSON a funkce gis.content.add v samotném ArcGIS API for Python. Není tedy potřeba použít modul arcpy.
Varianty tvorby webové mapy pomocí souboru JSON
Proces přidávání samotného JSON souboru lze rozdělit na dvě větve.
- Prvním způsobem je použít již existující JSON soubor, který jsme si buď samostatně vytvořili a předem zvlášť upravili, nebo jsme ho získali jiným způsobem – například pomocí prostředí ArcGIS Online Assistant, nebo stažením z již existující mapy, což bude tématem druhého dílu této minisérie.
- Druhým způsobem je určování JSON datové struktury přímo v procesu samotného skriptu. Díky tomu můžeme v rámci skriptu snadněji měnit určité parametry a lépe tak ovlivňovat celkový vzhled výsledné mapy. Pro usnadnění doporučuji při definování vlastního JSON dokumentu využít některý z existujících JSON souborů a na jeho základě upravit nebo přidat požadované vlastnosti. Zde přidávám odkaz na ukázku specifikace mapového JSON souboru.
První způsob
V první ukázce si znázorníme jednoduchý postup, jak například v prostředí ArcGIS Notebooks načíst JSON soubor, na jehož základě se vytvoří samotná webová mapa.
První krok – Import potřebných modulů
from arcgis.gis import GIS
from arcgis.mapping import WebMap
import json

Druhý krok – Přihlášení do prostředí, v rámci kterého chceme obsah spravovat
Pomocí vyplnění údajů Portálu nebo ArcGIS Online se přihlásíme a vytvoříme potřebnou konektivitu pro správu obsahu.
gis = GIS("https://machine.domain.com/portal","adminuser")
print ("Úspěšné přihlášeno do GIS: ", gis)

Třetí krok – Načtení souboru JSON ze souborů v rámci ArcGIS Notebooks
V případě, že jsme soubor již vytvořili, stáhli nebo od někoho získali, z lokálního úložiště ArcGIS Notebooks načteme soubor do proměnné data.
with open('nova_mapa2.json') as json_data:
data = json.load(json_data)

Zde je názorná ukázka lokální správy souborové hierarchie v ArcGIS Notebooks.

Čtvrtý krok – Vytvoření nové mapy
V posledním kroku vyplníme metadatové údaje pro novou mapu a jako parametr text vložíme proměnnou s daty z JSON souboru.
Nová mapa bude přidána pomocí funkce gis.content.add s parametrem vlastností nového prvku.
vlastnosti_noveho_prvku = {"type": "Web Map","title": "Zkouska_JSON_generovani","tags": ["JSON","MAPA","test"],"snippet":"Toto je zkouska", "text":data}
nova_mapa = gis.content.add(item_properties = vlastnosti_noveho_prvku)
nova_mapa

Tímto vznikne nová mapa v našem obsahu a můžeme s ní dále pracovat jako s běžným obsahem.
Druhý způsob
Pomocí prvního způsobu jsme si ukázali, jak využít existující JSON soubor pro vytvoření webové mapy. Nyní tento proces rozšíříme tak, že místo načítání dat z třetího kroku budeme definovat JSON soubor přímo v rámci Python skriptu. Ostatní kroky zůstanou nezměněny.
První krok – Import potřebných modulů
Stejný proces jako v prvním způsobu.
from arcgis.gis import GIS
from arcgis.mapping import WebMap
import json
Druhý krok – Přihlášení do prostředí, v rámci kterého chceme obsah spravovat
Stejný proces jako v prvním způsobu.
gis = GIS("https://machine.domain.com/portal","adminuser")
print ("Úspěšné přihlášeno do GIS: ", gis)
Třetí krok – Definování nového JSON zápisu pro vytvoření webové mapy
Třetí krok je odlišný způsobem naplnění datové proměnné. Soubor JSON lze upravit přímo v rámci skriptu.
Zde bych rád upozornil, že v prostředí ArcGIS Notebooks jsou hodnoty True a False požadovány s velkým počátečním písmem. Při kopírování z jiných souborů doporučujeme pro rychlou úpravu např. hromadné nahrazení v textovém editoru.
data2={
"operationalLayers": [
{
"id": "baeeb5ce480d42f79f3c8b8ef5ffafb0",
"title": "Hranice kraje",
"visibility": True,
"blendMode": "normal",
"opacity": 0.6,
"layerDefinition": {
"minScale": 3000000,
"maxScale": 200,
"geometryType": "esriGeometryPolyline",
"objectIdField": "OBJECTID",
"drawingInfo": {
"renderer": {
"type": "simple",
"symbol": {
"type": "esriSLS",
"style": "esriSLSSolid",
"color": [
115,
178,
255,
255
],
"width": 3
}
},
"scaleSymbols": True
}
},
"url": "https://ags.cuzk.cz/arcgis/rest/services/DATA200/MapServer/1",
"layerType": "ArcGISFeatureLayer",
"popupInfo": {
"title": "{F_CODE}",
"mediaInfos": [],
"popupElements": [
{
"fieldInfos": [
{
"fieldName": "OBJECTID",
"isEditable": False,
"format": {
"places": 0,
"digitSeparator": False
},
"visible": True,
"label": "FID"
}
],
"type": "fields"
}
],
"fieldInfos": [
{
"fieldName": "OBJECTID",
"isEditable": False,
"format": {
"places": 0,
"digitSeparator": False
},
"visible": True,
"label": "FID"
}
],
"expressionInfos": []
},
"disablePopup": False,
"showLegend": True
},
{
"id": "0a58edd50e434c9ab1841674e21f9e31",
"title": "Hranice státního území",
"visibility": True,
"blendMode": "normal",
"opacity": 0.6,
"layerDefinition": {
"minScale": 20000000,
"maxScale": 2000,
"geometryType": "esriGeometryPolyline",
"objectIdField": "OBJECTID",
"drawingInfo": {
"renderer": {
"type": "simple",
"symbol": {
"type": "esriSLS",
"style": "esriSLSSolid",
"color": [
0,
92,
230,
255
],
"width": 3
}
},
"scaleSymbols": True
}
},
"url": "https://ags.cuzk.cz/arcgis/rest/services/DATA200/MapServer/0",
"layerType": "ArcGISFeatureLayer",
"popupInfo": {
"title": "{F_CODE}",
"mediaInfos": [],
"popupElements": [
{
"fieldInfos": [
{
"fieldName": "OBJECTID",
"isEditable": False,
"format": {
"places": 0,
"digitSeparator": False
},
"visible": True,
"label": "FID"
}
],
"type": "fields"
}
],
"fieldInfos": [
{
"fieldName": "OBJECTID",
"isEditable": False,
"format": {
"places": 0,
"digitSeparator": False
},
"visible": True,
"label": "FID"
}
],
"expressionInfos": []
},
"disablePopup": False,
"showLegend": True
}
],
"baseMap": {
"baseMapLayers": [
{
"id": "b6f3ad9fceab4b998b616d94c88a80c9",
"title": "Stínování světa",
"visibility": True,
"blendMode": "normal",
"opacity": 1,
"url": "https://services.arcgisonline.com/arcgis/rest/services/Elevation/World_Hillshade/MapServer",
"layerType": "ArcGISTiledMapServiceLayer"
},
{
"id": "94f9329b4b45460f83776790bbe9a2b7",
"title": "Topografická mapa světa",
"visibility": True,
"blendMode": "normal",
"opacity": 1,
"type": "VectorTileLayer",
"styleUrl": "https://cdn.arcgis.com/sharing/rest/content/items/d719b8cf0243444b96c28d19dc2048c4/resources/styles/root.json",
"layerType": "VectorTileLayer"
}
],
"title": "Stínování světa"
},
"spatialReference": {
"wkid": 102100,
"latestWkid": 3857
},
"initialState": {
"viewpoint": {
"targetGeometry": {
"xmin": 1451595.9589885038,
"ymin": 6385965.810142212,
"xmax": 1745737.0293287265,
"ymax": 6596682.049613636,
"spatialReference": {
"wkid": 102100,
"latestWkid": 3857
}
}
}
},
"version": "2.25",
"authoringApp": "ArcGIS Pro",
"authoringAppVersion": "13.0,2.36056",
"tables": []
}
Čtvrtý krok – Vytvoření nové mapy
Stejný proces jako v prvním způsobu.
vlastnosti_noveho_prvku = {"type": "Web Map","title": "Zkouska_JSON_generovani2","tags": ["JSON","MAPA","test"],"snippet":"Toto je zkouska", "text":data}
nova_mapa = gis.content.add(item_properties = vlastnosti_noveho_prvku)
nova_mapa
Nyní v ArcGIS Online vznikla nová, druhá mapa a můžeme s ní dále pracovat jako s běžným obsahem.
Položka obsahuje všechny parametry a vrstvy, které jsme definovali v rámci našeho JSON souboru.

A takto vypadá naše mapa, která obsahuje hranice krajů a České republiky. Můžete si například ověřit, že modrá a světle modrá barva odpovídají nadefinovanému kódu v rámci souboru JSON.

Vytvoření druhé mapy je závěr tohoto prvního dílu z minisérie práce s JSON soubory. V další části se podíváme na způsob hromadného stahování obsahu pomocí ArcGIS API for Python.
Celý skript z této ukázky je zde k dispozici ke stažení jako zazipovaný Python Notebook.