Update amcr_tools.py

Logic is restructured: event → doc unit → pian.
Logic for filtering negative DJs still needs to be reimplemented.
This commit is contained in:
David Spáčil
2026-02-17 08:33:56 +01:00
parent e61759064e
commit a314dd3758
+46 -30
View File
@@ -54,7 +54,6 @@ def load_amcr_data(canvas, bb, filters=None):
base_params = { base_params = {
"mapa": "true", "mapa": "true",
#"isExport": "true",
"entity": "akce", "entity": "akce",
"sort": "ident_cely asc" "sort": "ident_cely asc"
} }
@@ -134,26 +133,26 @@ def load_amcr_data(canvas, bb, filters=None):
piani = akce.get('az_dj_pian', []) piani = akce.get('az_dj_pian', [])
if not piani: continue if not piani: continue
negative_pians = set() # negative_pians = set()
# Pokud je aktivní filtr 'posevidence', projdeme dokumentační jednotky # # Pokud je aktivní filtr 'posevidence', projdeme dokumentační jednotky
if filters and filters.get('posevidence') == 'true': # if filters and filters.get('posevidence') == 'true':
djs = akce.get('az_dokumentacni_jednotka', []) # djs = akce.get('az_dokumentacni_jednotka', [])
for dj in djs: # for dj in djs:
# Pokud je jednotka negativní # # Pokud je jednotka negativní
if dj.get('dj_negativni_jednotka') is True: # if dj.get('dj_negativni_jednotka') is True:
# Získáme ID pianu z objektu (např. {"id": "P-...", "value": "..."}) # # Získáme ID pianu z objektu (např. {"id": "P-...", "value": "..."})
pian_obj = dj.get('dj_pian') # pian_obj = dj.get('dj_pian')
if pian_obj and isinstance(pian_obj, dict): # if pian_obj and isinstance(pian_obj, dict):
negative_pians.add(pian_obj.get('id')) # negative_pians.add(pian_obj.get('id'))
djs = akce.get('az_dokumentacni_jednotka', []) # djs = akce.get('az_dokumentacni_jednotka', [])
for dj in djs: # for dj in djs:
is_negative = dj.get('dj_negativni_jednotka') # is_negative = dj.get('dj_negativni_jednotka')
if is_negative is True or str(is_negative).lower() == 'true': # if is_negative is True or str(is_negative).lower() == 'true':
# Získáme ID pianu z objektu (např. {"id": "P-...", "value": "..."}) # # Získáme ID pianu z objektu (např. {"id": "P-...", "value": "..."})
pian_obj = dj.get('dj_pian') # pian_obj = dj.get('dj_pian')
if pian_obj and isinstance(pian_obj, dict): # if pian_obj and isinstance(pian_obj, dict):
negative_dj_pian_ids.add(pian_obj.get('id')) # negative_dj_pian_ids.add(pian_obj.get('id'))
actions_with_geom += 1 actions_with_geom += 1
@@ -199,15 +198,28 @@ def load_amcr_data(canvas, bb, filters=None):
"loc": g_list('loc') "loc": g_list('loc')
} }
for pid in piani: # for pid in piani:
if pid in negative_pians: # if pid in negative_pians:
continue # continue
pian_lookup[pid] = meta # pian_lookup[pid] = meta
target_pian_ids.add(pid) # target_pian_ids.add(pid)
djs = akce.get('az_dokumentacni_jednotka')
for dj in djs:
meta['dj_id'] = dj.get('ident_cely')
dj_typ = dj.get('dj_typ')
meta['dj_typ_value'] = dj_typ.get('value')
meta['dj_negativni'] = "Negativní" if dj.get('dj_negativni_jednotka') is True else "Pozitivní"
dj_pian = dj.get('dj_pian')
dj_pian_value = dj_pian.get('value')
target_pian_ids.add(dj_pian_value)
pian_lookup[dj_pian_value] = meta
if not target_pian_ids: if not target_pian_ids:
iface.messageBar().pushMessage("AMCR", f"Nalezeno {len(docs_akce)} akcí, ale žádná nemá geometrii.", level=1) iface.messageBar().pushMessage("AMCR", f"Nalezeno {len(docs_akce)} akcí, ale žádná nemá geometrii.", level=1)
return return
# ========================================== # ==========================================
# B) Geometry (PIAN) # B) Geometry (PIAN)
@@ -255,8 +267,10 @@ def load_amcr_data(canvas, bb, filters=None):
QgsField("PIAN", QVariant.String), QgsField("PIAN", QVariant.String),
QgsField("Přesnost", QVariant.String), QgsField("Přesnost", QVariant.String),
QgsField("PIAN typ", QVariant.String), QgsField("PIAN typ", QVariant.String),
QgsField("Dokumentační jednotka", QVariant.String),
QgsField("Typ dokumentační jednotky", QVariant.String),
QgsField("Definiční bod(y) (WGS-84)", QVariant.String), QgsField("Definiční bod(y) (WGS-84)", QVariant.String),
QgsField("Identifikátor", QVariant.String), QgsField("Akce", QVariant.String),
QgsField("Odkaz do Digiarchivu", QVariant.String), QgsField("Odkaz do Digiarchivu", QVariant.String),
QgsField("Okres", QVariant.String), QgsField("Okres", QVariant.String),
QgsField("Katastr", QVariant.String), QgsField("Katastr", QVariant.String),
@@ -299,7 +313,7 @@ def load_amcr_data(canvas, bb, filters=None):
# PIAN attributes # PIAN attributes
pian_presnost = tr_code(str(doc.get('pian_presnost', ''))) pian_presnost = tr_code(str(doc.get('pian_presnost', '')))
pian_typ = tr_code(str(doc.get('pian_typ', ''))) pian_typ = tr_code(str(doc.get('pian_typ', '')))
dj_negativni = "Negativní" if pid in negative_dj_pian_ids else "Pozitivní" # dj_negativni = "Negativní" if pid in negative_dj_pian_ids else "Pozitivní"
if wkt: if wkt:
geom = QgsGeometry.fromWkt(wkt) geom = QgsGeometry.fromWkt(wkt)
@@ -310,9 +324,11 @@ def load_amcr_data(canvas, bb, filters=None):
pid, pid,
pian_presnost, pian_presnost,
pian_typ, pian_typ,
meta['dj_id'],
meta['dj_typ_value'],
meta['loc'], meta['loc'],
meta['ident_cely'], meta['ident_cely'],
"https://digiarchiv.aiscr.cz/id/" + meta['ident_cely'], "https://digiarchiv.aiscr.cz/id/" + meta['dj_id'],
meta['az_okres'], meta['az_okres'],
meta['katastr'], meta['katastr'],
meta['dalsi_katastr'], meta['dalsi_katastr'],
@@ -323,7 +339,7 @@ def load_amcr_data(canvas, bb, filters=None):
meta['akce_datum_ukonceni'], meta['akce_datum_ukonceni'],
meta['akce_hlavni_typ'], meta['akce_hlavni_typ'],
meta['akce_vedlejsi_typ'], meta['akce_vedlejsi_typ'],
dj_negativni, meta['dj_negativni'],
meta['lokalizace_okolnosti'], meta['lokalizace_okolnosti'],
meta['akce_je_nz'], meta['akce_je_nz'],
meta['pristupnost'] meta['pristupnost']