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.
Proces přidávání samotného JSON souboru lze rozdělit na dvě větve.
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.
from arcgis.gis import GIS
from arcgis.mapping import WebMap
import json
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)
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.
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.
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.
Stejný proces jako v prvním způsobu.
from arcgis.gis import GIS
from arcgis.mapping import WebMap
import json
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 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": []
}
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.