Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
|
osmium [2026/03/21 11:56] jango angelegt |
osmium [2026/03/21 12:02] (aktuell) jango |
||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | Osmium ist ein CLI-Tool für die Arbeit mit OpenStreetMap Daten. Es bietet Funktionen zur Bearbeitung von OSM-Daten und ist vergleichbaren Tools oft überlegen. Osmium | + | Osmium ist ein CLI-Tool für die Arbeit mit OSM-Daten |
| + | Search-Source extrahieren | ||
| + | < | ||
| + | wget https:// | ||
| + | |||
| + | osmium tags-filter austria-latest.osm.pbf \ | ||
| + | nwr/place \ | ||
| + | nwr/amenity \ | ||
| + | nwr/shop \ | ||
| + | nwr/tourism \ | ||
| + | nwr/leisure \ | ||
| + | nwr/railway \ | ||
| + | nwr/ | ||
| + | nwr/highway \ | ||
| + | nwr/addr:* \ | ||
| + | -o search-source.osm.pbf | ||
| + | |||
| + | osmium export search-source.osm.pbf -o search-source.geojson | ||
| + | </ | ||
| + | |||
| + | search.json bauen | ||
| + | |||
| + | <code python> | ||
| + | import json | ||
| + | |||
| + | INPUT = " | ||
| + | OUTPUT = " | ||
| + | |||
| + | def center_of_geometry(geom): | ||
| + | t = geom.get(" | ||
| + | coords = geom.get(" | ||
| + | |||
| + | if t == " | ||
| + | return coords[0], coords[1] | ||
| + | |||
| + | if t == " | ||
| + | mid = coords[len(coords) // 2] | ||
| + | return mid[0], mid[1] | ||
| + | |||
| + | if t == " | ||
| + | ring = coords[0] | ||
| + | mid = ring[len(ring) // 2] | ||
| + | return mid[0], mid[1] | ||
| + | |||
| + | if t == " | ||
| + | ring = coords[0][0] | ||
| + | mid = ring[len(ring) // 2] | ||
| + | return mid[0], mid[1] | ||
| + | |||
| + | return None, None | ||
| + | |||
| + | def norm(props, *keys): | ||
| + | for k in keys: | ||
| + | v = props.get(k) | ||
| + | if v: | ||
| + | return str(v).strip() | ||
| + | return "" | ||
| + | |||
| + | with open(INPUT, " | ||
| + | geo = json.load(f) | ||
| + | |||
| + | out = [] | ||
| + | seen = set() | ||
| + | |||
| + | for feat in geo.get(" | ||
| + | props = feat.get(" | ||
| + | geom = feat.get(" | ||
| + | |||
| + | lng, lat = center_of_geometry(geom) | ||
| + | if lng is None or lat is None: | ||
| + | continue | ||
| + | |||
| + | name = norm(props, " | ||
| + | place = norm(props, " | ||
| + | housenumber = norm(props, " | ||
| + | street = norm(props, " | ||
| + | city = norm(props, " | ||
| + | postcode = norm(props, " | ||
| + | amenity = norm(props, " | ||
| + | shop = norm(props, " | ||
| + | tourism = norm(props, " | ||
| + | leisure = norm(props, " | ||
| + | railway = norm(props, " | ||
| + | public_transport = norm(props, " | ||
| + | highway = norm(props, " | ||
| + | |||
| + | item = None | ||
| + | |||
| + | if housenumber and street: | ||
| + | item = { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | elif highway and name: | ||
| + | item = { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | elif place and name: | ||
| + | item = { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | elif name and (amenity or shop or tourism or leisure or railway or public_transport): | ||
| + | item = { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | |||
| + | if not item: | ||
| + | continue | ||
| + | |||
| + | key = (item[" | ||
| + | if key in seen: | ||
| + | continue | ||
| + | seen.add(key) | ||
| + | out.append(item) | ||
| + | |||
| + | with open(OUTPUT, | ||
| + | json.dump(out, | ||
| + | |||
| + | print(f" | ||
| + | </ | ||
| + | |||
| + | Im Browser suchen | ||
| + | <code javascript> | ||
| + | let SEARCH_INDEX = []; | ||
| + | |||
| + | async function loadSearchIndex() { | ||
| + | const res = await fetch(" | ||
| + | SEARCH_INDEX = await res.json(); | ||
| + | } | ||
| + | |||
| + | function searchLocal(query) { | ||
| + | const q = query.trim().toLowerCase(); | ||
| + | if (!q) return []; | ||
| + | |||
| + | return SEARCH_INDEX | ||
| + | .filter(item => { | ||
| + | const hay = [ | ||
| + | item.name || "", | ||
| + | item.street || "", | ||
| + | item.city || "", | ||
| + | item.postcode || "" | ||
| + | ].join(" | ||
| + | |||
| + | return hay.includes(q); | ||
| + | }) | ||
| + | .slice(0, 20); | ||
| + | } | ||
| + | </ | ||
| =====Links===== | =====Links===== | ||
| - | * [[https:// | + | * [[https:// |
| * [[https:// | * [[https:// | ||