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:
@@ -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
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren