Fix: natural/waterway aus Generic-Filter entfernt

Bei Landschaftsbildern waren alle Tags gefiltert (0 Ergebnisse).
natural=peak, natural=wood etc. sind mit Region-BBox suchbar.
Nur building, highway, landuse bleiben als generisch gefiltert.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Dieser Commit ist enthalten in:
Claude Dev
2026-03-26 00:56:54 +01:00
Ursprung b9b76d2841
Commit f4dcd37e78

Datei anzeigen

@@ -360,8 +360,18 @@ async def generate_queries(req: QueryGenRequest):
fragments = []
used_types = set()
# Generische Keys die Overpass ueberlasten
_GENERIC_KEYS = {
"building", "highway", "landuse",
"surface", "barrier", "wall", "fence", "roof",
"addr:street", "addr:city", "addr:housenumber",
"name", "source", "type",
}
for obj in req.objects:
obj_type = obj.get("type", "").lower().replace(" ", "_")
osm_tags = obj.get("osm_tags", [])
logger.info(f"VLM Objekt: type={obj_type}, osm_tags={osm_tags}")
# Direkte Zuordnung
if obj_type in _OBJECT_TO_OVERPASS and obj_type not in used_types:
@@ -369,33 +379,33 @@ async def generate_queries(req: QueryGenRequest):
fragments.append(f' node{tag}{bbox_str};')
fragments.append(f' way{tag}{bbox_str};')
used_types.add(obj_type)
logger.info(f" -> Mapping-Match: {obj_type} -> {tag}")
continue
# Fallback: OSM-Tags aus VLM-Ergebnis verwenden
# Generische Tags ignorieren (zu viele Treffer, Overpass Timeout)
_GENERIC_KEYS = {
"building", "highway", "landuse", "natural", "waterway",
"surface", "barrier", "wall", "fence", "roof",
"addr:street", "addr:city", "addr:housenumber",
"name", "source", "type",
}
osm_tags = obj.get("osm_tags", [])
matched = False
for tag_str in osm_tags:
if "=" in tag_str and tag_str not in used_types:
key, val = tag_str.split("=", 1)
if key in _GENERIC_KEYS:
continue # Zu generisch, ueberspringen
logger.info(f" -> Tag gefiltert (generisch): {tag_str}")
continue
frag = f'["{key}"="{val}"]'
fragments.append(f' node{frag}{bbox_str};')
fragments.append(f' way{frag}{bbox_str};')
used_types.add(tag_str)
logger.info(f" -> OSM-Tag verwendet: {tag_str}")
matched = True
break
if not matched and obj_type not in _OBJECT_TO_OVERPASS:
logger.warning(f" -> KEIN MATCH fuer: {obj_type} (tags: {osm_tags})")
if not fragments:
raise HTTPException(400, "Keine passenden OSM-Tags fuer die erkannten Objekte gefunden")
query = "[out:json][timeout:30];\n(\n" + "\n".join(fragments) + "\n);\nout center body;"
logger.info(f"VLM generierte Query: {query}")
result = {
"query": query,
"object_count": len(req.objects),
@@ -403,5 +413,7 @@ async def generate_queries(req: QueryGenRequest):
}
if region_used:
result["region"] = region_used
logger.info(f"VLM Query generiert: {query}")
if region_used:
logger.info(f"VLM Query: Region '{region_used}' als BBox verwendet")
return result