From 2d4bad0dc7c5a94fa202f406cc053e58ea2f3e1f Mon Sep 17 00:00:00 2001 From: mrleo1nid <43583385+mrleo1nid@users.noreply.github.com> Date: Fri, 30 Oct 2026 18:10:47 +0300 Subject: [PATCH] Initial commit: browser OSM city generator --- .gitignore | 4 + README.md | 96 +++ build.mjs | 31 + package-lock.json | 549 ++++++++++++++ package.json | 18 + public/index.html | 13 + public/style.css | 112 +++ samples/balzers-2013.json | 1 + scripts/cli.ts | 39 + src/gen/catalog.ts | 199 +++++ src/gen/city.ts | 412 +++++++++++ src/gen/classify.ts | 126 ++++ src/gen/finalize.ts | 77 ++ src/gen/furnish.ts | 476 ++++++++++++ src/gen/generate.ts | 36 + src/gen/interior.ts | 1446 +++++++++++++++++++++++++++++++++++++ src/gen/pipeline.ts | 97 +++ src/gen/project.ts | 18 + src/gen/props.ts | 26 + src/gen/worker.ts | 31 + src/main.ts | 237 ++++++ src/osm/overpass.ts | 105 +++ src/store.ts | 59 ++ src/types.ts | 197 +++++ src/util/geom.ts | 165 +++++ src/util/rng.ts | 43 ++ src/util/spatial.ts | 28 + src/view/picker.ts | 244 +++++++ src/view/renderer.ts | 658 +++++++++++++++++ src/view/style.ts | 71 ++ src/view/viewer.ts | 288 ++++++++ tsconfig.json | 13 + 32 files changed, 5915 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 build.mjs create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/index.html create mode 100644 public/style.css create mode 100644 samples/balzers-2013.json create mode 100644 scripts/cli.ts create mode 100644 src/gen/catalog.ts create mode 100644 src/gen/city.ts create mode 100644 src/gen/classify.ts create mode 100644 src/gen/finalize.ts create mode 100644 src/gen/furnish.ts create mode 100644 src/gen/generate.ts create mode 100644 src/gen/interior.ts create mode 100644 src/gen/pipeline.ts create mode 100644 src/gen/project.ts create mode 100644 src/gen/props.ts create mode 100644 src/gen/worker.ts create mode 100644 src/main.ts create mode 100644 src/osm/overpass.ts create mode 100644 src/store.ts create mode 100644 src/types.ts create mode 100644 src/util/geom.ts create mode 100644 src/util/rng.ts create mode 100644 src/util/spatial.ts create mode 100644 src/view/picker.ts create mode 100644 src/view/renderer.ts create mode 100644 src/view/style.ts create mode 100644 src/view/viewer.ts create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..641e4e9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +node_modules/ +dist/ +*.log +world.json diff --git a/README.md b/README.md new file mode 100644 index 0000000..881cfac --- /dev/null +++ b/README.md @@ -0,0 +1,96 @@ +# Город сверху — генератор карты по OpenStreetMap (MVP) + +Выделяете на карте небольшой город или район → по данным OSM строится подробная карта +с видом строго сверху: дороги реальной ширины с тротуарами и разметкой, парковки +с машинами, деревья, и **у каждого здания — этажи, комнаты, двери, окна, лестницы +и мебель**, нарисованные простыми геометрическими фигурами, как на плане квартиры. + +Всё работает в браузере, без сервера: данные берутся из Overpass API, генерация +идёт в Web Worker'ах, готовый мир сохраняется в IndexedDB. + +## Запуск + +Нужен Node.js 18+. + +```bash +npm install +npm run dev # http://localhost:5173/ (пересборка на лету) +npm run build # сборка в dist/ — можно положить на любой статический хостинг +npm run typecheck +``` + +Без интернета можно проверить на образце: «Другие способы» → «Сгенерировать из выгрузки +Overpass» → `samples/balzers-2013.json` (Бальцерс, Лихтенштейн, данные OSM 2013 года). + +Генерация из файла без браузера (для отладки генератора): + +```bash +npm run cli -- samples/balzers-2013.json 47.058 9.492 47.074 9.518 world.json +``` + +## Управление + +- перетаскивание — сдвиг, колесо / щипок — масштаб, двойной клик — приблизить; +- справа — этаж для всей карты (⌂ — крыши), `PgUp`/`PgDn` или `[` `]`; +- клик по зданию — карточка: вид, этажность (из OSM или оценка), квартиры, спальные места, + свой переключатель этажей только для этого здания; +- «Экспорт мира» — весь мир одним файлом `.json.gz` (будущий формат для игры). + +## Как устроена генерация + +``` +Overpass JSON ─► city.ts ──────────────► зоны, дороги, контуры зданий, деревья, парковки + │ classify.ts вид здания (по тегам, POI внутри, landuse, площади) и этажность + ▼ + interior.ts (в воркерах) ─► этажи: сетка 0.5 м в осях здания + │ схема: секции с подъездами | коридор | простая раскладка + │ деление на комнаты по программе (м²), несколько попыток с оценкой + │ двери = остовное дерево по графу смежности, санузлы и спальни — тупики + │ вход с фасада к дороге, окна с шагом по типу здания + ▼ + furnish.ts + catalog.ts ──► мебель по правилам для каждого типа комнаты + ▼ + finalize.ts ──────────────► общие модели предметов, округление до 1 см +``` + +- **Сид** здания = OSM-id ⊕ сид мира — один и тот же город всегда генерируется одинаково. +- Многоквартирные дома — **секционные**: подъезд с лестницей (и лифтом от 5 этажей), + площадка, 1–4 квартиры вокруг неё; на первом этаже — проход к входу, у домов с магазинами + вместо квартир магазины со своими входами с улицы. +- Офисы, школы, больницы, гостиницы — **коридорная** схема. +- Дома, магазины, кафе, цеха, склады, храмы, гаражи — **простая** раскладка + (у гаражных рядов — отдельные боксы с воротами). + +## Модель данных мира (`src/types.ts`) + +Заложено под будущую симуляцию: + +| Что | Зачем потом | +|---|---| +| `Door.rooms = [комната, комната \| 'outside']` | рёбра графа навигации внутри здания | +| `Stairs` (одно место на всех этажах, `up`/`down`), лифты | переходы между этажами | +| `Unit` — квартира / магазин / офис с `roomIds` и `beds` | домохозяйства и рабочие места для жителей | +| `Prop.blocksMove`, `Prop.blocksSight`, `tags` (`sleep:2`, `sit:4`, `work`, `cook`, `storage`…) | коллизии, линия обзора, что агент может сделать с предметом | +| `Wall` с разрывами под двери и окна, `Window` | коллизии и видимость (окна прозрачны для взгляда) | +| `Road` с шириной, тротуарами, `oneway`, слоями | граф улиц для перемещения по городу | +| все объекты с `id` | хранение состояния: открытая дверь, взятый предмет | + +Координаты — метры в локальной проекции вокруг центра области (x — восток, y — юг). + +## Ограничения MVP + +- Область до 6 км². Публичные серверы Overpass рассчитаны на умеренную нагрузку; для + публичной игры понадобится своё зеркало или заранее нарезанные данные (например, экстракт + Geofabrik → статические файлы). +- Подвалы, мансарды, балконы, береговая линия морей пока не генерируются. +- Нестандартные контуры (сильно изломанные) дают менее аккуратные планировки. + +## Данные и лицензии + +Данные карты © участники OpenStreetMap, лицензия ODbL. Если вы распространяете +сгенерированные миры, укажите «© OpenStreetMap contributors». Тайлы на экране выбора +области — стандартные тайлы OSM по их [правилам использования](https://operations.osmfoundation.org/policies/tiles/); +поиск — Nominatim (не чаще раза в секунду). + +Идеи частично подсказаны проектом [KnoxMap](https://github.com/spytheeuclidean-a11y/knoxmap); +код написан с нуля. diff --git a/build.mjs b/build.mjs new file mode 100644 index 0000000..a8e060e --- /dev/null +++ b/build.mjs @@ -0,0 +1,31 @@ +// Сборка: node build.mjs [--serve] [--port 5173] +import * as esbuild from 'esbuild'; +import { cpSync, mkdirSync } from 'node:fs'; + +const serve = process.argv.includes('--serve'); +const portArg = process.argv.indexOf('--port'); +const port = portArg > 0 ? +process.argv[portArg + 1] : 5173; + +mkdirSync('dist', { recursive: true }); +cpSync('public', 'dist', { recursive: true }); + +const options = { + entryPoints: { main: 'src/main.ts', worker: 'src/gen/worker.ts' }, + outdir: 'dist', + bundle: true, + format: 'esm', + target: 'es2022', + sourcemap: true, + minify: !serve, + logLevel: 'info', +}; + +if (serve) { + const ctx = await esbuild.context(options); + await ctx.watch(); + const { host } = await ctx.serve({ servedir: 'dist', port }); + console.log(`\n Открыть: http://localhost:${port}/\n`); + void host; +} else { + await esbuild.build(options); +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..b94ca3b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,549 @@ +{ + "name": "citygen", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "citygen", + "version": "0.1.0", + "devDependencies": { + "esbuild": "^0.28.0", + "tsx": "^4.19.0", + "typescript": "^5.6.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/tsx": { + "version": "4.23.15", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.15.tgz", + "integrity": "sha512-Yiex1Ovn8z2xPpOWckIiysV1SSyRMY9BkLF++q0yKiDxCqRhosKfMg3janKkiLBwZ5c/YryloKwGZcrEmtwxKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.28.0" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..3825089 --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "name": "citygen", + "version": "0.1.0", + "private": true, + "description": "Генератор подробной карты города по данным OpenStreetMap: планировки, этажи и мебель простыми фигурами, вид сверху.", + "type": "module", + "scripts": { + "dev": "node build.mjs --serve", + "build": "node build.mjs", + "typecheck": "tsc -p .", + "cli": "tsx scripts/cli.ts" + }, + "devDependencies": { + "esbuild": "^0.28.0", + "tsx": "^4.19.0", + "typescript": "^5.6.0" + } +} diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..437fa6d --- /dev/null +++ b/public/index.html @@ -0,0 +1,13 @@ + + + + + + Город сверху + + + +
+ + + diff --git a/public/style.css b/public/style.css new file mode 100644 index 0000000..1a1560b --- /dev/null +++ b/public/style.css @@ -0,0 +1,112 @@ +:root { + --bg: #ebe7de; + --card: rgba(252, 250, 246, 0.96); + --ink: #2f2c28; + --muted: #7a736a; + --line: #d8d2c7; + --accent: #e8590c; + --accent-ink: #fff; + --ok: #2f7d32; + --warn: #b26a00; + --bad: #c62828; + font-family: system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif; + color: var(--ink); +} +* { box-sizing: border-box; } +html, body { margin: 0; height: 100%; background: var(--bg); overflow: hidden; } +#app { position: fixed; inset: 0; } +button, input { font: inherit; color: inherit; } +a { color: #8a4b1f; } +code { font-size: 12px; background: #eee8de; padding: 1px 4px; border-radius: 4px; } + +.card { + background: var(--card); + border: 1px solid var(--line); + border-radius: 12px; + box-shadow: 0 6px 24px rgba(40, 30, 20, 0.12); +} +.btn { + border: 1px solid var(--line); + background: #fff; + border-radius: 8px; + padding: 7px 12px; + cursor: pointer; + white-space: nowrap; + font-size: 14px; +} +.btn:hover { border-color: #b9b0a2; } +.btn.on { background: #fde8dc; border-color: var(--accent); color: #9a3a06; } +.btn.primary { background: var(--accent); color: var(--accent-ink); border-color: var(--accent); font-weight: 600; padding: 10px 14px; font-size: 15px; } +.btn.primary:disabled { opacity: 0.45; cursor: default; } +.btn.ghost { background: transparent; } +.btn.file { display: block; text-align: left; } +.row { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; } +.col { display: flex; flex-direction: column; gap: 8px; margin-top: 8px; } +.hint { font-size: 12px; color: var(--muted); } +.chip { display: inline-flex; align-items: center; gap: 4px; font-size: 13px; padding: 4px 8px; border: 1px solid var(--line); border-radius: 999px; background: #fff; cursor: pointer; user-select: none; } +.attribution { position: absolute; right: 6px; bottom: 4px; font-size: 11px; color: #555; background: rgba(255, 255, 255, 0.8); padding: 1px 6px; border-radius: 4px; } + +/* ---------- выбор области */ +.picker-stage { position: absolute; inset: 0; } +.map-box { position: absolute; inset: 0; touch-action: none; } +.map-canvas { display: block; cursor: grab; touch-action: none; } +.picker-panel { + position: absolute; z-index: 2; top: 16px; left: 16px; width: min(380px, calc(100vw - 32px)); + max-height: calc(100vh - 32px); overflow: auto; padding: 16px; display: flex; flex-direction: column; gap: 10px; +} +.brand { font-weight: 700; font-size: 20px; letter-spacing: 0.2px; } +.lead { margin: 0; font-size: 13.5px; color: #514b43; line-height: 1.4; } +.search { display: flex; gap: 6px; } +.search input, .field input { font-size: 14px; flex: 1; min-width: 0; border: 1px solid var(--line); border-radius: 8px; padding: 7px 10px; background: #fff; } +.results { display: flex; flex-direction: column; gap: 4px; } +.result { text-align: left; border: 0; background: #f4f0e9; border-radius: 6px; padding: 6px 8px; cursor: pointer; font-size: 12.5px; } +.result:hover { background: #ece5da; } +.sel-info { font-size: 13px; padding: 6px 8px; border-radius: 6px; background: #f4f0e9; } +.sel-info.ok { color: var(--ok); } +.sel-info.warn { color: var(--warn); } +.sel-info.bad { color: var(--bad); } +.field { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--muted); } +.more summary { cursor: pointer; font-size: 13px; color: var(--muted); } +.err { color: var(--bad); font-size: 13px; background: #fdecea; border-radius: 6px; padding: 8px; white-space: pre-wrap; } + +/* ---------- прогресс */ +.overlay { position: fixed; inset: 0; z-index: 50; background: rgba(30, 26, 22, 0.35); display: flex; align-items: center; justify-content: center; } +.overlay[hidden] { display: none; } +.progress-card { width: min(420px, calc(100vw - 32px)); padding: 18px; display: flex; flex-direction: column; gap: 10px; } +.p-title { font-weight: 700; } +.p-text { font-size: 13px; color: #514b43; min-height: 1.3em; } +.bar { height: 8px; border-radius: 99px; background: #e8e2d8; overflow: hidden; } +.bar i { display: block; height: 100%; width: 0; background: var(--accent); transition: width 0.2s; } +.progress-card .btn { align-self: flex-end; } + +/* ---------- просмотр */ +.viewer { position: absolute; inset: 0; } +.world-canvas { display: block; touch-action: none; cursor: grab; } +.world-canvas:active { cursor: grabbing; } +.viewer-top { position: absolute; top: 12px; left: 12px; padding: 10px 12px; display: flex; flex-direction: column; gap: 6px; max-width: min(640px, calc(100vw - 100px)); } +.viewer-top .title { font-weight: 700; font-size: 16px; } +.viewer-top .stats { font-size: 12px; color: var(--muted); } +.floor-bar { position: absolute; right: 12px; top: 12px; padding: 8px 6px; display: flex; flex-direction: column; align-items: center; gap: 6px; max-height: calc(100vh - 60px); } +.floor-title { font-size: 11px; color: var(--muted); text-transform: uppercase; letter-spacing: 0.5px; } +.floor-list { display: flex; flex-direction: column; gap: 3px; overflow: auto; } +.floor-btn { width: 36px; height: 30px; border: 1px solid var(--line); background: #fff; border-radius: 6px; cursor: pointer; font-size: 13px; } +.floor-btn.on { background: var(--accent); border-color: var(--accent); color: #fff; font-weight: 600; } +.floor-btn.sm { width: 30px; height: 26px; font-size: 12px; } +.floor-hint { font-size: 10px; color: var(--muted); } +.info { position: absolute; left: 12px; bottom: 36px; width: min(320px, calc(100vw - 90px)); padding: 12px; font-size: 13px; display: flex; flex-direction: column; gap: 5px; } +.info[hidden] { display: none; } +.info .title { font-weight: 700; font-size: 15px; padding-right: 20px; } +.info .sub { color: var(--muted); font-size: 12px; } +.info .kv { display: flex; gap: 6px; align-items: baseline; } +.info .kv span { color: var(--muted); flex: 1; } +.info .kv i { color: var(--muted); font-size: 11px; } +.info .rooms { font-size: 12px; color: #514b43; } +.info .links { display: flex; gap: 12px; font-size: 12px; } +.info .close { position: absolute; top: 6px; right: 8px; border: 0; background: none; font-size: 20px; cursor: pointer; color: var(--muted); } +.floor-pick { display: flex; flex-wrap: wrap; gap: 3px; margin: 4px 0; } +.scale { position: absolute; left: 12px; bottom: 10px; height: 18px; border: 2px solid #3e3a35; border-top: 0; font-size: 11px; text-align: center; color: #3e3a35; background: rgba(255, 255, 255, 0.55); line-height: 16px; min-width: 30px; } + +@media (max-width: 640px) { + .viewer-top .stats { display: none; } + .picker-panel { top: auto; bottom: 8px; left: 8px; max-height: 55vh; } +} diff --git a/samples/balzers-2013.json b/samples/balzers-2013.json new file mode 100644 index 0000000..fd1c891 --- /dev/null +++ b/samples/balzers-2013.json @@ -0,0 +1 @@ +{"elements":[{"type":"node","id":525,"lat":47.0730496,"lon":9.5090656,"tags":{"highway":"crossing"}},{"type":"node","id":543,"lat":47.0645085,"lon":9.4989914,"tags":{"created_by":"JOSM"}},{"type":"node","id":544,"lat":47.0643891,"lon":9.4990192,"tags":{"created_by":"JOSM"}},{"type":"node","id":545,"lat":47.0642406,"lon":9.4990026,"tags":{"created_by":"JOSM"}},{"type":"node","id":546,"lat":47.0639765,"lon":9.4987881,"tags":{"created_by":"JOSM"}},{"type":"node","id":547,"lat":47.0634813,"lon":9.4986065,"tags":{"created_by":"JOSM"}},{"type":"node","id":548,"lat":47.0626962,"lon":9.4985,"tags":{"created_by":"JOSM"}},{"type":"node","id":549,"lat":47.0634309,"lon":9.4983774,"tags":{"amenity":"parking","created_by":"Potlatch 0.4b"}},{"type":"node","id":550,"lat":47.0623698,"lon":9.5003127,"tags":{"created_by":"JOSM"}},{"type":"node","id":552,"lat":47.0633096,"lon":9.498554,"tags":{"created_by":"JOSM"}},{"type":"node","id":553,"lat":47.0633822,"lon":9.4987468,"tags":{"created_by":"JOSM"}},{"type":"node","id":554,"lat":47.0637454,"lon":9.4989449,"tags":{"created_by":"JOSM"}},{"type":"node","id":555,"lat":47.0638841,"lon":9.4990604,"tags":{"created_by":"JOSM"}},{"type":"node","id":556,"lat":47.0638908,"lon":9.4992448,"tags":{"created_by":"JOSM"}},{"type":"node","id":557,"lat":47.0641152,"lon":9.4993838,"tags":{"created_by":"JOSM"}},{"type":"node","id":558,"lat":47.0641768,"lon":9.4996996,"tags":{"created_by":"JOSM"}},{"type":"node","id":559,"lat":47.0642557,"lon":9.5000786,"tags":{"created_by":"JOSM"}},{"type":"node","id":560,"lat":47.0644189,"lon":9.5008578,"tags":{"created_by":"JOSM"}},{"type":"node","id":561,"lat":47.0645453,"lon":9.5009157,"tags":{"created_by":"JOSM"}},{"type":"node","id":562,"lat":47.0648085,"lon":9.5009367,"tags":{"created_by":"JOSM"}},{"type":"node","id":567,"lat":47.0647137,"lon":9.500226,"tags":{"created_by":"JOSM"}},{"type":"node","id":568,"lat":47.0648769,"lon":9.5002523,"tags":{"created_by":"JOSM"}},{"type":"node","id":572,"lat":47.0651353,"lon":9.5007185,"tags":{"barrier":"entrance","historic":"castle","name":"Schloss Gutenberg"}},{"type":"node","id":700,"lat":47.0672684,"lon":9.5000348,"tags":{"created_by":"Potlatch 0.10f","openGeoDB:auto_update":"population,place,name,is_in","openGeoDB:community_identification_number":"G7003","openGeoDB:is_in":"Schweiz,Europe","openGeoDB:is_in_loc_id":"107","openGeoDB:layer":"6","openGeoDB:location":"political_structure","openGeoDB:loc_id":"79997","openGeoDB:name":"Balzers","openGeoDB:postal_codes":"9496","openGeoDB:sort_name":"BALZERS","openGeoDB:type":"ausländisches Areal Liechtenstein","openGeoDB:version":"0.2.6.11 / 2007-12-04 / http://fa-technik.adfc.de/code/opengeodb/dump/"}},{"type":"node","id":701,"lat":47.0666667,"lon":9.5,"tags":{"created_by":"opengeodb2osm0.5.2","is_in":"Liechtenstein,Europe","name":"Balzers","openGeoDB:auto_update":"population,place,name,is_in","openGeoDB:is_in":"Liechtenstein,Europe","openGeoDB:is_in_loc_id":"35165","openGeoDB:layer":"6","openGeoDB:location":"political_structure","openGeoDB:loc_id":"32383","openGeoDB:name":"Balzers","openGeoDB:postal_codes":"9496","openGeoDB:type":"100600000","openGeoDB:version":"0.2.6.11 / 2007-12-04 / http://fa-technik.adfc.de/code/opengeodb/dump/","place":"village"}},{"type":"node","id":864,"lat":47.0644048,"lon":9.5081998,"tags":{"highway":"crossing"}},{"type":"node","id":5094,"lat":47.0667802,"lon":9.4972271,"tags":{"bus":"yes","ele":"474","highway":"bus_stop","is_in":"Balzers","name":"Schlossweg","operator":"LBA","public_transport":"platform","uic_name":"Balzers, Schlossweg","uic_ref":"8574408","wheelchair":"yes"}},{"type":"node","id":5096,"lat":47.0615226,"lon":9.4977689,"tags":{"bus":"yes","ele":"474","highway":"bus_stop","is_in":"Balzers","name":"Mälsnerdorf","operator":"LBA","public_transport":"platform","uic_name":"Balzers, Mälsnerdorf","uic_ref":"8574405"}},{"type":"node","id":5099,"lat":47.063698,"lon":9.503314,"tags":{"bus":"yes","ele":"474","highway":"bus_stop","is_in":"Balzers","name":"Rietstrasse","operator":"LBA","public_transport":"platform","uic_name":"Balzers, Post","uic_ref":"8509611"}},{"type":"node","id":5107,"lat":47.0669658,"lon":9.5074143,"tags":{"bus":"yes","ele":"474","highway":"bus_stop","is_in":"Balzers","name":"Höfle","operator":"LBA","public_transport":"platform","uic_name":"Balzers, Hotel Post","uic_ref":"8574404"}},{"type":"node","id":5110,"lat":47.069404,"lon":9.507005,"tags":{"bus":"yes","ele":"474","highway":"bus_stop","is_in":"Balzers","name":"Alter Pfarrhof","operator":"LBA","public_transport":"platform","uic_name":"Balzers, Alter Friedhof","uic_ref":"8574403"}},{"type":"node","id":6195,"lat":47.066597,"lon":9.497576,"tags":{"bus":"yes","ele":"474","highway":"bus_stop","is_in":"Balzers","name":"Schlossweg","operator":"LBA","public_transport":"platform","uic_name":"Balzers, Schlossweg","uic_ref":"8574408","wheelchair":"yes"}},{"type":"node","id":6196,"lat":47.0634335,"lon":9.4922517,"tags":{"bus":"yes","highway":"bus_stop","is_in":"Balzers","name":"Rheinstrasse","public_transport":"platform"}},{"type":"node","id":6197,"lat":47.0635829,"lon":9.4921505,"tags":{"bus":"yes","highway":"bus_stop","is_in":"Balzers","name":"Rheinstrasse","public_transport":"platform"}},{"type":"node","id":6198,"lat":47.0616429,"lon":9.4978409,"tags":{"bus":"yes","ele":"474","highway":"bus_stop","is_in":"Balzers","name":"Mälsnerdorf","operator":"LBA","public_transport":"platform","uic_name":"Balzers, Mälsnerdorf","uic_ref":"8574405"}},{"type":"node","id":6199,"lat":47.0621577,"lon":9.4997655,"tags":{"highway":"crossing"}},{"type":"node","id":6200,"lat":47.063694,"lon":9.503018,"tags":{"bus":"yes","ele":"474","highway":"bus_stop","is_in":"Balzers","name":"Rietstrasse","operator":"LBA","public_transport":"platform","uic_name":"Balzers, Post","uic_ref":"8509611"}},{"type":"node","id":6201,"lat":47.0729084,"lon":9.509652,"tags":{"bus":"yes","ele":"474","highway":"bus_stop","is_in":"Balzers","name":"Egerta","operator":"LBA","public_transport":"platform","uic_name":"Balzers, Römerhof","uic_ref":"8574402"}},{"type":"node","id":6470,"lat":47.06644,"lon":9.49786,"tags":{"addr:city":"Balzers (FL)","addr:country":"LI","addr:postcode":"9496","amenity":"car_sharing","capacity":"1","mobility:station_id":"2632","name":"Balzers (FL) Oerlikon Balzers AG","note:de":"Mobility Standorte werden automatisch in OSM importiert durch Benutzer Teddych. Ändern Sie die Daten nicht in OSM, sondern melden Sie Änderungen direkt an Mobility.","note:en":"Mobility stations will be imported into OSM automatically by user Teddych. Do not update them in OSM, report changes to Mobility directly.","note:fr":"Mobility emplacements sont importer automatiquement dans OSM. Annoncez des changement direct à Mobility.","opening_hours":"24/7","operator":"Mobility Genossenschaft","source":"http://www.mobility.ch/","website":"http://www.mobility.ch/"}},{"type":"node","id":8548,"lat":47.0609327,"lon":9.495629,"tags":{"highway":"crossing"}},{"type":"node","id":8552,"lat":47.0608844,"lon":9.4957366,"tags":{"amenity":"fountain"}},{"type":"node","id":8553,"lat":47.0620991,"lon":9.4949328,"tags":{"bus":"yes","highway":"bus_stop","is_in":"Balzers","name":"Brückle","public_transport":"platform"}},{"type":"node","id":8554,"lat":47.0620439,"lon":9.494791,"tags":{"bus":"yes","highway":"bus_stop","is_in":"Balzers","name":"Brückle","public_transport":"platform"}},{"type":"node","id":8555,"lat":47.0618782,"lon":9.4952503,"tags":{"name":"Maxi","shop":"convenience"}},{"type":"node","id":8556,"lat":47.0613859,"lon":9.4957028,"tags":{"amenity":"post_box"}},{"type":"node","id":8621,"lat":47.0662361,"lon":9.4994045,"tags":{"amenity":"fire_station","name":"Feuerwehr Balzers"}},{"type":"node","id":8639,"lat":47.0652905,"lon":9.5023032,"tags":{"amenity":"place_of_worship","denomination":"catholic","name":"Jubiläumskirche","religion":"christian"}},{"type":"node","id":8746,"lat":47.064481,"lon":9.5015968,"tags":{"created_by":"Potlatch 0.10f","leisure":"playground"}},{"type":"node","id":9152,"lat":47.058447,"lon":9.4979634,"tags":{"created_by":"Merkaartor 0.11"}},{"type":"node","id":9153,"lat":47.0580875,"lon":9.4978537,"tags":{"created_by":"Merkaartor 0.11"}},{"type":"node","id":12217,"lat":47.0596257,"lon":9.4986247,"tags":{"amenity":"fountain","source":"survey"}},{"type":"node","id":15348,"lat":47.0711603,"lon":9.4925046,"tags":{"bus":"yes","ele":"474","highway":"bus_stop","is_in":"Balzers","name":"Balzers Sportplatz","operator":"LBA","public_transport":"platform","uic_name":"Balzers, Sportplatz","uic_ref":"8581152"}},{"type":"node","id":15349,"lat":47.0711865,"lon":9.492929,"tags":{"bus":"yes","ele":"474","highway":"bus_stop","is_in":"Balzers","name":"Balzers Sportplatz","operator":"LBA","public_transport":"platform","uic_name":"Balzers, Sportplatz","uic_ref":"8581152"}},{"type":"node","id":15357,"lat":47.0670759,"lon":9.5073022,"tags":{"bus":"yes","ele":"474","highway":"bus_stop","is_in":"Balzers","name":"Höfle","operator":"LBA","public_transport":"platform","uic_name":"Balzers, Hotel Post","uic_ref":"8574404"}},{"type":"node","id":15358,"lat":47.069184,"lon":9.50691,"tags":{"bus":"yes","ele":"474","highway":"bus_stop","is_in":"Balzers","name":"Alter Pfarrhof","operator":"LBA","public_transport":"platform","uic_name":"Balzers, Alter Friedhof","uic_ref":"8574403"}},{"type":"node","id":15359,"lat":47.0714942,"lon":9.5081715,"tags":{"bus":"yes","ele":"474","highway":"bus_stop","is_in":"Balzers","name":"Egerta","operator":"LBA","public_transport":"platform","uic_name":"Balzers, Römerhof","uic_ref":"8574402"}},{"type":"node","id":22511,"lat":47.0696306,"lon":9.5003241,"tags":{"ele":"474","highway":"bus_stop","name":"Balzers, Gagoz","operator":"PAG","source":"Bundesamt für Verkehr (BAV), DIDOK 2009","uic_name":"Balzers, Gagoz","uic_ref":"8582105"}},{"type":"node","id":24617,"lat":47.068972,"lon":9.5023311,"tags":{"highway":"crossing"}},{"type":"node","id":24618,"lat":47.0633069,"lon":9.4927745,"tags":{"crossing":"uncontrolled","highway":"crossing"}},{"type":"node","id":24681,"lat":47.0620703,"lon":9.4989096,"tags":{"highway":"crossing"}},{"type":"node","id":24688,"lat":47.0609495,"lon":9.4963488,"tags":{"crossing":"uncontrolled","highway":"crossing"}},{"type":"node","id":24704,"lat":47.0631389,"lon":9.4929596,"tags":{"crossing":"uncontrolled","highway":"crossing"}},{"type":"node","id":24711,"lat":47.0633546,"lon":9.4925045,"tags":{"crossing":"uncontrolled","highway":"crossing"}},{"type":"node","id":24715,"lat":47.0612369,"lon":9.4956568,"tags":{"highway":"crossing"}},{"type":"node","id":24720,"lat":47.0626236,"lon":9.4940639,"tags":{"crossing":"uncontrolled","highway":"crossing"}},{"type":"node","id":24738,"lat":47.0665777,"lon":9.4974446,"tags":{"highway":"crossing"}},{"type":"node","id":24743,"lat":47.0681611,"lon":9.4964676,"tags":{"highway":"crossing"}},{"type":"node","id":24750,"lat":47.06573,"lon":9.5075197,"tags":{"highway":"crossing"}},{"type":"node","id":24751,"lat":47.0723209,"lon":9.509073,"tags":{"highway":"crossing"}},{"type":"node","id":24752,"lat":47.0684995,"lon":9.4962387,"tags":{"highway":"crossing"}},{"type":"node","id":24756,"lat":47.0687518,"lon":9.5070499,"tags":{"highway":"crossing"}},{"type":"node","id":24758,"lat":47.0698245,"lon":9.5070659,"tags":{"highway":"crossing"}},{"type":"node","id":24764,"lat":47.0684036,"lon":9.4966767,"tags":{"highway":"crossing"}},{"type":"node","id":24769,"lat":47.0668212,"lon":9.5073717,"tags":{"highway":"crossing"}},{"type":"node","id":24772,"lat":47.0726713,"lon":9.5092551,"tags":{"highway":"crossing"}},{"type":"node","id":24773,"lat":47.0700391,"lon":9.5016825,"tags":{"highway":"crossing"}},{"type":"node","id":24783,"lat":47.07087,"lon":9.5041212,"tags":{"highway":"crossing"}},{"type":"node","id":24796,"lat":47.0654401,"lon":9.5075522,"tags":{"highway":"crossing"}},{"type":"node","id":24814,"lat":47.0635498,"lon":9.5094463,"tags":{"highway":"crossing"}},{"type":"node","id":24815,"lat":47.068665,"lon":9.5011063,"tags":{"highway":"crossing"}},{"type":"node","id":24816,"lat":47.0642611,"lon":9.5044448,"tags":{"highway":"crossing"}},{"type":"node","id":24822,"lat":47.0655276,"lon":9.5072279,"tags":{"highway":"crossing"}},{"type":"node","id":24823,"lat":47.063446,"lon":9.5101797,"tags":{"highway":"crossing"}},{"type":"node","id":24825,"lat":47.0685337,"lon":9.5010099,"tags":{"highway":"crossing"}},{"type":"node","id":24827,"lat":47.0656506,"lon":9.4995259,"tags":{"highway":"crossing"}},{"type":"node","id":24832,"lat":47.0632986,"lon":9.5113659,"tags":{"highway":"crossing"}},{"type":"node","id":24834,"lat":47.0666027,"lon":9.5038005,"tags":{"highway":"crossing"}},{"type":"node","id":24841,"lat":47.0650483,"lon":9.5093198,"tags":{"highway":"crossing"}},{"type":"node","id":24842,"lat":47.0690631,"lon":9.5024617,"tags":{"highway":"crossing"}},{"type":"node","id":24844,"lat":47.0666942,"lon":9.5035254,"tags":{"highway":"crossing"}},{"type":"node","id":24848,"lat":47.073459,"lon":9.5100755,"tags":{"highway":"crossing"}},{"type":"node","id":24849,"lat":47.0662093,"lon":9.4978763,"tags":{"highway":"crossing"}},{"type":"node","id":24851,"lat":47.0647839,"lon":9.5080923,"tags":{"highway":"crossing"}},{"type":"node","id":24855,"lat":47.0663331,"lon":9.5011161,"tags":{"highway":"crossing"}},{"type":"node","id":24859,"lat":47.0665079,"lon":9.5076578,"tags":{"highway":"crossing"}},{"type":"node","id":24917,"lat":47.0633722,"lon":9.5090668,"tags":{"highway":"crossing"}},{"type":"node","id":33533,"lat":47.0618768,"lon":9.4984798,"tags":{"crossing":"uncontrolled","highway":"crossing"}},{"type":"node","id":36563,"lat":47.0695547,"lon":9.5003957,"tags":{"ele":"474","highway":"bus_stop","name":"Balzers, Gagoz","operator":"PAG","source":"Bundesamt für Verkehr (BAV), DIDOK 2009","uic_name":"Balzers, Gagoz","uic_ref":"8582105"}},{"type":"node","id":39843,"lat":47.0659326,"lon":9.5016903,"tags":{"historic":"memorial","name":"Gedenkstätte für Johann Bapt Büchel"}},{"type":"node","id":39941,"lat":47.0694695,"lon":9.5076019,"tags":{"historic":"ruins","name":"Kirchturm St. Nikolaus"}},{"type":"node","id":41246,"lat":47.0723996,"lon":9.4940609,"tags":{"amenity":"parking"}},{"type":"node","id":41419,"lat":47.0588032,"lon":9.5122695,"tags":{"amenity":"parking","parking":"surface"}},{"type":"node","id":55123,"lat":47.0722825,"lon":9.5093326,"tags":{"addr:housenumber":"56","addr:street":"Egerta","name":"Trampino Reseladen Anstalt","shop":"travel_agency"}},{"type":"node","id":65583,"lat":47.0664053,"lon":9.4989155,"tags":{"addr:postcode":"LI-9496","addr:street":"Alberweg ","name":"Coop ","shop":"supermarket","source":"own local knowledge"}},{"type":"way","id":53,"tags":{"bicycle":"yes","foot":"yes","highway":"secondary","motorcar":"yes","motorcycle":"yes","name":"Egerta"},"nodes":[512,24839,24789,24795,513],"geometry":[{"lat":47.073048,"lon":9.5093089},{"lat":47.0729044,"lon":9.5093358},{"lat":47.0728341,"lon":9.5093339},{"lat":47.0727681,"lon":9.5093135},{"lat":47.0727085,"lon":9.5092804}]},{"type":"way","id":54,"tags":{"highway":"primary","name":"Gagoz"},"nodes":[512,525,24833,13646,526],"geometry":[{"lat":47.073048,"lon":9.5093089},{"lat":47.0730496,"lon":9.5090656},{"lat":47.0730629,"lon":9.5087489},{"lat":47.0730538,"lon":9.5085415},{"lat":47.0730135,"lon":9.5082969}]},{"type":"way","id":55,"tags":{"highway":"residential","name":"Gnetsch"},"nodes":[530,24842,539,41075,25290,13768],"geometry":[{"lat":47.0700773,"lon":9.501797},{"lat":47.0690631,"lon":9.5024617},{"lat":47.0689912,"lon":9.5024994},{"lat":47.0682031,"lon":9.5028355},{"lat":47.066914,"lon":9.5033853},{"lat":47.0668127,"lon":9.5034432}]},{"type":"way","id":56,"tags":{"bicycle":"yes","foot":"yes","highway":"unclassified","motorcar":"yes","motorcycle":"yes","name":"Iramali"},"nodes":[539,24617,13782,24825,8600,56020,540],"geometry":[{"lat":47.0689912,"lon":9.5024994},{"lat":47.068972,"lon":9.5023311},{"lat":47.0685817,"lon":9.5011514},{"lat":47.0685337,"lon":9.5010099},{"lat":47.0682876,"lon":9.5003412},{"lat":47.0676529,"lon":9.4983878},{"lat":47.0671925,"lon":9.4970467}]},{"type":"way","id":57,"tags":{"bicycle":"yes","foot":"yes","highway":"residential","motorcar":"yes","motorcycle":"yes","name":"Elgagass"},"nodes":[8569,541,8581,8592],"geometry":[{"lat":47.0652468,"lon":9.4984155},{"lat":47.0650124,"lon":9.4985942},{"lat":47.0645896,"lon":9.4989283},{"lat":47.0645732,"lon":9.4989467}]},{"type":"way","id":58,"tags":{"bicycle":"yes","foot":"yes","highway":"tertiary","motorcar":"yes","motorcycle":"yes","name":"Rietstrasse"},"nodes":[523,24822,24616,25340],"geometry":[{"lat":47.0655627,"lon":9.5073533},{"lat":47.0655276,"lon":9.5072279},{"lat":47.0654893,"lon":9.5071332},{"lat":47.0651336,"lon":9.5063547}]},{"type":"way","id":59,"tags":{"bicycle":"yes","foot":"yes","highway":"unclassified","motorcar":"no","motorcycle":"no","name":"Burgweg"},"nodes":[552,553,554,555,556,557],"geometry":[{"lat":47.0633096,"lon":9.498554},{"lat":47.0633822,"lon":9.4987468},{"lat":47.0637454,"lon":9.4989449},{"lat":47.0638841,"lon":9.4990604},{"lat":47.0638908,"lon":9.4992448},{"lat":47.0641152,"lon":9.4993838}]},{"type":"way","id":60,"tags":{"bicycle":"yes","foot":"yes","highway":"footway","motorcar":"no","motorcycle":"no","name":"Burgweg"},"nodes":[557,558,559,560,561,562,563,564,565,566,27001,567,568,569,570,571,572,25156,25155,26986,25157,25169,25184,25240],"geometry":[{"lat":47.0641152,"lon":9.4993838},{"lat":47.0641768,"lon":9.4996996},{"lat":47.0642557,"lon":9.5000786},{"lat":47.0644189,"lon":9.5008578},{"lat":47.0645453,"lon":9.5009157},{"lat":47.0648085,"lon":9.5009367},{"lat":47.0649646,"lon":9.500923},{"lat":47.0649873,"lon":9.5008328},{"lat":47.0647764,"lon":9.5006855},{"lat":47.0646341,"lon":9.5003312},{"lat":47.0646421,"lon":9.5002605},{"lat":47.0647137,"lon":9.500226},{"lat":47.0648769,"lon":9.5002523},{"lat":47.0649622,"lon":9.5003059},{"lat":47.0650269,"lon":9.5004333},{"lat":47.0650688,"lon":9.5005756},{"lat":47.0651353,"lon":9.5007185},{"lat":47.0652256,"lon":9.5007719},{"lat":47.065327,"lon":9.5007867},{"lat":47.0653688,"lon":9.50076},{"lat":47.0654174,"lon":9.500729},{"lat":47.0654403,"lon":9.5006043},{"lat":47.0654503,"lon":9.5004541},{"lat":47.065443,"lon":9.5003857}]},{"type":"way","id":81,"tags":{"highway":"tertiary","name":"Zweistäpfle"},"nodes":[542,24760,24803,24829,24763,718,47571,719,24657,24622,24658,726],"geometry":[{"lat":47.0662391,"lon":9.4975803},{"lat":47.0661545,"lon":9.4975364},{"lat":47.0661011,"lon":9.4974875},{"lat":47.0660569,"lon":9.4974136},{"lat":47.0660227,"lon":9.4973312},{"lat":47.0655204,"lon":9.4958449},{"lat":47.0644238,"lon":9.4926363},{"lat":47.0641006,"lon":9.4916908},{"lat":47.0640632,"lon":9.4916125},{"lat":47.0640224,"lon":9.4915526},{"lat":47.0639721,"lon":9.491517},{"lat":47.0639149,"lon":9.4915081}]},{"type":"way","id":82,"tags":{"highway":"residential","name":"Heraweg"},"nodes":[8578,8613,8616,46477,8614,24701,24710,720],"geometry":[{"lat":47.0638259,"lon":9.4977521},{"lat":47.0634562,"lon":9.4964982},{"lat":47.0632525,"lon":9.4957757},{"lat":47.0630964,"lon":9.4952505},{"lat":47.063033,"lon":9.4950372},{"lat":47.0627431,"lon":9.4940626},{"lat":47.0627203,"lon":9.4939983},{"lat":47.0626745,"lon":9.4939517}]},{"type":"way","id":129,"tags":{"name":"Grosser Kanal","waterway":"canal","width":"3"},"nodes":[13618,9764,9765,9766,9767,9768,9769,9770,25342,25291,25332,25302,25322],"geometry":[{"lat":47.050708,"lon":9.5127115},{"lat":47.0523309,"lon":9.5110715},{"lat":47.0569992,"lon":9.5063989},{"lat":47.0571324,"lon":9.5062893},{"lat":47.0572704,"lon":9.5062103},{"lat":47.0604273,"lon":9.5047837},{"lat":47.0605156,"lon":9.504756},{"lat":47.0606029,"lon":9.50475},{"lat":47.0664094,"lon":9.5055148},{"lat":47.0663527,"lon":9.5055461},{"lat":47.0661116,"lon":9.505715},{"lat":47.0656183,"lon":9.5060771},{"lat":47.0652739,"lon":9.5063293}]},{"type":"way","id":324,"tags":{"highway":"primary","junction":"roundabout","name":"Gagoz"},"nodes":[5089,23330,23331,5088,5092,23332,5090,23333,1085,23334,5091,23335,5087,532,23336,23337,23338,5089],"geometry":[{"lat":47.0682762,"lon":9.4962836},{"lat":47.0682512,"lon":9.4963248},{"lat":47.0682356,"lon":9.4963857},{"lat":47.0682359,"lon":9.4964426},{"lat":47.0682481,"lon":9.4964926},{"lat":47.0682702,"lon":9.4965338},{"lat":47.0683051,"lon":9.4965662},{"lat":47.0683449,"lon":9.4965778},{"lat":47.0683862,"lon":9.4965674},{"lat":47.0684166,"lon":9.4965421},{"lat":47.0684433,"lon":9.4964975},{"lat":47.0684587,"lon":9.4964293},{"lat":47.0684533,"lon":9.4963591},{"lat":47.0684332,"lon":9.4963067},{"lat":47.0684005,"lon":9.4962672},{"lat":47.068356,"lon":9.4962477},{"lat":47.0683165,"lon":9.4962532},{"lat":47.0682762,"lon":9.4962836}]},{"type":"way","id":325,"tags":{"highway":"primary","name":"Gagoz"},"nodes":[532,24752,24858,30241,24786,533,24830,534,23697,24761,535,41418],"geometry":[{"lat":47.0684332,"lon":9.4963067},{"lat":47.0684995,"lon":9.4962387},{"lat":47.0687056,"lon":9.4959937},{"lat":47.0689114,"lon":9.4958146},{"lat":47.0700736,"lon":9.4949151},{"lat":47.0703287,"lon":9.4947137},{"lat":47.070495,"lon":9.4945448},{"lat":47.0706611,"lon":9.4943318},{"lat":47.0708077,"lon":9.4940715},{"lat":47.0709133,"lon":9.4938087},{"lat":47.0710073,"lon":9.4935033},{"lat":47.0711467,"lon":9.4928969}]},{"type":"way","id":326,"tags":{"highway":"tertiary","lanes":"1","layer":"0","maxspeed":"50","name":"Brückle"},"nodes":[33528,24688,33527,24728,33526,24732,24678,5098,24718,24692,24668,24715,5097],"geometry":[{"lat":47.0610241,"lon":9.4965737},{"lat":47.0609495,"lon":9.4963488},{"lat":47.060921,"lon":9.4962446},{"lat":47.0608997,"lon":9.4961339},{"lat":47.0608961,"lon":9.4960422},{"lat":47.0609136,"lon":9.4959358},{"lat":47.0609455,"lon":9.4958503},{"lat":47.0609917,"lon":9.4957798},{"lat":47.0610468,"lon":9.4957332},{"lat":47.0611037,"lon":9.4957057},{"lat":47.0611708,"lon":9.495687},{"lat":47.0612369,"lon":9.4956568},{"lat":47.061285,"lon":9.4956259}]},{"type":"way","id":327,"tags":{"bicycle":"yes","foot":"yes","highway":"secondary","junction":"roundabout","motorcar":"yes","motorcycle":"yes","name":"Züghüsle"},"nodes":[5102,24643,5103,5100,24666,24631,24652,5104,523,5105,24655,5106,5101,24619,5102],"geometry":[{"lat":47.0655779,"lon":9.5075382},{"lat":47.0656046,"lon":9.5075339},{"lat":47.0656308,"lon":9.50751},{"lat":47.0656468,"lon":9.5074696},{"lat":47.0656477,"lon":9.507422},{"lat":47.0656353,"lon":9.507384},{"lat":47.0656131,"lon":9.5073577},{"lat":47.0655905,"lon":9.5073483},{"lat":47.0655627,"lon":9.5073533},{"lat":47.0655392,"lon":9.5073747},{"lat":47.0655224,"lon":9.5074147},{"lat":47.06552,"lon":9.5074566},{"lat":47.0655334,"lon":9.5075024},{"lat":47.065554,"lon":9.5075276},{"lat":47.0655779,"lon":9.5075382}]},{"type":"way","id":328,"tags":{"bicycle":"yes","foot":"yes","highway":"secondary","motorcar":"yes","motorcycle":"yes","name":"Neue Churer Strasse"},"nodes":[5101,24796,524],"geometry":[{"lat":47.0655334,"lon":9.5075024},{"lat":47.0654401,"lon":9.5075522},{"lat":47.0652024,"lon":9.507682}]},{"type":"way","id":329,"tags":{"bicycle":"yes","foot":"yes","highway":"secondary","motorcar":"yes","motorcycle":"yes","name":"Höfle"},"nodes":[516,24758,517,24775,5109,24845,518,24799,24756,5108,18977,40678,519,13767,24769,520,24647,13731],"geometry":[{"lat":47.0699127,"lon":9.5071343},{"lat":47.0698245,"lon":9.5070659},{"lat":47.0696943,"lon":9.5069887},{"lat":47.0695636,"lon":9.5069462},{"lat":47.0694152,"lon":9.5069241},{"lat":47.0692511,"lon":9.5069281},{"lat":47.0690909,"lon":9.5069603},{"lat":47.0688894,"lon":9.5070153},{"lat":47.0687518,"lon":9.5070499},{"lat":47.0681846,"lon":9.5072003},{"lat":47.0680685,"lon":9.5072145},{"lat":47.0680144,"lon":9.5072243},{"lat":47.0672808,"lon":9.5073572},{"lat":47.0669101,"lon":9.5073672},{"lat":47.0668212,"lon":9.5073717},{"lat":47.066719,"lon":9.5073787},{"lat":47.0666212,"lon":9.5074103},{"lat":47.0664715,"lon":9.5074881}]},{"type":"way","id":382,"tags":{"landuse":"forest"},"nodes":[5421,41406,9688,9689,5422,9685,9686,5423,41168,5424,41167,41416,5425,5426,5427,9687,9690,9691,5421],"geometry":[{"lat":47.0687142,"lon":9.4815629},{"lat":47.0683933,"lon":9.4821518},{"lat":47.0681529,"lon":9.4825929},{"lat":47.0683692,"lon":9.4847129},{"lat":47.0680769,"lon":9.4856742},{"lat":47.0681003,"lon":9.4865153},{"lat":47.0686908,"lon":9.4881976},{"lat":47.0696028,"lon":9.4899571},{"lat":47.0696488,"lon":9.4900498},{"lat":47.0705147,"lon":9.4917939},{"lat":47.0706332,"lon":9.491966},{"lat":47.0711895,"lon":9.4927738},{"lat":47.0721048,"lon":9.4941028},{"lat":47.0732505,"lon":9.4931758},{"lat":47.0708304,"lon":9.4871934},{"lat":47.0701523,"lon":9.4876826},{"lat":47.0687317,"lon":9.4839232},{"lat":47.0694274,"lon":9.4833138},{"lat":47.0687142,"lon":9.4815629}]},{"type":"way","id":385,"tags":{"landuse":"forest"},"nodes":[5503,5504,5505,5506,5507,5508,5509,5510,5511,34535,34534,34533,34531,34528,34526,34524,34522,34518,34517,34512,34508,34509,34511,34515,34519,34523,34521,34516,34507,34500,34491,34494,34497,34492,34484,34482,34486,34489,34498,34510,34514,34513,5512,34493,34475,5513,34465,34454,34451,34447,34448,34450,34453,34452,34455,34458,34461,5514,34464,5515,5516,34449,34444,5517,34436,34428,34422,34423,34426,34420,5518,34405,5519,34389,34386,34380,34370,34366,34361,34354,34351,5520,34359,34358,34369,34376,34374,34378,34383,5521,34394,34400,34399,34392,34387,34390,34393,34402,34404,34414,34424,34429,34434,34441,34442,34440,34443,34446,34445,34439,34438,34437,34435,34433,34430,34425,34416,5522,34407,34406,34408,34417,34419,34432,34431,34427,34418,34413,34412,34411,34410,34401,34375,34371,34362,34350,34346,34340,34339,34343,34347,34348,5523,34329,34316,34317,34320,34333,34341,34356,34363,34360,34367,34384,34397,34395,34391,34385,34377,34353,34342,34338,34335,34331,34326,34315,34312,34313,34321,34328,34332,34336,34337,34334,34330,34327,34323,34319,34314,34309,34308,34306,34301,34298,34297,34302,34305,34307,34303,34300,34296,34292,34290,34291,34294,34295,34293,34288,34284,34282,34285,34283,34286,5524,34280,34276,34274,34275,34281,34279,34277,34273,34268,34264,34265,34266,5525,34263,34262,34260,34259,34256,34257,34258,34255,5526,5527,34239,34240,34242,34243,34246,34248,34253,34252,34251,34250,34249,34247,34245,34238,34237,34236,34232,34212,5528,34205,34210,34216,34222,34221,34225,34231,34235,34234,5529,34229,34214,34206,34200,34201,34211,34220,34223,34219,34209,34198,34208,34204,34196,34194,34195,34199,34202,34203,34207,34218,34227,34226,34217,34215,34228,34233,34230,34224,34213,34197,34193,34190,34184,34182,34185,34183,34181,34176,34171,34167,34169,34172,34180,34186,34188,34192,34191,34189,34187,34179,34174,34170,34168,34177,34178,34173,34175,34166,34162,34161,34159,34163,34165,34164,34160,34156,34154,34158,34157,34155,34153,34152,5419,5420,34151,34150,34149,5530,34148,34147,34146,34145,34144,34142,34140,5531,12225,12226,636,10026,5532,10027,10678,10028,10029,5533,5534,10038,5535,10039,10040,10041,34241,10042,10043,10044,10045,10046,34269,34267,34270,34271,34272,5536,34278,34287,34289,34299,34304,34310,34311,34318,34324,34322,34325,5537,34344,34357,34373,34382,34381,34372,34364,34352,34349,34345,34355,34365,34368,34379,34388,34398,34396,34403,34409,34415,34421,5538,5539,34520,34525,34527,34529,34530,34532,34536,34537,5540,34538,34539,34540,34541,34542,5541,34543,34544,34545,34546,34547,5542,34550,34555,34556,5543,5544,34558,34559,5545,34553,34552,34551,34548,34549,5546,5547,34554,34557,34560,34561,34562,5548,34563,34564,34565,34567,34571,5549,34575,34576,34577,34581,34585,34587,34586,34583,34580,34579,34589,34591,34595,34598,34597,34596,34599,5550,5503],"geometry":[{"lat":47.0815448,"lon":9.5296923},{"lat":47.0804329,"lon":9.5350777},{"lat":47.0782119,"lon":9.5337044},{"lat":47.0769259,"lon":9.5381676},{"lat":47.07564,"lon":9.5412575},{"lat":47.0734187,"lon":9.545034},{"lat":47.0718988,"lon":9.5443474},{"lat":47.0715481,"lon":9.5371376},{"lat":47.0699112,"lon":9.5319878},{"lat":47.069096,"lon":9.5304379},{"lat":47.0690636,"lon":9.5298836},{"lat":47.069042,"lon":9.5292977},{"lat":47.0687616,"lon":9.5288226},{"lat":47.0683085,"lon":9.5283316},{"lat":47.0678568,"lon":9.5276308},{"lat":47.0675365,"lon":9.5269925},{"lat":47.0673534,"lon":9.5268245},{"lat":47.0671932,"lon":9.5269365},{"lat":47.066972,"lon":9.5270261},{"lat":47.0667737,"lon":9.5269477},{"lat":47.066583,"lon":9.5268581},{"lat":47.066583,"lon":9.5269589},{"lat":47.0666517,"lon":9.5274628},{"lat":47.0669262,"lon":9.5278324},{"lat":47.0672771,"lon":9.5283923},{"lat":47.0674297,"lon":9.528941},{"lat":47.0673458,"lon":9.5290082},{"lat":47.0669491,"lon":9.5286946},{"lat":47.0665525,"lon":9.5283587},{"lat":47.0663084,"lon":9.5279331},{"lat":47.0661559,"lon":9.527642},{"lat":47.0661787,"lon":9.5274964},{"lat":47.0662626,"lon":9.5273284},{"lat":47.0661711,"lon":9.5271381},{"lat":47.0659499,"lon":9.5268805},{"lat":47.0658965,"lon":9.5269925},{"lat":47.0660186,"lon":9.5274516},{"lat":47.0660872,"lon":9.5277988},{"lat":47.0663008,"lon":9.5281235},{"lat":47.0665906,"lon":9.5285714},{"lat":47.0668729,"lon":9.528829},{"lat":47.0668042,"lon":9.5289074},{"lat":47.0664838,"lon":9.5287506},{"lat":47.0661711,"lon":9.5283139},{"lat":47.0656448,"lon":9.5277204},{"lat":47.0654846,"lon":9.5278772},{"lat":47.0652024,"lon":9.5283923},{"lat":47.0647676,"lon":9.5296689},{"lat":47.0645693,"lon":9.5298928},{"lat":47.0643252,"lon":9.5297473},{"lat":47.0643557,"lon":9.5300384},{"lat":47.0644777,"lon":9.5306207},{"lat":47.0647447,"lon":9.5313822},{"lat":47.0647371,"lon":9.5318525},{"lat":47.064821,"lon":9.5325244},{"lat":47.0650041,"lon":9.5331739},{"lat":47.0650838,"lon":9.5337364},{"lat":47.0652025,"lon":9.5345203},{"lat":47.0651485,"lon":9.5350034},{"lat":47.0650514,"lon":9.5353993},{"lat":47.0646092,"lon":9.5355022},{"lat":47.0644042,"lon":9.5352409},{"lat":47.0642208,"lon":9.5350192},{"lat":47.063908,"lon":9.5342353},{"lat":47.0638324,"lon":9.5340056},{"lat":47.0632985,"lon":9.5330317},{"lat":47.0630126,"lon":9.5321052},{"lat":47.0630881,"lon":9.5316618},{"lat":47.0631151,"lon":9.5307195},{"lat":47.0629317,"lon":9.5298089},{"lat":47.0626242,"lon":9.5293021},{"lat":47.0620093,"lon":9.5289141},{"lat":47.0613754,"lon":9.5287262},{"lat":47.0611327,"lon":9.5288778},{"lat":47.0610259,"lon":9.5293369},{"lat":47.0607665,"lon":9.530076},{"lat":47.0605682,"lon":9.5303},{"lat":47.0604843,"lon":9.5306359},{"lat":47.0603622,"lon":9.5309383},{"lat":47.0602402,"lon":9.5311063},{"lat":47.0602173,"lon":9.531655},{"lat":47.0603317,"lon":9.5320581},{"lat":47.0603317,"lon":9.5323829},{"lat":47.0603241,"lon":9.5324948},{"lat":47.0605529,"lon":9.5326292},{"lat":47.060675,"lon":9.5328644},{"lat":47.0606063,"lon":9.5332899},{"lat":47.0607208,"lon":9.5336483},{"lat":47.0607971,"lon":9.5339954},{"lat":47.0610412,"lon":9.5343985},{"lat":47.0613082,"lon":9.5343761},{"lat":47.0614607,"lon":9.5340178},{"lat":47.0614607,"lon":9.5336483},{"lat":47.0612624,"lon":9.5334243},{"lat":47.0610869,"lon":9.5330995},{"lat":47.0611403,"lon":9.5329204},{"lat":47.0612929,"lon":9.5328756},{"lat":47.0616209,"lon":9.532842},{"lat":47.0619413,"lon":9.5331331},{"lat":47.0625592,"lon":9.5337266},{"lat":47.0630932,"lon":9.5345217},{"lat":47.0633068,"lon":9.5349249},{"lat":47.0635738,"lon":9.5353056},{"lat":47.0641007,"lon":9.5355422},{"lat":47.0641465,"lon":9.5359117},{"lat":47.0640931,"lon":9.5363709},{"lat":47.0641846,"lon":9.5367852},{"lat":47.0643143,"lon":9.5371883},{"lat":47.0642228,"lon":9.5374011},{"lat":47.0640168,"lon":9.5374347},{"lat":47.0638795,"lon":9.5376811},{"lat":47.0638719,"lon":9.538241},{"lat":47.0637803,"lon":9.5386217},{"lat":47.0635286,"lon":9.5387113},{"lat":47.0633989,"lon":9.5386665},{"lat":47.0630938,"lon":9.5383754},{"lat":47.0627048,"lon":9.5380506},{"lat":47.0625448,"lon":9.5378243},{"lat":47.0621174,"lon":9.5375019},{"lat":47.0620487,"lon":9.5375019},{"lat":47.0621403,"lon":9.5377259},{"lat":47.0627734,"lon":9.5384873},{"lat":47.0629031,"lon":9.5388121},{"lat":47.0634371,"lon":9.5397975},{"lat":47.0634294,"lon":9.5399319},{"lat":47.0632235,"lon":9.5400439},{"lat":47.0628497,"lon":9.5398647},{"lat":47.0625217,"lon":9.5396856},{"lat":47.0624683,"lon":9.5398871},{"lat":47.0624225,"lon":9.5402903},{"lat":47.0621937,"lon":9.5404918},{"lat":47.0614919,"lon":9.540559},{"lat":47.060668,"lon":9.540615},{"lat":47.0605688,"lon":9.540503},{"lat":47.0603628,"lon":9.5399991},{"lat":47.0601416,"lon":9.5396408},{"lat":47.059989,"lon":9.5395848},{"lat":47.0598594,"lon":9.5396296},{"lat":47.059806,"lon":9.5398199},{"lat":47.0599204,"lon":9.5400327},{"lat":47.0600043,"lon":9.5403127},{"lat":47.0600119,"lon":9.5404246},{"lat":47.0596213,"lon":9.5402275},{"lat":47.0592262,"lon":9.5399767},{"lat":47.0587532,"lon":9.5398759},{"lat":47.0587532,"lon":9.5399207},{"lat":47.0589522,"lon":9.5400498},{"lat":47.0595015,"lon":9.5403745},{"lat":47.0598905,"lon":9.5407889},{"lat":47.0602872,"lon":9.5410464},{"lat":47.060394,"lon":9.5412256},{"lat":47.0603406,"lon":9.5414944},{"lat":47.0605161,"lon":9.5418079},{"lat":47.0608975,"lon":9.5422782},{"lat":47.0614544,"lon":9.5429837},{"lat":47.0614086,"lon":9.5433085},{"lat":47.0612332,"lon":9.5433533},{"lat":47.0609509,"lon":9.5432973},{"lat":47.0606915,"lon":9.5429949},{"lat":47.0602338,"lon":9.5425134},{"lat":47.0598982,"lon":9.5421886},{"lat":47.0597685,"lon":9.5419759},{"lat":47.0596159,"lon":9.5416063},{"lat":47.0594328,"lon":9.541304},{"lat":47.05912,"lon":9.541192},{"lat":47.0587386,"lon":9.5410464},{"lat":47.0586623,"lon":9.541136},{"lat":47.0586699,"lon":9.5412592},{"lat":47.0589522,"lon":9.5415951},{"lat":47.0592192,"lon":9.5419759},{"lat":47.0594328,"lon":9.5425582},{"lat":47.0596159,"lon":9.5428829},{"lat":47.0596998,"lon":9.5432525},{"lat":47.0595549,"lon":9.5434652},{"lat":47.0594176,"lon":9.5434876},{"lat":47.0591887,"lon":9.5431741},{"lat":47.0590132,"lon":9.5429501},{"lat":47.0588378,"lon":9.5421103},{"lat":47.0586776,"lon":9.5419871},{"lat":47.0583343,"lon":9.5417631},{"lat":47.0582046,"lon":9.5415727},{"lat":47.0580215,"lon":9.5412256},{"lat":47.0577621,"lon":9.5410128},{"lat":47.0576248,"lon":9.541136},{"lat":47.0575561,"lon":9.5415279},{"lat":47.057846,"lon":9.5419871},{"lat":47.0579757,"lon":9.5423342},{"lat":47.0580215,"lon":9.5426142},{"lat":47.0579299,"lon":9.5426926},{"lat":47.0576553,"lon":9.5424014},{"lat":47.0573196,"lon":9.5421103},{"lat":47.0571442,"lon":9.5418079},{"lat":47.0570755,"lon":9.5413936},{"lat":47.0570908,"lon":9.540968},{"lat":47.0571823,"lon":9.5408113},{"lat":47.0572433,"lon":9.5407105},{"lat":47.0571747,"lon":9.5405761},{"lat":47.0569992,"lon":9.5404977},{"lat":47.0568085,"lon":9.5408449},{"lat":47.0567703,"lon":9.5412592},{"lat":47.0568237,"lon":9.5418975},{"lat":47.056778,"lon":9.5426478},{"lat":47.0568695,"lon":9.5431293},{"lat":47.0566705,"lon":9.5432018},{"lat":47.0564569,"lon":9.5432018},{"lat":47.0561822,"lon":9.543437},{"lat":47.0561212,"lon":9.5436945},{"lat":47.0561441,"lon":9.5438961},{"lat":47.0564645,"lon":9.5441089},{"lat":47.0563958,"lon":9.544512},{"lat":47.0562814,"lon":9.5445456},{"lat":47.056022,"lon":9.5443776},{"lat":47.054776,"lon":9.5468451},{"lat":47.0546182,"lon":9.5472619},{"lat":47.0546393,"lon":9.5481574},{"lat":47.0546393,"lon":9.5490683},{"lat":47.0543973,"lon":9.5498248},{"lat":47.0544289,"lon":9.550535},{"lat":47.0541975,"lon":9.5514305},{"lat":47.0538714,"lon":9.55194},{"lat":47.0536926,"lon":9.5522024},{"lat":47.0535453,"lon":9.5521098},{"lat":47.0535769,"lon":9.5513379},{"lat":47.0536295,"lon":9.5499483},{"lat":47.0535453,"lon":9.5494697},{"lat":47.0511502,"lon":9.549979},{"lat":47.0506946,"lon":9.5509056},{"lat":47.0506105,"lon":9.550782},{"lat":47.0508103,"lon":9.5496859},{"lat":47.050926,"lon":9.5486514},{"lat":47.0509576,"lon":9.5475398},{"lat":47.0516939,"lon":9.5473546},{"lat":47.0520306,"lon":9.5473546},{"lat":47.0527248,"lon":9.5465363},{"lat":47.0526302,"lon":9.5459496},{"lat":47.0525565,"lon":9.5449924},{"lat":47.0525565,"lon":9.544591},{"lat":47.0522094,"lon":9.5448225},{"lat":47.0517886,"lon":9.5456717},{"lat":47.0514099,"lon":9.5459033},{"lat":47.0504529,"lon":9.5457273},{"lat":47.0504529,"lon":9.5454106},{"lat":47.0500537,"lon":9.5451889},{"lat":47.0498918,"lon":9.5452998},{"lat":47.0494818,"lon":9.5453631},{"lat":47.0491581,"lon":9.5450147},{"lat":47.0493307,"lon":9.5449513},{"lat":47.0494602,"lon":9.544698},{"lat":47.0495573,"lon":9.5443337},{"lat":47.0496436,"lon":9.5436686},{"lat":47.0496328,"lon":9.5431301},{"lat":47.0497407,"lon":9.5425283},{"lat":47.0498918,"lon":9.5422116},{"lat":47.0500537,"lon":9.5417206},{"lat":47.0500429,"lon":9.5408813},{"lat":47.0499134,"lon":9.5406279},{"lat":47.0498055,"lon":9.5404062},{"lat":47.0495141,"lon":9.5403587},{"lat":47.0493523,"lon":9.5403904},{"lat":47.049266,"lon":9.5400895},{"lat":47.0493036,"lon":9.5399295},{"lat":47.049466,"lon":9.5399233},{"lat":47.0496129,"lon":9.5400017},{"lat":47.049653,"lon":9.5399103},{"lat":47.0496129,"lon":9.5397339},{"lat":47.049426,"lon":9.5395902},{"lat":47.0492552,"lon":9.5394402},{"lat":47.0493961,"lon":9.5391074},{"lat":47.0493204,"lon":9.538807},{"lat":47.0491424,"lon":9.538807},{"lat":47.0490579,"lon":9.5387221},{"lat":47.0490935,"lon":9.5386241},{"lat":47.0492658,"lon":9.5383689},{"lat":47.0493058,"lon":9.5381272},{"lat":47.0493103,"lon":9.5380031},{"lat":47.0493859,"lon":9.5379705},{"lat":47.0495862,"lon":9.537977},{"lat":47.0497731,"lon":9.5378464},{"lat":47.0497598,"lon":9.537657},{"lat":47.0495595,"lon":9.5375459},{"lat":47.049555,"lon":9.5372978},{"lat":47.049782,"lon":9.5371214},{"lat":47.0498977,"lon":9.5369908},{"lat":47.0498755,"lon":9.5368732},{"lat":47.0496886,"lon":9.5368144},{"lat":47.0494838,"lon":9.5364226},{"lat":47.0492124,"lon":9.5359654},{"lat":47.048981,"lon":9.5358609},{"lat":47.0488964,"lon":9.5357433},{"lat":47.0487807,"lon":9.5354298},{"lat":47.0487407,"lon":9.5354037},{"lat":47.0487896,"lon":9.5357564},{"lat":47.0487674,"lon":9.5360633},{"lat":47.0486339,"lon":9.5361091},{"lat":47.0484736,"lon":9.5361025},{"lat":47.048398,"lon":9.5360699},{"lat":47.0483579,"lon":9.5361874},{"lat":47.0483935,"lon":9.5363964},{"lat":47.0484113,"lon":9.5365401},{"lat":47.0486072,"lon":9.536625},{"lat":47.0487896,"lon":9.5370038},{"lat":47.0488875,"lon":9.5374414},{"lat":47.0489365,"lon":9.5376047},{"lat":47.0489276,"lon":9.5378725},{"lat":47.048892,"lon":9.5379313},{"lat":47.0487908,"lon":9.5378273},{"lat":47.0485683,"lon":9.5375334},{"lat":47.048466,"lon":9.5373766},{"lat":47.0483948,"lon":9.5373766},{"lat":47.0483725,"lon":9.5376183},{"lat":47.0485149,"lon":9.5380689},{"lat":47.0485639,"lon":9.5382192},{"lat":47.0484526,"lon":9.5384608},{"lat":47.048466,"lon":9.5387547},{"lat":47.0483147,"lon":9.5388396},{"lat":47.0480655,"lon":9.5388331},{"lat":47.0478874,"lon":9.5387482},{"lat":47.0478207,"lon":9.5387482},{"lat":47.0480877,"lon":9.5392772},{"lat":47.0482301,"lon":9.5397279},{"lat":47.0481723,"lon":9.539852},{"lat":47.047834,"lon":9.5399173},{"lat":47.0477005,"lon":9.5398389},{"lat":47.0475581,"lon":9.5397801},{"lat":47.0477984,"lon":9.5403288},{"lat":47.0477762,"lon":9.5404398},{"lat":47.0476427,"lon":9.5404986},{"lat":47.0472866,"lon":9.5402504},{"lat":47.0464455,"lon":9.5396365},{"lat":47.0449228,"lon":9.538002},{"lat":47.0429931,"lon":9.531625},{"lat":47.0427832,"lon":9.5306445},{"lat":47.0425691,"lon":9.5298837},{"lat":47.0421302,"lon":9.5292505},{"lat":47.0417879,"lon":9.5285081},{"lat":47.0412151,"lon":9.5279841},{"lat":47.0409919,"lon":9.527602},{"lat":47.040672,"lon":9.5272745},{"lat":47.0399875,"lon":9.5272636},{"lat":47.0397048,"lon":9.5270016},{"lat":47.0393774,"lon":9.5270234},{"lat":47.0392063,"lon":9.5267286},{"lat":47.0393811,"lon":9.5261532},{"lat":47.0396115,"lon":9.5240669},{"lat":47.0411732,"lon":9.5209512},{"lat":47.0418428,"lon":9.5206323},{"lat":47.0437379,"lon":9.5198169},{"lat":47.0450129,"lon":9.5186153},{"lat":47.0453814,"lon":9.518581},{"lat":47.0456034,"lon":9.5189595},{"lat":47.0461417,"lon":9.519877},{"lat":47.0466622,"lon":9.5208984},{"lat":47.0484635,"lon":9.5210786},{"lat":47.0496683,"lon":9.5204006},{"lat":47.049177,"lon":9.5174909},{"lat":47.0498496,"lon":9.5140319},{"lat":47.04968,"lon":9.5137144},{"lat":47.0507326,"lon":9.5107618},{"lat":47.0513525,"lon":9.5113969},{"lat":47.050905,"lon":9.5123386},{"lat":47.0506649,"lon":9.5141453},{"lat":47.0512181,"lon":9.5147615},{"lat":47.0517502,"lon":9.5134826},{"lat":47.0528165,"lon":9.5132078},{"lat":47.0541537,"lon":9.5123067},{"lat":47.0548043,"lon":9.5121457},{"lat":47.0547597,"lon":9.5114252},{"lat":47.0549308,"lon":9.5114798},{"lat":47.0549531,"lon":9.5118946},{"lat":47.0553027,"lon":9.5122767},{"lat":47.0558802,"lon":9.5123498},{"lat":47.0563532,"lon":9.5123946},{"lat":47.0569101,"lon":9.5125626},{"lat":47.0570322,"lon":9.5124842},{"lat":47.0576348,"lon":9.5126186},{"lat":47.0579476,"lon":9.5127081},{"lat":47.0583367,"lon":9.5126969},{"lat":47.0584588,"lon":9.5127081},{"lat":47.0587639,"lon":9.5126969},{"lat":47.0590614,"lon":9.5129545},{"lat":47.0590004,"lon":9.5131001},{"lat":47.0591148,"lon":9.513324},{"lat":47.0595044,"lon":9.5134483},{"lat":47.0599277,"lon":9.5133975},{"lat":47.0603107,"lon":9.5136113},{"lat":47.0605966,"lon":9.5137142},{"lat":47.0607854,"lon":9.5135558},{"lat":47.0607692,"lon":9.5134371},{"lat":47.0605696,"lon":9.5132233},{"lat":47.0604132,"lon":9.5131282},{"lat":47.0602244,"lon":9.5127165},{"lat":47.0600625,"lon":9.5121464},{"lat":47.059987,"lon":9.5113783},{"lat":47.0602675,"lon":9.511212},{"lat":47.0604509,"lon":9.5122572},{"lat":47.060548,"lon":9.5126135},{"lat":47.060753,"lon":9.5129936},{"lat":47.0610928,"lon":9.5132391},{"lat":47.0614596,"lon":9.5133895},{"lat":47.0614381,"lon":9.5140072},{"lat":47.0617941,"lon":9.5140943},{"lat":47.0621717,"lon":9.5141101},{"lat":47.0626949,"lon":9.5136746},{"lat":47.0629969,"lon":9.5136429},{"lat":47.0630994,"lon":9.5142685},{"lat":47.0672954,"lon":9.5132681},{"lat":47.0673412,"lon":9.5137608},{"lat":47.0677683,"lon":9.5145447},{"lat":47.0680276,"lon":9.5148582},{"lat":47.0683938,"lon":9.5148582},{"lat":47.0686531,"lon":9.5136152},{"lat":47.0689963,"lon":9.5132793},{"lat":47.0693853,"lon":9.5134472},{"lat":47.069698,"lon":9.5139288},{"lat":47.070026,"lon":9.5143095},{"lat":47.0700946,"lon":9.5146678},{"lat":47.0703845,"lon":9.5149478},{"lat":47.0707124,"lon":9.5149478},{"lat":47.0709641,"lon":9.514959},{"lat":47.0712082,"lon":9.5151718},{"lat":47.0715667,"lon":9.5157765},{"lat":47.0719099,"lon":9.5160228},{"lat":47.072337,"lon":9.5159556},{"lat":47.0727565,"lon":9.5158213},{"lat":47.0731683,"lon":9.5154517},{"lat":47.07342,"lon":9.5149702},{"lat":47.0742513,"lon":9.514735},{"lat":47.0744419,"lon":9.5154741},{"lat":47.0752504,"lon":9.5151158},{"lat":47.0754334,"lon":9.5155749},{"lat":47.0759291,"lon":9.5154405},{"lat":47.0761076,"lon":9.5163666},{"lat":47.0758757,"lon":9.5165156},{"lat":47.0759367,"lon":9.5167619},{"lat":47.0749385,"lon":9.5168816},{"lat":47.0745411,"lon":9.5172882},{"lat":47.0744648,"lon":9.5175122},{"lat":47.0744496,"lon":9.5180273},{"lat":47.0741826,"lon":9.5191247},{"lat":47.0742665,"lon":9.5197295},{"lat":47.0742437,"lon":9.5207933},{"lat":47.0743504,"lon":9.5208605},{"lat":47.0750978,"lon":9.5204237},{"lat":47.0755554,"lon":9.520379},{"lat":47.0759444,"lon":9.520379},{"lat":47.0764782,"lon":9.5201774},{"lat":47.0765545,"lon":9.5205021},{"lat":47.076809,"lon":9.5206581},{"lat":47.0770035,"lon":9.5206565},{"lat":47.0772302,"lon":9.5209567},{"lat":47.0776243,"lon":9.5213279},{"lat":47.0783751,"lon":9.5227253},{"lat":47.0790108,"lon":9.5239699},{"lat":47.0794978,"lon":9.524778},{"lat":47.0796469,"lon":9.5247959},{"lat":47.0800254,"lon":9.5251355},{"lat":47.0801673,"lon":9.525591},{"lat":47.0805037,"lon":9.5260619},{"lat":47.0807929,"lon":9.5261931},{"lat":47.0808665,"lon":9.5261082},{"lat":47.0808139,"lon":9.5255524},{"lat":47.0807403,"lon":9.5250969},{"lat":47.0804985,"lon":9.5244716},{"lat":47.0804196,"lon":9.5242246},{"lat":47.0809453,"lon":9.5237769},{"lat":47.0812765,"lon":9.5234372},{"lat":47.0815551,"lon":9.5233446},{"lat":47.0816655,"lon":9.5242478},{"lat":47.0815919,"lon":9.5247804},{"lat":47.0815761,"lon":9.5254752},{"lat":47.0817128,"lon":9.525977},{"lat":47.0820428,"lon":9.5272799},{"lat":47.0815448,"lon":9.5296923}]},{"type":"way","id":386,"tags":{"natural":"scrub"},"nodes":[5552,46306,46172,43239,43237,5553,5554,5555,5556,5557,44024,5558,5559,5560,5561,5562,5563,5564,5565,5566,5552],"geometry":[{"lat":47.068055,"lon":9.4958825},{"lat":47.0629162,"lon":9.4809602},{"lat":47.0627529,"lon":9.480557},{"lat":47.058401,"lon":9.4834914},{"lat":47.0582857,"lon":9.4833461},{"lat":47.0627347,"lon":9.480433},{"lat":47.0617992,"lon":9.4788451},{"lat":47.0614192,"lon":9.4777293},{"lat":47.0611853,"lon":9.4767422},{"lat":47.0603119,"lon":9.4752938},{"lat":47.060274,"lon":9.4749172},{"lat":47.0607248,"lon":9.4739259},{"lat":47.0611159,"lon":9.4738562},{"lat":47.0611575,"lon":9.4749372},{"lat":47.0614192,"lon":9.4760985},{"lat":47.06177,"lon":9.4772143},{"lat":47.0622085,"lon":9.4777722},{"lat":47.0623254,"lon":9.4791026},{"lat":47.0628224,"lon":9.4800467},{"lat":47.0682304,"lon":9.4957967},{"lat":47.068055,"lon":9.4958825}]},{"type":"way","id":388,"tags":{"created_by":"Potlatch 0.10f","natural":"scrub"},"nodes":[5578,5579,5580,5581,5582,5583,5584,5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,9274,5615,9273,5616,5617,5578],"geometry":[{"lat":47.0647616,"lon":9.4753806},{"lat":47.064898,"lon":9.4766135},{"lat":47.0663888,"lon":9.4831795},{"lat":47.066915,"lon":9.4848962},{"lat":47.0677335,"lon":9.4867844},{"lat":47.0682304,"lon":9.488029},{"lat":47.0683473,"lon":9.4901747},{"lat":47.0684058,"lon":9.4921918},{"lat":47.0690196,"lon":9.4942517},{"lat":47.069955,"lon":9.4958825},{"lat":47.0712118,"lon":9.4966979},{"lat":47.0720595,"lon":9.4988007},{"lat":47.072381,"lon":9.500174},{"lat":47.0734917,"lon":9.5009894},{"lat":47.0743393,"lon":9.5018906},{"lat":47.0743685,"lon":9.5025773},{"lat":47.0742808,"lon":9.5036931},{"lat":47.0747192,"lon":9.5051951},{"lat":47.0750992,"lon":9.5058818},{"lat":47.0749823,"lon":9.5068259},{"lat":47.0747485,"lon":9.5067401},{"lat":47.0748946,"lon":9.5058818},{"lat":47.0745731,"lon":9.5051522},{"lat":47.0741055,"lon":9.5038647},{"lat":47.0741347,"lon":9.5026202},{"lat":47.0741347,"lon":9.5018906},{"lat":47.0734917,"lon":9.5013756},{"lat":47.0721179,"lon":9.5003886},{"lat":47.0716503,"lon":9.4990582},{"lat":47.0710657,"lon":9.4968266},{"lat":47.0698965,"lon":9.4960112},{"lat":47.068815,"lon":9.4944234},{"lat":47.0682304,"lon":9.492063},{"lat":47.0681719,"lon":9.4901318},{"lat":47.068055,"lon":9.4881148},{"lat":47.0674996,"lon":9.4866128},{"lat":47.0667981,"lon":9.4848962},{"lat":47.0667651,"lon":9.4847913},{"lat":47.0662719,"lon":9.4832225},{"lat":47.0661626,"lon":9.4827504},{"lat":47.0647518,"lon":9.4766564},{"lat":47.0641691,"lon":9.4743115},{"lat":47.0647616,"lon":9.4753806}]},{"type":"way","id":394,"tags":{"highway":"service"},"nodes":[513,24843,24778,498],"geometry":[{"lat":47.0727085,"lon":9.5092804},{"lat":47.07288,"lon":9.5095651},{"lat":47.0731029,"lon":9.5097918},{"lat":47.0731871,"lon":9.5097693}]},{"type":"way","id":662,"tags":{"highway":"tertiary","lanes":"1","layer":"0","maxspeed":"50","name":"Rheinstrasse"},"nodes":[726,24635,24612,8539,24711,24640,8566,24704,8558,720,24721,24720,24708,5095,24735,33536,41307,5097],"geometry":[{"lat":47.0639149,"lon":9.4915081},{"lat":47.0638759,"lon":9.4915132},{"lat":47.0638345,"lon":9.4915348},{"lat":47.0637794,"lon":9.4915889},{"lat":47.0633546,"lon":9.4925045},{"lat":47.0632975,"lon":9.4926275},{"lat":47.0632541,"lon":9.4927234},{"lat":47.0631389,"lon":9.4929596},{"lat":47.0629461,"lon":9.4933723},{"lat":47.0626745,"lon":9.4939517},{"lat":47.0626662,"lon":9.4939721},{"lat":47.0626236,"lon":9.4940639},{"lat":47.0625253,"lon":9.4942619},{"lat":47.0624304,"lon":9.4944239},{"lat":47.0623233,"lon":9.4945776},{"lat":47.0621801,"lon":9.4947404},{"lat":47.0617427,"lon":9.4951666},{"lat":47.061285,"lon":9.4956259}]},{"type":"way","id":663,"tags":{"highway":"tertiary","name":"Schlossweg"},"nodes":[542,24810,24785,24856,24831,24738,24806,540,24838,24811,24743,5088],"geometry":[{"lat":47.0662391,"lon":9.4975803},{"lat":47.0662708,"lon":9.4975863},{"lat":47.0663284,"lon":9.4975872},{"lat":47.0663854,"lon":9.4975694},{"lat":47.0664407,"lon":9.4975422},{"lat":47.0665777,"lon":9.4974446},{"lat":47.0668581,"lon":9.4972433},{"lat":47.0671925,"lon":9.4970467},{"lat":47.0674791,"lon":9.4968758},{"lat":47.0680471,"lon":9.4965082},{"lat":47.0681611,"lon":9.4964676},{"lat":47.0682359,"lon":9.4964426}]},{"type":"way","id":668,"tags":{"highway":"residential","name":"Gatter"},"nodes":[8549,24677,721,24686,24726,8547,8548,24801,5098],"geometry":[{"lat":47.0607734,"lon":9.4936745},{"lat":47.0607709,"lon":9.4937763},{"lat":47.0607566,"lon":9.4947235},{"lat":47.0607578,"lon":9.4949},{"lat":47.06078,"lon":9.4950803},{"lat":47.0607988,"lon":9.4951692},{"lat":47.0609327,"lon":9.495629},{"lat":47.0609623,"lon":9.4957226},{"lat":47.0609917,"lon":9.4957798}]},{"type":"way","id":669,"tags":{"highway":"residential","name":"Finne"},"nodes":[8558,8557,45637,45379,45212,8559],"geometry":[{"lat":47.0629461,"lon":9.4933723},{"lat":47.0627785,"lon":9.4929546},{"lat":47.0621803,"lon":9.4915022},{"lat":47.0618689,"lon":9.4907463},{"lat":47.0616816,"lon":9.4902914},{"lat":47.0614301,"lon":9.4896809}]},{"type":"way","id":673,"tags":{"highway":"residential","name":"Unterm Schloss"},"nodes":[8571,8570,8591],"geometry":[{"lat":47.066079,"lon":9.5003434},{"lat":47.0658707,"lon":9.500084},{"lat":47.0657551,"lon":9.4997787}]},{"type":"way","id":675,"tags":{"highway":"residential","name":"Fürstenstrasse"},"nodes":[8571,8572,8573,24855,8637,38299,53503,53504,25325,25333,8574],"geometry":[{"lat":47.066079,"lon":9.5003434},{"lat":47.0662241,"lon":9.5005751},{"lat":47.0662999,"lon":9.5008623},{"lat":47.0663331,"lon":9.5011161},{"lat":47.0663868,"lon":9.5016624},{"lat":47.0664349,"lon":9.5021664},{"lat":47.0664685,"lon":9.5025187},{"lat":47.0665151,"lon":9.503006},{"lat":47.0665461,"lon":9.5033312},{"lat":47.0665677,"lon":9.5035046},{"lat":47.0665857,"lon":9.5035774}]},{"type":"way","id":676,"tags":{"highway":"residential","name":"Schlossweg","oneway":"yes"},"nodes":[8569,8575],"geometry":[{"lat":47.0652468,"lon":9.4984155},{"lat":47.0653227,"lon":9.498363}]},{"type":"way","id":677,"tags":{"highway":"residential","name":"Schlossweg"},"nodes":[8575,8576,24788,542],"geometry":[{"lat":47.0653227,"lon":9.498363},{"lat":47.0658884,"lon":9.4979573},{"lat":47.0661471,"lon":9.4978145},{"lat":47.0662391,"lon":9.4975803}]},{"type":"way","id":678,"tags":{"bicycle":"yes","foot":"yes","highway":"residential","maxspeed":"50","name":"Alberweg","surface":"asphalt"},"nodes":[8576,8577],"geometry":[{"lat":47.0658884,"lon":9.4979573},{"lat":47.0666111,"lon":9.5001494}]},{"type":"way","id":679,"tags":{"highway":"cycleway","name":"Heraweg"},"nodes":[8578,8579,8580,8581],"geometry":[{"lat":47.0638259,"lon":9.4977521},{"lat":47.0639589,"lon":9.4981025},{"lat":47.0644668,"lon":9.4987931},{"lat":47.0645896,"lon":9.4989283}]},{"type":"way","id":680,"tags":{"bridge":"yes","highway":"residential","layer":"1","name":"Unterm Schloss"},"nodes":[8591,8590],"geometry":[{"lat":47.0657551,"lon":9.4997787},{"lat":47.0656929,"lon":9.4996169}]},{"type":"way","id":681,"tags":{"highway":"residential","name":"Unterm Schloss"},"nodes":[8590,8584,24827,8569,8612,8619,25173,25239,25181,24653,24684,24618,8566],"geometry":[{"lat":47.0656929,"lon":9.4996169},{"lat":47.0656737,"lon":9.4995789},{"lat":47.0656506,"lon":9.4995259},{"lat":47.0652468,"lon":9.4984155},{"lat":47.0646081,"lon":9.496511},{"lat":47.0643898,"lon":9.4958856},{"lat":47.0642599,"lon":9.4955045},{"lat":47.0641928,"lon":9.4953076},{"lat":47.0635691,"lon":9.4934775},{"lat":47.0633589,"lon":9.4928608},{"lat":47.0633338,"lon":9.4928096},{"lat":47.0633069,"lon":9.4927745},{"lat":47.0632541,"lon":9.4927234}]},{"type":"way","id":682,"tags":{"bridge":"yes","highway":"residential","layer":"1","name":"Elgagass"},"nodes":[8592,543],"geometry":[{"lat":47.0645732,"lon":9.4989467},{"lat":47.0645085,"lon":9.4989914}]},{"type":"way","id":683,"tags":{"bicycle":"yes","foot":"yes","highway":"residential","motorcar":"yes","motorcycle":"yes","name":"Elgagass"},"nodes":[543,544,545,546,547,552,548,24681,33535],"geometry":[{"lat":47.0645085,"lon":9.4989914},{"lat":47.0643891,"lon":9.4990192},{"lat":47.0642406,"lon":9.4990026},{"lat":47.0639765,"lon":9.4987881},{"lat":47.0634813,"lon":9.4986065},{"lat":47.0633096,"lon":9.498554},{"lat":47.0626962,"lon":9.4985},{"lat":47.0620703,"lon":9.4989096},{"lat":47.0620383,"lon":9.498932}]},{"type":"way","id":684,"tags":{"source":"Yahoo","waterway":"stream"},"nodes":[8781,8782,8783,8784,8593,8594,8595,8596,24639,8597,8598,8599,8785,8786,8787,24664,8788,8789,24654,8790,8791],"geometry":[{"lat":47.0621577,"lon":9.4981869},{"lat":47.0631341,"lon":9.4976033},{"lat":47.0633329,"lon":9.4975603},{"lat":47.0634732,"lon":9.4976462},{"lat":47.0638825,"lon":9.4981869},{"lat":47.0644321,"lon":9.4988392},{"lat":47.0646674,"lon":9.4990664},{"lat":47.0666736,"lon":9.5003338},{"lat":47.0668585,"lon":9.5004702},{"lat":47.0670255,"lon":9.5006225},{"lat":47.067181,"lon":9.5008448},{"lat":47.0673256,"lon":9.5011233},{"lat":47.0686747,"lon":9.503572},{"lat":47.0687058,"lon":9.5036028},{"lat":47.0699113,"lon":9.504217},{"lat":47.0700033,"lon":9.5042942},{"lat":47.0700829,"lon":9.504397},{"lat":47.0708117,"lon":9.50554},{"lat":47.0708845,"lon":9.5056837},{"lat":47.0709345,"lon":9.5058198},{"lat":47.0710777,"lon":9.5063308}]},{"type":"way","id":685,"tags":{"access":"permissive","highway":"residential","name":"Fabrikstrasse","oneway":"yes"},"nodes":[8600,8601,49435,49421,49380,49252,24849,542],"geometry":[{"lat":47.0682876,"lon":9.5003412},{"lat":47.0673983,"lon":9.5009801},{"lat":47.0673584,"lon":9.501},{"lat":47.0673204,"lon":9.5009486},{"lat":47.0672591,"lon":9.5007858},{"lat":47.0670259,"lon":9.5002187},{"lat":47.0662093,"lon":9.4978763},{"lat":47.0662391,"lon":9.4975803}]},{"type":"way","id":686,"tags":{"amenity":"parking"},"nodes":[8602,8603,8604,8605,49632,49654,8602],"geometry":[{"lat":47.0679183,"lon":9.5005711},{"lat":47.0673467,"lon":9.5009906},{"lat":47.0670749,"lon":9.5001921},{"lat":47.0676091,"lon":9.4998},{"lat":47.0676805,"lon":9.5000096},{"lat":47.0677178,"lon":9.4999822},{"lat":47.0679183,"lon":9.5005711}]},{"type":"way","id":687,"tags":{"landuse":"industrial"},"nodes":[8606,8607,8608,8609,8610,8611,8606],"geometry":[{"lat":47.0671821,"lon":9.4970971},{"lat":47.0662285,"lon":9.4977583},{"lat":47.0670068,"lon":9.5001509},{"lat":47.067668,"lon":9.4996633},{"lat":47.0679566,"lon":9.5005455},{"lat":47.0682574,"lon":9.5003196},{"lat":47.0671821,"lon":9.4970971}]},{"type":"way","id":688,"tags":{"highway":"residential","name":"Quadera"},"nodes":[718,8612],"geometry":[{"lat":47.0655204,"lon":9.4958449},{"lat":47.0646081,"lon":9.496511}]},{"type":"way","id":689,"tags":{"highway":"residential","name":"Wesle"},"nodes":[46913,8614,46034,25195,8615],"geometry":[{"lat":47.0635218,"lon":9.4946815},{"lat":47.063033,"lon":9.4950372},{"lat":47.0625907,"lon":9.4953462},{"lat":47.0621668,"lon":9.4957887},{"lat":47.0624018,"lon":9.4961551}]},{"type":"way","id":690,"tags":{"highway":"living_street"},"nodes":[8616,8617],"geometry":[{"lat":47.0632525,"lon":9.4957757},{"lat":47.0627295,"lon":9.4961104}]},{"type":"way","id":691,"tags":{"highway":"cycleway"},"nodes":[8615,8618,8617],"geometry":[{"lat":47.0624018,"lon":9.4961551},{"lat":47.0624816,"lon":9.4962772},{"lat":47.0627295,"lon":9.4961104}]},{"type":"way","id":692,"tags":{"highway":"residential","name":"Taleze"},"nodes":[8619,8613,8620,25191,33531],"geometry":[{"lat":47.0643898,"lon":9.4958856},{"lat":47.0634562,"lon":9.4964982},{"lat":47.0633783,"lon":9.4965211},{"lat":47.0624222,"lon":9.4973664},{"lat":47.0616824,"lon":9.4980207}]},{"type":"way","id":693,"tags":{"highway":"footway"},"nodes":[8622,8623,8624,25388,8625,25300,8626,8627,8628,8629,8630],"geometry":[{"lat":47.0634217,"lon":9.4998931},{"lat":47.0636044,"lon":9.4998678},{"lat":47.063794,"lon":9.4999537},{"lat":47.063819,"lon":9.5000007},{"lat":47.0638816,"lon":9.5003964},{"lat":47.0643737,"lon":9.5016113},{"lat":47.0644279,"lon":9.5018303},{"lat":47.0644279,"lon":9.5019752},{"lat":47.0643396,"lon":9.5020972},{"lat":47.0643292,"lon":9.5023185},{"lat":47.0643283,"lon":9.5024655}]},{"type":"way","id":694,"tags":{"highway":"residential","name":"Kirchensträssle"},"nodes":[8631,25406,8638],"geometry":[{"lat":47.0635589,"lon":9.5029124},{"lat":47.0636653,"lon":9.5028461},{"lat":47.0641385,"lon":9.5025511}]},{"type":"way","id":695,"tags":{"highway":"footway","name":"Kirchensträssle"},"nodes":[8638,8630,53469,53470,8632,8633,53472,53475,8634,53481,8635,53483,8636,39916,8637],"geometry":[{"lat":47.0641385,"lon":9.5025511},{"lat":47.0643283,"lon":9.5024655},{"lat":47.0645237,"lon":9.5023836},{"lat":47.0646943,"lon":9.502354},{"lat":47.0648826,"lon":9.5023213},{"lat":47.0649735,"lon":9.5022879},{"lat":47.0651026,"lon":9.5021474},{"lat":47.0651773,"lon":9.5020918},{"lat":47.0654166,"lon":9.5019778},{"lat":47.0654812,"lon":9.5019529},{"lat":47.065498,"lon":9.5019554},{"lat":47.0655234,"lon":9.5020293},{"lat":47.0655814,"lon":9.5020667},{"lat":47.0659067,"lon":9.5019034},{"lat":47.0663868,"lon":9.5016624}]},{"type":"way","id":696,"tags":{"highway":"residential","name":"Kohlbruck"},"nodes":[530,8641],"geometry":[{"lat":47.0700773,"lon":9.501797},{"lat":47.0708271,"lon":9.5013314}]},{"type":"way","id":697,"tags":{"highway":"track","name":"Kohlbruck","tracktype":"grade1"},"nodes":[8641,29793,29798,29830,29837,8640],"geometry":[{"lat":47.0708271,"lon":9.5013314},{"lat":47.0713176,"lon":9.5010193},{"lat":47.0720122,"lon":9.5005774},{"lat":47.0732264,"lon":9.4998048},{"lat":47.0743221,"lon":9.4990701},{"lat":47.075188,"lon":9.4984956}]},{"type":"way","id":698,"tags":{"highway":"bridleway","tracktype":"grade4"},"nodes":[8640,29852,8642,8643,8644],"geometry":[{"lat":47.075188,"lon":9.4984956},{"lat":47.0751252,"lon":9.4983751},{"lat":47.072665,"lon":9.4952679},{"lat":47.0722147,"lon":9.4945474},{"lat":47.0718318,"lon":9.4937649}]},{"type":"way","id":699,"tags":{"highway":"residential","name":"Rheinau"},"nodes":[9133,8645,29797,8644,29794,8646,23692,23699,24762,8647,534],"geometry":[{"lat":47.073692,"lon":9.493486},{"lat":47.0731625,"lon":9.4927949},{"lat":47.0719338,"lon":9.4936905},{"lat":47.0718318,"lon":9.4937649},{"lat":47.0713772,"lon":9.4940881},{"lat":47.0710967,"lon":9.4942875},{"lat":47.0708667,"lon":9.494441},{"lat":47.0708212,"lon":9.4944511},{"lat":47.0707711,"lon":9.4944381},{"lat":47.0707131,"lon":9.4943939},{"lat":47.0706611,"lon":9.4943318}]},{"type":"way","id":700,"tags":{"landuse":"vineyard","source":"Yahoo"},"nodes":[8648,8649,47965,47853,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,47266,47127,47123,8660,8661,8662,8663,8664,8648],"geometry":[{"lat":47.064557,"lon":9.5012278},{"lat":47.0649533,"lon":9.5009312},{"lat":47.0649637,"lon":9.5008049},{"lat":47.0647582,"lon":9.5006874},{"lat":47.0646058,"lon":9.5003083},{"lat":47.0645724,"lon":9.4999766},{"lat":47.0646421,"lon":9.4997738},{"lat":47.0647285,"lon":9.4996791},{"lat":47.0648073,"lon":9.4996191},{"lat":47.0645405,"lon":9.4993089},{"lat":47.0643582,"lon":9.499494},{"lat":47.0642647,"lon":9.4997086},{"lat":47.064151,"lon":9.4998033},{"lat":47.0640757,"lon":9.4994875},{"lat":47.063997,"lon":9.4994046},{"lat":47.0638031,"lon":9.4994222},{"lat":47.0637973,"lon":9.4995419},{"lat":47.0634286,"lon":9.499496},{"lat":47.0634324,"lon":9.4998433},{"lat":47.0638086,"lon":9.4998631},{"lat":47.0639105,"lon":9.5004261},{"lat":47.0642282,"lon":9.5011911},{"lat":47.064557,"lon":9.5012278}]},{"type":"way","id":701,"tags":{"amenity":"grave_yard","source":"Bing"},"nodes":[8665,8666,8667,25205,25122,25158,48346,25196,8668,48626,8665],"geometry":[{"lat":47.066077,"lon":9.5027064},{"lat":47.0653028,"lon":9.5031611},{"lat":47.0651703,"lon":9.5026692},{"lat":47.0653626,"lon":9.5025561},{"lat":47.0653155,"lon":9.5023915},{"lat":47.0655432,"lon":9.5022525},{"lat":47.0655329,"lon":9.5022249},{"lat":47.0655452,"lon":9.5022202},{"lat":47.0658904,"lon":9.502018},{"lat":47.0659458,"lon":9.5022226},{"lat":47.066077,"lon":9.5027064}]},{"type":"way","id":702,"tags":{"landuse":"residential","source":"Yahoo"},"nodes":[8669,8670,8671,8672,8673,8674,8675,8676,8677,8678,43329,8679,8680,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,45656,45757,45852,45969,46078,46170,46337,46516,8704,46805,8705,8706,47112,47131,47262,47338,8707,8708,8709,8710,8711,8669],"geometry":[{"lat":47.0648026,"lon":9.4912751},{"lat":47.0630898,"lon":9.4864981},{"lat":47.0619767,"lon":9.488877},{"lat":47.0609778,"lon":9.4859297},{"lat":47.0596107,"lon":9.4869356},{"lat":47.0597371,"lon":9.488307},{"lat":47.0598631,"lon":9.4885898},{"lat":47.0596223,"lon":9.4888841},{"lat":47.0598562,"lon":9.4893402},{"lat":47.0593304,"lon":9.4902377},{"lat":47.0591669,"lon":9.490048},{"lat":47.0586042,"lon":9.4910632},{"lat":47.059551,"lon":9.4922231},{"lat":47.058736,"lon":9.4935876},{"lat":47.0594331,"lon":9.4944456},{"lat":47.0601894,"lon":9.4947561},{"lat":47.0601719,"lon":9.4952025},{"lat":47.0599146,"lon":9.4952711},{"lat":47.0599731,"lon":9.4956745},{"lat":47.0593884,"lon":9.4958033},{"lat":47.0594118,"lon":9.4961895},{"lat":47.0599731,"lon":9.4965929},{"lat":47.0599731,"lon":9.4967903},{"lat":47.0596807,"lon":9.4968161},{"lat":47.0590376,"lon":9.497992},{"lat":47.0587101,"lon":9.4981035},{"lat":47.0587569,"lon":9.4985327},{"lat":47.0597573,"lon":9.4997738},{"lat":47.0598883,"lon":9.5000788},{"lat":47.0603703,"lon":9.4999239},{"lat":47.0604521,"lon":9.5015688},{"lat":47.0607814,"lon":9.5015312},{"lat":47.0618149,"lon":9.5014939},{"lat":47.0628244,"lon":9.5013791},{"lat":47.0621359,"lon":9.4997774},{"lat":47.0620262,"lon":9.4989664},{"lat":47.0622008,"lon":9.4988599},{"lat":47.0623011,"lon":9.4990419},{"lat":47.0623995,"lon":9.4989374},{"lat":47.062522,"lon":9.4988281},{"lat":47.0626374,"lon":9.4987133},{"lat":47.0627488,"lon":9.4986448},{"lat":47.0629533,"lon":9.4986474},{"lat":47.0631271,"lon":9.498707},{"lat":47.0631355,"lon":9.4985906},{"lat":47.0633859,"lon":9.4988374},{"lat":47.0634775,"lon":9.4989277},{"lat":47.0634378,"lon":9.4994731},{"lat":47.0637868,"lon":9.4995369},{"lat":47.0638039,"lon":9.4994135},{"lat":47.0639911,"lon":9.4994095},{"lat":47.0640885,"lon":9.499492},{"lat":47.064319,"lon":9.4995275},{"lat":47.0643056,"lon":9.4991249},{"lat":47.0651704,"lon":9.4984376},{"lat":47.0662049,"lon":9.4977246},{"lat":47.0641544,"lon":9.491711},{"lat":47.0648026,"lon":9.4912751}]},{"type":"way","id":703,"tags":{"landuse":"residential","source":"Yahoo"},"nodes":[8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8722,8723,8724,8725,8726,8727,41171,41177,8728,8729,8730,8731,8732,8733,8734,24852,8735,24805,8736,8737,8738,24781,24824,8739,24753,24797,8740,8741,8742,56020,8743,8744,8745,25333,8712],"geometry":[{"lat":47.0649,"lon":9.5042535},{"lat":47.064136,"lon":9.502584},{"lat":47.0636348,"lon":9.5028871},{"lat":47.0646605,"lon":9.5051687},{"lat":47.0642939,"lon":9.5055021},{"lat":47.0647678,"lon":9.5065481},{"lat":47.0638304,"lon":9.5069217},{"lat":47.0643789,"lon":9.5082753},{"lat":47.0603463,"lon":9.5109521},{"lat":47.0605496,"lon":9.5124017},{"lat":47.0608478,"lon":9.5129299},{"lat":47.0612419,"lon":9.5131842},{"lat":47.0618226,"lon":9.5133097},{"lat":47.0626403,"lon":9.5131908},{"lat":47.0630297,"lon":9.5138481},{"lat":47.0651181,"lon":9.5129925},{"lat":47.066323,"lon":9.5122369},{"lat":47.0669282,"lon":9.5118962},{"lat":47.068599,"lon":9.5108997},{"lat":47.0701086,"lon":9.5112034},{"lat":47.0700655,"lon":9.5116286},{"lat":47.0710485,"lon":9.5118},{"lat":47.0711632,"lon":9.5110887},{"lat":47.0724668,"lon":9.511536},{"lat":47.0727496,"lon":9.5108578},{"lat":47.0735341,"lon":9.5117381},{"lat":47.0739206,"lon":9.5121164},{"lat":47.0740843,"lon":9.5118877},{"lat":47.0745234,"lon":9.5112133},{"lat":47.0721552,"lon":9.5088475},{"lat":47.0725239,"lon":9.5077359},{"lat":47.0720045,"lon":9.5072367},{"lat":47.0720515,"lon":9.5070342},{"lat":47.0718536,"lon":9.5067902},{"lat":47.0717012,"lon":9.5065552},{"lat":47.0715648,"lon":9.5062826},{"lat":47.0714265,"lon":9.5059097},{"lat":47.0686059,"lon":9.4976331},{"lat":47.0676401,"lon":9.4983484},{"lat":47.0676529,"lon":9.4983878},{"lat":47.0682904,"lon":9.500345},{"lat":47.0673259,"lon":9.5010522},{"lat":47.06824,"lon":9.5027819},{"lat":47.0665677,"lon":9.5035046},{"lat":47.0649,"lon":9.5042535}]},{"type":"way","id":738,"tags":{"cycleway":"track","highway":"cycleway","motorcar":"no","motorcycle":"no","name":"Rheindamm"},"nodes":[2134,9123,9124,30541,29772,30523,30515,30504,30502,30480,30446,22136,30430,9125,9126,9127,9128,34606,9129,40699,30367,9130,29903,9131,9132,9133,23694,23695,9134],"geometry":[{"lat":47.100953,"lon":9.5205402},{"lat":47.0984403,"lon":9.5205457},{"lat":47.0973204,"lon":9.5204428},{"lat":47.0961515,"lon":9.5201886},{"lat":47.0947905,"lon":9.5197244},{"lat":47.093545,"lon":9.5191955},{"lat":47.0926702,"lon":9.5187958},{"lat":47.0907091,"lon":9.5179394},{"lat":47.0895593,"lon":9.5174179},{"lat":47.0888373,"lon":9.517084},{"lat":47.0880012,"lon":9.5167088},{"lat":47.0874023,"lon":9.5163948},{"lat":47.0868457,"lon":9.5159744},{"lat":47.0864158,"lon":9.5156191},{"lat":47.0861842,"lon":9.5153793},{"lat":47.085623,"lon":9.514699},{"lat":47.0849292,"lon":9.5138431},{"lat":47.0840252,"lon":9.5123082},{"lat":47.0839466,"lon":9.5121755},{"lat":47.0829891,"lon":9.5104308},{"lat":47.082577,"lon":9.5096799},{"lat":47.0822136,"lon":9.509003},{"lat":47.0792384,"lon":9.5036074},{"lat":47.0791121,"lon":9.5033699},{"lat":47.0756901,"lon":9.4970394},{"lat":47.073692,"lon":9.493486},{"lat":47.0730998,"lon":9.4923736},{"lat":47.0728323,"lon":9.4917608},{"lat":47.0725865,"lon":9.4911976}]},{"type":"way","id":740,"tags":{"highway":"living_street"},"nodes":[9138,9139,43890],"geometry":[{"lat":47.0601979,"lon":9.4929738},{"lat":47.0599612,"lon":9.4933824},{"lat":47.0601063,"lon":9.4935439}]},{"type":"way","id":741,"tags":{"highway":"residential","name":"Iradug"},"nodes":[33526,24702,24676,24717,9141,24700,24675,9142,24696,24669,24724,24685,24709,9143,24736,9144,9145,24694,9146,9147,9148,24719,24679,9149,9150],"geometry":[{"lat":47.0608961,"lon":9.4960422},{"lat":47.060837,"lon":9.496033},{"lat":47.0607717,"lon":9.4960615},{"lat":47.0606984,"lon":9.4961185},{"lat":47.0605627,"lon":9.4962997},{"lat":47.060485,"lon":9.4964165},{"lat":47.06041,"lon":9.4965906},{"lat":47.0603676,"lon":9.4967644},{"lat":47.060307,"lon":9.4968},{"lat":47.0602161,"lon":9.4968265},{"lat":47.0601697,"lon":9.4968611},{"lat":47.0601239,"lon":9.4969141},{"lat":47.0600573,"lon":9.4970373},{"lat":47.0600242,"lon":9.4971195},{"lat":47.0600038,"lon":9.4972216},{"lat":47.0599612,"lon":9.4976441},{"lat":47.0599021,"lon":9.4981002},{"lat":47.0598776,"lon":9.4982023},{"lat":47.059844,"lon":9.4983054},{"lat":47.0596982,"lon":9.4985738},{"lat":47.0595806,"lon":9.4985549},{"lat":47.0594745,"lon":9.4984946},{"lat":47.0594044,"lon":9.4984355},{"lat":47.0591308,"lon":9.4980476},{"lat":47.0590706,"lon":9.4979749}]},{"type":"way","id":896,"tags":{"highway":"unclassified","name":"Rietle","oneway":"no","surface":"asphalt"},"nodes":[550,34905,25138,34904,34900,34899,34897,34894,34895,34896,34898],"geometry":[{"lat":47.0623698,"lon":9.5003127},{"lat":47.0620233,"lon":9.5003513},{"lat":47.0612917,"lon":9.5003362},{"lat":47.0609682,"lon":9.5003378},{"lat":47.0607521,"lon":9.5003446},{"lat":47.0606509,"lon":9.5002973},{"lat":47.0603705,"lon":9.499889},{"lat":47.0603015,"lon":9.4996899},{"lat":47.0603153,"lon":9.4995414},{"lat":47.0603452,"lon":9.4994233},{"lat":47.0603738,"lon":9.4993016}]},{"type":"way","id":897,"tags":{"landuse":"forest"},"nodes":[11012,11013,24787,11014,11015,11012],"geometry":[{"lat":47.0610429,"lon":9.5015494},{"lat":47.0608871,"lon":9.5015711},{"lat":47.0620553,"lon":9.5047516},{"lat":47.0630642,"lon":9.5071117},{"lat":47.0632277,"lon":9.5070502},{"lat":47.0610429,"lon":9.5015494}]},{"type":"way","id":898,"tags":{"landuse":"forest"},"nodes":[11016,11017,11018,11019,11016],"geometry":[{"lat":47.0593957,"lon":9.5017629},{"lat":47.0592436,"lon":9.5017629},{"lat":47.0618163,"lon":9.5097023},{"lat":47.0619683,"lon":9.5096078},{"lat":47.0593957,"lon":9.5017629}]},{"type":"way","id":899,"tags":{"landuse":"forest"},"nodes":[11020,11021,11022,11023,11020],"geometry":[{"lat":47.0578871,"lon":9.5017715},{"lat":47.0576239,"lon":9.5018316},{"lat":47.0601032,"lon":9.5109811},{"lat":47.060302,"lon":9.5108438},{"lat":47.0578871,"lon":9.5017715}]},{"type":"way","id":900,"tags":{"landuse":"farmyard"},"nodes":[11024,11025,11026,11027,11028,11029,11030,11024],"geometry":[{"lat":47.0600096,"lon":9.5110069},{"lat":47.057583,"lon":9.5019088},{"lat":47.0562089,"lon":9.5029474},{"lat":47.0567819,"lon":9.5118652},{"lat":47.0573257,"lon":9.5119854},{"lat":47.0584367,"lon":9.511848},{"lat":47.0593957,"lon":9.5114446},{"lat":47.0600096,"lon":9.5110069}]},{"type":"way","id":983,"tags":{"highway":"track","source":"GPS survey","surface":"gravel","tracktype":"grade2"},"nodes":[12138,12139,65652,12140,24004,12141,65653,12142,12143,12144,65654,12145,12146,12147,12148,65658,12149,65657,65656,65655,12150,12151,55085,55122,12152,65659,12153,12154,12155,65660,65661,12156,12157,12158,17754,12159,25161,25247,25115,12160,25203,25146,12161,25242,12162,25207,12163,25248,25215,12164,12165,12166,25194,12167,12168,12169,25206,12170,12171,12172,12173],"geometry":[{"lat":47.0387099,"lon":9.5266172},{"lat":47.0385125,"lon":9.5264343},{"lat":47.0385534,"lon":9.5262004},{"lat":47.0387577,"lon":9.5261406},{"lat":47.0388682,"lon":9.5258896},{"lat":47.0390858,"lon":9.52542},{"lat":47.0392081,"lon":9.5249739},{"lat":47.0396222,"lon":9.5234628},{"lat":47.0400616,"lon":9.5227235},{"lat":47.0403646,"lon":9.5219313},{"lat":47.0405448,"lon":9.5216389},{"lat":47.0410529,"lon":9.5208148},{"lat":47.0413497,"lon":9.520662},{"lat":47.0436448,"lon":9.5197586},{"lat":47.0450298,"lon":9.5184002},{"lat":47.0448303,"lon":9.5182698},{"lat":47.0446646,"lon":9.5181232},{"lat":47.0445086,"lon":9.5177864},{"lat":47.0442155,"lon":9.5170896},{"lat":47.044129,"lon":9.5168784},{"lat":47.0438892,"lon":9.5163109},{"lat":47.0440362,"lon":9.5158903},{"lat":47.0442247,"lon":9.5155507},{"lat":47.0445255,"lon":9.5150086},{"lat":47.0446455,"lon":9.5147923},{"lat":47.0449989,"lon":9.5147843},{"lat":47.0458735,"lon":9.5147645},{"lat":47.0463659,"lon":9.5145051},{"lat":47.047051,"lon":9.513889},{"lat":47.0471635,"lon":9.513556},{"lat":47.0473625,"lon":9.5129667},{"lat":47.0479569,"lon":9.5112156},{"lat":47.0483704,"lon":9.510609},{"lat":47.0486608,"lon":9.5096501},{"lat":47.0489909,"lon":9.5090275},{"lat":47.0494405,"lon":9.5079558},{"lat":47.0498497,"lon":9.5073557},{"lat":47.0503486,"lon":9.5070097},{"lat":47.050476,"lon":9.5068548},{"lat":47.0509936,"lon":9.5062252},{"lat":47.0515459,"lon":9.5060546},{"lat":47.05207,"lon":9.5057011},{"lat":47.052409,"lon":9.5057107},{"lat":47.0526798,"lon":9.5058314},{"lat":47.0529131,"lon":9.5058327},{"lat":47.0533354,"lon":9.5056178},{"lat":47.0538823,"lon":9.505376},{"lat":47.054325,"lon":9.5047909},{"lat":47.054474,"lon":9.5047395},{"lat":47.0547969,"lon":9.5046282},{"lat":47.0557028,"lon":9.5035488},{"lat":47.0561162,"lon":9.5029327},{"lat":47.0562503,"lon":9.50257},{"lat":47.0565071,"lon":9.5018836},{"lat":47.0566586,"lon":9.5010598},{"lat":47.0568491,"lon":9.5003966},{"lat":47.0573188,"lon":9.4995758},{"lat":47.0573755,"lon":9.4994767},{"lat":47.0578458,"lon":9.4990644},{"lat":47.0588557,"lon":9.4991107},{"lat":47.0590332,"lon":9.49911}]},{"type":"way","id":988,"tags":{"highway":"residential","name":"St. Peter"},"nodes":[9142,24713,12215,24689,24729,12216],"geometry":[{"lat":47.0603676,"lon":9.4967644},{"lat":47.0604093,"lon":9.4968235},{"lat":47.0604379,"lon":9.4969014},{"lat":47.0605432,"lon":9.4973083},{"lat":47.0606279,"lon":9.4975527},{"lat":47.0606608,"lon":9.4977256}]},{"type":"way","id":1017,"tags":{"highway":"residential","name":"Mühlegass"},"nodes":[13646,13647,24765,24807,13648,42784,13649],"geometry":[{"lat":47.0730538,"lon":9.5085415},{"lat":47.0730934,"lon":9.5085433},{"lat":47.0731333,"lon":9.5085524},{"lat":47.0731726,"lon":9.5085781},{"lat":47.0733346,"lon":9.5087244},{"lat":47.0734096,"lon":9.5087359},{"lat":47.0735016,"lon":9.5087083}]},{"type":"way","id":1018,"tags":{"highway":"residential","name":"Lehenwies"},"nodes":[13659,25543,25588,13660,13661,13662,25408,13663],"geometry":[{"lat":47.0739166,"lon":9.5105514},{"lat":47.0741067,"lon":9.5101848},{"lat":47.0741479,"lon":9.5101602},{"lat":47.0743101,"lon":9.5098355},{"lat":47.0747788,"lon":9.5103968},{"lat":47.0750656,"lon":9.5107859},{"lat":47.0752473,"lon":9.5109755},{"lat":47.075426,"lon":9.5111576}]},{"type":"way","id":1019,"tags":{"highway":"residential","name":"Stötz","oneway":"no"},"nodes":[13664,13665,24991,13753,13754],"geometry":[{"lat":47.0745895,"lon":9.5111442},{"lat":47.0744233,"lon":9.5113872},{"lat":47.0742971,"lon":9.5115799},{"lat":47.0740785,"lon":9.5118439},{"lat":47.0728585,"lon":9.5105384}]},{"type":"way","id":1020,"tags":{"highway":"residential","maxspeed":"50","name":"Ramschwagweg","oneway":"no","traffic_calming":"yes"},"nodes":[498,24911,13754,13752,13672,24975,25420,24923,25532,24989,24940,25199,13673,25129,13674,24865,24870,13675,24887],"geometry":[{"lat":47.0731871,"lon":9.5097693},{"lat":47.0731366,"lon":9.5098433},{"lat":47.0728585,"lon":9.5105384},{"lat":47.0727063,"lon":9.5108842},{"lat":47.0724835,"lon":9.5113906},{"lat":47.0724395,"lon":9.5114433},{"lat":47.0724087,"lon":9.5114535},{"lat":47.0723794,"lon":9.5114512},{"lat":47.072107,"lon":9.511364},{"lat":47.0710866,"lon":9.5110374},{"lat":47.0708876,"lon":9.5109825},{"lat":47.0707391,"lon":9.5109507},{"lat":47.0705133,"lon":9.5109024},{"lat":47.0705047,"lon":9.5109006},{"lat":47.0689109,"lon":9.5105766},{"lat":47.0687681,"lon":9.510557},{"lat":47.0686346,"lon":9.510557},{"lat":47.0685056,"lon":9.5105859},{"lat":47.0684423,"lon":9.51061}]},{"type":"way","id":1021,"tags":{"highway":"residential","name":"Alte Churerstrasse","oneway":"no"},"nodes":[13685,24974,13693,13696,13699,13704,13686,13687,13726,24970,13688,13730,24939,13689,13690,24863,13691,24955,13692],"geometry":[{"lat":47.0604311,"lon":9.5117196},{"lat":47.0611122,"lon":9.5113688},{"lat":47.0616876,"lon":9.5110729},{"lat":47.0622561,"lon":9.5107771},{"lat":47.0628697,"lon":9.5104755},{"lat":47.0634136,"lon":9.5103158},{"lat":47.0638369,"lon":9.5101537},{"lat":47.0641678,"lon":9.5099785},{"lat":47.0644756,"lon":9.5097633},{"lat":47.0646879,"lon":9.5096002},{"lat":47.0650368,"lon":9.5094034},{"lat":47.0657173,"lon":9.5090382},{"lat":47.0658712,"lon":9.5089452},{"lat":47.0659866,"lon":9.5089225},{"lat":47.0662504,"lon":9.5089292},{"lat":47.0663547,"lon":9.5089001},{"lat":47.0664687,"lon":9.5088365},{"lat":47.066535,"lon":9.5087648},{"lat":47.0665982,"lon":9.5086027}]},{"type":"way","id":1022,"tags":{"highway":"residential","name":"Säss"},"nodes":[13693,24910,13694,24902,13695],"geometry":[{"lat":47.0616876,"lon":9.5110729},{"lat":47.0616799,"lon":9.5111845},{"lat":47.0613244,"lon":9.5126579},{"lat":47.0612591,"lon":9.5128355},{"lat":47.0611335,"lon":9.5131208}]},{"type":"way","id":1023,"tags":{"highway":"residential","name":"Finanzerweg","oneway":"no"},"nodes":[13696,24945,24881,13697,24930,13698],"geometry":[{"lat":47.0622561,"lon":9.5107771},{"lat":47.0622569,"lon":9.5108472},{"lat":47.0622395,"lon":9.5109571},{"lat":47.0618756,"lon":9.5123823},{"lat":47.0617413,"lon":9.512812},{"lat":47.0615633,"lon":9.5132558}]},{"type":"way","id":1024,"tags":{"highway":"residential","name":"Irafrieg","oneway":"no"},"nodes":[13699,24875,13700,24954,24864,24965,13701],"geometry":[{"lat":47.0628697,"lon":9.5104755},{"lat":47.062854,"lon":9.5105923},{"lat":47.062347,"lon":9.5125289},{"lat":47.0622596,"lon":9.5128296},{"lat":47.0621447,"lon":9.5131355},{"lat":47.0621247,"lon":9.5132179},{"lat":47.0621196,"lon":9.5133014}]},{"type":"way","id":1025,"tags":{"highway":"residential","name":"Wingerta","oneway":"no"},"nodes":[24995,24917,13702,24891,13703,24823,13704,13718,13713,13705,24913,24921,13706,24872,24950,25000,24935],"geometry":[{"lat":47.0633307,"lon":9.5089111},{"lat":47.0633722,"lon":9.5090668},{"lat":47.0634698,"lon":9.5094765},{"lat":47.0634924,"lon":9.5096962},{"lat":47.063484,"lon":9.509938},{"lat":47.063446,"lon":9.5101797},{"lat":47.0634136,"lon":9.5103158},{"lat":47.0631397,"lon":9.5113725},{"lat":47.0629018,"lon":9.5122701},{"lat":47.062792,"lon":9.512718},{"lat":47.062683,"lon":9.5129767},{"lat":47.0626576,"lon":9.5130885},{"lat":47.0626541,"lon":9.5131771},{"lat":47.062659,"lon":9.5135532},{"lat":47.0626376,"lon":9.5136277},{"lat":47.0625895,"lon":9.5136826},{"lat":47.0622596,"lon":9.5138551}]},{"type":"way","id":1026,"tags":{"highway":"residential","name":"Grashalda","oneway":"no"},"nodes":[13707,24851,13708,24841,24976,13688],"geometry":[{"lat":47.0647562,"lon":9.5079734},{"lat":47.0647839,"lon":9.5080923},{"lat":47.0649216,"lon":9.5087278},{"lat":47.0650483,"lon":9.5093198},{"lat":47.0650512,"lon":9.5093609},{"lat":47.0650368,"lon":9.5094034}]},{"type":"way","id":1027,"tags":{"highway":"residential","name":"Pädergross"},"nodes":[13713,24906,24969,25492,25537,13714,13715,13716,24630,24665,24642,13717],"geometry":[{"lat":47.0629018,"lon":9.5122701},{"lat":47.0629662,"lon":9.5122865},{"lat":47.0630356,"lon":9.5122786},{"lat":47.0644462,"lon":9.5116762},{"lat":47.0645233,"lon":9.5116433},{"lat":47.0659619,"lon":9.5110289},{"lat":47.0660561,"lon":9.5110353},{"lat":47.0661523,"lon":9.5111068},{"lat":47.0662263,"lon":9.5112129},{"lat":47.0662643,"lon":9.511364},{"lat":47.0662588,"lon":9.5115013},{"lat":47.0662278,"lon":9.511621}]},{"type":"way","id":1028,"tags":{"highway":"residential","maxspeed":"50","name":"Obergass"},"nodes":[13718,24993,24901,24832,24942,24957,13719,24866,24926,41420,13720,24878,24895,13721,24959,13722,24928,13723,13724,24980,13725],"geometry":[{"lat":47.0631397,"lon":9.5113725},{"lat":47.0631932,"lon":9.5113924},{"lat":47.0632453,"lon":9.5113884},{"lat":47.0632986,"lon":9.5113659},{"lat":47.0643005,"lon":9.5109276},{"lat":47.0648027,"lon":9.5107119},{"lat":47.065016,"lon":9.5106382},{"lat":47.0651233,"lon":9.5106276},{"lat":47.0652395,"lon":9.5106316},{"lat":47.0653221,"lon":9.5106503},{"lat":47.065512,"lon":9.5106932},{"lat":47.0656228,"lon":9.5107002},{"lat":47.0657203,"lon":9.5106884},{"lat":47.0658318,"lon":9.510652},{"lat":47.0659287,"lon":9.5106021},{"lat":47.0660363,"lon":9.510522},{"lat":47.066133,"lon":9.5104335},{"lat":47.0664156,"lon":9.5100988},{"lat":47.0666509,"lon":9.5098586},{"lat":47.0667247,"lon":9.5097492},{"lat":47.0668312,"lon":9.509505}]},{"type":"way","id":1029,"tags":{"highway":"residential","name":"Gamslafina","oneway":"no"},"nodes":[13728,24988,13729,24990,56013,13727],"geometry":[{"lat":47.0664485,"lon":9.5094398},{"lat":47.0661931,"lon":9.5096394},{"lat":47.0658941,"lon":9.5097766},{"lat":47.0652809,"lon":9.5100492},{"lat":47.0648641,"lon":9.5101579},{"lat":47.064537,"lon":9.5102833}]},{"type":"way","id":1030,"tags":{"highway":"residential","name":"Pralawisch"},"nodes":[13731,24859,13732,24885,13733,13692,24915,24966,13725,24877,13734,24958,13735,24941,13736,24992,24924,13739,13737,24977,24912,13738],"geometry":[{"lat":47.0664715,"lon":9.5074881},{"lat":47.0665079,"lon":9.5076578},{"lat":47.0665279,"lon":9.507834},{"lat":47.0665404,"lon":9.5082923},{"lat":47.066561,"lon":9.5084615},{"lat":47.0665982,"lon":9.5086027},{"lat":47.066678,"lon":9.5088198},{"lat":47.0667995,"lon":9.5093531},{"lat":47.0668312,"lon":9.509505},{"lat":47.0668957,"lon":9.509757},{"lat":47.0669475,"lon":9.5098616},{"lat":47.0670199,"lon":9.5099374},{"lat":47.0671768,"lon":9.5099891},{"lat":47.067275,"lon":9.5100355},{"lat":47.0675018,"lon":9.5102063},{"lat":47.0676436,"lon":9.5102982},{"lat":47.0677731,"lon":9.510357},{"lat":47.0680287,"lon":9.5103927},{"lat":47.0682268,"lon":9.5104433},{"lat":47.0682847,"lon":9.5104963},{"lat":47.0683207,"lon":9.5105629},{"lat":47.068349,"lon":9.5106532}]},{"type":"way","id":1031,"tags":{"highway":"residential","name":"Gässle","oneway":"no"},"nodes":[13739,13748,49839,13740,13741],"geometry":[{"lat":47.0680287,"lon":9.5103927},{"lat":47.0680214,"lon":9.5096295},{"lat":47.0680177,"lon":9.5093556},{"lat":47.0680122,"lon":9.5089449},{"lat":47.0680275,"lon":9.5088186}]},{"type":"way","id":1032,"tags":{"highway":"residential","name":"Lowal","oneway":"no"},"nodes":[13748,24973,24984,24909,13749,24962,24898,13750,24971,24907,13751,24985,24919,24934,13752],"geometry":[{"lat":47.0680214,"lon":9.5096295},{"lat":47.0680603,"lon":9.5096531},{"lat":47.068107,"lon":9.5096668},{"lat":47.0687508,"lon":9.5095982},{"lat":47.0690159,"lon":9.5095742},{"lat":47.069261,"lon":9.5095688},{"lat":47.069496,"lon":9.5095786},{"lat":47.0697717,"lon":9.5096163},{"lat":47.0701291,"lon":9.509708},{"lat":47.0703801,"lon":9.5097962},{"lat":47.0706276,"lon":9.5099067},{"lat":47.0718519,"lon":9.5105414},{"lat":47.0724328,"lon":9.5108276},{"lat":47.0725717,"lon":9.5108669},{"lat":47.0727063,"lon":9.5108842}]},{"type":"way","id":1033,"tags":{"highway":"residential"},"nodes":[13759,24644,13760,13761,24632,13762],"geometry":[{"lat":47.0708423,"lon":9.5079478},{"lat":47.0710619,"lon":9.5070975},{"lat":47.0710762,"lon":9.5069436},{"lat":47.0711127,"lon":9.5069084},{"lat":47.0711578,"lon":9.5069081},{"lat":47.0715256,"lon":9.5070827}]},{"type":"way","id":1034,"tags":{"highway":"residential"},"nodes":[13760,24667,13763],"geometry":[{"lat":47.0710762,"lon":9.5069436},{"lat":47.0710413,"lon":9.5069041},{"lat":47.0701321,"lon":9.5063161}]},{"type":"way","id":1035,"tags":{"highway":"residential"},"nodes":[13743,24905,24883,13764,24900,13765,24978,24888,24964,13750],"geometry":[{"lat":47.0698081,"lon":9.508722},{"lat":47.0697965,"lon":9.5087943},{"lat":47.0697725,"lon":9.5088649},{"lat":47.0697065,"lon":9.5090177},{"lat":47.069683,"lon":9.50911},{"lat":47.0696748,"lon":9.5092181},{"lat":47.069687,"lon":9.5093158},{"lat":47.0697137,"lon":9.509408},{"lat":47.0697524,"lon":9.5095217},{"lat":47.0697717,"lon":9.5096163}]},{"type":"way","id":1036,"tags":{"highway":"residential","name":"Donatsweg"},"nodes":[13766,24983,516],"geometry":[{"lat":47.0696627,"lon":9.5086754},{"lat":47.0696857,"lon":9.5085197},{"lat":47.0699127,"lon":9.5071343}]},{"type":"way","id":1037,"tags":{"highway":"residential","name":"Gässle","oneway":"no"},"nodes":[18978,24946,18977],"geometry":[{"lat":47.068103,"lon":9.5087246},{"lat":47.0680883,"lon":9.5086492},{"lat":47.0680685,"lon":9.5072145}]},{"type":"way","id":1038,"tags":{"highway":"residential","name":"Fürstenstrasse","oneway":"no"},"nodes":[8574,24834,25172,49166,25220,13767],"geometry":[{"lat":47.0665857,"lon":9.5035774},{"lat":47.0666027,"lon":9.5038005},{"lat":47.066791,"lon":9.5059853},{"lat":47.0668623,"lon":9.5068128},{"lat":47.06687,"lon":9.5069019},{"lat":47.0669101,"lon":9.5073672}]},{"type":"way","id":1039,"tags":{"highway":"residential","name":"Plattenbach","oneway":"no"},"nodes":[13768,13769,13780,13770,25380,13771,13772,25368],"geometry":[{"lat":47.0668127,"lon":9.5034432},{"lat":47.0676745,"lon":9.5048223},{"lat":47.0677554,"lon":9.5049414},{"lat":47.068003,"lon":9.5053808},{"lat":47.0680691,"lon":9.5054718},{"lat":47.0681432,"lon":9.5055437},{"lat":47.068386,"lon":9.5056781},{"lat":47.0684595,"lon":9.5057653}]},{"type":"way","id":1040,"tags":{"highway":"residential","name":"Zwischenbäch","oneway":"no"},"nodes":[539,13776,13777,13786,13787,13788,13785,25385,25360,25353,25313,25350,25386,13775,13774],"geometry":[{"lat":47.0689912,"lon":9.5024994},{"lat":47.0689248,"lon":9.5027616},{"lat":47.0685858,"lon":9.5037659},{"lat":47.0686721,"lon":9.5040247},{"lat":47.0687728,"lon":9.5042723},{"lat":47.0689541,"lon":9.5047529},{"lat":47.0690499,"lon":9.5051403},{"lat":47.0690776,"lon":9.5053221},{"lat":47.0690749,"lon":9.5054549},{"lat":47.0690639,"lon":9.5055689},{"lat":47.0690401,"lon":9.5056909},{"lat":47.0690252,"lon":9.5057369},{"lat":47.069015,"lon":9.5057683},{"lat":47.068964,"lon":9.5059251},{"lat":47.068885,"lon":9.5061701}]},{"type":"way","id":1041,"tags":{"highway":"residential"},"nodes":[13783,13782,24815,56021,13781],"geometry":[{"lat":47.0676339,"lon":9.5015421},{"lat":47.0685817,"lon":9.5011514},{"lat":47.068665,"lon":9.5011063},{"lat":47.0692251,"lon":9.5008506},{"lat":47.0696866,"lon":9.5006399}]},{"type":"way","id":1042,"tags":{"highway":"residential","oneway":"no","surface":"asphalt"},"nodes":[29861,29856,29849,29841,29839,29824,29812,29800,29795,29792,13784],"geometry":[{"lat":47.0758425,"lon":9.5062348},{"lat":47.0755011,"lon":9.5050685},{"lat":47.0748798,"lon":9.503081},{"lat":47.074528,"lon":9.5018047},{"lat":47.0744681,"lon":9.5017673},{"lat":47.0728999,"lon":9.5027517},{"lat":47.0723759,"lon":9.5030623},{"lat":47.0720877,"lon":9.5032757},{"lat":47.0715824,"lon":9.5035564},{"lat":47.0712606,"lon":9.5037585},{"lat":47.0708369,"lon":9.50402}]},{"type":"way","id":1046,"tags":{"highway":"residential","name":"Prafatell"},"nodes":[33532,44444,34898,13800,13801],"geometry":[{"lat":47.0618301,"lon":9.4983695},{"lat":47.0608482,"lon":9.4989792},{"lat":47.0603738,"lon":9.4993016},{"lat":47.0603118,"lon":9.4993585},{"lat":47.0596121,"lon":9.4987752}]},{"type":"way","id":1293,"tags":{"bicycle":"yes","foot":"yes","highway":"primary","maxspeed":"50","motorcar":"yes","motorcycle":"yes","name":"Landstrasse"},"nodes":[498,24821,24749,512],"geometry":[{"lat":47.0731871,"lon":9.5097693},{"lat":47.0731218,"lon":9.5096272},{"lat":47.0730658,"lon":9.5094448},{"lat":47.073048,"lon":9.5093089}]},{"type":"way","id":1636,"tags":{"bicycle":"yes","foot":"yes","highway":"path","horse":"no","mtb:scale":"2","name":"Ans Trail","sac_scale":"hiking","ski":"no","surface":"unpaved","trail_visibility":"intermediate","wheelchair":"no"},"nodes":[18077,18076,18073,18072,18075,18074,18083,18082,18084,18085,18086,18087,18088,18089,18090,18091,18092,18093,18094,18095,18125,18126,18127,18128,18133,18134,18135,18136,18129,18130,18131,18132,18138,18139,18140,18141,18137,18152,18153,18154,18149,18148,18151,18150,18145,18144,18147,18146,18143,18142,18169,18168,18165,18164,18167,18166,18162,18163,18160,18161,18159,18171,18170,18158,18156,18157,18155,18260,18258,18259,18256,18257,18255,18254,18253,18252,18251,18250,18249,18248,18265,18264,18263,18262,18261,18238,18237,18236,18244,18245,18246,18247,18234,18235,18239,18240,18241,18242,18243,18231,18232,18233,18226,18225,18228,18227,18230,18229,18224,18223,18216,18215,18218,18217,18220,18219,18222,18221,18214,18186,18184,18185,18175,18176,18174,18177,18172,18179,18178,18173],"geometry":[{"lat":47.0599713,"lon":9.5167944},{"lat":47.0599796,"lon":9.5167871},{"lat":47.0600243,"lon":9.5167627},{"lat":47.0601158,"lon":9.5167818},{"lat":47.0602607,"lon":9.5168181},{"lat":47.0603637,"lon":9.5167904},{"lat":47.0604286,"lon":9.5169182},{"lat":47.060482,"lon":9.5169802},{"lat":47.0605049,"lon":9.5170059},{"lat":47.0605621,"lon":9.5170346},{"lat":47.0606689,"lon":9.5170383},{"lat":47.0607491,"lon":9.5171575},{"lat":47.0607834,"lon":9.5173045},{"lat":47.0608559,"lon":9.5173931},{"lat":47.0609741,"lon":9.5173454},{"lat":47.0610428,"lon":9.5173359},{"lat":47.0611915,"lon":9.5174226},{"lat":47.0612144,"lon":9.5174408},{"lat":47.0612373,"lon":9.5174951},{"lat":47.0612449,"lon":9.5174914},{"lat":47.0613366,"lon":9.5175734},{"lat":47.0613861,"lon":9.5177049},{"lat":47.0614891,"lon":9.5177936},{"lat":47.0615692,"lon":9.5178624},{"lat":47.0617065,"lon":9.51795},{"lat":47.0618477,"lon":9.5180349},{"lat":47.0619773,"lon":9.518199},{"lat":47.0620461,"lon":9.5182838},{"lat":47.0622215,"lon":9.5184994},{"lat":47.0623818,"lon":9.5185643},{"lat":47.0624466,"lon":9.5185861},{"lat":47.0626373,"lon":9.5186109},{"lat":47.0627823,"lon":9.5186643},{"lat":47.0629502,"lon":9.5186806},{"lat":47.0630684,"lon":9.5187044},{"lat":47.0632362,"lon":9.5187654},{"lat":47.063366,"lon":9.5187454},{"lat":47.0633965,"lon":9.518753},{"lat":47.0634689,"lon":9.5187778},{"lat":47.0635567,"lon":9.5188322},{"lat":47.0636406,"lon":9.5189104},{"lat":47.0636863,"lon":9.5189829},{"lat":47.0637016,"lon":9.5189953},{"lat":47.0637627,"lon":9.5191059},{"lat":47.0637703,"lon":9.519105},{"lat":47.0637741,"lon":9.5191098},{"lat":47.0639038,"lon":9.5189342},{"lat":47.0639344,"lon":9.5188847},{"lat":47.0639381,"lon":9.518959},{"lat":47.0639534,"lon":9.5189514},{"lat":47.0640564,"lon":9.5189886},{"lat":47.0640984,"lon":9.5189982},{"lat":47.0642052,"lon":9.5189466},{"lat":47.0642548,"lon":9.5189647},{"lat":47.0642929,"lon":9.5189676},{"lat":47.0643577,"lon":9.5189352},{"lat":47.064373,"lon":9.5189228},{"lat":47.0644188,"lon":9.5188379},{"lat":47.0644836,"lon":9.5187521},{"lat":47.0645446,"lon":9.5187388},{"lat":47.0647163,"lon":9.5186796},{"lat":47.0648803,"lon":9.5185499},{"lat":47.0650139,"lon":9.5183487},{"lat":47.0650749,"lon":9.5182009},{"lat":47.0651245,"lon":9.5181131},{"lat":47.0652542,"lon":9.5180626},{"lat":47.0653534,"lon":9.5179968},{"lat":47.0654335,"lon":9.5179062},{"lat":47.0655174,"lon":9.5178365},{"lat":47.0655975,"lon":9.5177526},{"lat":47.0656166,"lon":9.5177459},{"lat":47.0657654,"lon":9.5175438},{"lat":47.0657578,"lon":9.5175419},{"lat":47.0657844,"lon":9.5174875},{"lat":47.065815,"lon":9.5174837},{"lat":47.0658455,"lon":9.5174866},{"lat":47.0658455,"lon":9.5174856},{"lat":47.0659332,"lon":9.5174904},{"lat":47.0660248,"lon":9.5173703},{"lat":47.0660362,"lon":9.5173454},{"lat":47.0661202,"lon":9.5172186},{"lat":47.0662002,"lon":9.5171252},{"lat":47.0662841,"lon":9.5170374},{"lat":47.0663414,"lon":9.5169725},{"lat":47.0663872,"lon":9.5169382},{"lat":47.0664711,"lon":9.5168858},{"lat":47.0665436,"lon":9.5168238},{"lat":47.0666313,"lon":9.5167503},{"lat":47.0666389,"lon":9.5166884},{"lat":47.0666237,"lon":9.5166197},{"lat":47.0665169,"lon":9.5165577},{"lat":47.0664749,"lon":9.5165549},{"lat":47.066452,"lon":9.5165443},{"lat":47.0664329,"lon":9.5165196},{"lat":47.0664978,"lon":9.5164891},{"lat":47.0665245,"lon":9.5164022},{"lat":47.0665627,"lon":9.5163231},{"lat":47.0666084,"lon":9.516243},{"lat":47.0666198,"lon":9.5162201},{"lat":47.0666618,"lon":9.5160856},{"lat":47.0666771,"lon":9.5160618},{"lat":47.0666962,"lon":9.5159188},{"lat":47.0666809,"lon":9.515853},{"lat":47.0666733,"lon":9.5157976},{"lat":47.0666657,"lon":9.5157738},{"lat":47.0666581,"lon":9.5157471},{"lat":47.0666428,"lon":9.5157023},{"lat":47.0666542,"lon":9.5155811},{"lat":47.0666084,"lon":9.5154609},{"lat":47.066597,"lon":9.5152884},{"lat":47.0666084,"lon":9.5151367},{"lat":47.066597,"lon":9.5150013},{"lat":47.0665703,"lon":9.5149154},{"lat":47.0665359,"lon":9.5147829},{"lat":47.0665322,"lon":9.51474},{"lat":47.0665283,"lon":9.5146904},{"lat":47.0664597,"lon":9.5145016},{"lat":47.0663529,"lon":9.5142756},{"lat":47.0663147,"lon":9.5142107},{"lat":47.0662613,"lon":9.5141268},{"lat":47.0661965,"lon":9.5140076},{"lat":47.0661431,"lon":9.5139427},{"lat":47.0660935,"lon":9.5137901},{"lat":47.0660209,"lon":9.5136919},{"lat":47.0659638,"lon":9.5136633},{"lat":47.0659564,"lon":9.5136474},{"lat":47.0659523,"lon":9.5136223},{"lat":47.0659481,"lon":9.5136115},{"lat":47.0659474,"lon":9.5135932},{"lat":47.0659599,"lon":9.513567}]},{"type":"way","id":1637,"tags":{"access":"yes","bicycle":"yes","foot":"yes","highway":"track","horse":"no","motorcar":"no","motorcycle":"no","mtb:scale":"0","sac_scale":"hiking","ski":"no","surface":"gravel","tracktype":"grade2","trail_visibility":"intermediate","wheelchair":"no","width":"2"},"nodes":[18173,18183,18182,18181,18180,18195,18194,18193,18192,18190,18189,18188,18187,18191,18203,18202,18201,18198,18197,18200,18199,18196,18204,18206,18205,18211,18210,18213,18212,18208,18207,18209,18271,18267,18268,18269,18270,18266,18272,18273,18274,18276,18277,18278,18279,18275,18280,18281,18282,18288,18287,18286,18285,18284,18283,18290,18289,18296,18295,18294,18306,18305,18304,18303,18302,18300,18301,18298,18299,18297,18293,18291,18292,18313,18314,18309,18310,18307,18308,18311,18312,18316,18315,18318,18317,18320,18319,18322,18321,18324,18323,18326,18325,18328,18327,18330,18329,18331,18332,18333,18334,18335,18336,18337,18338,18339,18340,18341,18342,18351,18352,18353,18354,18346,18345,18344,18343,18350,18349,18348,18347,18355,18358,18357,18356,18362,18361,18360,18359,18364,18365,18363,18367,18370,18371,18368,18369,18374,18375,18372,18373,18378,18379,18376,18377,18366,18383,18381,18382,18386,18387,18384,18385,18380,18438,18436,18437,18441,18442,18439,18440,18446,18445,18444,18443,18449,18448,18447,18390,18389,18388,18392,18391,18396,18395,18394,18393,18398,18399,18400,18401,18402,18403,18404,18405,18397,18406,18407,18408,18409,18410,18411,18412,18414,18413,18416,18415,18418,18417,18420,18419,18422,18421,18424,18423,18426,18425],"geometry":[{"lat":47.0659599,"lon":9.513567},{"lat":47.0661202,"lon":9.513463},{"lat":47.0663109,"lon":9.5134086},{"lat":47.0665245,"lon":9.513422},{"lat":47.0666733,"lon":9.5134583},{"lat":47.066864,"lon":9.513421},{"lat":47.0669174,"lon":9.5133877},{"lat":47.0670204,"lon":9.5132847},{"lat":47.0670404,"lon":9.5132354},{"lat":47.0671158,"lon":9.5132418},{"lat":47.0672378,"lon":9.5132275},{"lat":47.0673142,"lon":9.5131321},{"lat":47.0674019,"lon":9.5130806},{"lat":47.0674515,"lon":9.5130729},{"lat":47.0675164,"lon":9.5130529},{"lat":47.0675621,"lon":9.5130491},{"lat":47.0676804,"lon":9.5130472},{"lat":47.0678024,"lon":9.5130768},{"lat":47.067894,"lon":9.5131283},{"lat":47.0680161,"lon":9.5132132},{"lat":47.068119,"lon":9.5133333},{"lat":47.0681649,"lon":9.5133934},{"lat":47.0682144,"lon":9.5134402},{"lat":47.068325,"lon":9.5135574},{"lat":47.0684509,"lon":9.5136556},{"lat":47.068554,"lon":9.51371},{"lat":47.0686569,"lon":9.5137883},{"lat":47.0687599,"lon":9.5138836},{"lat":47.0688514,"lon":9.5139551},{"lat":47.0689049,"lon":9.5139799},{"lat":47.0689736,"lon":9.5140009},{"lat":47.0690537,"lon":9.5140887},{"lat":47.0691528,"lon":9.5141869},{"lat":47.0692406,"lon":9.5142994},{"lat":47.0693207,"lon":9.5144072},{"lat":47.0694008,"lon":9.5145626},{"lat":47.0694542,"lon":9.5146551},{"lat":47.0694999,"lon":9.5147133},{"lat":47.0695839,"lon":9.5147953},{"lat":47.0696068,"lon":9.5148258},{"lat":47.0696487,"lon":9.514863},{"lat":47.0697175,"lon":9.5149775},{"lat":47.0698128,"lon":9.5150757},{"lat":47.0698967,"lon":9.515213},{"lat":47.0699615,"lon":9.515335},{"lat":47.0700302,"lon":9.5154686},{"lat":47.0700989,"lon":9.5155992},{"lat":47.0701676,"lon":9.5157671},{"lat":47.0702171,"lon":9.5159378},{"lat":47.0702667,"lon":9.51614},{"lat":47.0703163,"lon":9.5163307},{"lat":47.0703545,"lon":9.5164785},{"lat":47.0703964,"lon":9.516613},{"lat":47.0704346,"lon":9.5167342},{"lat":47.0704765,"lon":9.5168886},{"lat":47.0705109,"lon":9.5169878},{"lat":47.0705605,"lon":9.5171118},{"lat":47.0705986,"lon":9.5172367},{"lat":47.0706558,"lon":9.5174198},{"lat":47.0706863,"lon":9.5175638},{"lat":47.0706902,"lon":9.5176439},{"lat":47.0707016,"lon":9.5177459},{"lat":47.0707054,"lon":9.5177612},{"lat":47.0707092,"lon":9.5177822},{"lat":47.0707092,"lon":9.51787},{"lat":47.0707131,"lon":9.5178833},{"lat":47.0707131,"lon":9.5179062},{"lat":47.0707168,"lon":9.5179005},{"lat":47.0707168,"lon":9.51789},{"lat":47.0707703,"lon":9.5177317},{"lat":47.0708351,"lon":9.5175038},{"lat":47.0708847,"lon":9.5173474},{"lat":47.0709152,"lon":9.517251},{"lat":47.0709648,"lon":9.5171413},{"lat":47.0710564,"lon":9.5170488},{"lat":47.0714073,"lon":9.5168963},{"lat":47.0717583,"lon":9.5168152},{"lat":47.0720825,"lon":9.5167284},{"lat":47.0721855,"lon":9.5166998},{"lat":47.0723572,"lon":9.5167484},{"lat":47.0724068,"lon":9.5168724},{"lat":47.0724754,"lon":9.5170784},{"lat":47.0725136,"lon":9.5171433},{"lat":47.0725365,"lon":9.5172444},{"lat":47.0725441,"lon":9.517272},{"lat":47.0725822,"lon":9.5173216},{"lat":47.0725898,"lon":9.5173483},{"lat":47.0726318,"lon":9.5174542},{"lat":47.0726509,"lon":9.5175237},{"lat":47.0727005,"lon":9.5176487},{"lat":47.0727768,"lon":9.517808},{"lat":47.0728569,"lon":9.5180273},{"lat":47.0729027,"lon":9.5183545},{"lat":47.0730057,"lon":9.5186672},{"lat":47.0730667,"lon":9.5188103},{"lat":47.0731468,"lon":9.5189552},{"lat":47.0732803,"lon":9.519269},{"lat":47.0734368,"lon":9.5197096},{"lat":47.0735512,"lon":9.5199127},{"lat":47.0737419,"lon":9.5202064},{"lat":47.0740242,"lon":9.5206413},{"lat":47.0741844,"lon":9.5208597},{"lat":47.0744057,"lon":9.5209322},{"lat":47.0744667,"lon":9.5209036},{"lat":47.0746994,"lon":9.5207929},{"lat":47.0749245,"lon":9.5206452},{"lat":47.0751839,"lon":9.5205526},{"lat":47.075676,"lon":9.5204907},{"lat":47.0760803,"lon":9.5204391},{"lat":47.0764313,"lon":9.5202694},{"lat":47.0764656,"lon":9.5202503},{"lat":47.0764656,"lon":9.5202541},{"lat":47.076477,"lon":9.520319},{"lat":47.0764733,"lon":9.5203924},{"lat":47.0765075,"lon":9.520462},{"lat":47.0765724,"lon":9.5205517},{"lat":47.0766487,"lon":9.5206203},{"lat":47.0766983,"lon":9.5206671},{"lat":47.0767898,"lon":9.5207529},{"lat":47.0769005,"lon":9.5208482},{"lat":47.0770035,"lon":9.5210009},{"lat":47.0770913,"lon":9.521122},{"lat":47.0772018,"lon":9.5212412},{"lat":47.0773048,"lon":9.5213928},{"lat":47.0773887,"lon":9.521532},{"lat":47.0775032,"lon":9.5216646},{"lat":47.0775948,"lon":9.52182},{"lat":47.0776634,"lon":9.5219278},{"lat":47.0777168,"lon":9.5220127},{"lat":47.0778122,"lon":9.5221243},{"lat":47.0779342,"lon":9.5222321},{"lat":47.0779686,"lon":9.5222702},{"lat":47.0781021,"lon":9.5224028},{"lat":47.0782242,"lon":9.5225763},{"lat":47.0782814,"lon":9.522767},{"lat":47.0783729,"lon":9.5229959},{"lat":47.0784645,"lon":9.5231456},{"lat":47.078579,"lon":9.5233813},{"lat":47.0786171,"lon":9.5234432},{"lat":47.0786858,"lon":9.5236721},{"lat":47.0787849,"lon":9.5238552},{"lat":47.0788803,"lon":9.5239764},{"lat":47.0789566,"lon":9.5241156},{"lat":47.0790062,"lon":9.5242396},{"lat":47.0790329,"lon":9.5243359},{"lat":47.079113,"lon":9.5244608},{"lat":47.0791931,"lon":9.5245047},{"lat":47.0792046,"lon":9.5245209},{"lat":47.0793075,"lon":9.5246496},{"lat":47.0793534,"lon":9.5247326},{"lat":47.079441,"lon":9.5248413},{"lat":47.0794945,"lon":9.5249691},{"lat":47.0795173,"lon":9.525055},{"lat":47.0795441,"lon":9.5251188},{"lat":47.0796051,"lon":9.5252008},{"lat":47.0796166,"lon":9.5252151},{"lat":47.0797157,"lon":9.5252705},{"lat":47.079731,"lon":9.5252705},{"lat":47.0797959,"lon":9.5252809},{"lat":47.0798721,"lon":9.5253639},{"lat":47.0799255,"lon":9.5254593},{"lat":47.0799065,"lon":9.5254793},{"lat":47.0799675,"lon":9.5255499},{"lat":47.0799751,"lon":9.5255489},{"lat":47.0799751,"lon":9.525548},{"lat":47.08004,"lon":9.5254641},{"lat":47.0801697,"lon":9.5253534},{"lat":47.0802231,"lon":9.525219},{"lat":47.0803261,"lon":9.5250406},{"lat":47.0804252,"lon":9.5248833},{"lat":47.0805283,"lon":9.5247574},{"lat":47.080635,"lon":9.5246429},{"lat":47.0806808,"lon":9.5246048},{"lat":47.0807228,"lon":9.5245256},{"lat":47.080864,"lon":9.5244303},{"lat":47.0809059,"lon":9.5244217},{"lat":47.0809326,"lon":9.5244208},{"lat":47.0810394,"lon":9.5244036},{"lat":47.0811539,"lon":9.5243625},{"lat":47.0812378,"lon":9.5243492},{"lat":47.0814057,"lon":9.52425},{"lat":47.0815506,"lon":9.5240516},{"lat":47.081665,"lon":9.5238247},{"lat":47.0817375,"lon":9.523632},{"lat":47.0817833,"lon":9.5233708},{"lat":47.0818787,"lon":9.5232172},{"lat":47.0820503,"lon":9.5231705},{"lat":47.0822181,"lon":9.5230837},{"lat":47.0823708,"lon":9.522955},{"lat":47.0826073,"lon":9.5227881},{"lat":47.0827827,"lon":9.5226412},{"lat":47.0829506,"lon":9.5224686},{"lat":47.0830002,"lon":9.5224333},{"lat":47.083107,"lon":9.522315},{"lat":47.0832787,"lon":9.5222215},{"lat":47.0835075,"lon":9.5220642},{"lat":47.0837669,"lon":9.5219936},{"lat":47.0839042,"lon":9.5219526},{"lat":47.0841293,"lon":9.5218553},{"lat":47.0842704,"lon":9.5217485},{"lat":47.0846253,"lon":9.521656},{"lat":47.0849495,"lon":9.5215187},{"lat":47.0849915,"lon":9.5214348},{"lat":47.0851326,"lon":9.5210743},{"lat":47.0853043,"lon":9.5206595},{"lat":47.0855178,"lon":9.5201511},{"lat":47.0855689,"lon":9.5201139}]},{"type":"way","id":1776,"tags":{"admin_level":"2","border_type":"territorial","boundary":"administrative","name":"Schweiz / Suisse / Svizzera — Liechtenstein","name:de":"Schweiz — Liechtenstein","name:fr":"Suisse — Liechtenstein","name:it":"Svizzera — Liechtenstein","source":"swissBOUNDARIES3D swisstopo 2011","source:url":"http://wiki.openstreetmap.org/wiki/DE:Grenzen_der_Schweiz"},"nodes":[19914,28071,28070,28069,28068,28057,27988,20644],"geometry":[{"lat":47.0851435,"lon":9.5127623},{"lat":47.0851421,"lon":9.5127602},{"lat":47.073844,"lon":9.4922746},{"lat":47.0733144,"lon":9.4910979},{"lat":47.0719233,"lon":9.487619},{"lat":47.0683611,"lon":9.4784723},{"lat":47.066967,"lon":9.4750928},{"lat":47.0663892,"lon":9.4740884}]},{"type":"way","id":1825,"tags":{"highway":"track"},"nodes":[21943,21932,21913,21857,25348,21937,21876,25390,13775],"geometry":[{"lat":47.0719821,"lon":9.5072381},{"lat":47.0716557,"lon":9.5069},{"lat":47.0713171,"lon":9.5066031},{"lat":47.0710454,"lon":9.5064285},{"lat":47.0707283,"lon":9.5062494},{"lat":47.0704998,"lon":9.5061616},{"lat":47.0701051,"lon":9.5060834},{"lat":47.0693588,"lon":9.5059764},{"lat":47.068964,"lon":9.5059251}]},{"type":"way","id":1826,"tags":{"highway":"residential","name":"Gnetsch"},"nodes":[13768,24844,8574,24609,24610,25404,1084],"geometry":[{"lat":47.0668127,"lon":9.5034432},{"lat":47.0666942,"lon":9.5035254},{"lat":47.0665857,"lon":9.5035774},{"lat":47.0664449,"lon":9.5036167},{"lat":47.0657504,"lon":9.5039187},{"lat":47.064914,"lon":9.5042856},{"lat":47.0643094,"lon":9.5045508}]},{"type":"way","id":1833,"tags":{"cycleway":"lane","foot":"yes","highway":"primary","maxspeed":"50","motorcar":"yes","motorcycle":"yes","name":"Landstrasse"},"nodes":[21861,25264,5111,25328,24854,13664,497,24791,13659,24848],"geometry":[{"lat":47.0756471,"lon":9.5118551},{"lat":47.0754468,"lon":9.5117334},{"lat":47.0751532,"lon":9.511555},{"lat":47.0750259,"lon":9.5114719},{"lat":47.0749861,"lon":9.511446},{"lat":47.0745895,"lon":9.5111442},{"lat":47.0744533,"lon":9.5110295},{"lat":47.0741863,"lon":9.510806},{"lat":47.0739166,"lon":9.5105514},{"lat":47.073459,"lon":9.5100755}]},{"type":"way","id":1845,"tags":{"bicycle":"yes","foot":"yes","highway":"secondary","motorcar":"yes","motorcycle":"yes","name":"Egerta"},"nodes":[514,24784,13759,515,24818,24746,24021,516],"geometry":[{"lat":47.0716556,"lon":9.5083662},{"lat":47.0711943,"lon":9.5081208},{"lat":47.0708423,"lon":9.5079478},{"lat":47.0706716,"lon":9.5078557},{"lat":47.0705281,"lon":9.5077629},{"lat":47.0703936,"lon":9.5076433},{"lat":47.0700353,"lon":9.507254},{"lat":47.0699127,"lon":9.5071343}]},{"type":"way","id":1851,"tags":{"bicycle":"yes","foot":"yes","highway":"tertiary","motorcar":"yes","motorcycle":"yes","name":"Rietstrasse"},"nodes":[25340,25397,1084,24816,8631,25274,25298,25210,550,24808],"geometry":[{"lat":47.0651336,"lon":9.5063547},{"lat":47.0646234,"lon":9.5052381},{"lat":47.0643094,"lon":9.5045508},{"lat":47.0642611,"lon":9.5044448},{"lat":47.0635589,"lon":9.5029124},{"lat":47.0631332,"lon":9.5019817},{"lat":47.0630302,"lon":9.5017566},{"lat":47.0628695,"lon":9.5014052},{"lat":47.0623698,"lon":9.5003127},{"lat":47.0623408,"lon":9.5002422}]},{"type":"way","id":1862,"tags":{"highway":"service"},"nodes":[514,21943],"geometry":[{"lat":47.0716556,"lon":9.5083662},{"lat":47.0719821,"lon":9.5072381}]},{"type":"way","id":2047,"tags":{"highway":"unclassified","name":"Rheinau"},"nodes":[8645,23695],"geometry":[{"lat":47.0731625,"lon":9.4927949},{"lat":47.0728323,"lon":9.4917608}]},{"type":"way","id":2144,"tags":{"highway":"residential","name":"Gärten"},"nodes":[24640,24628,46526,46362,46168,46083,46002,45805,45583,8560,8567],"geometry":[{"lat":47.0632975,"lon":9.4926275},{"lat":47.0632521,"lon":9.4925666},{"lat":47.0631349,"lon":9.4922256},{"lat":47.0629868,"lon":9.4917948},{"lat":47.0627485,"lon":9.4911016},{"lat":47.0626432,"lon":9.4907955},{"lat":47.0625559,"lon":9.4905415},{"lat":47.0623596,"lon":9.4899703},{"lat":47.0621071,"lon":9.4892361},{"lat":47.0620052,"lon":9.4889396},{"lat":47.0609963,"lon":9.4859573}]},{"type":"way","id":2145,"tags":{"highway":"residential","name":"Drachenweg"},"nodes":[24637,24626,24661,24651,24608,24646,24615],"geometry":[{"lat":47.0605937,"lon":9.4901893},{"lat":47.0603935,"lon":9.4904816},{"lat":47.0602125,"lon":9.4907839},{"lat":47.0600163,"lon":9.4911753},{"lat":47.0598842,"lon":9.491485},{"lat":47.0597689,"lon":9.4918083},{"lat":47.0596366,"lon":9.4922733}]},{"type":"way","id":2147,"tags":{"highway":"residential","name":"Murasträssle"},"nodes":[12173,24691,24673,24731,24733,13801,9147],"geometry":[{"lat":47.0590332,"lon":9.49911},{"lat":47.0592719,"lon":9.4990955},{"lat":47.0593792,"lon":9.4990638},{"lat":47.0594502,"lon":9.499013},{"lat":47.0595286,"lon":9.4989132},{"lat":47.0596121,"lon":9.4987752},{"lat":47.0596982,"lon":9.4985738}]},{"type":"way","id":2148,"tags":{"highway":"residential","name":"Böngerta"},"nodes":[24677,8557],"geometry":[{"lat":47.0607709,"lon":9.4937763},{"lat":47.0627785,"lon":9.4929546}]},{"type":"way","id":2149,"tags":{"highway":"residential","name":"Gatterbach"},"nodes":[720,24705,24734,24730,24674,24693,24716,24699,721],"geometry":[{"lat":47.0626745,"lon":9.4939517},{"lat":47.0626247,"lon":9.4939173},{"lat":47.0625908,"lon":9.4939061},{"lat":47.0625604,"lon":9.4939045},{"lat":47.0625279,"lon":9.4939107},{"lat":47.0623656,"lon":9.4940279},{"lat":47.061067,"lon":9.4946262},{"lat":47.0608983,"lon":9.4946885},{"lat":47.0607566,"lon":9.4947235}]},{"type":"way","id":2150,"tags":{"highway":"residential","name":"Sömele"},"nodes":[24727,24698,24687],"geometry":[{"lat":47.0589902,"lon":9.4932837},{"lat":47.0593662,"lon":9.4937679},{"lat":47.0596051,"lon":9.4940755}]},{"type":"way","id":2151,"tags":{"highway":"track","tracktype":"grade2"},"nodes":[9150,9151,9152,9153,9154,9155,12218,9156,9157,9158,9159,9160,9161,9162,9163,9164,9165,9166,25128,9167,9168,9169,9170,43168,43167,43166,9171,12220,9172,9173,9174,9175,12221,9176,9177,9178,9179,9180,9181,9182,9183,9184,9185,12222,9186,9187,9188,9189,9190,9191,9192,9193,25197,9194,25214,9195,9196,9197,9198,9199,9200,9201,9202,9203,9204,9205,9206,9207,9208,9209,9210,9211,9212,9213,9214,9215,9216,9217,9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230,24005,24006,9231,24007,24008,24009,24010,24011,9232,9233,9234,9235,9236,9237,58960,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,22557,9267,22558,9268],"geometry":[{"lat":47.0590706,"lon":9.4979749},{"lat":47.0587657,"lon":9.4979215},{"lat":47.058447,"lon":9.4979634},{"lat":47.0580875,"lon":9.4978537},{"lat":47.057713,"lon":9.4978976},{"lat":47.0572936,"lon":9.4978976},{"lat":47.056716,"lon":9.4978075},{"lat":47.0565895,"lon":9.4977878},{"lat":47.0562276,"lon":9.4979556},{"lat":47.0559518,"lon":9.498396},{"lat":47.0558166,"lon":9.4984649},{"lat":47.0554558,"lon":9.4984922},{"lat":47.05532,"lon":9.4985736},{"lat":47.0543725,"lon":9.4990826},{"lat":47.0540014,"lon":9.4991603},{"lat":47.0534617,"lon":9.499653},{"lat":47.0531546,"lon":9.4997202},{"lat":47.052965,"lon":9.4996994},{"lat":47.0522227,"lon":9.4997499},{"lat":47.0520595,"lon":9.4997768},{"lat":47.0516926,"lon":9.4998664},{"lat":47.0514368,"lon":9.4998384},{"lat":47.0512995,"lon":9.4997809},{"lat":47.0510089,"lon":9.499824},{"lat":47.050729,"lon":9.5000242},{"lat":47.0506003,"lon":9.5002048},{"lat":47.0505181,"lon":9.5005216},{"lat":47.0504076,"lon":9.500712},{"lat":47.0501661,"lon":9.5010197},{"lat":47.0499904,"lon":9.501547},{"lat":47.0499452,"lon":9.5020764},{"lat":47.0500106,"lon":9.5026694},{"lat":47.0498504,"lon":9.5027435},{"lat":47.0495082,"lon":9.5019684},{"lat":47.0495042,"lon":9.5013649},{"lat":47.0494593,"lon":9.5008821},{"lat":47.0495342,"lon":9.5004432},{"lat":47.0496413,"lon":9.4999406},{"lat":47.0501483,"lon":9.4983145},{"lat":47.0507924,"lon":9.4969759},{"lat":47.0514366,"lon":9.4955275},{"lat":47.051709,"lon":9.4950304},{"lat":47.052456,"lon":9.4945193},{"lat":47.052534,"lon":9.494423},{"lat":47.0526616,"lon":9.4940927},{"lat":47.052575,"lon":9.4937719},{"lat":47.0523054,"lon":9.4935305},{"lat":47.0521816,"lon":9.493258},{"lat":47.0518472,"lon":9.4923368},{"lat":47.0516195,"lon":9.4919858},{"lat":47.0513173,"lon":9.4917767},{"lat":47.0510095,"lon":9.4918834},{"lat":47.0508022,"lon":9.4919259},{"lat":47.0507128,"lon":9.4918721},{"lat":47.0506197,"lon":9.4916332},{"lat":47.0503762,"lon":9.4915695},{"lat":47.0501952,"lon":9.4916284},{"lat":47.0499004,"lon":9.4920121},{"lat":47.0497738,"lon":9.4923674},{"lat":47.0498217,"lon":9.4928911},{"lat":47.049764,"lon":9.493446},{"lat":47.0497668,"lon":9.4939106},{"lat":47.0498264,"lon":9.4943903},{"lat":47.0498249,"lon":9.494917},{"lat":47.0496397,"lon":9.4954966},{"lat":47.0490003,"lon":9.4966366},{"lat":47.0484848,"lon":9.4976287},{"lat":47.0481606,"lon":9.498207},{"lat":47.0477391,"lon":9.4992829},{"lat":47.0475304,"lon":9.4998291},{"lat":47.047321,"lon":9.5004018},{"lat":47.0468528,"lon":9.5008382},{"lat":47.0464783,"lon":9.5011674},{"lat":47.0457216,"lon":9.5021608},{"lat":47.045265,"lon":9.5034277},{"lat":47.0449591,"lon":9.5049424},{"lat":47.0443617,"lon":9.5062539},{"lat":47.0441975,"lon":9.5064037},{"lat":47.0438063,"lon":9.5066611},{"lat":47.0430844,"lon":9.5066208},{"lat":47.0426308,"lon":9.5067662},{"lat":47.0416549,"lon":9.5071804},{"lat":47.0410402,"lon":9.5073759},{"lat":47.0407412,"lon":9.5078387},{"lat":47.0396327,"lon":9.5086946},{"lat":47.0385364,"lon":9.5095037},{"lat":47.0378574,"lon":9.5102277},{"lat":47.0369663,"lon":9.5112402},{"lat":47.0366967,"lon":9.5120302},{"lat":47.036441,"lon":9.5123154},{"lat":47.036163,"lon":9.5128736},{"lat":47.0361266,"lon":9.5131952},{"lat":47.0364995,"lon":9.5134634},{"lat":47.0366823,"lon":9.5137531},{"lat":47.036558,"lon":9.5139354},{"lat":47.0362582,"lon":9.5138389},{"lat":47.0359877,"lon":9.5136994},{"lat":47.0356513,"lon":9.5132166},{"lat":47.035666,"lon":9.5136672},{"lat":47.0358049,"lon":9.5143002},{"lat":47.0358589,"lon":9.5147571},{"lat":47.0358516,"lon":9.5151648},{"lat":47.0355659,"lon":9.5155354},{"lat":47.0355732,"lon":9.5161559},{"lat":47.0354084,"lon":9.5163973},{"lat":47.0349523,"lon":9.5163702},{"lat":47.0348041,"lon":9.5163614},{"lat":47.0345696,"lon":9.5166826},{"lat":47.0337457,"lon":9.5165729},{"lat":47.0323826,"lon":9.5164632},{"lat":47.0317085,"lon":9.5163973},{"lat":47.0314389,"lon":9.516529},{"lat":47.030969,"lon":9.5164628},{"lat":47.0307146,"lon":9.5165977},{"lat":47.0305896,"lon":9.5170403},{"lat":47.0305101,"lon":9.5178238},{"lat":47.0299803,"lon":9.5188855},{"lat":47.0294316,"lon":9.5191405},{"lat":47.029326,"lon":9.5187416},{"lat":47.029554,"lon":9.5180793},{"lat":47.0292745,"lon":9.5181079},{"lat":47.0288474,"lon":9.518526},{"lat":47.0289522,"lon":9.5180213},{"lat":47.028673,"lon":9.518032},{"lat":47.0287883,"lon":9.5176285},{"lat":47.0288773,"lon":9.5172093},{"lat":47.029168,"lon":9.5165378},{"lat":47.0285574,"lon":9.5169616},{"lat":47.0283081,"lon":9.5174507},{"lat":47.0281198,"lon":9.5177737},{"lat":47.0275457,"lon":9.5181725},{"lat":47.0270199,"lon":9.5185041},{"lat":47.0268855,"lon":9.5183575},{"lat":47.0270318,"lon":9.5177315},{"lat":47.027001,"lon":9.5171842},{"lat":47.0270636,"lon":9.5168096},{"lat":47.0270986,"lon":9.5166003},{"lat":47.0271975,"lon":9.5160822},{"lat":47.0274413,"lon":9.5155518}]},{"type":"way","id":2152,"tags":{"highway":"residential","name":"Hölzle"},"nodes":[24695,24723,24683,24707],"geometry":[{"lat":47.0600992,"lon":9.4928508},{"lat":47.0601833,"lon":9.4925244},{"lat":47.0603026,"lon":9.4921234},{"lat":47.0604413,"lon":9.4917352}]},{"type":"way","id":2153,"tags":{"highway":"residential","name":"Sömele"},"nodes":[24672,24712,24698],"geometry":[{"lat":47.0599988,"lon":9.4927257},{"lat":47.0596103,"lon":9.4933766},{"lat":47.0593662,"lon":9.4937679}]},{"type":"way","id":2154,"tags":{"highway":"residential","name":"Frauenbergweg"},"nodes":[24808,24780,25331,8622],"geometry":[{"lat":47.0623408,"lon":9.5002422},{"lat":47.0627401,"lon":9.5001713},{"lat":47.0629943,"lon":9.5000638},{"lat":47.0634217,"lon":9.4998931}]},{"type":"way","id":2155,"tags":{"highway":"residential","name":"Gaschlieser"},"nodes":[13708,13709,24893,13710,24814,13702,24982,13711,13712],"geometry":[{"lat":47.0649216,"lon":9.5087278},{"lat":47.0642261,"lon":9.5092109},{"lat":47.0641269,"lon":9.5092609},{"lat":47.0640125,"lon":9.5093051},{"lat":47.0635498,"lon":9.5094463},{"lat":47.0634698,"lon":9.5094765},{"lat":47.0631545,"lon":9.5095707},{"lat":47.0630341,"lon":9.5096259},{"lat":47.062321,"lon":9.5100531}]},{"type":"way","id":2157,"tags":{"highway":"residential","name":"Heiligwies"},"nodes":[24966,24903,24894,13741,24997,18978,24882,24918,24931,24996,13742,13766,13743,24871,13744,13745,13758,24999,13746,24857,24860,24751,13747],"geometry":[{"lat":47.0667995,"lon":9.5093531},{"lat":47.0679281,"lon":9.508808},{"lat":47.0679695,"lon":9.5088041},{"lat":47.0680275,"lon":9.5088186},{"lat":47.0680603,"lon":9.5087648},{"lat":47.068103,"lon":9.5087246},{"lat":47.0684944,"lon":9.5086237},{"lat":47.0687281,"lon":9.5085923},{"lat":47.0689578,"lon":9.5085805},{"lat":47.0691902,"lon":9.5085903},{"lat":47.06943,"lon":9.5086216},{"lat":47.0696627,"lon":9.5086754},{"lat":47.0698081,"lon":9.508722},{"lat":47.0701491,"lon":9.5088178},{"lat":47.0711722,"lon":9.5090888},{"lat":47.0713703,"lon":9.5091175},{"lat":47.0715657,"lon":9.5091604},{"lat":47.0718639,"lon":9.5091707},{"lat":47.0721948,"lon":9.5091623},{"lat":47.0722527,"lon":9.5091495},{"lat":47.0722915,"lon":9.5091161},{"lat":47.0723209,"lon":9.509073},{"lat":47.0723774,"lon":9.5089611}]},{"type":"way","id":2158,"tags":{"highway":"residential","name":"Ritsch"},"nodes":[24974,24943,24879,24927,24867,24914,13682],"geometry":[{"lat":47.0611122,"lon":9.5113688},{"lat":47.0611095,"lon":9.5114767},{"lat":47.0610107,"lon":9.512012},{"lat":47.0609559,"lon":9.5122237},{"lat":47.0608798,"lon":9.5124198},{"lat":47.0607929,"lon":9.5125787},{"lat":47.0607019,"lon":9.5127029}]},{"type":"way","id":2159,"tags":{"highway":"residential"},"nodes":[13722,24952,13715],"geometry":[{"lat":47.0660363,"lon":9.510522},{"lat":47.0660542,"lon":9.5106414},{"lat":47.0660561,"lon":9.5110353}]},{"type":"way","id":2160,"tags":{"highway":"residential"},"nodes":[24889,24873,24951,25001,24936],"geometry":[{"lat":47.0618816,"lon":9.5133042},{"lat":47.0618642,"lon":9.5134708},{"lat":47.0618402,"lon":9.5135649},{"lat":47.0618041,"lon":9.513614},{"lat":47.0617293,"lon":9.5136512}]},{"type":"way","id":2161,"tags":{"highway":"unclassified"},"nodes":[24887,24892,24968,24876,24956,24960,24896,24944,24880,24929,24868,24916,24994,24904,24981,24890,24967,24874,24953,24862,24937,24925,18192],"geometry":[{"lat":47.0684423,"lon":9.51061},{"lat":47.0684716,"lon":9.5107257},{"lat":47.0685104,"lon":9.5108021},{"lat":47.0685691,"lon":9.5108708},{"lat":47.0685945,"lon":9.5109257},{"lat":47.0686012,"lon":9.5109845},{"lat":47.0685892,"lon":9.5110629},{"lat":47.0685571,"lon":9.511112},{"lat":47.0685024,"lon":9.5111473},{"lat":47.0683034,"lon":9.5112041},{"lat":47.0681965,"lon":9.5112531},{"lat":47.0680509,"lon":9.5113492},{"lat":47.0679347,"lon":9.5114041},{"lat":47.0677504,"lon":9.5114845},{"lat":47.0676182,"lon":9.511561},{"lat":47.0675327,"lon":9.5116375},{"lat":47.067466,"lon":9.5117316},{"lat":47.0674152,"lon":9.5118433},{"lat":47.0672763,"lon":9.5122571},{"lat":47.0672496,"lon":9.5124002},{"lat":47.0672242,"lon":9.5125963},{"lat":47.0671855,"lon":9.5127689},{"lat":47.0670404,"lon":9.5132354}]},{"type":"way","id":2162,"tags":{"highway":"residential"},"nodes":[24872,24986,24920,24972,24908,24961,24897,24886,24963],"geometry":[{"lat":47.062659,"lon":9.5135532},{"lat":47.0628633,"lon":9.5135708},{"lat":47.0629101,"lon":9.5135571},{"lat":47.0629528,"lon":9.5135198},{"lat":47.0629982,"lon":9.5134571},{"lat":47.0630289,"lon":9.5134316},{"lat":47.0631598,"lon":9.5133806},{"lat":47.0631826,"lon":9.5133434},{"lat":47.0631972,"lon":9.5132669}]},{"type":"way","id":2184,"tags":{"highway":"residential","name":"Anaresch"},"nodes":[16742,24651,24707,25059,25065,25063],"geometry":[{"lat":47.0595837,"lon":9.4906183},{"lat":47.0600163,"lon":9.4911753},{"lat":47.0604413,"lon":9.4917352},{"lat":47.0606081,"lon":9.4919424},{"lat":47.0607028,"lon":9.4920386},{"lat":47.0608184,"lon":9.4921244}]},{"type":"way","id":2185,"tags":{"highway":"residential","name":"Prär"},"nodes":[24717,25060,25066,25064,25062,25061,25067],"geometry":[{"lat":47.0606984,"lon":9.4961185},{"lat":47.0605301,"lon":9.495745},{"lat":47.0604913,"lon":9.4956857},{"lat":47.0604428,"lon":9.4956477},{"lat":47.0603393,"lon":9.495586},{"lat":47.0602892,"lon":9.4955338},{"lat":47.0601583,"lon":9.4952657}]},{"type":"way","id":2190,"tags":{"highway":"residential","name":"Gässle","oneway":"no"},"nodes":[5097,25150,25165,25114,45302,25250,25174],"geometry":[{"lat":47.061285,"lon":9.4956259},{"lat":47.0613118,"lon":9.4956997},{"lat":47.0613593,"lon":9.4957251},{"lat":47.061659,"lon":9.4958163},{"lat":47.0617762,"lon":9.4958472},{"lat":47.0618883,"lon":9.4958767},{"lat":47.0619504,"lon":9.4958874}]},{"type":"way","id":2191,"tags":{"highway":"unclassified","name":"Torbariet"},"nodes":[25137,25367,25201,25356,25124,25396,25209,25210],"geometry":[{"lat":47.0576355,"lon":9.5017872},{"lat":47.0584687,"lon":9.5017261},{"lat":47.0591027,"lon":9.5016797},{"lat":47.0601057,"lon":9.5016108},{"lat":47.0605444,"lon":9.5015807},{"lat":47.0607088,"lon":9.5015668},{"lat":47.0618414,"lon":9.5014712},{"lat":47.0628695,"lon":9.5014052}]},{"type":"way","id":2192,"tags":{"highway":"service","service":"parking_aisle"},"nodes":[25175,25211],"geometry":[{"lat":47.0585558,"lon":9.5122486},{"lat":47.0589511,"lon":9.5121161}]},{"type":"way","id":2193,"tags":{"highway":"service","service":"parking_aisle"},"nodes":[25220,25237],"geometry":[{"lat":47.06687,"lon":9.5069019},{"lat":47.0666359,"lon":9.5069207}]},{"type":"way","id":2194,"tags":{"highway":"service"},"nodes":[25173,25233,25160],"geometry":[{"lat":47.0642599,"lon":9.4955045},{"lat":47.0646846,"lon":9.49519},{"lat":47.0648418,"lon":9.4950734}]},{"type":"way","id":2196,"tags":{"highway":"residential"},"nodes":[25165,25148,25176,25187,25222,25249,25163],"geometry":[{"lat":47.0613593,"lon":9.4957251},{"lat":47.061363,"lon":9.4957989},{"lat":47.0613831,"lon":9.4958391},{"lat":47.0614598,"lon":9.4958928},{"lat":47.0615128,"lon":9.4959652},{"lat":47.0616188,"lon":9.4962334},{"lat":47.0616307,"lon":9.4962589}]},{"type":"way","id":2197,"tags":{"highway":"residential"},"nodes":[24940,25132,25144,25149,25200,25230,25130],"geometry":[{"lat":47.0708876,"lon":9.5109825},{"lat":47.0708761,"lon":9.511223},{"lat":47.0708752,"lon":9.5114027},{"lat":47.0708953,"lon":9.5114898},{"lat":47.070931,"lon":9.5115649},{"lat":47.0710086,"lon":9.5116052},{"lat":47.0711319,"lon":9.5116333}]},{"type":"way","id":2198,"tags":{"highway":"residential"},"nodes":[25199,25136],"geometry":[{"lat":47.0707391,"lon":9.5109507},{"lat":47.0706725,"lon":9.511691}]},{"type":"way","id":2199,"tags":{"highway":"residential"},"nodes":[25229,24610],"geometry":[{"lat":47.065537,"lon":9.5030486},{"lat":47.0657504,"lon":9.5039187}]},{"type":"way","id":2200,"tags":{"highway":"service"},"nodes":[25239,25192,25152],"geometry":[{"lat":47.0641928,"lon":9.4953076},{"lat":47.0645138,"lon":9.4950653},{"lat":47.0648107,"lon":9.4948454}]},{"type":"way","id":2201,"tags":{"highway":"unclassified"},"nodes":[25206,25111,25223,25137,25170,25168,25188,25127,25208,25154,25180,24846],"geometry":[{"lat":47.0573188,"lon":9.4995758},{"lat":47.0573651,"lon":9.4997219},{"lat":47.0574966,"lon":9.5006497},{"lat":47.0576355,"lon":9.5017872},{"lat":47.0578182,"lon":9.5031334},{"lat":47.0580045,"lon":9.5044906},{"lat":47.0581697,"lon":9.505714},{"lat":47.0581946,"lon":9.5058988},{"lat":47.0584212,"lon":9.5076047},{"lat":47.0586551,"lon":9.5093535},{"lat":47.0588853,"lon":9.5110218},{"lat":47.0589891,"lon":9.5117254}]},{"type":"way","id":2202,"tags":{"highway":"footway"},"nodes":[8618,25213,25198,25235,25227,25190],"geometry":[{"lat":47.0624816,"lon":9.4962772},{"lat":47.0625205,"lon":9.4963354},{"lat":47.0623752,"lon":9.496499},{"lat":47.0623706,"lon":9.4965285},{"lat":47.062198,"lon":9.4967229},{"lat":47.0621989,"lon":9.4968517}]},{"type":"way","id":2203,"tags":{"highway":"track"},"nodes":[25218,25186,25143,25140,25216,25243,25188],"geometry":[{"lat":47.0564889,"lon":9.5066416},{"lat":47.0566633,"lon":9.5065908},{"lat":47.0567437,"lon":9.5065425},{"lat":47.0568643,"lon":9.5063869},{"lat":47.057005,"lon":9.5062743},{"lat":47.0576829,"lon":9.505947},{"lat":47.0581697,"lon":9.505714}]},{"type":"way","id":2204,"tags":{"highway":"unclassified"},"nodes":[25166,25113,25228],"geometry":[{"lat":47.0610698,"lon":9.5103812},{"lat":47.0607035,"lon":9.5091686},{"lat":47.0603782,"lon":9.508077}]},{"type":"way","id":2205,"tags":{"highway":"residential"},"nodes":[25191,25190,25189],"geometry":[{"lat":47.0624222,"lon":9.4973664},{"lat":47.0621989,"lon":9.4968517},{"lat":47.0618216,"lon":9.4971802}]},{"type":"way","id":2206,"tags":{"highway":"service"},"nodes":[640,25183,25175,25145,25212,25226,25153],"geometry":[{"lat":47.0584454,"lon":9.5119259},{"lat":47.0584724,"lon":9.5120681},{"lat":47.0585558,"lon":9.5122486},{"lat":47.0586916,"lon":9.5124192},{"lat":47.0591357,"lon":9.5129237},{"lat":47.0592673,"lon":9.5130391},{"lat":47.0594719,"lon":9.5131115}]},{"type":"way","id":2207,"tags":{"highway":"cycleway"},"nodes":[25129,13751],"geometry":[{"lat":47.0705047,"lon":9.5109006},{"lat":47.0706276,"lon":9.5099067}]},{"type":"way","id":2208,"tags":{"highway":"living_street"},"nodes":[24701,25164,25134,25202,25221,25217,25181],"geometry":[{"lat":47.0627431,"lon":9.4940626},{"lat":47.0627881,"lon":9.4940461},{"lat":47.0629023,"lon":9.493979},{"lat":47.0631234,"lon":9.4938154},{"lat":47.0633271,"lon":9.4936692},{"lat":47.0633746,"lon":9.4936102},{"lat":47.0635691,"lon":9.4934775}]},{"type":"way","id":2210,"tags":{"highway":"living_street"},"nodes":[25172,25147],"geometry":[{"lat":47.066791,"lon":9.5059853},{"lat":47.066508,"lon":9.506057}]},{"type":"way","id":2211,"tags":{"highway":"residential","lanes":"2","name":"Rietleweg","oneway":"no","sidewalk":"none","surface":"asphalt"},"nodes":[25138,25135,25224,25182],"geometry":[{"lat":47.0612917,"lon":9.5003362},{"lat":47.06131,"lon":9.499786},{"lat":47.0615256,"lon":9.4996492},{"lat":47.0618746,"lon":9.4995084}]},{"type":"way","id":2212,"tags":{"highway":"residential"},"nodes":[13757,25253,25251,25252,25254,25259,25260],"geometry":[{"lat":47.0716131,"lon":9.5094311},{"lat":47.0715274,"lon":9.5095184},{"lat":47.071469,"lon":9.5095707},{"lat":47.0714425,"lon":9.5095747},{"lat":47.0713995,"lon":9.5095627},{"lat":47.0713283,"lon":9.5095104},{"lat":47.07111,"lon":9.5094567}]},{"type":"way","id":2216,"tags":{"bicycle":"yes","foot":"yes","highway":"primary","maxspeed":"50","motorcar":"yes","motorcycle":"yes","name":"Landstrasse"},"nodes":[24848,24836,498],"geometry":[{"lat":47.073459,"lon":9.5100755},{"lat":47.073287,"lon":9.5098953},{"lat":47.0731871,"lon":9.5097693}]},{"type":"way","id":2218,"tags":{"highway":"path"},"nodes":[25397,25400,25345,25363,25272,25336,25366,25171],"geometry":[{"lat":47.0646234,"lon":9.5052381},{"lat":47.0646892,"lon":9.5052148},{"lat":47.0649158,"lon":9.5052497},{"lat":47.065294,"lon":9.50531},{"lat":47.0654045,"lon":9.5053261},{"lat":47.065737,"lon":9.5053677},{"lat":47.0660595,"lon":9.5054079},{"lat":47.066137,"lon":9.505415}]},{"type":"way","id":2220,"tags":{"highway":"footway"},"nodes":[25295,25310],"geometry":[{"lat":47.068092,"lon":9.5057955},{"lat":47.0680993,"lon":9.5061549}]},{"type":"way","id":2221,"tags":{"highway":"track","tracktype":"grade1"},"nodes":[8638,25279,25387,25375,25357,25320,25331],"geometry":[{"lat":47.0641385,"lon":9.5025511},{"lat":47.0640546,"lon":9.5023634},{"lat":47.0636936,"lon":9.5015793},{"lat":47.0635666,"lon":9.501303},{"lat":47.0633775,"lon":9.5008966},{"lat":47.0630697,"lon":9.5002462},{"lat":47.0629943,"lon":9.5000638}]},{"type":"way","id":2222,"tags":{"highway":"track"},"nodes":[25209,25395,25381,25276,25318,25393,25285,25296,25286,25324,25349,25305],"geometry":[{"lat":47.0618414,"lon":9.5014712},{"lat":47.0620756,"lon":9.5020578},{"lat":47.0625725,"lon":9.5032219},{"lat":47.0631025,"lon":9.5045043},{"lat":47.063351,"lon":9.5050702},{"lat":47.0633948,"lon":9.5051802},{"lat":47.0638571,"lon":9.5062611},{"lat":47.0640409,"lon":9.5067078},{"lat":47.0640744,"lon":9.5067893},{"lat":47.0640982,"lon":9.5068456},{"lat":47.0644015,"lon":9.5075805},{"lat":47.0645847,"lon":9.5080839}]},{"type":"way","id":2224,"tags":{"waterway":"stream"},"nodes":[25294,25326,25281,25407,25376,25358,25341,25355,25315],"geometry":[{"lat":47.0596803,"lon":9.5084471},{"lat":47.060263,"lon":9.5082309},{"lat":47.0609895,"lon":9.5079656},{"lat":47.0617229,"lon":9.5076918},{"lat":47.0624556,"lon":9.5074263},{"lat":47.0631071,"lon":9.5071891},{"lat":47.063857,"lon":9.5069019},{"lat":47.0644435,"lon":9.5066887},{"lat":47.0649039,"lon":9.5065143}]},{"type":"way","id":2225,"tags":{"bridge":"yes","highway":"residential","name":"Plattenbach"},"nodes":[25368,25403],"geometry":[{"lat":47.0684595,"lon":9.5057653},{"lat":47.0685088,"lon":9.5058505}]},{"type":"way","id":2226,"tags":{"highway":"footway"},"nodes":[13771,25303],"geometry":[{"lat":47.0681432,"lon":9.5055437},{"lat":47.0680947,"lon":9.5056815}]},{"type":"way","id":2227,"tags":{"highway":"service"},"nodes":[25386,25384,25288],"geometry":[{"lat":47.069015,"lon":9.5057683},{"lat":47.0688949,"lon":9.5057445},{"lat":47.0687296,"lon":9.5057311}]},{"type":"way","id":2228,"tags":{"highway":"residential","name":"Plattenbach"},"nodes":[25403,25278,40685],"geometry":[{"lat":47.0685088,"lon":9.5058505},{"lat":47.0685205,"lon":9.5058784},{"lat":47.0685644,"lon":9.5060344}]},{"type":"way","id":2229,"tags":{"highway":"track"},"nodes":[21943,528],"geometry":[{"lat":47.0719821,"lon":9.5072381},{"lat":47.0720631,"lon":9.5069575}]},{"type":"way","id":2230,"tags":{"bridge":"yes","highway":"footway"},"nodes":[25303,25295],"geometry":[{"lat":47.0680947,"lon":9.5056815},{"lat":47.068092,"lon":9.5057955}]},{"type":"way","id":2233,"tags":{"highway":"service"},"nodes":[25396,25405],"geometry":[{"lat":47.0607088,"lon":9.5015668},{"lat":47.0606942,"lon":9.5011191}]},{"type":"way","id":2234,"tags":{"highway":"service","service":"parking_aisle"},"nodes":[25290,25270,53505,53506],"geometry":[{"lat":47.066914,"lon":9.5033853},{"lat":47.0668105,"lon":9.5029016},{"lat":47.0666621,"lon":9.5029541},{"lat":47.0667244,"lon":9.5032357}]},{"type":"way","id":2236,"tags":{"highway":"footway"},"nodes":[25298,58239,25389,25273,25275,25339,25382,25375],"geometry":[{"lat":47.0630302,"lon":9.5017566},{"lat":47.0631372,"lon":9.5016731},{"lat":47.0631939,"lon":9.5016289},{"lat":47.0632661,"lon":9.5015659},{"lat":47.0633702,"lon":9.5015028},{"lat":47.0634141,"lon":9.5014411},{"lat":47.0634935,"lon":9.5013634},{"lat":47.0635666,"lon":9.501303}]},{"type":"way","id":2237,"tags":{"highway":"footway"},"nodes":[25406,25321,25283,25306,25277,25401,25371,25402,25282,25338,25364,25362,25354,25274],"geometry":[{"lat":47.0636653,"lon":9.5028461},{"lat":47.0636388,"lon":9.5027876},{"lat":47.0636205,"lon":9.5026937},{"lat":47.0636123,"lon":9.502632},{"lat":47.0635703,"lon":9.5025905},{"lat":47.0634981,"lon":9.5024067},{"lat":47.0634661,"lon":9.5023075},{"lat":47.0634259,"lon":9.5022364},{"lat":47.0633848,"lon":9.5020875},{"lat":47.0633401,"lon":9.5020044},{"lat":47.0632825,"lon":9.5019575},{"lat":47.0632259,"lon":9.5019427},{"lat":47.0631921,"lon":9.501936},{"lat":47.0631332,"lon":9.5019817}]},{"type":"way","id":2239,"tags":{"highway":"living_street"},"nodes":[25340,25335,25347,25361],"geometry":[{"lat":47.0651336,"lon":9.5063547},{"lat":47.06522,"lon":9.5062837},{"lat":47.0654812,"lon":9.5060905},{"lat":47.0657407,"lon":9.5058974}]},{"type":"way","id":2240,"tags":{"highway":"residential","name":"Junkerriet"},"nodes":[25272,25378,25404],"geometry":[{"lat":47.0654045,"lon":9.5053261},{"lat":47.0651378,"lon":9.5047374},{"lat":47.064914,"lon":9.5042856}]},{"type":"way","id":2241,"tags":{"highway":"footway"},"nodes":[25306,25374,25377,25311,25271,25279],"geometry":[{"lat":47.0636123,"lon":9.502632},{"lat":47.0636936,"lon":9.5025529},{"lat":47.0637402,"lon":9.502506},{"lat":47.0638268,"lon":9.5024843},{"lat":47.0638826,"lon":9.5024857},{"lat":47.0640546,"lon":9.5023634}]},{"type":"way","id":2242,"tags":{"highway":"track"},"nodes":[25278,13775],"geometry":[{"lat":47.0685205,"lon":9.5058784},{"lat":47.068964,"lon":9.5059251}]},{"type":"way","id":2243,"tags":{"highway":"track"},"nodes":[25296,25398,25391,25346,25301,25299,25351],"geometry":[{"lat":47.0640409,"lon":9.5067078},{"lat":47.0639704,"lon":9.50676},{"lat":47.0638845,"lon":9.5068137},{"lat":47.0634131,"lon":9.5070014},{"lat":47.0626384,"lon":9.5072804},{"lat":47.0621872,"lon":9.5074473},{"lat":47.0628231,"lon":9.5092475}]},{"type":"way","id":2245,"tags":{"highway":"service"},"nodes":[25350,25292,25297,25373],"geometry":[{"lat":47.0690252,"lon":9.5057369},{"lat":47.0691571,"lon":9.5057606},{"lat":47.0694229,"lon":9.5057942},{"lat":47.0694421,"lon":9.5055434}]},{"type":"way","id":2246,"tags":{"highway":"service"},"nodes":[25537,25566],"geometry":[{"lat":47.0645233,"lon":9.5116433},{"lat":47.0646565,"lon":9.5123367}]},{"type":"way","id":2248,"tags":{"highway":"residential","name":"Palduinstrasse"},"nodes":[25461,25491,25516,25443,25530,25514,25587,25569,25605],"geometry":[{"lat":47.0637653,"lon":9.5127107},{"lat":47.0638049,"lon":9.5128081},{"lat":47.0639237,"lon":9.5129986},{"lat":47.0639474,"lon":9.5130321},{"lat":47.0639721,"lon":9.5130281},{"lat":47.0641192,"lon":9.5129691},{"lat":47.0641338,"lon":9.5128095},{"lat":47.064311,"lon":9.5127384},{"lat":47.0643969,"lon":9.5128993}]},{"type":"way","id":2257,"tags":{"highway":"track"},"nodes":[18173,25542,25550,25614,25575,25427,25629,25478,25477,25557,25475,25628,25632,25630,25413,25433,25418,25438],"geometry":[{"lat":47.0659599,"lon":9.513567},{"lat":47.0658258,"lon":9.5137485},{"lat":47.0657198,"lon":9.5139094},{"lat":47.0656192,"lon":9.5142083},{"lat":47.0655826,"lon":9.5143316},{"lat":47.065536,"lon":9.5143973},{"lat":47.0654785,"lon":9.5144067},{"lat":47.0652355,"lon":9.5144161},{"lat":47.0651268,"lon":9.5144389},{"lat":47.0649222,"lon":9.5145703},{"lat":47.0648016,"lon":9.5147259},{"lat":47.0646362,"lon":9.5148131},{"lat":47.064565,"lon":9.5148641},{"lat":47.0645019,"lon":9.5149754},{"lat":47.0644252,"lon":9.5150987},{"lat":47.0643311,"lon":9.5152074},{"lat":47.0641676,"lon":9.5153522},{"lat":47.0641064,"lon":9.5154354}]},{"type":"way","id":2258,"tags":{"highway":"residential","name":"Palduinstrasse"},"nodes":[25558,25442,25590,25462,25538,25444,25422],"geometry":[{"lat":47.0645961,"lon":9.512362},{"lat":47.0646353,"lon":9.5124957},{"lat":47.0647678,"lon":9.5126928},{"lat":47.0649286,"lon":9.5126257},{"lat":47.0649432,"lon":9.5124662},{"lat":47.0651341,"lon":9.512387},{"lat":47.0652172,"lon":9.512556}]},{"type":"way","id":2259,"tags":{"highway":"living_street"},"nodes":[25420,25518,25484],"geometry":[{"lat":47.0724087,"lon":9.5114535},{"lat":47.0723094,"lon":9.5116456},{"lat":47.0721313,"lon":9.5119514}]},{"type":"way","id":2260,"tags":{"highway":"service"},"nodes":[24942,25492],"geometry":[{"lat":47.0643005,"lon":9.5109276},{"lat":47.0644462,"lon":9.5116762}]},{"type":"way","id":2263,"tags":{"highway":"living_street"},"nodes":[25532,25548,25466,25488],"geometry":[{"lat":47.072107,"lon":9.511364},{"lat":47.0720646,"lon":9.5114699},{"lat":47.0719167,"lon":9.5117194},{"lat":47.0717559,"lon":9.511997}]},{"type":"way","id":2407,"tags":{"landuse":"meadow"},"nodes":[26996,27015,26976,26977,27007,27013,26999,26990,26996],"geometry":[{"lat":47.0654283,"lon":9.5004096},{"lat":47.0654247,"lon":9.5005652},{"lat":47.0653918,"lon":9.5007074},{"lat":47.0653352,"lon":9.5007503},{"lat":47.0652566,"lon":9.5007422},{"lat":47.0651616,"lon":9.5006886},{"lat":47.0651981,"lon":9.500543},{"lat":47.0652621,"lon":9.5005491},{"lat":47.0654283,"lon":9.5004096}]},{"type":"way","id":2408,"tags":{"building":"yes"},"nodes":[26992,26999,26990,26996,27008,26987,26993,26988,27010,26994,26992],"geometry":[{"lat":47.065178,"lon":9.5005411},{"lat":47.0651981,"lon":9.500543},{"lat":47.0652621,"lon":9.5005491},{"lat":47.0654283,"lon":9.5004096},{"lat":47.0653718,"lon":9.5001375},{"lat":47.065295,"lon":9.5001253},{"lat":47.0652841,"lon":9.5000839},{"lat":47.0651488,"lon":9.500128},{"lat":47.065085,"lon":9.5003038},{"lat":47.0651689,"lon":9.5004633},{"lat":47.065178,"lon":9.5005411}]},{"type":"way","id":2409,"tags":{"highway":"footway","motorcar":"no","motorcycle":"no"},"nodes":[26986,27003,26989],"geometry":[{"lat":47.0653688,"lon":9.50076},{"lat":47.0654631,"lon":9.5007932},{"lat":47.0655325,"lon":9.5007798}]},{"type":"way","id":2410,"tags":{"area":"yes","barrier":"wall","historic":"castle","name":"Schloss Gutenberg"},"nodes":[26992,26994,27010,26988,26993,26987,27008,27002,26979,27000,26991,26982,26984,26980,26985,27016,26998,27004,26974,27011,27012,26981,27009,27006,26997,27005,26995,27014,572,26992],"geometry":[{"lat":47.065178,"lon":9.5005411},{"lat":47.0651689,"lon":9.5004633},{"lat":47.065085,"lon":9.5003038},{"lat":47.0651488,"lon":9.500128},{"lat":47.0652841,"lon":9.5000839},{"lat":47.065295,"lon":9.5001253},{"lat":47.0653718,"lon":9.5001375},{"lat":47.0654979,"lon":9.5000973},{"lat":47.0656348,"lon":9.5002836},{"lat":47.0656585,"lon":9.5002541},{"lat":47.0656859,"lon":9.5002728},{"lat":47.0656678,"lon":9.5003092},{"lat":47.0657718,"lon":9.5004338},{"lat":47.0656841,"lon":9.5006242},{"lat":47.0655398,"lon":9.5007986},{"lat":47.0655655,"lon":9.5008644},{"lat":47.0655581,"lon":9.5009127},{"lat":47.0655435,"lon":9.5009341},{"lat":47.065527,"lon":9.5009246},{"lat":47.0655124,"lon":9.5009139},{"lat":47.0654978,"lon":9.5008763},{"lat":47.0654758,"lon":9.5008442},{"lat":47.065443,"lon":9.5008403},{"lat":47.0653462,"lon":9.5009341},{"lat":47.0651995,"lon":9.5008241},{"lat":47.0651762,"lon":9.5008066},{"lat":47.0651635,"lon":9.5008161},{"lat":47.0651178,"lon":9.5007866},{"lat":47.0651353,"lon":9.5007185},{"lat":47.065178,"lon":9.5005411}]},{"type":"way","id":2411,"tags":{"landuse":"meadow"},"nodes":[27009,26983,26978,26975,26997,27006,27009],"geometry":[{"lat":47.065443,"lon":9.5008403},{"lat":47.0654101,"lon":9.5008093},{"lat":47.0652968,"lon":9.5008173},{"lat":47.0652036,"lon":9.5008039},{"lat":47.0651995,"lon":9.5008241},{"lat":47.0653462,"lon":9.5009341},{"lat":47.065443,"lon":9.5008403}]},{"type":"way","id":2525,"tags":{"admin_level":"2","border_type":"territorial","boundary":"administrative","name":"Schweiz / Suisse / Svizzera — Liechtenstein","name:de":"Schweiz — Liechtenstein","name:fr":"Suisse — Liechtenstein","name:it":"Svizzera — Liechtenstein","source":"swissBOUNDARIES3D swisstopo 2011"},"nodes":[19436,28840,28842,28849,28911,28930,28950,28946,28945,28956,28958,28933,28908,28866,28836,28785,28783,28872,28927,28941,28949,28961,28964,28967,28925,28924,28937,28954,28979,28972,28969,28960,28973,28986,29002,29025,29054],"geometry":[{"lat":47.0517524,"lon":9.4757865},{"lat":47.051899,"lon":9.4764733},{"lat":47.0519466,"lon":9.4766963},{"lat":47.0521202,"lon":9.4768199},{"lat":47.0534591,"lon":9.4762706},{"lat":47.0546023,"lon":9.4768917},{"lat":47.0556553,"lon":9.4787954},{"lat":47.0553968,"lon":9.4797818},{"lat":47.055386,"lon":9.4800873},{"lat":47.0560746,"lon":9.4810537},{"lat":47.0561191,"lon":9.4822741},{"lat":47.0546803,"lon":9.481792},{"lat":47.0534339,"lon":9.4816713},{"lat":47.0525407,"lon":9.4818879},{"lat":47.0517712,"lon":9.4827217},{"lat":47.0492595,"lon":9.4843747},{"lat":47.0490919,"lon":9.4857484},{"lat":47.0527123,"lon":9.4883199},{"lat":47.0542556,"lon":9.4900752},{"lat":47.0549475,"lon":9.4903461},{"lat":47.0556421,"lon":9.4907689},{"lat":47.0562517,"lon":9.4913076},{"lat":47.05643,"lon":9.4924132},{"lat":47.0565165,"lon":9.4933243},{"lat":47.0541601,"lon":9.4973872},{"lat":47.0541548,"lon":9.4995322},{"lat":47.0548116,"lon":9.499336},{"lat":47.0559417,"lon":9.4997041},{"lat":47.0571275,"lon":9.4999962},{"lat":47.0568067,"lon":9.5006481},{"lat":47.056682,"lon":9.5015249},{"lat":47.0562259,"lon":9.5027639},{"lat":47.0568181,"lon":9.5120732},{"lat":47.0573392,"lon":9.5141386},{"lat":47.0585266,"lon":9.5153665},{"lat":47.0600894,"lon":9.5165385},{"lat":47.0630449,"lon":9.5305992}]},{"type":"way","id":2533,"tags":{"boat":"yes","name":"Rhein","name:de":"Rhein","source":"Yahoo","waterway":"riverbank","wikipedia":"de:Rhein"},"nodes":[8763,8762,8761,8760,8759,8758,8757,8756,8755,8754,8753,8752,8751,8750,8749,8748,1194,1193,1192,1191,1190,1189,1188,1187,1186,1185,1184,1183,1182,1181,1180,1179,1178,1177,1176,1175,1174,1173,1172,1171,1170,1277,1276,1275,1274,1273,1272,1271,1270,1269,1268,1267,1266,1265,1264,1263,1262,1261,1260,1259,1258,1257,1256,1255,1254,1253,1252,1251,1250,1249,1248,2350,2349,2348,2347,2346,3707,9851,2345,2344,2343,2342,2341,2340,2339,2338,2337,2336,2335,2334,2333,2332,2331,2330,2329,2328,2327,1454,1525,1524,1523,1522,1521,1520,1519,38080,1518,38054,1517,1516,1515,1514,1513,1512,1511,33057,25078,1463,1462,25075,1461,1460,38006,1459,1458,1457,1456,1455,2326,2325,2324,2323,2322,2321,2320,2319,2318,2317,2316,2315,2314,2313,2312,2311,2310,2309,2308,2307,2306,2305,2304,2303,2302,2301,2300,1247,1246,1245,1244,1243,1242,1241,1240,1239,1238,1237,1236,1235,1234,1233,1232,1231,1230,1229,1228,1227,1226,1225,1224,1223,1222,1221,1220,1219,1218,1217,1216,1215,1214,1213,1212,1211,1210,1209,1208,1207,1206,1205,1204,1203,1202,1201,1200,1199,1198,1197,1196,1195,30371,30369,30366,30361,30355,30344,30338,10055,8747,8780,8779,8778,8777,22570,8776,8775,8774,8773,8772,8771,8770,8769,8768,8767,8766,8765,8764,8763],"geometry":[{"lat":47.0492927,"lon":9.4778422},{"lat":47.050708,"lon":9.4768123},{"lat":47.0556143,"lon":9.4747266},{"lat":47.0612452,"lon":9.4724521},{"lat":47.0631747,"lon":9.4723062},{"lat":47.0638061,"lon":9.472392},{"lat":47.0642446,"lon":9.4725637},{"lat":47.0650047,"lon":9.4730271},{"lat":47.0656068,"lon":9.4737653},{"lat":47.0660862,"lon":9.4744863},{"lat":47.0665832,"lon":9.475542},{"lat":47.0677934,"lon":9.4783143},{"lat":47.0718271,"lon":9.4886312},{"lat":47.0735399,"lon":9.4926652},{"lat":47.074633,"lon":9.4946222},{"lat":47.0793559,"lon":9.503231},{"lat":47.0830329,"lon":9.5101065},{"lat":47.0841433,"lon":9.5121235},{"lat":47.0845173,"lon":9.5128187},{"lat":47.0848855,"lon":9.513368},{"lat":47.0852654,"lon":9.5138916},{"lat":47.0856804,"lon":9.514398},{"lat":47.0863641,"lon":9.5151791},{"lat":47.0867791,"lon":9.5155825},{"lat":47.0873752,"lon":9.5160374},{"lat":47.0886959,"lon":9.516724},{"lat":47.0900692,"lon":9.517342},{"lat":47.0920035,"lon":9.5182175},{"lat":47.0930436,"lon":9.5186724},{"lat":47.0940019,"lon":9.5191101},{"lat":47.0953868,"lon":9.5196594},{"lat":47.0963626,"lon":9.5199512},{"lat":47.0974669,"lon":9.5202001},{"lat":47.0977649,"lon":9.5201744},{"lat":47.0984543,"lon":9.5202345},{"lat":47.1004058,"lon":9.5202774},{"lat":47.1020476,"lon":9.5201143},{"lat":47.1038003,"lon":9.5198482},{"lat":47.1055529,"lon":9.5195478},{"lat":47.1072062,"lon":9.519153},{"lat":47.1110208,"lon":9.5181917},{"lat":47.1124812,"lon":9.5178226},{"lat":47.1140408,"lon":9.5174192},{"lat":47.1157989,"lon":9.5169386},{"lat":47.1175395,"lon":9.5164751},{"lat":47.1198349,"lon":9.5159086},{"lat":47.1211081,"lon":9.5154709},{"lat":47.1216162,"lon":9.5153078},{"lat":47.1233332,"lon":9.5149301},{"lat":47.1249626,"lon":9.5145353},{"lat":47.1256283,"lon":9.5143122},{"lat":47.1273627,"lon":9.5139173},{"lat":47.130119,"lon":9.5132221},{"lat":47.1311233,"lon":9.5129217},{"lat":47.132151,"lon":9.5124754},{"lat":47.1323029,"lon":9.5124582},{"lat":47.1336167,"lon":9.5119604},{"lat":47.1350122,"lon":9.5114025},{"lat":47.1376688,"lon":9.5102524},{"lat":47.1387781,"lon":9.5098146},{"lat":47.1406113,"lon":9.5089563},{"lat":47.1413819,"lon":9.5085615},{"lat":47.1424094,"lon":9.5079092},{"lat":47.1430633,"lon":9.5073856},{"lat":47.1437697,"lon":9.5067505},{"lat":47.1447563,"lon":9.5057291},{"lat":47.1457954,"lon":9.504639},{"lat":47.1470213,"lon":9.5033087},{"lat":47.1481829,"lon":9.5020899},{"lat":47.1490235,"lon":9.5011801},{"lat":47.1498792,"lon":9.5004296},{"lat":47.1531362,"lon":9.4984641},{"lat":47.1595564,"lon":9.4941725},{"lat":47.1628245,"lon":9.4921555},{"lat":47.164867,"lon":9.4912543},{"lat":47.1660924,"lon":9.4908681},{"lat":47.1677251,"lon":9.4904002},{"lat":47.1703283,"lon":9.4895171},{"lat":47.1762563,"lon":9.4878606},{"lat":47.1809123,"lon":9.4866194},{"lat":47.1814082,"lon":9.4865336},{"lat":47.1828895,"lon":9.4867963},{"lat":47.1858178,"lon":9.4874486},{"lat":47.1902684,"lon":9.4885902},{"lat":47.1936163,"lon":9.4895772},{"lat":47.1958734,"lon":9.490281},{"lat":47.1977163,"lon":9.4911308},{"lat":47.198562,"lon":9.4916543},{"lat":47.2001132,"lon":9.4927272},{"lat":47.2089946,"lon":9.499022},{"lat":47.2108021,"lon":9.5001378},{"lat":47.2112102,"lon":9.5003953},{"lat":47.2129302,"lon":9.5009102},{"lat":47.2158744,"lon":9.5014252},{"lat":47.2180606,"lon":9.5018973},{"lat":47.2198386,"lon":9.5024552},{"lat":47.2206256,"lon":9.5027127},{"lat":47.2221247,"lon":9.5034756},{"lat":47.2226905,"lon":9.5037905},{"lat":47.2231568,"lon":9.5040051},{"lat":47.2238855,"lon":9.5043055},{"lat":47.2243226,"lon":9.5046059},{"lat":47.224789,"lon":9.5049492},{"lat":47.2253719,"lon":9.5056788},{"lat":47.2280882,"lon":9.5079437},{"lat":47.2297029,"lon":9.5093196},{"lat":47.2321469,"lon":9.5114058},{"lat":47.2339563,"lon":9.5129328},{"lat":47.235009,"lon":9.513899},{"lat":47.2389515,"lon":9.5173947},{"lat":47.2417743,"lon":9.5197194},{"lat":47.243152,"lon":9.5206595},{"lat":47.2439045,"lon":9.5212141},{"lat":47.2444289,"lon":9.5214287},{"lat":47.2460576,"lon":9.5223339},{"lat":47.2462495,"lon":9.5216266},{"lat":47.2464252,"lon":9.5209791},{"lat":47.2440015,"lon":9.5197803},{"lat":47.2427907,"lon":9.5189349},{"lat":47.2415682,"lon":9.5180443},{"lat":47.2411364,"lon":9.5177025},{"lat":47.2386983,"lon":9.5156083},{"lat":47.2362097,"lon":9.5134084},{"lat":47.2339383,"lon":9.5114413},{"lat":47.2298875,"lon":9.5080094},{"lat":47.2266542,"lon":9.5053354},{"lat":47.2244684,"lon":9.5034901},{"lat":47.2224851,"lon":9.5022835},{"lat":47.2210919,"lon":9.501554},{"lat":47.2203632,"lon":9.5011677},{"lat":47.219722,"lon":9.5009961},{"lat":47.2184395,"lon":9.5006957},{"lat":47.2149999,"lon":9.500009},{"lat":47.2122305,"lon":9.4993653},{"lat":47.211356,"lon":9.4990649},{"lat":47.2106272,"lon":9.4986357},{"lat":47.205496,"lon":9.4951167},{"lat":47.1982358,"lon":9.4900956},{"lat":47.1973027,"lon":9.4896235},{"lat":47.1965446,"lon":9.4891944},{"lat":47.1956698,"lon":9.488851},{"lat":47.1927828,"lon":9.4879927},{"lat":47.1854333,"lon":9.4861045},{"lat":47.1830416,"lon":9.4854178},{"lat":47.1821082,"lon":9.4852891},{"lat":47.1807956,"lon":9.4853749},{"lat":47.1795414,"lon":9.4856753},{"lat":47.177762,"lon":9.4861903},{"lat":47.1739697,"lon":9.487349},{"lat":47.1703229,"lon":9.4884219},{"lat":47.1663842,"lon":9.4894948},{"lat":47.1633143,"lon":9.4904721},{"lat":47.1610499,"lon":9.4918368},{"lat":47.1568717,"lon":9.4943871},{"lat":47.1527568,"lon":9.496962},{"lat":47.1494438,"lon":9.4992145},{"lat":47.1488776,"lon":9.4997295},{"lat":47.1480253,"lon":9.5005964},{"lat":47.1465601,"lon":9.5021585},{"lat":47.1451824,"lon":9.503652},{"lat":47.1436237,"lon":9.5054373},{"lat":47.1430166,"lon":9.5060295},{"lat":47.1426021,"lon":9.5063642},{"lat":47.1418665,"lon":9.5069136},{"lat":47.1413119,"lon":9.5072483},{"lat":47.1387897,"lon":9.5083383},{"lat":47.1358004,"lon":9.5095657},{"lat":47.1334648,"lon":9.5105356},{"lat":47.1329627,"lon":9.5108618},{"lat":47.1321686,"lon":9.5111193},{"lat":47.1311642,"lon":9.5114283},{"lat":47.1296577,"lon":9.5117802},{"lat":47.1283321,"lon":9.5121492},{"lat":47.1264167,"lon":9.5126385},{"lat":47.1243085,"lon":9.5131792},{"lat":47.1216746,"lon":9.5139431},{"lat":47.1206,"lon":9.5142521},{"lat":47.1198582,"lon":9.5144237},{"lat":47.1180243,"lon":9.5149645},{"lat":47.1159566,"lon":9.5155653},{"lat":47.1138655,"lon":9.5161146},{"lat":47.1108806,"lon":9.5168957},{"lat":47.1097999,"lon":9.5172047},{"lat":47.1085674,"lon":9.5175051},{"lat":47.1065636,"lon":9.5180887},{"lat":47.1055529,"lon":9.5182604},{"lat":47.1045539,"lon":9.5184063},{"lat":47.102737,"lon":9.5186724},{"lat":47.1007272,"lon":9.5189814},{"lat":47.0998858,"lon":9.51905},{"lat":47.09884,"lon":9.5190414},{"lat":47.0978876,"lon":9.5189127},{"lat":47.0969293,"lon":9.5188183},{"lat":47.096566,"lon":9.5187067},{"lat":47.0960618,"lon":9.5185597},{"lat":47.0950712,"lon":9.5182604},{"lat":47.0936805,"lon":9.5176596},{"lat":47.0922723,"lon":9.5170072},{"lat":47.0909282,"lon":9.5163893},{"lat":47.0895959,"lon":9.5157885},{"lat":47.0885849,"lon":9.5153679},{"lat":47.0876849,"lon":9.5148872},{"lat":47.0870362,"lon":9.514398},{"lat":47.0863115,"lon":9.5136856},{"lat":47.0858977,"lon":9.5131049},{"lat":47.0855396,"lon":9.5124462},{"lat":47.084571,"lon":9.510692},{"lat":47.0837677,"lon":9.5092917},{"lat":47.0827727,"lon":9.5074639},{"lat":47.0826918,"lon":9.5074283},{"lat":47.0825589,"lon":9.5073698},{"lat":47.0822239,"lon":9.5071421},{"lat":47.0817312,"lon":9.5064297},{"lat":47.0811111,"lon":9.5053574},{"lat":47.0810031,"lon":9.5044791},{"lat":47.0808496,"lon":9.5040603},{"lat":47.0795732,"lon":9.501653},{"lat":47.0753344,"lon":9.4942359},{"lat":47.074253,"lon":9.4922618},{"lat":47.0737679,"lon":9.4911718},{"lat":47.0714647,"lon":9.4855413},{"lat":47.0686441,"lon":9.4781526},{"lat":47.067618,"lon":9.4754647},{"lat":47.0670801,"lon":9.4743661},{"lat":47.0662616,"lon":9.4732074},{"lat":47.0655893,"lon":9.4723491},{"lat":47.0650456,"lon":9.4717912},{"lat":47.0642855,"lon":9.4713363},{"lat":47.0634787,"lon":9.4711389},{"lat":47.0624263,"lon":9.4710359},{"lat":47.0611867,"lon":9.4712934},{"lat":47.0590643,"lon":9.4721088},{"lat":47.0544273,"lon":9.4741086},{"lat":47.0508367,"lon":9.4756536},{"lat":47.0489068,"lon":9.4767093},{"lat":47.0492927,"lon":9.4778422}]},{"type":"way","id":2601,"tags":{"highway":"track","name":"Kappele","tracktype":"grade1"},"nodes":[725,30231,30233,30234,30236,30237,30238,30239,30240,30241,29773,29780,29793],"geometry":[{"lat":47.0659203,"lon":9.4871037},{"lat":47.0660229,"lon":9.4873106},{"lat":47.0665057,"lon":9.4887318},{"lat":47.0668376,"lon":9.4897035},{"lat":47.0671303,"lon":9.4905876},{"lat":47.0676614,"lon":9.4921476},{"lat":47.0682528,"lon":9.4938707},{"lat":47.0685606,"lon":9.4947518},{"lat":47.0687296,"lon":9.4952949},{"lat":47.0689114,"lon":9.4958146},{"lat":47.0695314,"lon":9.4971607},{"lat":47.0706192,"lon":9.4995058},{"lat":47.0713176,"lon":9.5010193}]},{"type":"way","id":2604,"tags":{"area":"yes","leisure":"pitch","name":"Sportanlage Rheinau","operator":"FC Balzers","sport":"soccer"},"nodes":[29832,29850,29840,29834,29827,29819,29825,29821,29832],"geometry":[{"lat":47.0733115,"lon":9.4932212},{"lat":47.0750272,"lon":9.4962574},{"lat":47.0745002,"lon":9.4968622},{"lat":47.0733923,"lon":9.4949219},{"lat":47.0730959,"lon":9.4952363},{"lat":47.0726138,"lon":9.4945207},{"lat":47.0729402,"lon":9.4940776},{"lat":47.0727785,"lon":9.4938051},{"lat":47.0733115,"lon":9.4932212}]},{"type":"way","id":2606,"tags":{"highway":"track","surface":"asphalt","tracktype":"grade1"},"nodes":[13652,29829,29822,29800],"geometry":[{"lat":47.0739815,"lon":9.5074394},{"lat":47.0732106,"lon":9.5057954},{"lat":47.0728232,"lon":9.5049913},{"lat":47.0720877,"lon":9.5032757}]},{"type":"way","id":2607,"tags":{"highway":"track","tracktype":"grade1"},"nodes":[29794,29796,29803,29823,29830],"geometry":[{"lat":47.0713772,"lon":9.4940881},{"lat":47.0718042,"lon":9.4954747},{"lat":47.072216,"lon":9.4967004},{"lat":47.0728242,"lon":9.4985157},{"lat":47.0732264,"lon":9.4998048}]},{"type":"way","id":2609,"tags":{"highway":"service","service":"driveway"},"nodes":[29780,29786,29788,29785,29784],"geometry":[{"lat":47.0706192,"lon":9.4995058},{"lat":47.0710639,"lon":9.499063},{"lat":47.0711148,"lon":9.4989193},{"lat":47.0708992,"lon":9.4984881},{"lat":47.0708513,"lon":9.4983683}]},{"type":"way","id":2610,"tags":{"highway":"service","service":"driveway"},"nodes":[29797,29799,29806,29826,29836,29838],"geometry":[{"lat":47.0719338,"lon":9.4936905},{"lat":47.072063,"lon":9.4937119},{"lat":47.0722651,"lon":9.4941274},{"lat":47.0730174,"lon":9.4952352},{"lat":47.0737885,"lon":9.4962084},{"lat":47.0744285,"lon":9.4971291}]},{"type":"way","id":2611,"tags":{"highway":"service","service":"driveway"},"nodes":[29798,29801,29804,29813,29816,29820],"geometry":[{"lat":47.0720122,"lon":9.5005774},{"lat":47.0721252,"lon":9.5009367},{"lat":47.0722421,"lon":9.5013219},{"lat":47.0723839,"lon":9.5015537},{"lat":47.0724529,"lon":9.5015748},{"lat":47.0726982,"lon":9.5014311}]},{"type":"way","id":2612,"tags":{"highway":"service","service":"driveway"},"nodes":[29784,29778,29777,29776,29775,29774,29773],"geometry":[{"lat":47.0708513,"lon":9.4983683},{"lat":47.0705878,"lon":9.4977964},{"lat":47.0703782,"lon":9.4973593},{"lat":47.0701537,"lon":9.4968712},{"lat":47.0700429,"lon":9.4967395},{"lat":47.069965,"lon":9.4967275},{"lat":47.0695314,"lon":9.4971607}]},{"type":"way","id":2614,"tags":{"building":"yes"},"nodes":[29802,29807,29808,29811,29814,29817,29818,29815,29810,29809,29805,29802],"geometry":[{"lat":47.0722143,"lon":9.5010591},{"lat":47.0723006,"lon":9.5010117},{"lat":47.0723114,"lon":9.5010539},{"lat":47.072377,"lon":9.5010179},{"lat":47.0724052,"lon":9.5011286},{"lat":47.0725008,"lon":9.5010761},{"lat":47.0725883,"lon":9.5014196},{"lat":47.0724459,"lon":9.5014978},{"lat":47.0723605,"lon":9.501163},{"lat":47.0723543,"lon":9.5011387},{"lat":47.0722493,"lon":9.5011964},{"lat":47.0722143,"lon":9.5010591}]},{"type":"way","id":2616,"tags":{"building":"yes"},"nodes":[29781,29783,29782,29779,29781],"geometry":[{"lat":47.0706825,"lon":9.4991289},{"lat":47.0707598,"lon":9.4992984},{"lat":47.0706873,"lon":9.4993717},{"lat":47.0706012,"lon":9.4991905},{"lat":47.0706825,"lon":9.4991289}]},{"type":"way","id":2617,"tags":{"building":"yes"},"nodes":[29831,29835,29833,29828,29831],"geometry":[{"lat":47.0733064,"lon":9.4951645},{"lat":47.0734645,"lon":9.4954328},{"lat":47.0733351,"lon":9.4955645},{"lat":47.073177,"lon":9.4953034},{"lat":47.0733064,"lon":9.4951645}]},{"type":"way","id":2618,"tags":{"building":"yes"},"nodes":[29789,29791,29790,29787,29789],"geometry":[{"lat":47.0711403,"lon":9.4985994},{"lat":47.0712374,"lon":9.498802},{"lat":47.0711757,"lon":9.4988569},{"lat":47.0710786,"lon":9.4986542},{"lat":47.0711403,"lon":9.4985994}]},{"type":"way","id":2662,"tags":{"highway":"track","tracktype":"grade3"},"nodes":[41204,41232,41229,41243,41225,41228,41236,41244,41224,41235,41242,41241,41222,41231,41233,41240,41230,41237,41226,41227,41234,41248,41247,30343,30365,30385,30392,30398,30402,42791,30407,30412,30414,30427,30434,30435,30437,30442,30444,30445,30487,30503,30513,30514,30516,30518,30531,30536,30543,30545],"geometry":[{"lat":47.0536904,"lon":9.4757334},{"lat":47.054796,"lon":9.4752372},{"lat":47.056744,"lon":9.4744164},{"lat":47.0603912,"lon":9.4729415},{"lat":47.0611732,"lon":9.4726411},{"lat":47.0617068,"lon":9.4725338},{"lat":47.0622183,"lon":9.4725231},{"lat":47.063497,"lon":9.4724372},{"lat":47.0639208,"lon":9.4725338},{"lat":47.0647613,"lon":9.4729839},{"lat":47.0652345,"lon":9.4734307},{"lat":47.0654903,"lon":9.473817},{"lat":47.066528,"lon":9.4756838},{"lat":47.0669153,"lon":9.4765635},{"lat":47.0674488,"lon":9.4778081},{"lat":47.0678946,"lon":9.4788488},{"lat":47.0684883,"lon":9.480376},{"lat":47.0693652,"lon":9.4825647},{"lat":47.0707737,"lon":9.4861444},{"lat":47.0719082,"lon":9.4890557},{"lat":47.0732217,"lon":9.4923349},{"lat":47.076475,"lon":9.4981966},{"lat":47.0793643,"lon":9.5035452},{"lat":47.0810927,"lon":9.5067872},{"lat":47.0825133,"lon":9.5093633},{"lat":47.0835525,"lon":9.5112941},{"lat":47.0840033,"lon":9.5121101},{"lat":47.0845095,"lon":9.5129936},{"lat":47.0847483,"lon":9.5133513},{"lat":47.0848377,"lon":9.5134271},{"lat":47.0851235,"lon":9.513891},{"lat":47.0854819,"lon":9.5143262},{"lat":47.0858855,"lon":9.5148409},{"lat":47.0865169,"lon":9.5155324},{"lat":47.0869617,"lon":9.5159148},{"lat":47.0870935,"lon":9.5159824},{"lat":47.0872809,"lon":9.5161188},{"lat":47.0876712,"lon":9.5163372},{"lat":47.0878587,"lon":9.5164515},{"lat":47.0879772,"lon":9.5165363},{"lat":47.0889992,"lon":9.5169952},{"lat":47.0904161,"lon":9.5176516},{"lat":47.0923025,"lon":9.5184861},{"lat":47.0924809,"lon":9.5185478},{"lat":47.0929867,"lon":9.5187746},{"lat":47.0931725,"lon":9.518893},{"lat":47.0942648,"lon":9.5193444},{"lat":47.0954161,"lon":9.5197823},{"lat":47.096267,"lon":9.5200495},{"lat":47.097221,"lon":9.520241}]},{"type":"way","id":2966,"tags":{"highway":"service"},"nodes":[33537,33534],"geometry":[{"lat":47.0625558,"lon":9.4982827},{"lat":47.0619492,"lon":9.4986553}]},{"type":"way","id":2986,"tags":{"highway":"service"},"nodes":[34904,34903,34902,34901],"geometry":[{"lat":47.0609682,"lon":9.5003378},{"lat":47.0609475,"lon":9.4999464},{"lat":47.0609475,"lon":9.4997439},{"lat":47.0609084,"lon":9.4995853}]},{"type":"way","id":3025,"tags":{"bicycle":"yes","foot":"yes","highway":"secondary","motorcar":"yes","motorcycle":"yes","name":"Egerta"},"nodes":[513,24772,13747,24812,24770,514],"geometry":[{"lat":47.0727085,"lon":9.5092804},{"lat":47.0726713,"lon":9.5092551},{"lat":47.0723774,"lon":9.5089611},{"lat":47.0721694,"lon":9.5087434},{"lat":47.071979,"lon":9.5085891},{"lat":47.0716556,"lon":9.5083662}]},{"type":"way","id":3320,"tags":{"highway":"footway","motor_vehicle":"no"},"nodes":[564,39845,39852,39898,39853,39848,39860,39849,39855,39861,39842,39847,39858,39891,39895,39916],"geometry":[{"lat":47.0649873,"lon":9.5008328},{"lat":47.0650519,"lon":9.501009},{"lat":47.0651287,"lon":9.5011538},{"lat":47.0652091,"lon":9.5012236},{"lat":47.0652821,"lon":9.5012665},{"lat":47.065315,"lon":9.5013791},{"lat":47.0653041,"lon":9.5015186},{"lat":47.0652785,"lon":9.5016366},{"lat":47.0653516,"lon":9.501631},{"lat":47.0654648,"lon":9.5016096},{"lat":47.0655781,"lon":9.501583},{"lat":47.0656877,"lon":9.5015133},{"lat":47.0657608,"lon":9.5015079},{"lat":47.0657827,"lon":9.50176},{"lat":47.0658741,"lon":9.5018241},{"lat":47.0659067,"lon":9.5019034}]},{"type":"way","id":3323,"tags":{"highway":"footway","motor_vehicle":"no","service":"parking_aisle"},"nodes":[25211,39917,39896,39856,39897],"geometry":[{"lat":47.0589511,"lon":9.5121161},{"lat":47.0591357,"lon":9.5120597},{"lat":47.0593257,"lon":9.5120061},{"lat":47.0595304,"lon":9.5120382},{"lat":47.0596583,"lon":9.5121294}]},{"type":"way","id":3324,"tags":{"highway":"service"},"nodes":[24714,39846,39854,39862,39870,39904,39914,39857,39859,39883,39886,39887,39900,39909,39911,39882,39885,721],"geometry":[{"lat":47.0561485,"lon":9.4879803},{"lat":47.0561572,"lon":9.488172},{"lat":47.0561921,"lon":9.4884968},{"lat":47.0562506,"lon":9.4889796},{"lat":47.056309,"lon":9.4895804},{"lat":47.0564313,"lon":9.4900012},{"lat":47.0566323,"lon":9.4903606},{"lat":47.0569722,"lon":9.4908166},{"lat":47.0572483,"lon":9.4910985},{"lat":47.057833,"lon":9.4919193},{"lat":47.0583573,"lon":9.4927746},{"lat":47.0588031,"lon":9.4936329},{"lat":47.0593925,"lon":9.494378},{"lat":47.0596077,"lon":9.4944865},{"lat":47.0598368,"lon":9.4946325},{"lat":47.0600558,"lon":9.4947006},{"lat":47.0604906,"lon":9.4947116},{"lat":47.0607566,"lon":9.4947235}]},{"type":"way","id":3327,"tags":{"highway":"footway","motor_vehicle":"no"},"nodes":[13670,39922,39977,39942,39949,39955,39930,39943,39954,39960,39973,39944,39957,39969,39974,39921,39972,39923,39932,39925,39929,39938,39945,39934,39948,39920,39950,39962],"geometry":[{"lat":47.0757059,"lon":9.5151213},{"lat":47.0757902,"lon":9.5155305},{"lat":47.0758778,"lon":9.5158953},{"lat":47.0760094,"lon":9.5163566},{"lat":47.0758267,"lon":9.5165497},{"lat":47.0756002,"lon":9.5166248},{"lat":47.0753371,"lon":9.5167321},{"lat":47.0751033,"lon":9.5167643},{"lat":47.0747964,"lon":9.5168179},{"lat":47.0746065,"lon":9.5167107},{"lat":47.0743727,"lon":9.5164424},{"lat":47.0742046,"lon":9.5160991},{"lat":47.074,"lon":9.5160026},{"lat":47.0737077,"lon":9.5161635},{"lat":47.073452,"lon":9.5162815},{"lat":47.0732182,"lon":9.5164317},{"lat":47.073,"lon":9.5166436},{"lat":47.0728163,"lon":9.5169038},{"lat":47.0726263,"lon":9.5170862},{"lat":47.0724801,"lon":9.5172578},{"lat":47.0725605,"lon":9.5175475},{"lat":47.0727067,"lon":9.5178908},{"lat":47.0727359,"lon":9.5182658},{"lat":47.072692,"lon":9.5185346},{"lat":47.0725459,"lon":9.5188988},{"lat":47.0723413,"lon":9.5190817},{"lat":47.0722609,"lon":9.5191461},{"lat":47.0723121,"lon":9.5193821}]},{"type":"way","id":3328,"tags":{"highway":"footway","motor_vehicle":"no"},"nodes":[39972,39967,39976,39936],"geometry":[{"lat":47.073,"lon":9.5166436},{"lat":47.0729989,"lon":9.5164317},{"lat":47.0729259,"lon":9.5162279},{"lat":47.0728163,"lon":9.5161951}]},{"type":"way","id":3449,"tags":{"highway":"residential","maxspeed":"50","name":"Palduinstrasse","oneway":"no","traffic_calming":"yes"},"nodes":[24887,13738,24949,13676,24899,13677,24998,24948,13717,24933,13678,25479,25566,25558,25461,13706,24987,24938,13701,24889,13679,13698,13680,13695,24979,13681,13682,13683,24922,13684,13685,24771,24813,13671],"geometry":[{"lat":47.0684423,"lon":9.51061},{"lat":47.068349,"lon":9.5106532},{"lat":47.0681017,"lon":9.5107982},{"lat":47.0673567,"lon":9.5112155},{"lat":47.0666299,"lon":9.5115904},{"lat":47.0664766,"lon":9.5116456},{"lat":47.0663547,"lon":9.5116728},{"lat":47.0663067,"lon":9.5116669},{"lat":47.0662278,"lon":9.511621},{"lat":47.0661758,"lon":9.5116865},{"lat":47.0661017,"lon":9.5117301},{"lat":47.0655436,"lon":9.5119644},{"lat":47.0646565,"lon":9.5123367},{"lat":47.0645961,"lon":9.512362},{"lat":47.0637653,"lon":9.5127107},{"lat":47.0626541,"lon":9.5131771},{"lat":47.0625321,"lon":9.5132179},{"lat":47.0623771,"lon":9.5132571},{"lat":47.0621196,"lon":9.5133014},{"lat":47.0618816,"lon":9.5133042},{"lat":47.0618132,"lon":9.5132965},{"lat":47.0615633,"lon":9.5132558},{"lat":47.0613756,"lon":9.5132112},{"lat":47.0611335,"lon":9.5131208},{"lat":47.0610334,"lon":9.5130591},{"lat":47.0608701,"lon":9.5129241},{"lat":47.0607019,"lon":9.5127029},{"lat":47.0606448,"lon":9.5126152},{"lat":47.0605779,"lon":9.5124492},{"lat":47.0605096,"lon":9.5122115},{"lat":47.0604311,"lon":9.5117196},{"lat":47.0603473,"lon":9.5111041},{"lat":47.0603273,"lon":9.5110311},{"lat":47.0602901,"lon":9.5109237}]},{"type":"way","id":3451,"tags":{"highway":"residential","name":"Kreutzstrasse","oneway":"no"},"nodes":[13754,24947,13755,13756,24884,13757,24869,24932,13758],"geometry":[{"lat":47.0728585,"lon":9.5105384},{"lat":47.0724688,"lon":9.5101727},{"lat":47.0722939,"lon":9.5100283},{"lat":47.0718513,"lon":9.5096894},{"lat":47.071713,"lon":9.5095551},{"lat":47.0716131,"lon":9.5094311},{"lat":47.0715727,"lon":9.509306},{"lat":47.0715647,"lon":9.5092413},{"lat":47.0715657,"lon":9.5091604}]},{"type":"way","id":3452,"tags":{"alt_name":"Alpenrhein","boat":"no","name":"Rhein","name:de":"Rhein","name:en":"Rhine","name:es":"Rin","name:fr":"Le Rhin","name:it":"Reno","name:nl":"Rijn","name:sk":"Rýn","waterway":"river"},"nodes":[1,28537,28538,28539,28540,28541,28542,28543,27952,27953,27954,27955,27956,27957,27958,27959,27960,27961,29072,29073,29074,13637,27962,27963,27964,13636,27965,27966,27967,27968,19436,27969,19711,20020,20497,20960,21703,20972,21714,20644,27988,28057,28068,28069,28070,28071,19914,28072,28073,28074,28075,28076,28077,28078,28079,28080,28081,28082,20220,28199,19671,28200,28201,28207,28219,28223,19632,28306,28324,28434,20943,28435,28436,28437,28438,28439,28440,28441,28442,20282,28443,28444,28445,28446,28456,20480,28457,28458,28459,28460,28461,28462,28463,20248,28464,28465,28466,33057,28467,28468,28469,28470,28471,21601,28478,19435],"geometry":[{"lat":46.9688169,"lon":9.5496806},{"lat":46.9694364,"lon":9.5497877},{"lat":46.9707629,"lon":9.5501686},{"lat":46.9714836,"lon":9.5499924},{"lat":46.9724613,"lon":9.5495056},{"lat":46.9735819,"lon":9.5487894},{"lat":46.9742051,"lon":9.5482337},{"lat":46.9749307,"lon":9.5474719},{"lat":46.9765687,"lon":9.5455732},{"lat":46.9774954,"lon":9.5445482},{"lat":46.9976232,"lon":9.5215774},{"lat":47.0005389,"lon":9.5186316},{"lat":47.0080547,"lon":9.5115612},{"lat":47.0091449,"lon":9.5106838},{"lat":47.0102219,"lon":9.510213},{"lat":47.0114265,"lon":9.5098439},{"lat":47.0151058,"lon":9.5083283},{"lat":47.0155588,"lon":9.5083585},{"lat":47.0166998,"lon":9.5079772},{"lat":47.0187255,"lon":9.5062708},{"lat":47.0198721,"lon":9.5047949},{"lat":47.0216001,"lon":9.5031362},{"lat":47.0320615,"lon":9.4931315},{"lat":47.0335751,"lon":9.4916804},{"lat":47.0377877,"lon":9.4876505},{"lat":47.038372,"lon":9.487088},{"lat":47.040302,"lon":9.4852299},{"lat":47.0440851,"lon":9.4814701},{"lat":47.0474809,"lon":9.4784374},{"lat":47.049055,"lon":9.4772452},{"lat":47.0517524,"lon":9.4757865},{"lat":47.0518315,"lon":9.4757514},{"lat":47.0597862,"lon":9.4724195},{"lat":47.0615162,"lon":9.4717767},{"lat":47.0627139,"lon":9.4717079},{"lat":47.0633104,"lon":9.4716736},{"lat":47.0642006,"lon":9.4718614},{"lat":47.0650283,"lon":9.4723774},{"lat":47.0657468,"lon":9.4731659},{"lat":47.0663892,"lon":9.4740884},{"lat":47.066967,"lon":9.4750928},{"lat":47.0683611,"lon":9.4784723},{"lat":47.0719233,"lon":9.487619},{"lat":47.0733144,"lon":9.4910979},{"lat":47.073844,"lon":9.4922746},{"lat":47.0851421,"lon":9.5127602},{"lat":47.0851435,"lon":9.5127623},{"lat":47.0856362,"lon":9.5135292},{"lat":47.0863455,"lon":9.5144143},{"lat":47.0870694,"lon":9.5150879},{"lat":47.0878537,"lon":9.5156005},{"lat":47.0947891,"lon":9.5187523},{"lat":47.0965561,"lon":9.5193111},{"lat":47.0983373,"lon":9.5195806},{"lat":47.1001327,"lon":9.5196148},{"lat":47.1019263,"lon":9.5194486},{"lat":47.1055048,"lon":9.5188549},{"lat":47.1072705,"lon":9.5184438},{"lat":47.1150869,"lon":9.5164145},{"lat":47.1214443,"lon":9.5146535},{"lat":47.1219427,"lon":9.5145259},{"lat":47.1303024,"lon":9.5123851},{"lat":47.1324563,"lon":9.5116654},{"lat":47.1407276,"lon":9.5081841},{"lat":47.1423838,"lon":9.5072011},{"lat":47.1439003,"lon":9.5058302},{"lat":47.1468825,"lon":9.5026522},{"lat":47.1482714,"lon":9.501172},{"lat":47.1497721,"lon":9.4997225},{"lat":47.1563504,"lon":9.4954629},{"lat":47.1569405,"lon":9.4950763},{"lat":47.159639,"lon":9.4933084},{"lat":47.1629726,"lon":9.4912992},{"lat":47.1644987,"lon":9.4906624},{"lat":47.1688996,"lon":9.4893306},{"lat":47.180525,"lon":9.4859776},{"lat":47.1814434,"lon":9.4858412},{"lat":47.1823578,"lon":9.485929},{"lat":47.1862729,"lon":9.4868652},{"lat":47.1901944,"lon":9.4878765},{"lat":47.1947493,"lon":9.489177},{"lat":47.1964945,"lon":9.4897548},{"lat":47.1979422,"lon":9.4905005},{"lat":47.1981947,"lon":9.4906306},{"lat":47.2053502,"lon":9.4956519},{"lat":47.2067135,"lon":9.4965658},{"lat":47.2113569,"lon":9.4996332},{"lat":47.2121491,"lon":9.4998592},{"lat":47.218357,"lon":9.5011948},{"lat":47.2201756,"lon":9.5016427},{"lat":47.2235074,"lon":9.5035029},{"lat":47.2251254,"lon":9.5046405},{"lat":47.2297807,"lon":9.5086063},{"lat":47.2318006,"lon":9.5103331},{"lat":47.2406452,"lon":9.5180129},{"lat":47.2422078,"lon":9.5192271},{"lat":47.2439624,"lon":9.5204517},{"lat":47.2462495,"lon":9.5216266},{"lat":47.2523266,"lon":9.5247488},{"lat":47.2618521,"lon":9.5298329},{"lat":47.2624922,"lon":9.5301131},{"lat":47.263364,"lon":9.5302636},{"lat":47.2687865,"lon":9.5303346},{"lat":47.2694757,"lon":9.5303761},{"lat":47.2696813,"lon":9.5303885},{"lat":47.2705781,"lon":9.5307265}]},{"type":"way","id":3453,"tags":{"highway":"residential","oneway":"no"},"nodes":[40685,40684,40681,25310,40683,40682,40679,40686,40680,40678],"geometry":[{"lat":47.0685644,"lon":9.5060344},{"lat":47.0685119,"lon":9.5061112},{"lat":47.0684686,"lon":9.5061392},{"lat":47.0680993,"lon":9.5061549},{"lat":47.0679024,"lon":9.5061566},{"lat":47.0678787,"lon":9.5062263},{"lat":47.0678805,"lon":9.5063202},{"lat":47.0679408,"lon":9.5065696},{"lat":47.0679901,"lon":9.5068486},{"lat":47.0680144,"lon":9.5072243}]},{"type":"way","id":3510,"tags":{"highway":"residential","name":"Aviols","oneway":"no"},"nodes":[13777,13778,13779,49842,13780],"geometry":[{"lat":47.0685858,"lon":9.5037659},{"lat":47.0684279,"lon":9.5039547},{"lat":47.0682701,"lon":9.5042208},{"lat":47.0680233,"lon":9.5045663},{"lat":47.0677554,"lon":9.5049414}]},{"type":"way","id":3513,"tags":{"highway":"footway"},"nodes":[38299,56014,56015,56016,8589,56017,8588],"geometry":[{"lat":47.0664349,"lon":9.5021664},{"lat":47.066689,"lon":9.502051},{"lat":47.0669886,"lon":9.5018364},{"lat":47.0674403,"lon":9.5015215},{"lat":47.0672623,"lon":9.5012505},{"lat":47.0672371,"lon":9.5011605},{"lat":47.0673339,"lon":9.5010003}]},{"type":"way","id":3514,"tags":{"highway":"footway"},"nodes":[556,41079,41080,41078,25388],"geometry":[{"lat":47.0638908,"lon":9.4992448},{"lat":47.0638683,"lon":9.4993025},{"lat":47.0638394,"lon":9.499382},{"lat":47.0638175,"lon":9.4994142},{"lat":47.063819,"lon":9.5000007}]},{"type":"way","id":3523,"tags":{"highway":"residential"},"nodes":[25404,25289,25352,8638],"geometry":[{"lat":47.064914,"lon":9.5042856},{"lat":47.0647003,"lon":9.5037961},{"lat":47.0644089,"lon":9.5031537},{"lat":47.0641385,"lon":9.5025511}]},{"type":"way","id":3524,"tags":{"highway":"residential","name":"Streue"},"nodes":[24610,25171],"geometry":[{"lat":47.0657504,"lon":9.5039187},{"lat":47.066137,"lon":9.505415}]},{"type":"way","id":3525,"tags":{"highway":"residential","name":"Im Stadel","oneway":"no","surface":"asphalt"},"nodes":[13784,13785],"geometry":[{"lat":47.0708369,"lon":9.50402},{"lat":47.0690499,"lon":9.5051403}]},{"type":"way","id":3527,"tags":{"highway":"track"},"nodes":[722,5422,41169,9686,41168,41167,41399,41416,8644],"geometry":[{"lat":47.0673884,"lon":9.4839697},{"lat":47.0680769,"lon":9.4856742},{"lat":47.0680313,"lon":9.4865003},{"lat":47.0686908,"lon":9.4881976},{"lat":47.0696488,"lon":9.4900498},{"lat":47.0706332,"lon":9.491966},{"lat":47.0710757,"lon":9.4926301},{"lat":47.0711895,"lon":9.4927738},{"lat":47.0718318,"lon":9.4937649}]},{"type":"way","id":3528,"tags":{"highway":"residential","name":"Palduinstrasse"},"nodes":[25479,25593,25620,25449,25611,25608,41172],"geometry":[{"lat":47.0655436,"lon":9.5119644},{"lat":47.0655772,"lon":9.5120974},{"lat":47.0657014,"lon":9.5122972},{"lat":47.0658675,"lon":9.5122171},{"lat":47.0658859,"lon":9.5120665},{"lat":47.0660686,"lon":9.5119847},{"lat":47.0661699,"lon":9.5121497}]},{"type":"way","id":3529,"tags":{"highway":"bridleway"},"nodes":[41172,41178,41171,41174,41175,41173,41177,41170,41176,24967],"geometry":[{"lat":47.0661699,"lon":9.5121497},{"lat":47.0662467,"lon":9.5122248},{"lat":47.066323,"lon":9.5122369},{"lat":47.0664184,"lon":9.5121605},{"lat":47.0665792,"lon":9.5120532},{"lat":47.0667692,"lon":9.5119512},{"lat":47.0669282,"lon":9.5118962},{"lat":47.067122,"lon":9.5118319},{"lat":47.0673156,"lon":9.5117675},{"lat":47.067466,"lon":9.5117316}]},{"type":"way","id":3547,"tags":{"highway":"residential","name":"Im Winkel"},"nodes":[40685,41432,13773,41433,13774,25365,25280,24799],"geometry":[{"lat":47.0685644,"lon":9.5060344},{"lat":47.0686061,"lon":9.5060866},{"lat":47.068678,"lon":9.5061109},{"lat":47.0687601,"lon":9.5061139},{"lat":47.068885,"lon":9.5061701},{"lat":47.0688593,"lon":9.5063346},{"lat":47.0688602,"lon":9.5066109},{"lat":47.0688894,"lon":9.5070153}]},{"type":"way","id":3554,"tags":{"highway":"footway"},"nodes":[25195,41307],"geometry":[{"lat":47.0621668,"lon":9.4957887},{"lat":47.0617427,"lon":9.4951666}]},{"type":"way","id":3566,"tags":{"highway":"track","name":"Dreiangel","tracktype":"grade1"},"nodes":[9271,30229,30230,30232,30235,540],"geometry":[{"lat":47.0646937,"lon":9.4896676},{"lat":47.065108,"lon":9.4908254},{"lat":47.0655868,"lon":9.4923209},{"lat":47.0661467,"lon":9.49389},{"lat":47.0669276,"lon":9.4962917},{"lat":47.0671925,"lon":9.4970467}]},{"type":"way","id":3568,"tags":{"highway":"track"},"nodes":[24786,41394,41390,41413,41404,41405,41407,41168],"geometry":[{"lat":47.0700736,"lon":9.4949151},{"lat":47.0690246,"lon":9.4925622},{"lat":47.0689954,"lon":9.4924227},{"lat":47.0690254,"lon":9.492273},{"lat":47.0690984,"lon":9.4917688},{"lat":47.068945,"lon":9.4905993},{"lat":47.0689596,"lon":9.4905135},{"lat":47.0696488,"lon":9.4900498}]},{"type":"way","id":3570,"tags":{"highway":"track"},"nodes":[23698,41398,41400,41393,41408,41401,41395,41397,41412,41427,41399],"geometry":[{"lat":47.072152,"lon":9.4903591},{"lat":47.0720426,"lon":9.4903949},{"lat":47.0718964,"lon":9.4904378},{"lat":47.0717503,"lon":9.4906417},{"lat":47.0716042,"lon":9.4908885},{"lat":47.0715092,"lon":9.4910923},{"lat":47.0713849,"lon":9.4914249},{"lat":47.0712826,"lon":9.491736},{"lat":47.071173,"lon":9.4922188},{"lat":47.0710969,"lon":9.4925403},{"lat":47.0710757,"lon":9.4926301}]},{"type":"way","id":3571,"tags":{"highway":"primary","name":"Gagoz"},"nodes":[41417,5086,24804,23329,536,24850,24779,537],"geometry":[{"lat":47.0712077,"lon":9.4926363},{"lat":47.0712495,"lon":9.4924555},{"lat":47.0713669,"lon":9.4920485},{"lat":47.071509,"lon":9.4916602},{"lat":47.0716696,"lon":9.491332},{"lat":47.0718444,"lon":9.491032},{"lat":47.0720987,"lon":9.4906647},{"lat":47.0721596,"lon":9.4905864}]},{"type":"way","id":3572,"tags":{"bridge":"yes","highway":"primary","name":"Gagoz"},"nodes":[41418,41417],"geometry":[{"lat":47.0711467,"lon":9.4928969},{"lat":47.0712077,"lon":9.4926363}]},{"type":"way","id":3573,"tags":{"highway":"footway"},"nodes":[24990,41421,41420],"geometry":[{"lat":47.0652809,"lon":9.5100492},{"lat":47.0653206,"lon":9.5103651},{"lat":47.0653221,"lon":9.5106503}]},{"type":"way","id":3575,"tags":{"highway":"footway"},"nodes":[580,41428,41430,41429,41424,41425,41426,41431,41427],"geometry":[{"lat":47.0680776,"lon":9.482469},{"lat":47.0682323,"lon":9.4826322},{"lat":47.0684223,"lon":9.4847565},{"lat":47.0681739,"lon":9.4856363},{"lat":47.0681739,"lon":9.4864517},{"lat":47.0687731,"lon":9.4881254},{"lat":47.0697085,"lon":9.4899064},{"lat":47.0710457,"lon":9.4924008},{"lat":47.0710969,"lon":9.4925403}]},{"type":"way","id":3605,"tags":{"bicycle":"yes","foot":"yes","highway":"secondary","motorcar":"yes","motorcycle":"yes","name":"Züghüsle"},"nodes":[13731,521,24627,24662,24638,522,24750,5100],"geometry":[{"lat":47.0664715,"lon":9.5074881},{"lat":47.0663268,"lon":9.5075682},{"lat":47.0662169,"lon":9.507606},{"lat":47.0660879,"lon":9.5076187},{"lat":47.0659513,"lon":9.5076012},{"lat":47.0658046,"lon":9.5075549},{"lat":47.06573,"lon":9.5075197},{"lat":47.0656468,"lon":9.5074696}]},{"type":"way","id":3736,"tags":{"highway":"cycleway"},"nodes":[8581,8582,8583,8584,8577,8585,8586,8587,8588],"geometry":[{"lat":47.0645896,"lon":9.4989283},{"lat":47.0647498,"lon":9.4990584},{"lat":47.0655578,"lon":9.4995639},{"lat":47.0656737,"lon":9.4995789},{"lat":47.0666111,"lon":9.5001494},{"lat":47.0668566,"lon":9.5003196},{"lat":47.0669214,"lon":9.5003096},{"lat":47.0670305,"lon":9.5002345},{"lat":47.0673339,"lon":9.5010003}]},{"type":"way","id":3737,"tags":{"bicycle":"yes","foot":"yes","highway":"tertiary","maxspeed":"50","motorcar":"yes","motorcycle":"yes","name":"Mäslner Dorf"},"nodes":[24808,24782,6199,551,24853,33535,33534,33533,33532,33531,33530,33529,33528],"geometry":[{"lat":47.0623408,"lon":9.5002422},{"lat":47.0622348,"lon":9.4999929},{"lat":47.0621577,"lon":9.4997655},{"lat":47.0621042,"lon":9.4995311},{"lat":47.0620635,"lon":9.4991482},{"lat":47.0620383,"lon":9.498932},{"lat":47.0619492,"lon":9.4986553},{"lat":47.0618768,"lon":9.4984798},{"lat":47.0618301,"lon":9.4983695},{"lat":47.0616824,"lon":9.4980207},{"lat":47.061235,"lon":9.4971313},{"lat":47.061118,"lon":9.4968425},{"lat":47.0610241,"lon":9.4965737}]},{"type":"way","id":3797,"tags":{"highway":"primary","name":"Gagoz"},"nodes":[527,24744,24790,528,24835,529,24766,24794,24783,13784,530,24773,13781,5093,531,24764,1085],"geometry":[{"lat":47.0728501,"lon":9.5078554},{"lat":47.0726979,"lon":9.5076277},{"lat":47.0725289,"lon":9.507423},{"lat":47.0720631,"lon":9.5069575},{"lat":47.0718898,"lon":9.5067482},{"lat":47.0717389,"lon":9.5065018},{"lat":47.0716085,"lon":9.5062407},{"lat":47.0714645,"lon":9.5058599},{"lat":47.07087,"lon":9.5041212},{"lat":47.0708369,"lon":9.50402},{"lat":47.0700773,"lon":9.501797},{"lat":47.0700391,"lon":9.5016825},{"lat":47.0696866,"lon":9.5006399},{"lat":47.0685238,"lon":9.4972032},{"lat":47.0684472,"lon":9.4969013},{"lat":47.0684036,"lon":9.4966767},{"lat":47.0683862,"lon":9.4965674}]},{"type":"way","id":3798,"tags":{"bridge":"yes","highway":"primary","layer":"1","name":"Gagoz"},"nodes":[526,24817,527],"geometry":[{"lat":47.0730135,"lon":9.5082969},{"lat":47.0729555,"lon":9.5080871},{"lat":47.0728501,"lon":9.5078554}]},{"type":"way","id":3799,"tags":{"highway":"residential","name":"Mühlegass"},"nodes":[13650,42785,13651,13652,13653,13654,13655,13656,13657,29861,13792,24828,29886,13658],"geometry":[{"lat":47.0736343,"lon":9.5086207},{"lat":47.0736985,"lon":9.5085625},{"lat":47.0737476,"lon":9.5084866},{"lat":47.0739815,"lon":9.5074394},{"lat":47.0740808,"lon":9.5070703},{"lat":47.0741978,"lon":9.5068901},{"lat":47.0743614,"lon":9.5068043},{"lat":47.0747765,"lon":9.5068386},{"lat":47.0750908,"lon":9.5067965},{"lat":47.0758425,"lon":9.5062348},{"lat":47.0764985,"lon":9.5057446},{"lat":47.0765531,"lon":9.5056782},{"lat":47.0777151,"lon":9.5048022},{"lat":47.0782093,"lon":9.5044111}]},{"type":"way","id":3800,"tags":{"bridge":"yes","highway":"residential","layer":"1","name":"Mühlegass"},"nodes":[13649,13650],"geometry":[{"lat":47.0735016,"lon":9.5087083},{"lat":47.0736343,"lon":9.5086207}]},{"type":"way","id":3867,"tags":{"building":"yes"},"nodes":[50668,50653,50635,50584,50632,50648,50665,50691,50674,50685,50668],"geometry":[{"lat":47.0692798,"lon":9.5016486},{"lat":47.0692588,"lon":9.5016665},{"lat":47.0692375,"lon":9.5016125},{"lat":47.0691736,"lon":9.5016669},{"lat":47.0692354,"lon":9.5018234},{"lat":47.0692545,"lon":9.5018072},{"lat":47.0692765,"lon":9.5018627},{"lat":47.0693208,"lon":9.5018248},{"lat":47.0692929,"lon":9.5017542},{"lat":47.0693143,"lon":9.501736},{"lat":47.0692798,"lon":9.5016486}]},{"type":"way","id":3868,"tags":{"building":"yes"},"nodes":[48253,48207,48224,48251,48258,48303,48294,48318,48311,48261,48253],"geometry":[{"lat":47.0653969,"lon":9.5093374},{"lat":47.0653239,"lon":9.5093743},{"lat":47.0653503,"lon":9.5094871},{"lat":47.0653902,"lon":9.509467},{"lat":47.0654023,"lon":9.5095189},{"lat":47.0654565,"lon":9.5094916},{"lat":47.065447,"lon":9.5094513},{"lat":47.0654854,"lon":9.5094319},{"lat":47.0654652,"lon":9.5093457},{"lat":47.0654058,"lon":9.5093757},{"lat":47.0653969,"lon":9.5093374}]},{"type":"way","id":3869,"tags":{"building":"yes"},"nodes":[51025,51004,51006,50995,50981,50959,50961,50942,50922,50999,51025],"geometry":[{"lat":47.0701203,"lon":9.5067003},{"lat":47.0700571,"lon":9.5066698},{"lat":47.07006,"lon":9.5066566},{"lat":47.070034,"lon":9.5066441},{"lat":47.069993,"lon":9.5068269},{"lat":47.0699522,"lon":9.5068072},{"lat":47.0699555,"lon":9.5067923},{"lat":47.0699099,"lon":9.5067702},{"lat":47.0698721,"lon":9.506939},{"lat":47.0700478,"lon":9.5070239},{"lat":47.0701203,"lon":9.5067003}]},{"type":"way","id":3870,"tags":{"building":"yes"},"nodes":[44662,44603,44597,44525,44516,44486,44480,44604,44608,44678,44662],"geometry":[{"lat":47.0610532,"lon":9.4924584},{"lat":47.0609889,"lon":9.4924852},{"lat":47.0609826,"lon":9.4924572},{"lat":47.0609175,"lon":9.4924828},{"lat":47.0609119,"lon":9.4925155},{"lat":47.0608897,"lon":9.4925201},{"lat":47.0608865,"lon":9.492625},{"lat":47.0609889,"lon":9.4926308},{"lat":47.0609937,"lon":9.4925854},{"lat":47.0610722,"lon":9.4925446},{"lat":47.0610532,"lon":9.4924584}]},{"type":"way","id":3871,"tags":{"building":"yes"},"nodes":[44379,44352,44353,44297,44290,44259,44257,44285,44283,44376,44379],"geometry":[{"lat":47.0607528,"lon":9.4999719},{"lat":47.0607082,"lon":9.4999747},{"lat":47.0607091,"lon":9.5000049},{"lat":47.0606449,"lon":9.500009},{"lat":47.0606411,"lon":9.4998804},{"lat":47.060602,"lon":9.4998829},{"lat":47.0605993,"lon":9.4997924},{"lat":47.0606368,"lon":9.49979},{"lat":47.0606352,"lon":9.4997359},{"lat":47.0607456,"lon":9.4997288},{"lat":47.0607528,"lon":9.4999719}]},{"type":"way","id":3872,"tags":{"building":"yes"},"nodes":[46924,46793,46786,46753,46780,46791,46799,46813,46818,46947,46924],"geometry":[{"lat":47.0635405,"lon":9.5114407},{"lat":47.0633781,"lon":9.5115163},{"lat":47.0633706,"lon":9.5114818},{"lat":47.0633424,"lon":9.5114949},{"lat":47.0633669,"lon":9.511608},{"lat":47.0633749,"lon":9.5116043},{"lat":47.0633828,"lon":9.511641},{"lat":47.0633983,"lon":9.5116338},{"lat":47.0634046,"lon":9.5116629},{"lat":47.0635717,"lon":9.5115851},{"lat":47.0635405,"lon":9.5114407}]},{"type":"way","id":3874,"tags":{"building":"yes"},"nodes":[48117,48059,48069,48043,48048,48033,48050,48132,48126,48137,48117],"geometry":[{"lat":47.065172,"lon":9.5114848},{"lat":47.0650964,"lon":9.5115198},{"lat":47.0651023,"lon":9.5115472},{"lat":47.0650738,"lon":9.5115605},{"lat":47.0650772,"lon":9.5115762},{"lat":47.0650617,"lon":9.5115834},{"lat":47.065086,"lon":9.5116964},{"lat":47.0651918,"lon":9.5116474},{"lat":47.0651836,"lon":9.511609},{"lat":47.0651973,"lon":9.5116026},{"lat":47.065172,"lon":9.5114848}]},{"type":"way","id":3875,"tags":{"building":"yes"},"nodes":[50354,50250,50268,50277,50314,50303,50313,50346,50331,50392,50354],"geometry":[{"lat":47.0687621,"lon":9.4988528},{"lat":47.0686426,"lon":9.4989378},{"lat":47.0686616,"lon":9.4989954},{"lat":47.0686769,"lon":9.4989846},{"lat":47.0687174,"lon":9.4991073},{"lat":47.0687002,"lon":9.4991195},{"lat":47.068717,"lon":9.4991702},{"lat":47.0687509,"lon":9.499146},{"lat":47.0687424,"lon":9.4991201},{"lat":47.0688298,"lon":9.499058},{"lat":47.0687621,"lon":9.4988528}]},{"type":"way","id":3877,"tags":{"building":"yes"},"nodes":[50401,50362,50369,50360,50347,50319,50379,50405,50388,50430,50401],"geometry":[{"lat":47.0688417,"lon":9.5038914},{"lat":47.0687787,"lon":9.5039571},{"lat":47.0687878,"lon":9.5039826},{"lat":47.0687759,"lon":9.504004},{"lat":47.0687513,"lon":9.5039598},{"lat":47.0687266,"lon":9.5039947},{"lat":47.0688061,"lon":9.5041945},{"lat":47.068849,"lon":9.5041489},{"lat":47.0688234,"lon":9.5040845},{"lat":47.0689011,"lon":9.5039839},{"lat":47.0688417,"lon":9.5038914}]},{"type":"way","id":3878,"tags":{"building":"yes"},"nodes":[44786,44721,44742,44797,44804,44864,44855,44876,44853,44795,44786],"geometry":[{"lat":47.0611908,"lon":9.4957673},{"lat":47.0611064,"lon":9.4957962},{"lat":47.0611406,"lon":9.4960119},{"lat":47.0612046,"lon":9.49599},{"lat":47.0612112,"lon":9.4960318},{"lat":47.0612771,"lon":9.4960093},{"lat":47.0612698,"lon":9.4959636},{"lat":47.0612878,"lon":9.4959575},{"lat":47.0612658,"lon":9.495819},{"lat":47.0612025,"lon":9.4958407},{"lat":47.0611908,"lon":9.4957673}]},{"type":"way","id":3879,"tags":{"building":"yes"},"nodes":[46678,46564,46538,46503,46485,46531,46479,46555,46594,46626,46678],"geometry":[{"lat":47.06327,"lon":9.4918586},{"lat":47.0631683,"lon":9.4917622},{"lat":47.0631453,"lon":9.4918145},{"lat":47.0631189,"lon":9.4917895},{"lat":47.0631023,"lon":9.4918273},{"lat":47.0631397,"lon":9.4918629},{"lat":47.0630979,"lon":9.4919579},{"lat":47.0631615,"lon":9.4920181},{"lat":47.0632024,"lon":9.4919253},{"lat":47.0632294,"lon":9.4919509},{"lat":47.06327,"lon":9.4918586}]},{"type":"way","id":3880,"tags":{"building":"yes"},"nodes":[48852,48768,48782,48794,48791,48811,48818,48832,48839,48864,48852],"geometry":[{"lat":47.0663473,"lon":9.5086431},{"lat":47.0661817,"lon":9.5087084},{"lat":47.0662057,"lon":9.5088392},{"lat":47.066247,"lon":9.5088229},{"lat":47.0662441,"lon":9.5088069},{"lat":47.0662836,"lon":9.5087913},{"lat":47.0662879,"lon":9.5088148},{"lat":47.066315,"lon":9.5088041},{"lat":47.0663278,"lon":9.508874},{"lat":47.0663854,"lon":9.5088512},{"lat":47.0663473,"lon":9.5086431}]},{"type":"way","id":3881,"tags":{"building":"yes"},"nodes":[50893,50865,50838,50811,50774,50804,50834,50857,50885,50914,50893],"geometry":[{"lat":47.0697921,"lon":9.5035102},{"lat":47.0697198,"lon":9.5035728},{"lat":47.0696423,"lon":9.503588},{"lat":47.0695867,"lon":9.5036468},{"lat":47.0695027,"lon":9.5036715},{"lat":47.0695648,"lon":9.5038706},{"lat":47.0696319,"lon":9.5038061},{"lat":47.0696978,"lon":9.5037739},{"lat":47.0697611,"lon":9.5037246},{"lat":47.0698451,"lon":9.5036866},{"lat":47.0697921,"lon":9.5035102}]},{"type":"way","id":3882,"tags":{"building":"yes"},"nodes":[45579,45539,45543,45515,45518,45450,45483,45535,45519,45602,45579],"geometry":[{"lat":47.0620997,"lon":9.494244},{"lat":47.0620435,"lon":9.494272},{"lat":47.062049,"lon":9.4942958},{"lat":47.0620202,"lon":9.4943101},{"lat":47.0620242,"lon":9.4943274},{"lat":47.0619486,"lon":9.4943651},{"lat":47.0619868,"lon":9.4945301},{"lat":47.0620395,"lon":9.4945039},{"lat":47.0620242,"lon":9.4944378},{"lat":47.0621321,"lon":9.494384},{"lat":47.0620997,"lon":9.494244}]},{"type":"way","id":3884,"tags":{"building":"yes"},"nodes":[48745,48680,48687,48663,48693,48710,48744,48814,48796,48787,48745],"geometry":[{"lat":47.06614,"lon":9.4993032},{"lat":47.0660241,"lon":9.4993839},{"lat":47.0660371,"lon":9.4994242},{"lat":47.0660039,"lon":9.4994474},{"lat":47.0660466,"lon":9.4995794},{"lat":47.0660756,"lon":9.4995593},{"lat":47.0661398,"lon":9.4997579},{"lat":47.0662847,"lon":9.499657},{"lat":47.0662529,"lon":9.4995587},{"lat":47.0662281,"lon":9.499576},{"lat":47.06614,"lon":9.4993032}]},{"type":"way","id":3885,"tags":{"building":"yes"},"nodes":[48406,48357,48362,48309,48323,48376,48369,48399,48404,48427,48406],"geometry":[{"lat":47.0656162,"lon":9.4985461},{"lat":47.0655514,"lon":9.4985875},{"lat":47.0655599,"lon":9.4986162},{"lat":47.0654592,"lon":9.4986806},{"lat":47.0654937,"lon":9.4987971},{"lat":47.0655825,"lon":9.4987404},{"lat":47.0655733,"lon":9.4987091},{"lat":47.0656095,"lon":9.498686},{"lat":47.0656143,"lon":9.4987019},{"lat":47.0656547,"lon":9.4986761},{"lat":47.0656162,"lon":9.4985461}]},{"type":"way","id":3886,"tags":{"building":"yes"},"nodes":[44155,44207,44151,44144,44108,44072,44084,44074,44104,44115,44155],"geometry":[{"lat":47.0604798,"lon":9.4939051},{"lat":47.060541,"lon":9.4939762},{"lat":47.0604748,"lon":9.4940989},{"lat":47.0604674,"lon":9.4940904},{"lat":47.0604105,"lon":9.4941959},{"lat":47.060356,"lon":9.4941326},{"lat":47.0603737,"lon":9.4940998},{"lat":47.0603575,"lon":9.4940811},{"lat":47.0604043,"lon":9.4939943},{"lat":47.0604211,"lon":9.4940138},{"lat":47.0604798,"lon":9.4939051}]},{"type":"way","id":3887,"tags":{"building":"yes"},"nodes":[50717,50631,50633,50604,50618,50697,50698,50754,50748,50723,50717],"geometry":[{"lat":47.0693733,"lon":9.5052854},{"lat":47.0692347,"lon":9.5053131},{"lat":47.0692369,"lon":9.5053363},{"lat":47.0692002,"lon":9.5053436},{"lat":47.0692125,"lon":9.5054767},{"lat":47.0693356,"lon":9.5054521},{"lat":47.0693391,"lon":9.5054899},{"lat":47.0694321,"lon":9.5054713},{"lat":47.069421,"lon":9.5053522},{"lat":47.0693803,"lon":9.5053604},{"lat":47.0693733,"lon":9.5052854}]},{"type":"way","id":3888,"tags":{"building":"yes"},"nodes":[51857,51869,51867,51875,51871,51864,51862,51849,51858,51852,51857],"geometry":[{"lat":47.0733435,"lon":9.5106869},{"lat":47.073404,"lon":9.5107504},{"lat":47.0733961,"lon":9.5107667},{"lat":47.0734485,"lon":9.5108218},{"lat":47.0734134,"lon":9.5108936},{"lat":47.073384,"lon":9.5108627},{"lat":47.0733587,"lon":9.5109146},{"lat":47.073303,"lon":9.5108561},{"lat":47.073344,"lon":9.5107721},{"lat":47.0733162,"lon":9.5107429},{"lat":47.0733435,"lon":9.5106869}]},{"type":"way","id":3889,"tags":{"building":"yes"},"nodes":[51902,51923,51920,51927,51936,51930,51932,51966,51972,51926,51902],"geometry":[{"lat":47.0736556,"lon":9.508945},{"lat":47.0737556,"lon":9.5090195},{"lat":47.07375,"lon":9.5090347},{"lat":47.0737873,"lon":9.5090661},{"lat":47.07385,"lon":9.508903},{"lat":47.0738119,"lon":9.5088739},{"lat":47.0738357,"lon":9.508811},{"lat":47.0740698,"lon":9.5089158},{"lat":47.0741175,"lon":9.5088145},{"lat":47.0737802,"lon":9.5085966},{"lat":47.0736556,"lon":9.508945}]},{"type":"way","id":3890,"tags":{"building":"yes"},"nodes":[49356,49396,49242,49202,49189,49165,49201,49239,49304,49349,49356],"geometry":[{"lat":47.0672157,"lon":9.4974038},{"lat":47.0672751,"lon":9.4975879},{"lat":47.0670123,"lon":9.4977704},{"lat":47.0669531,"lon":9.4975867},{"lat":47.0669197,"lon":9.4976099},{"lat":47.0668613,"lon":9.4974288},{"lat":47.0669509,"lon":9.4973666},{"lat":47.0670092,"lon":9.4975473},{"lat":47.0671194,"lon":9.4974708},{"lat":47.067205,"lon":9.4974113},{"lat":47.0672157,"lon":9.4974038}]},{"type":"way","id":3891,"tags":{"building":"yes"},"nodes":[44141,44163,44183,44261,44182,44160,44118,44081,44112,44091,44141],"geometry":[{"lat":47.0604642,"lon":9.4957991},{"lat":47.0604875,"lon":9.4958532},{"lat":47.0605155,"lon":9.4958271},{"lat":47.0606042,"lon":9.4960331},{"lat":47.0605139,"lon":9.4961168},{"lat":47.0604865,"lon":9.4960531},{"lat":47.0604252,"lon":9.4961099},{"lat":47.0603698,"lon":9.4959811},{"lat":47.0604162,"lon":9.4959381},{"lat":47.0603872,"lon":9.4958705},{"lat":47.0604642,"lon":9.4957991}]},{"type":"way","id":3892,"tags":{"building":"yes"},"nodes":[50390,50309,50321,50307,50317,50348,50359,50400,50386,50407,50390],"geometry":[{"lat":47.068829,"lon":9.5007182},{"lat":47.0687148,"lon":9.5008054},{"lat":47.0687275,"lon":9.500841},{"lat":47.0687082,"lon":9.5008558},{"lat":47.0687236,"lon":9.5008995},{"lat":47.0687517,"lon":9.5008781},{"lat":47.0687718,"lon":9.5009349},{"lat":47.0688403,"lon":9.5008826},{"lat":47.0688187,"lon":9.5008214},{"lat":47.0688556,"lon":9.5007932},{"lat":47.068829,"lon":9.5007182}]},{"type":"way","id":3894,"tags":{"building":"yes"},"nodes":[45487,45409,45434,45494,45497,45527,45521,45530,45509,45493,45487],"geometry":[{"lat":47.0619902,"lon":9.4933969},{"lat":47.0619059,"lon":9.493432},{"lat":47.0619347,"lon":9.4935807},{"lat":47.0619984,"lon":9.4935541},{"lat":47.0620046,"lon":9.4935866},{"lat":47.0620344,"lon":9.4935742},{"lat":47.0620281,"lon":9.4935418},{"lat":47.0620359,"lon":9.4935385},{"lat":47.0620151,"lon":9.493431},{"lat":47.0619982,"lon":9.4934381},{"lat":47.0619902,"lon":9.4933969}]},{"type":"way","id":3895,"tags":{"building":"yes"},"nodes":[46169,46089,46108,46090,46086,46054,46106,46154,46161,46226,46169],"geometry":[{"lat":47.0627485,"lon":9.4967733},{"lat":47.0626542,"lon":9.49686},{"lat":47.0626734,"lon":9.4969049},{"lat":47.0626544,"lon":9.4969224},{"lat":47.0626457,"lon":9.4969022},{"lat":47.0626123,"lon":9.496933},{"lat":47.0626682,"lon":9.4970639},{"lat":47.0627369,"lon":9.4970007},{"lat":47.0627425,"lon":9.497014},{"lat":47.0628206,"lon":9.4969422},{"lat":47.0627485,"lon":9.4967733}]},{"type":"way","id":3896,"tags":{"building":"yes"},"nodes":[51613,51607,51608,51596,51588,51571,51563,51595,51600,51612,51613],"geometry":[{"lat":47.0716888,"lon":9.5085604},{"lat":47.071621,"lon":9.508522},{"lat":47.0716319,"lon":9.5084806},{"lat":47.0715499,"lon":9.5084341},{"lat":47.0715177,"lon":9.5085566},{"lat":47.0714721,"lon":9.5085308},{"lat":47.0714464,"lon":9.5086287},{"lat":47.0715353,"lon":9.5086791},{"lat":47.0715599,"lon":9.5085854},{"lat":47.0716664,"lon":9.5086458},{"lat":47.0716888,"lon":9.5085604}]},{"type":"way","id":3897,"tags":{"building":"yes"},"nodes":[49134,49108,49114,49052,49015,48993,48978,49038,49020,49076,49134],"geometry":[{"lat":47.0667938,"lon":9.5007506},{"lat":47.0667562,"lon":9.5007715},{"lat":47.0667654,"lon":9.5008073},{"lat":47.0666922,"lon":9.5008479},{"lat":47.0666428,"lon":9.5006561},{"lat":47.0666048,"lon":9.5006772},{"lat":47.0665834,"lon":9.5005942},{"lat":47.0666604,"lon":9.5005514},{"lat":47.0666476,"lon":9.5005016},{"lat":47.0667194,"lon":9.5004617},{"lat":47.0667938,"lon":9.5007506}]},{"type":"way","id":3898,"tags":{"building":"yes"},"nodes":[43947,43872,43875,43831,43802,43847,43862,43916,43909,43926,43947],"geometry":[{"lat":47.0601778,"lon":9.4993408},{"lat":47.0600752,"lon":9.4992647},{"lat":47.0600819,"lon":9.4992451},{"lat":47.0600146,"lon":9.4991952},{"lat":47.0599699,"lon":9.4993251},{"lat":47.0600362,"lon":9.4993742},{"lat":47.0600546,"lon":9.4993208},{"lat":47.0601348,"lon":9.4993802},{"lat":47.0601273,"lon":9.4994019},{"lat":47.0601508,"lon":9.4994192},{"lat":47.0601778,"lon":9.4993408}]},{"type":"way","id":3899,"tags":{"building":"yes"},"nodes":[46060,46121,46103,46111,46065,46045,46038,45993,46023,46000,46060],"geometry":[{"lat":47.062617,"lon":9.4974561},{"lat":47.0626895,"lon":9.4975957},{"lat":47.0626669,"lon":9.4976211},{"lat":47.0626801,"lon":9.4976465},{"lat":47.0626225,"lon":9.497711},{"lat":47.0626066,"lon":9.4976805},{"lat":47.0625924,"lon":9.4976964},{"lat":47.0625449,"lon":9.4976048},{"lat":47.0625762,"lon":9.4975697},{"lat":47.0625539,"lon":9.4975267},{"lat":47.062617,"lon":9.4974561}]},{"type":"way","id":3900,"tags":{"building":"yes"},"nodes":[47104,47073,47070,47030,47042,46976,47017,47120,47106,47138,47104],"geometry":[{"lat":47.0637798,"lon":9.4926925},{"lat":47.0637428,"lon":9.4927328},{"lat":47.0637366,"lon":9.4927205},{"lat":47.0636739,"lon":9.4927886},{"lat":47.0636872,"lon":9.492815},{"lat":47.0636052,"lon":9.4929041},{"lat":47.0636476,"lon":9.492988},{"lat":47.0637956,"lon":9.4928271},{"lat":47.0637804,"lon":9.4927971},{"lat":47.0638141,"lon":9.4927605},{"lat":47.0637798,"lon":9.4926925}]},{"type":"way","id":3901,"tags":{"building":"yes"},"nodes":[48475,48462,48458,48422,48416,48358,48384,48446,48454,48494,48475],"geometry":[{"lat":47.0657299,"lon":9.5069228},{"lat":47.0657105,"lon":9.5069399},{"lat":47.065702,"lon":9.5069192},{"lat":47.0656458,"lon":9.5069689},{"lat":47.0656385,"lon":9.5069511},{"lat":47.065552,"lon":9.5070275},{"lat":47.0655904,"lon":9.5071212},{"lat":47.0656861,"lon":9.5070366},{"lat":47.0656949,"lon":9.5070582},{"lat":47.0657614,"lon":9.5069995},{"lat":47.0657299,"lon":9.5069228}]},{"type":"way","id":3902,"tags":{"building":"yes"},"nodes":[51515,51498,51497,51455,51452,51444,51437,51483,51485,51508,51515],"geometry":[{"lat":47.0713414,"lon":9.5108445},{"lat":47.0712892,"lon":9.5108285},{"lat":47.0712874,"lon":9.5108416},{"lat":47.071177,"lon":9.5108076},{"lat":47.0711684,"lon":9.5108676},{"lat":47.0711525,"lon":9.5108627},{"lat":47.0711384,"lon":9.5109615},{"lat":47.0712572,"lon":9.5109981},{"lat":47.0712622,"lon":9.5109636},{"lat":47.0713218,"lon":9.5109819},{"lat":47.0713414,"lon":9.5108445}]},{"type":"way","id":3904,"tags":{"building":"yes"},"nodes":[46519,46419,46430,46405,46426,46464,46470,46589,46563,46540,46519],"geometry":[{"lat":47.0631288,"lon":9.5092868},{"lat":47.0630406,"lon":9.5093426},{"lat":47.0630569,"lon":9.5093982},{"lat":47.0630275,"lon":9.5094168},{"lat":47.0630545,"lon":9.509509},{"lat":47.063085,"lon":9.5094897},{"lat":47.0630907,"lon":9.509509},{"lat":47.0631966,"lon":9.509442},{"lat":47.0631679,"lon":9.5093442},{"lat":47.0631491,"lon":9.5093561},{"lat":47.0631288,"lon":9.5092868}]},{"type":"way","id":3905,"tags":{"building":"yes"},"nodes":[48245,48199,48219,48203,48227,48295,48272,48282,48266,48254,48245],"geometry":[{"lat":47.0653808,"lon":9.5072297},{"lat":47.0653048,"lon":9.507287},{"lat":47.0653416,"lon":9.5073921},{"lat":47.0653203,"lon":9.5074082},{"lat":47.0653538,"lon":9.5075038},{"lat":47.0654484,"lon":9.5074323},{"lat":47.0654151,"lon":9.5073372},{"lat":47.0654299,"lon":9.507326},{"lat":47.0654096,"lon":9.5072682},{"lat":47.0653975,"lon":9.5072774},{"lat":47.0653808,"lon":9.5072297}]},{"type":"way","id":3907,"tags":{"building":"yes"},"nodes":[47547,47518,47512,47488,47496,47468,47506,47557,47540,47560,47547],"geometry":[{"lat":47.0643838,"lon":9.4935949},{"lat":47.0643514,"lon":9.4936182},{"lat":47.0643434,"lon":9.4935943},{"lat":47.0643113,"lon":9.4936173},{"lat":47.0643218,"lon":9.493649},{"lat":47.0642899,"lon":9.4936719},{"lat":47.0643333,"lon":9.4938024},{"lat":47.0644017,"lon":9.4937533},{"lat":47.064376,"lon":9.4936761},{"lat":47.0644042,"lon":9.4936559},{"lat":47.0643838,"lon":9.4935949}]},{"type":"way","id":3908,"tags":{"building":"yes"},"nodes":[46885,46828,46816,46834,46778,46749,46699,46765,46798,46822,46885],"geometry":[{"lat":47.0634885,"lon":9.491924},{"lat":47.0634139,"lon":9.4918501},{"lat":47.0634033,"lon":9.491873},{"lat":47.0634179,"lon":9.4918875},{"lat":47.0633662,"lon":9.4919999},{"lat":47.0633405,"lon":9.4919744},{"lat":47.0632935,"lon":9.4920767},{"lat":47.0633522,"lon":9.4921348},{"lat":47.0633814,"lon":9.4920713},{"lat":47.0634085,"lon":9.4920981},{"lat":47.0634885,"lon":9.491924}]},{"type":"way","id":3909,"tags":{"building":"yes"},"nodes":[51213,51157,51144,51173,51168,51204,51208,51223,51228,51211,51213],"geometry":[{"lat":47.0705154,"lon":9.5095712},{"lat":47.0704156,"lon":9.5095409},{"lat":47.0703986,"lon":9.5096618},{"lat":47.0704472,"lon":9.5096766},{"lat":47.0704438,"lon":9.5097009},{"lat":47.0704982,"lon":9.5097174},{"lat":47.0705102,"lon":9.509632},{"lat":47.0705297,"lon":9.5096379},{"lat":47.0705364,"lon":9.5095904},{"lat":47.0705136,"lon":9.5095835},{"lat":47.0705154,"lon":9.5095712}]},{"type":"way","id":3911,"tags":{"building":"yes"},"nodes":[47473,47418,47421,47406,47417,47432,47443,47430,47440,47521,47473],"geometry":[{"lat":47.0642939,"lon":9.4967918},{"lat":47.06421,"lon":9.4968518},{"lat":47.0642132,"lon":9.4968614},{"lat":47.0641916,"lon":9.4968768},{"lat":47.0642096,"lon":9.496931},{"lat":47.0642331,"lon":9.4969141},{"lat":47.0642532,"lon":9.4969746},{"lat":47.0642292,"lon":9.4969917},{"lat":47.0642498,"lon":9.497054},{"lat":47.0643557,"lon":9.4969783},{"lat":47.0642939,"lon":9.4967918}]},{"type":"way","id":3913,"tags":{"building":"yes"},"nodes":[45418,45369,45365,45337,45323,45313,45300,45373,45384,45399,45418],"geometry":[{"lat":47.0619159,"lon":9.5119766},{"lat":47.0618593,"lon":9.5119475},{"lat":47.0618553,"lon":9.5119643},{"lat":47.0618242,"lon":9.5119483},{"lat":47.0618099,"lon":9.5120083},{"lat":47.0617868,"lon":9.5119964},{"lat":47.0617722,"lon":9.512058},{"lat":47.0618633,"lon":9.5121048},{"lat":47.0618742,"lon":9.512059},{"lat":47.0618938,"lon":9.5120691},{"lat":47.0619159,"lon":9.5119766}]},{"type":"way","id":3914,"tags":{"building":"yes"},"nodes":[44811,44766,44783,44761,44785,44849,44837,44885,44865,44831,44811],"geometry":[{"lat":47.0612161,"lon":9.4988671},{"lat":47.0611583,"lon":9.4989013},{"lat":47.0611866,"lon":9.4990042},{"lat":47.0611573,"lon":9.4990216},{"lat":47.0611881,"lon":9.4991338},{"lat":47.0612627,"lon":9.4990897},{"lat":47.0612467,"lon":9.4990313},{"lat":47.0612991,"lon":9.4990003},{"lat":47.0612772,"lon":9.4989205},{"lat":47.0612372,"lon":9.4989441},{"lat":47.0612161,"lon":9.4988671}]},{"type":"way","id":3916,"tags":{"building":"yes"},"nodes":[49142,49071,49073,49002,49003,49029,49032,49046,49048,49147,49142],"geometry":[{"lat":47.0668232,"lon":9.5074714},{"lat":47.0667153,"lon":9.5074758},{"lat":47.066716,"lon":9.5075112},{"lat":47.0666261,"lon":9.5075149},{"lat":47.0666273,"lon":9.5075775},{"lat":47.0666539,"lon":9.5075764},{"lat":47.0666551,"lon":9.5076417},{"lat":47.06668,"lon":9.5076407},{"lat":47.0666848,"lon":9.5078916},{"lat":47.0668312,"lon":9.5078856},{"lat":47.0668232,"lon":9.5074714}]},{"type":"way","id":3917,"tags":{"building":"yes"},"nodes":[43939,43893,43948,43941,43993,44005,44019,44039,44002,44013,43939],"geometry":[{"lat":47.0601645,"lon":9.4989007},{"lat":47.0601077,"lon":9.499059},{"lat":47.0601783,"lon":9.4991136},{"lat":47.0601682,"lon":9.4991417},{"lat":47.0602294,"lon":9.499189},{"lat":47.0602467,"lon":9.4991407},{"lat":47.0602662,"lon":9.4991559},{"lat":47.0603009,"lon":9.4990594},{"lat":47.0602418,"lon":9.4990138},{"lat":47.0602568,"lon":9.4989721},{"lat":47.0601645,"lon":9.4989007}]},{"type":"way","id":3918,"tags":{"building":"yes"},"nodes":[50496,50367,50361,50396,50397,50423,50422,50468,50469,50491,50496],"geometry":[{"lat":47.0690112,"lon":9.5091717},{"lat":47.0687846,"lon":9.5091622},{"lat":47.0687784,"lon":9.5094834},{"lat":47.0688361,"lon":9.5094858},{"lat":47.0688366,"lon":9.5094614},{"lat":47.0688857,"lon":9.5094635},{"lat":47.0688851,"lon":9.5094943},{"lat":47.0689725,"lon":9.5094979},{"lat":47.0689733,"lon":9.5094546},{"lat":47.0690057,"lon":9.5094559},{"lat":47.0690112,"lon":9.5091717}]},{"type":"way","id":3919,"tags":{"building":"yes"},"nodes":[50747,50716,50710,50666,50661,50721,50719,50749,50750,50743,50747],"geometry":[{"lat":47.0694209,"lon":9.5103332},{"lat":47.0693674,"lon":9.5103275},{"lat":47.0693617,"lon":9.5104416},{"lat":47.0692777,"lon":9.5104326},{"lat":47.0692733,"lon":9.5105209},{"lat":47.0693784,"lon":9.5105322},{"lat":47.0693772,"lon":9.5105562},{"lat":47.0694213,"lon":9.5105609},{"lat":47.0694267,"lon":9.5104534},{"lat":47.069415,"lon":9.5104521},{"lat":47.0694209,"lon":9.5103332}]},{"type":"way","id":3921,"tags":{"building":"yes"},"nodes":[50177,50120,50141,50119,50178,50248,50218,50225,50206,50198,50177],"geometry":[{"lat":47.0685283,"lon":9.5012471},{"lat":47.0684542,"lon":9.5013014},{"lat":47.0684854,"lon":9.5013931},{"lat":47.0684526,"lon":9.5014171},{"lat":47.0685302,"lon":9.5016451},{"lat":47.0686415,"lon":9.5015635},{"lat":47.0686003,"lon":9.5014426},{"lat":47.0686128,"lon":9.5014335},{"lat":47.0685781,"lon":9.5013312},{"lat":47.0685611,"lon":9.5013437},{"lat":47.0685283,"lon":9.5012471}]},{"type":"way","id":3922,"tags":{"building":"yes"},"nodes":[47034,47020,47009,46982,46994,46919,46930,46910,46923,47056,47034],"geometry":[{"lat":47.0636814,"lon":9.4940604},{"lat":47.0636525,"lon":9.4940825},{"lat":47.06364,"lon":9.4940472},{"lat":47.063612,"lon":9.4940686},{"lat":47.063624,"lon":9.4941026},{"lat":47.0635318,"lon":9.494173},{"lat":47.0635492,"lon":9.4942219},{"lat":47.0635191,"lon":9.4942449},{"lat":47.0635393,"lon":9.494302},{"lat":47.0637185,"lon":9.4941651},{"lat":47.0636814,"lon":9.4940604}]},{"type":"way","id":3923,"tags":{"building":"yes"},"nodes":[48256,48205,48212,48232,48237,48215,48197,48193,48201,48292,48256],"geometry":[{"lat":47.0654011,"lon":9.5046558},{"lat":47.0653226,"lon":9.5046867},{"lat":47.065328,"lon":9.5047162},{"lat":47.0653609,"lon":9.504735},{"lat":47.0653701,"lon":9.5047926},{"lat":47.065334,"lon":9.5048087},{"lat":47.0652997,"lon":9.5047832},{"lat":47.0652888,"lon":9.5047873},{"lat":47.0653157,"lon":9.5049046},{"lat":47.0654445,"lon":9.5048463},{"lat":47.0654011,"lon":9.5046558}]},{"type":"way","id":3924,"tags":{"building":"yes"},"nodes":[50365,50308,50311,50281,50299,50318,50341,50383,50378,50385,50365],"geometry":[{"lat":47.0687824,"lon":9.5020564},{"lat":47.0687109,"lon":9.5021077},{"lat":47.0687163,"lon":9.5021237},{"lat":47.0686825,"lon":9.5021479},{"lat":47.0686988,"lon":9.5021967},{"lat":47.0687259,"lon":9.5021772},{"lat":47.0687488,"lon":9.5022459},{"lat":47.0688115,"lon":9.502201},{"lat":47.0688004,"lon":9.5021675},{"lat":47.0688157,"lon":9.5021565},{"lat":47.0687824,"lon":9.5020564}]},{"type":"way","id":3926,"tags":{"building":"yes"},"nodes":[45937,45839,45771,45670,45736,45799,45773,45849,45910,45988,45937],"geometry":[{"lat":47.0624815,"lon":9.4924068},{"lat":47.0623893,"lon":9.4924766},{"lat":47.0623208,"lon":9.4924658},{"lat":47.0622157,"lon":9.4925664},{"lat":47.0622733,"lon":9.4926938},{"lat":47.0623536,"lon":9.4926308},{"lat":47.0623244,"lon":9.4925584},{"lat":47.0623984,"lon":9.4924873},{"lat":47.0624523,"lon":9.4926308},{"lat":47.0625409,"lon":9.4925503},{"lat":47.0624815,"lon":9.4924068}]},{"type":"way","id":3927,"tags":{"building":"yes"},"nodes":[46726,46606,46636,46692,46698,46712,46719,46723,46715,46746,46726],"geometry":[{"lat":47.0633168,"lon":9.5115634},{"lat":47.0632114,"lon":9.5116304},{"lat":47.0632377,"lon":9.5117196},{"lat":47.0632874,"lon":9.511688},{"lat":47.0632926,"lon":9.5117056},{"lat":47.0633026,"lon":9.5117113},{"lat":47.0633109,"lon":9.5117042},{"lat":47.0633145,"lon":9.5116844},{"lat":47.0633087,"lon":9.5116698},{"lat":47.0633393,"lon":9.5116532},{"lat":47.0633168,"lon":9.5115634}]},{"type":"way","id":3931,"tags":{"building":"yes"},"nodes":[47231,47184,47190,47144,47166,47219,47226,47297,47283,47261,47231],"geometry":[{"lat":47.0639582,"lon":9.4938533},{"lat":47.0638775,"lon":9.4939088},{"lat":47.0638949,"lon":9.4939633},{"lat":47.063822,"lon":9.4940134},{"lat":47.0638493,"lon":9.4940988},{"lat":47.0639411,"lon":9.4940356},{"lat":47.063954,"lon":9.4940759},{"lat":47.0640473,"lon":9.4940117},{"lat":47.0640215,"lon":9.4939308},{"lat":47.0639899,"lon":9.4939526},{"lat":47.0639582,"lon":9.4938533}]},{"type":"way","id":3932,"tags":{"building":"yes"},"nodes":[50237,50144,50151,50137,50148,50174,50175,50240,50241,50233,50237],"geometry":[{"lat":47.0686286,"lon":9.5097598},{"lat":47.0684884,"lon":9.5097617},{"lat":47.0684923,"lon":9.5098376},{"lat":47.0684832,"lon":9.5098404},{"lat":47.0684903,"lon":9.50994},{"lat":47.0685214,"lon":9.5099381},{"lat":47.0685214,"lon":9.5099732},{"lat":47.0686344,"lon":9.5099684},{"lat":47.0686357,"lon":9.5097769},{"lat":47.0686273,"lon":9.5097769},{"lat":47.0686286,"lon":9.5097598}]},{"type":"way","id":3933,"tags":{"building":"yes"},"nodes":[46495,46456,46444,46400,46390,46363,46345,46374,46366,46448,46495],"geometry":[{"lat":47.0631125,"lon":9.5112231},{"lat":47.0630775,"lon":9.5112039},{"lat":47.0630682,"lon":9.5112406},{"lat":47.0630192,"lon":9.5112138},{"lat":47.0630147,"lon":9.5112316},{"lat":47.0629868,"lon":9.5112163},{"lat":47.0629696,"lon":9.511284},{"lat":47.0629979,"lon":9.5112994},{"lat":47.0629879,"lon":9.5113388},{"lat":47.0630715,"lon":9.5113845},{"lat":47.0631125,"lon":9.5112231}]},{"type":"way","id":3934,"tags":{"building":"yes"},"nodes":[46145,46053,46059,46047,46072,46082,46087,46127,46131,46182,46145],"geometry":[{"lat":47.0627249,"lon":9.4982796},{"lat":47.0626122,"lon":9.4983461},{"lat":47.0626167,"lon":9.4983623},{"lat":47.0626069,"lon":9.498368},{"lat":47.0626289,"lon":9.4984483},{"lat":47.0626419,"lon":9.4984407},{"lat":47.0626482,"lon":9.4984637},{"lat":47.0627018,"lon":9.498432},{"lat":47.0627062,"lon":9.4984481},{"lat":47.0627621,"lon":9.4984151},{"lat":47.0627249,"lon":9.4982796}]},{"type":"way","id":3936,"tags":{"building":"yes"},"nodes":[51463,51426,51430,51424,51428,51420,51433,51436,51441,51473,51463],"geometry":[{"lat":47.0711996,"lon":9.5059236},{"lat":47.0711117,"lon":9.5059596},{"lat":47.0711214,"lon":9.5059852},{"lat":47.0711078,"lon":9.5059909},{"lat":47.0711201,"lon":9.5060724},{"lat":47.071102,"lon":9.5060848},{"lat":47.071124,"lon":9.5061568},{"lat":47.0711376,"lon":9.5061512},{"lat":47.0711434,"lon":9.5061796},{"lat":47.0712319,"lon":9.5061426},{"lat":47.0711996,"lon":9.5059236}]},{"type":"way","id":3937,"tags":{"building":"yes"},"nodes":[47515,47441,47463,47451,47486,47564,47551,47532,47517,47544,47515],"geometry":[{"lat":47.0643466,"lon":9.4960129},{"lat":47.0642506,"lon":9.4960784},{"lat":47.0642784,"lon":9.4961661},{"lat":47.0642612,"lon":9.4961779},{"lat":47.0643095,"lon":9.4963304},{"lat":47.0644122,"lon":9.4962603},{"lat":47.0643892,"lon":9.4961879},{"lat":47.0643686,"lon":9.496202},{"lat":47.0643494,"lon":9.4961416},{"lat":47.0643806,"lon":9.4961203},{"lat":47.0643466,"lon":9.4960129}]},{"type":"way","id":3938,"tags":{"building":"yes"},"nodes":[51597,51576,51575,51567,51568,51535,51524,51550,51556,51594,51597],"geometry":[{"lat":47.0715515,"lon":9.506869},{"lat":47.0714839,"lon":9.506836},{"lat":47.0714802,"lon":9.5068522},{"lat":47.0714543,"lon":9.5068396},{"lat":47.0714619,"lon":9.5068061},{"lat":47.0713969,"lon":9.5067744},{"lat":47.0713641,"lon":9.5069191},{"lat":47.0714292,"lon":9.5069508},{"lat":47.0714363,"lon":9.5069194},{"lat":47.0715298,"lon":9.506965},{"lat":47.0715515,"lon":9.506869}]},{"type":"way","id":3939,"tags":{"building":"yes"},"nodes":[46079,46071,46063,46024,46028,45978,46015,46051,46061,46117,46079],"geometry":[{"lat":47.0626378,"lon":9.4980379},{"lat":47.0626272,"lon":9.4980443},{"lat":47.0626198,"lon":9.4980178},{"lat":47.0625765,"lon":9.4980441},{"lat":47.0625841,"lon":9.4980713},{"lat":47.0625306,"lon":9.4981037},{"lat":47.06257,"lon":9.4982436},{"lat":47.0626107,"lon":9.498219},{"lat":47.0626175,"lon":9.4982432},{"lat":47.0626841,"lon":9.4982028},{"lat":47.0626378,"lon":9.4980379}]},{"type":"way","id":3940,"tags":{"building":"yes"},"nodes":[50954,50932,50929,50923,50919,50924,50920,50899,50894,50937,50954],"geometry":[{"lat":47.0699433,"lon":9.508393},{"lat":47.0698917,"lon":9.5083702},{"lat":47.0698885,"lon":9.5083857},{"lat":47.0698743,"lon":9.5083796},{"lat":47.0698643,"lon":9.5084259},{"lat":47.0698789,"lon":9.5084373},{"lat":47.0698693,"lon":9.5084802},{"lat":47.0698026,"lon":9.5084681},{"lat":47.069793,"lon":9.5085815},{"lat":47.0699068,"lon":9.5086043},{"lat":47.0699433,"lon":9.508393}]},{"type":"way","id":3941,"tags":{"building":"yes"},"nodes":[49961,49939,49940,49886,49880,49892,49891,49943,49942,49954,49961],"geometry":[{"lat":47.0682047,"lon":9.510181},{"lat":47.0681693,"lon":9.5101751},{"lat":47.0681703,"lon":9.5101614},{"lat":47.0680911,"lon":9.5101483},{"lat":47.0680859,"lon":9.5102159},{"lat":47.0681004,"lon":9.5102183},{"lat":47.0680955,"lon":9.510283},{"lat":47.0681757,"lon":9.5102962},{"lat":47.068175,"lon":9.510306},{"lat":47.0681949,"lon":9.5103093},{"lat":47.0682047,"lon":9.510181}]},{"type":"way","id":3942,"tags":{"building":"yes"},"nodes":[49529,49476,49484,49472,49483,49503,49510,49542,49536,49543,49529],"geometry":[{"lat":47.067508,"lon":9.509125},{"lat":47.067432,"lon":9.5091519},{"lat":47.0674409,"lon":9.509206},{"lat":47.0674252,"lon":9.5092116},{"lat":47.06744,"lon":9.5093012},{"lat":47.0674731,"lon":9.5092895},{"lat":47.067483,"lon":9.5093494},{"lat":47.0675302,"lon":9.5093327},{"lat":47.0675198,"lon":9.5092695},{"lat":47.0675311,"lon":9.5092654},{"lat":47.067508,"lon":9.509125}]},{"type":"way","id":3943,"tags":{"building":"yes"},"nodes":[49157,49253,49289,49232,49220,49235,49215,49244,49225,49170,49157],"geometry":[{"lat":47.0668466,"lon":9.5094192},{"lat":47.0670307,"lon":9.5093281},{"lat":47.0671024,"lon":9.5095804},{"lat":47.0669952,"lon":9.5096657},{"lat":47.0669816,"lon":9.509625},{"lat":47.0669978,"lon":9.5096145},{"lat":47.0669719,"lon":9.5095529},{"lat":47.0670171,"lon":9.5095187},{"lat":47.0669861,"lon":9.5094505},{"lat":47.0668737,"lon":9.5095187},{"lat":47.0668466,"lon":9.5094192}]},{"type":"way","id":3945,"tags":{"building":"yes"},"nodes":[51534,51503,51466,51453,51445,51487,51486,51502,51507,51500,51534],"geometry":[{"lat":47.0713954,"lon":9.5075332},{"lat":47.0713047,"lon":9.5074903},{"lat":47.0712086,"lon":9.5079284},{"lat":47.0711717,"lon":9.5079109},{"lat":47.071155,"lon":9.5079874},{"lat":47.0712701,"lon":9.5080418},{"lat":47.0712635,"lon":9.5080717},{"lat":47.0713036,"lon":9.5080906},{"lat":47.0713199,"lon":9.5080161},{"lat":47.0712924,"lon":9.5080031},{"lat":47.0713954,"lon":9.5075332}]},{"type":"way","id":3946,"tags":{"building":"yes"},"nodes":[47777,47686,47719,47748,47758,47790,47780,47796,47788,47795,47777],"geometry":[{"lat":47.0646673,"lon":9.509073},{"lat":47.0645792,"lon":9.5091212},{"lat":47.0646125,"lon":9.5092524},{"lat":47.0646408,"lon":9.5092369},{"lat":47.0646484,"lon":9.5092666},{"lat":47.0646785,"lon":9.5092501},{"lat":47.0646709,"lon":9.5092199},{"lat":47.0646891,"lon":9.5092099},{"lat":47.0646776,"lon":9.5091648},{"lat":47.0646891,"lon":9.5091585},{"lat":47.0646673,"lon":9.509073}]},{"type":"way","id":3948,"tags":{"building":"yes"},"nodes":[50816,50766,50764,50737,50739,50681,50675,50728,50730,50809,50816],"geometry":[{"lat":47.0695939,"lon":9.5082772},{"lat":47.069486,"lon":9.5082601},{"lat":47.0694812,"lon":9.5083257},{"lat":47.0694078,"lon":9.508314},{"lat":47.0694102,"lon":9.5082821},{"lat":47.0693075,"lon":9.5082658},{"lat":47.069293,"lon":9.5084614},{"lat":47.0693879,"lon":9.5084765},{"lat":47.0693928,"lon":9.5084101},{"lat":47.0695818,"lon":9.5084402},{"lat":47.0695939,"lon":9.5082772}]},{"type":"way","id":3949,"tags":{"building":"yes"},"nodes":[46633,46465,46428,46466,46437,46499,46506,46556,46577,46599,46633],"geometry":[{"lat":47.0632373,"lon":9.5108759},{"lat":47.0630856,"lon":9.5107899},{"lat":47.0630561,"lon":9.5109022},{"lat":47.0630856,"lon":9.510919},{"lat":47.0630633,"lon":9.5110037},{"lat":47.0631165,"lon":9.5110338},{"lat":47.0631206,"lon":9.5110181},{"lat":47.0631624,"lon":9.5110418},{"lat":47.0631788,"lon":9.5109793},{"lat":47.0632061,"lon":9.5109948},{"lat":47.0632373,"lon":9.5108759}]},{"type":"way","id":3950,"tags":{"building":"yes"},"nodes":[51590,51564,51559,51538,51531,51526,51516,51548,51562,51580,51590],"geometry":[{"lat":47.0715215,"lon":9.5104955},{"lat":47.071447,"lon":9.5104612},{"lat":47.0714412,"lon":9.5104885},{"lat":47.0714078,"lon":9.5104732},{"lat":47.0713882,"lon":9.5105652},{"lat":47.0713659,"lon":9.5105549},{"lat":47.0713433,"lon":9.5106607},{"lat":47.0714284,"lon":9.5106999},{"lat":47.0714462,"lon":9.5106165},{"lat":47.0714913,"lon":9.5106372},{"lat":47.0715215,"lon":9.5104955}]},{"type":"way","id":3951,"tags":{"building":"yes"},"nodes":[45298,45268,45244,45217,45185,45142,45190,45226,45263,45270,45298],"geometry":[{"lat":47.0617696,"lon":9.5135099},{"lat":47.061737,"lon":9.5134517},{"lat":47.0617113,"lon":9.5134813},{"lat":47.0616856,"lon":9.5134779},{"lat":47.0616607,"lon":9.5134471},{"lat":47.0616195,"lon":9.513503},{"lat":47.0616646,"lon":9.5135681},{"lat":47.0616973,"lon":9.5136127},{"lat":47.0617292,"lon":9.5135601},{"lat":47.0617401,"lon":9.5135761},{"lat":47.0617696,"lon":9.5135099}]},{"type":"way","id":3952,"tags":{"building":"yes"},"nodes":[47304,47245,47230,47233,47238,47178,47194,47260,47255,47336,47304],"geometry":[{"lat":47.0640526,"lon":9.5097577},{"lat":47.0639732,"lon":9.5097912},{"lat":47.0639576,"lon":9.5098033},{"lat":47.0639595,"lon":9.5098448},{"lat":47.0639631,"lon":9.5098717},{"lat":47.0638708,"lon":9.5098998},{"lat":47.0638983,"lon":9.5100313},{"lat":47.0639887,"lon":9.509995},{"lat":47.0639841,"lon":9.5099575},{"lat":47.0640864,"lon":9.5099065},{"lat":47.0640526,"lon":9.5097577}]},{"type":"way","id":3953,"tags":{"building":"yes"},"nodes":[43308,43301,43299,43272,43274,43252,43254,43270,43268,43309,43308],"geometry":[{"lat":47.0591175,"lon":9.4981158},{"lat":47.0590902,"lon":9.4981228},{"lat":47.0590843,"lon":9.4980729},{"lat":47.0589818,"lon":9.4980993},{"lat":47.0589882,"lon":9.4981524},{"lat":47.0588323,"lon":9.4981925},{"lat":47.0588444,"lon":9.4982936},{"lat":47.058962,"lon":9.4982634},{"lat":47.0589556,"lon":9.4982098},{"lat":47.0591236,"lon":9.4981666},{"lat":47.0591175,"lon":9.4981158}]},{"type":"way","id":3954,"tags":{"building":"yes"},"nodes":[47167,47114,47136,47102,47096,47040,47055,47158,47150,47191,47167],"geometry":[{"lat":47.0638571,"lon":9.4968192},{"lat":47.0637901,"lon":9.4968606},{"lat":47.0638135,"lon":9.4969423},{"lat":47.0637768,"lon":9.496965},{"lat":47.0637695,"lon":9.4969395},{"lat":47.0636862,"lon":9.4969909},{"lat":47.0637178,"lon":9.4971009},{"lat":47.0638403,"lon":9.4970252},{"lat":47.0638309,"lon":9.4969927},{"lat":47.0638954,"lon":9.4969529},{"lat":47.0638571,"lon":9.4968192}]},{"type":"way","id":3955,"tags":{"building":"yes"},"nodes":[50129,50039,50069,50013,50036,50104,50107,50167,50132,50165,50129],"geometry":[{"lat":47.0684725,"lon":9.5022708},{"lat":47.0683262,"lon":9.5023348},{"lat":47.0683625,"lon":9.502514},{"lat":47.0682909,"lon":9.5025453},{"lat":47.0683182,"lon":9.50268},{"lat":47.0684393,"lon":9.502627},{"lat":47.0684423,"lon":9.5026415},{"lat":47.0685124,"lon":9.5026108},{"lat":47.068479,"lon":9.5024462},{"lat":47.0685057,"lon":9.5024346},{"lat":47.0684725,"lon":9.5022708}]},{"type":"way","id":3957,"tags":{"building":"yes"},"nodes":[51210,51190,51201,51165,51186,51226,51220,51230,51215,51225,51210],"geometry":[{"lat":47.0705116,"lon":9.5011261},{"lat":47.0704745,"lon":9.5011484},{"lat":47.070491,"lon":9.5012075},{"lat":47.0704349,"lon":9.5012413},{"lat":47.0704679,"lon":9.5013597},{"lat":47.0705344,"lon":9.5013197},{"lat":47.0705269,"lon":9.5012926},{"lat":47.0705398,"lon":9.5012849},{"lat":47.0705172,"lon":9.5012038},{"lat":47.070531,"lon":9.5011956},{"lat":47.0705116,"lon":9.5011261}]},{"type":"way","id":3958,"tags":{"building":"yes"},"nodes":[45966,45909,45896,45832,45790,45857,45875,45915,45922,45947,45966],"geometry":[{"lat":47.0625176,"lon":9.5108315},{"lat":47.0624514,"lon":9.510796},{"lat":47.0624379,"lon":9.5108499},{"lat":47.062382,"lon":9.5108199},{"lat":47.0623455,"lon":9.5109662},{"lat":47.0624048,"lon":9.510998},{"lat":47.0624185,"lon":9.5109427},{"lat":47.0624557,"lon":9.5109626},{"lat":47.0624632,"lon":9.5109325},{"lat":47.062489,"lon":9.5109464},{"lat":47.0625176,"lon":9.5108315}]},{"type":"way","id":3959,"tags":{"building":"yes"},"nodes":[50207,50157,50103,50125,50095,50163,50192,50150,50184,50188,50216,50207],"geometry":[{"lat":47.0685796,"lon":9.5039189},{"lat":47.0684983,"lon":9.5039564},{"lat":47.068438,"lon":9.5040034},{"lat":47.0684654,"lon":9.5040879},{"lat":47.0684143,"lon":9.5041066},{"lat":47.0685047,"lon":9.5043065},{"lat":47.0685513,"lon":9.5042635},{"lat":47.068491,"lon":9.5041308},{"lat":47.0685376,"lon":9.5040986},{"lat":47.0685449,"lon":9.5040516},{"lat":47.0685997,"lon":9.5040288},{"lat":47.0685796,"lon":9.5039189}]},{"type":"way","id":3960,"tags":{"building":"yes"},"nodes":[43973,43903,43925,43894,43923,43953,44023,43997,44016,43991,44007,43973],"geometry":[{"lat":47.0602113,"lon":9.4995302},{"lat":47.0601161,"lon":9.4996231},{"lat":47.0601499,"lon":9.4996979},{"lat":47.0601077,"lon":9.4997391},{"lat":47.0601467,"lon":9.4998253},{"lat":47.0601835,"lon":9.4999067},{"lat":47.0602734,"lon":9.4998189},{"lat":47.0602341,"lon":9.4997321},{"lat":47.0602602,"lon":9.4997066},{"lat":47.0602293,"lon":9.4996384},{"lat":47.0602508,"lon":9.4996175},{"lat":47.0602113,"lon":9.4995302}]},{"type":"way","id":3961,"tags":{"building":"yes"},"nodes":[51115,51071,51070,51057,51055,51061,51062,51098,51128,51142,51112,51115],"geometry":[{"lat":47.0703426,"lon":9.5061614},{"lat":47.0702592,"lon":9.5061453},{"lat":47.0702573,"lon":9.5061671},{"lat":47.0702224,"lon":9.5061662},{"lat":47.070216,"lon":9.5062373},{"lat":47.0702289,"lon":9.5062411},{"lat":47.0702295,"lon":9.50628},{"lat":47.0703135,"lon":9.5062913},{"lat":47.0703658,"lon":9.5063255},{"lat":47.0703936,"lon":9.5062411},{"lat":47.0703374,"lon":9.5061975},{"lat":47.0703426,"lon":9.5061614}]},{"type":"way","id":3962,"tags":{"building":"yes"},"nodes":[49801,49765,49766,49755,49732,49733,49749,49750,49780,49777,49804,49801],"geometry":[{"lat":47.0679609,"lon":9.5093405},{"lat":47.0678995,"lon":9.5093434},{"lat":47.0678995,"lon":9.5093832},{"lat":47.067873,"lon":9.5094173},{"lat":47.0678511,"lon":9.5094192},{"lat":47.0678511,"lon":9.5095264},{"lat":47.0678627,"lon":9.5095273},{"lat":47.0678659,"lon":9.5095634},{"lat":47.0679215,"lon":9.5095596},{"lat":47.0679189,"lon":9.5095207},{"lat":47.0679634,"lon":9.509459},{"lat":47.0679609,"lon":9.5093405}]},{"type":"way","id":3963,"tags":{"building":"yes"},"nodes":[49390,49362,49364,49340,49296,49333,49370,49365,49369,49353,49407,49390],"geometry":[{"lat":47.0672684,"lon":9.5102302},{"lat":47.0672231,"lon":9.5102378},{"lat":47.0672264,"lon":9.510252},{"lat":47.067187,"lon":9.5102558},{"lat":47.067112,"lon":9.5102975},{"lat":47.0671747,"lon":9.5104787},{"lat":47.0672361,"lon":9.5104407},{"lat":47.0672264,"lon":9.5104123},{"lat":47.0672361,"lon":9.5104056},{"lat":47.0672147,"lon":9.5103364},{"lat":47.067289,"lon":9.5103184},{"lat":47.0672684,"lon":9.5102302}]},{"type":"way","id":3964,"tags":{"building":"yes"},"nodes":[51853,51859,51863,51876,51870,51865,51856,51854,51847,51851,51846,51853],"geometry":[{"lat":47.0733188,"lon":9.5101732},{"lat":47.0733479,"lon":9.5101993},{"lat":47.0733605,"lon":9.5101689},{"lat":47.073449,"lon":9.5102483},{"lat":47.0734086,"lon":9.5103456},{"lat":47.073393,"lon":9.5103519},{"lat":47.0733383,"lon":9.5102977},{"lat":47.0733245,"lon":9.5103309},{"lat":47.0732957,"lon":9.5103051},{"lat":47.073312,"lon":9.5102661},{"lat":47.0732888,"lon":9.5102453},{"lat":47.0733188,"lon":9.5101732}]},{"type":"way","id":3965,"tags":{"building":"yes"},"nodes":[50130,50081,49997,50003,49989,49999,50017,50023,50064,50074,50118,50130],"geometry":[{"lat":47.0684751,"lon":9.5108884},{"lat":47.0683892,"lon":9.5107888},{"lat":47.0682645,"lon":9.5108439},{"lat":47.0682761,"lon":9.5108799},{"lat":47.0682535,"lon":9.5108913},{"lat":47.0682677,"lon":9.5109529},{"lat":47.0682949,"lon":9.5109358},{"lat":47.0683013,"lon":9.5109576},{"lat":47.0683569,"lon":9.5109226},{"lat":47.0683691,"lon":9.5109766},{"lat":47.0684525,"lon":9.5109254},{"lat":47.0684751,"lon":9.5108884}]},{"type":"way","id":3968,"tags":{"building":"yes"},"nodes":[47217,47181,47186,47121,47210,53466,53467,47249,47273,47339,47293,47246,47207,47271,47217],"geometry":[{"lat":47.0639423,"lon":9.5028226},{"lat":47.063875,"lon":9.5028887},{"lat":47.0638805,"lon":9.5029007},{"lat":47.063775,"lon":9.5030044},{"lat":47.063895,"lon":9.5032676},{"lat":47.0639086,"lon":9.5032542},{"lat":47.0639234,"lon":9.5032867},{"lat":47.0639753,"lon":9.5032356},{"lat":47.0640034,"lon":9.5032972},{"lat":47.0641031,"lon":9.5031991},{"lat":47.0640434,"lon":9.5030682},{"lat":47.0639859,"lon":9.5031247},{"lat":47.0639476,"lon":9.5030408},{"lat":47.0640127,"lon":9.5029769},{"lat":47.0639423,"lon":9.5028226}]},{"type":"way","id":3969,"tags":{"building":"yes"},"nodes":[47871,47775,47781,47739,47744,47648,47664,47766,47772,47826,47807,47884,47871],"geometry":[{"lat":47.0647887,"lon":9.5112023},{"lat":47.0646668,"lon":9.5112553},{"lat":47.0646716,"lon":9.5112791},{"lat":47.0646306,"lon":9.5112969},{"lat":47.0646351,"lon":9.5113192},{"lat":47.0645296,"lon":9.5113651},{"lat":47.0645557,"lon":9.5114944},{"lat":47.0646589,"lon":9.5114495},{"lat":47.0646656,"lon":9.5114827},{"lat":47.0647197,"lon":9.5114592},{"lat":47.0647026,"lon":9.511374},{"lat":47.0648136,"lon":9.5113257},{"lat":47.0647887,"lon":9.5112023}]},{"type":"way","id":3970,"tags":{"building":"yes"},"nodes":[49388,49402,49389,49413,49461,49468,49488,49480,49507,49478,49450,49445,49388],"geometry":[{"lat":47.0672665,"lon":9.4966666},{"lat":47.0672837,"lon":9.4967203},{"lat":47.0672676,"lon":9.4967315},{"lat":47.0672963,"lon":9.496821},{"lat":47.0673964,"lon":9.4967518},{"lat":47.0674124,"lon":9.4968017},{"lat":47.0674471,"lon":9.4967777},{"lat":47.0674363,"lon":9.496744},{"lat":47.0674771,"lon":9.4967158},{"lat":47.0674349,"lon":9.4965844},{"lat":47.0673749,"lon":9.496626},{"lat":47.0673658,"lon":9.4965978},{"lat":47.0672665,"lon":9.4966666}]},{"type":"way","id":3971,"tags":{"building":"yes"},"nodes":[48573,48528,48525,48455,48461,48440,48448,48470,48479,48513,48518,48599,48573],"geometry":[{"lat":47.0658737,"lon":9.5047955},{"lat":47.0658132,"lon":9.5048242},{"lat":47.0658086,"lon":9.504803},{"lat":47.0657008,"lon":9.5048541},{"lat":47.06571,"lon":9.5048956},{"lat":47.0656791,"lon":9.5049103},{"lat":47.0656882,"lon":9.5049513},{"lat":47.0657225,"lon":9.504935},{"lat":47.0657346,"lon":9.5049899},{"lat":47.0657956,"lon":9.5049609},{"lat":47.0658007,"lon":9.5049841},{"lat":47.0659044,"lon":9.504935},{"lat":47.0658737,"lon":9.5047955}]},{"type":"way","id":3972,"tags":{"building":"yes"},"nodes":[50123,50101,50100,50055,50057,50018,50019,50054,50056,50139,50136,50124,50123],"geometry":[{"lat":47.0684643,"lon":9.5059429},{"lat":47.0684321,"lon":9.5059442},{"lat":47.0684313,"lon":9.5059016},{"lat":47.0683441,"lon":9.505905},{"lat":47.0683453,"lon":9.5059706},{"lat":47.0682959,"lon":9.5059726},{"lat":47.068297,"lon":9.5060307},{"lat":47.068344,"lon":9.5060288},{"lat":47.0683448,"lon":9.5060723},{"lat":47.0684846,"lon":9.5060668},{"lat":47.068483,"lon":9.5059804},{"lat":47.068465,"lon":9.5059811},{"lat":47.0684643,"lon":9.5059429}]},{"type":"way","id":3973,"tags":{"building":"yes"},"nodes":[45932,45868,45865,45782,45788,45815,45825,45943,45942,45963,45961,45940,45932],"geometry":[{"lat":47.0624759,"lon":9.5007919},{"lat":47.0624135,"lon":9.5008001},{"lat":47.0624115,"lon":9.5007673},{"lat":47.0623344,"lon":9.5007774},{"lat":47.0623422,"lon":9.5009057},{"lat":47.0623677,"lon":9.5009023},{"lat":47.0623737,"lon":9.5010015},{"lat":47.0624861,"lon":9.5009868},{"lat":47.0624848,"lon":9.500966},{"lat":47.0625128,"lon":9.5009624},{"lat":47.0625093,"lon":9.5009049},{"lat":47.062483,"lon":9.5009084},{"lat":47.0624759,"lon":9.5007919}]},{"type":"way","id":3974,"tags":{"building":"yes"},"nodes":[47640,47610,47619,47558,47569,47582,47599,47585,47606,47677,47663,47672,47640],"geometry":[{"lat":47.0645128,"lon":9.4966186},{"lat":47.0644715,"lon":9.4966452},{"lat":47.0644818,"lon":9.4966717},{"lat":47.064402,"lon":9.4967187},{"lat":47.0644227,"lon":9.4967747},{"lat":47.0644388,"lon":9.4967633},{"lat":47.0644553,"lon":9.4968197},{"lat":47.0644427,"lon":9.4968297},{"lat":47.0644669,"lon":9.4968913},{"lat":47.06457,"lon":9.4968174},{"lat":47.0645538,"lon":9.4967671},{"lat":47.0645654,"lon":9.4967552},{"lat":47.0645128,"lon":9.4966186}]},{"type":"way","id":3975,"tags":{"building":"yes"},"nodes":[43712,43682,43690,43624,43619,43590,43575,43691,43697,43708,43720,43703,43712],"geometry":[{"lat":47.0598583,"lon":9.4977566},{"lat":47.0598239,"lon":9.4977379},{"lat":47.0598311,"lon":9.4977094},{"lat":47.0597539,"lon":9.4976673},{"lat":47.0597454,"lon":9.4977011},{"lat":47.0596996,"lon":9.4976762},{"lat":47.0596761,"lon":9.4977687},{"lat":47.0598332,"lon":9.4978544},{"lat":47.0598411,"lon":9.4978232},{"lat":47.0598563,"lon":9.4978315},{"lat":47.0598646,"lon":9.4977986},{"lat":47.0598498,"lon":9.4977904},{"lat":47.0598583,"lon":9.4977566}]},{"type":"way","id":3976,"tags":{"building":"yes"},"nodes":[50841,50853,50867,50882,50872,50876,50861,50856,50843,50828,50820,50805,50841],"geometry":[{"lat":47.0696467,"lon":9.504845},{"lat":47.0696802,"lon":9.504961},{"lat":47.0697243,"lon":9.5049335},{"lat":47.0697568,"lon":9.5050461},{"lat":47.0697345,"lon":9.50506},{"lat":47.0697459,"lon":9.5050994},{"lat":47.0697058,"lon":9.5051243},{"lat":47.0696922,"lon":9.5050773},{"lat":47.0696497,"lon":9.5051038},{"lat":47.0696247,"lon":9.5050171},{"lat":47.0696049,"lon":9.5050294},{"lat":47.0695662,"lon":9.5048952},{"lat":47.0696467,"lon":9.504845}]},{"type":"way","id":3977,"tags":{"building":"yes"},"nodes":[43820,43873,43793,43730,43739,43728,43743,43768,43782,43761,43785,43800,43820],"geometry":[{"lat":47.059997,"lon":9.4934802},{"lat":47.0600782,"lon":9.4935851},{"lat":47.0599576,"lon":9.4937862},{"lat":47.0598768,"lon":9.4936817},{"lat":47.0598963,"lon":9.4936492},{"lat":47.0598744,"lon":9.493621},{"lat":47.0599008,"lon":9.493577},{"lat":47.0599286,"lon":9.4936129},{"lat":47.0599464,"lon":9.4935831},{"lat":47.0599205,"lon":9.4935496},{"lat":47.0599483,"lon":9.4935032},{"lat":47.059968,"lon":9.4935287},{"lat":47.059997,"lon":9.4934802}]},{"type":"way","id":3978,"tags":{"building":"yes"},"nodes":[46180,46165,46136,46138,46080,46075,46040,46055,46073,46093,46191,46171,46180],"geometry":[{"lat":47.0627614,"lon":9.4949971},{"lat":47.062745,"lon":9.4949429},{"lat":47.0627141,"lon":9.494963},{"lat":47.0627198,"lon":9.494982},{"lat":47.0626395,"lon":9.4950343},{"lat":47.0626316,"lon":9.4950084},{"lat":47.0625955,"lon":9.4950318},{"lat":47.0626136,"lon":9.4950915},{"lat":47.0626307,"lon":9.4950803},{"lat":47.0626582,"lon":9.4951711},{"lat":47.062776,"lon":9.4950944},{"lat":47.0627491,"lon":9.4950051},{"lat":47.0627614,"lon":9.4949971}]},{"type":"way","id":3979,"tags":{"building":"yes"},"nodes":[47367,47380,47385,47397,47391,47416,47308,47288,47272,47215,47235,47253,47367],"geometry":[{"lat":47.0641343,"lon":9.4961776},{"lat":47.0641578,"lon":9.4962443},{"lat":47.0641651,"lon":9.4962387},{"lat":47.0641848,"lon":9.4962946},{"lat":47.0641727,"lon":9.4963038},{"lat":47.0642092,"lon":9.4964072},{"lat":47.0640559,"lon":9.4965238},{"lat":47.0640299,"lon":9.4964503},{"lat":47.064005,"lon":9.4964693},{"lat":47.0639329,"lon":9.4962649},{"lat":47.0639606,"lon":9.4962438},{"lat":47.0639789,"lon":9.4962957},{"lat":47.0641343,"lon":9.4961776}]},{"type":"way","id":3981,"tags":{"building":"yes"},"nodes":[46484,46379,46377,46359,46350,46361,46354,46339,46332,46351,46344,46441,46484],"geometry":[{"lat":47.063102,"lon":9.4977531},{"lat":47.0630062,"lon":9.4977319},{"lat":47.0630036,"lon":9.4977578},{"lat":47.0629807,"lon":9.4977528},{"lat":47.0629734,"lon":9.4978239},{"lat":47.0629863,"lon":9.4978268},{"lat":47.0629753,"lon":9.4979337},{"lat":47.0629558,"lon":9.4979294},{"lat":47.0629476,"lon":9.4980094},{"lat":47.0629734,"lon":9.4980151},{"lat":47.0629667,"lon":9.4980804},{"lat":47.0630662,"lon":9.4981024},{"lat":47.063102,"lon":9.4977531}]},{"type":"way","id":3982,"tags":{"building":"yes"},"nodes":[50063,49987,49988,49964,49962,49945,49947,49920,49922,50007,50004,50075,50063],"geometry":[{"lat":47.0683568,"lon":9.5072927},{"lat":47.0682508,"lon":9.5073168},{"lat":47.0682526,"lon":9.5074094},{"lat":47.0682097,"lon":9.5074174},{"lat":47.0682051,"lon":9.5074389},{"lat":47.0681814,"lon":9.5074375},{"lat":47.0681823,"lon":9.5074791},{"lat":47.0681302,"lon":9.5074845},{"lat":47.068133,"lon":9.5075985},{"lat":47.06828,"lon":9.5075917},{"lat":47.0682764,"lon":9.5074711},{"lat":47.0683705,"lon":9.5074402},{"lat":47.0683568,"lon":9.5072927}]},{"type":"way","id":3983,"tags":{"building":"yes"},"nodes":[48403,48360,48339,48275,48279,48252,48233,48243,48283,48304,48344,48368,48403],"geometry":[{"lat":47.065613,"lon":9.5096649},{"lat":47.0655562,"lon":9.5096033},{"lat":47.065522,"lon":9.5096061},{"lat":47.0654212,"lon":9.5096422},{"lat":47.0654257,"lon":9.5096649},{"lat":47.0653915,"lon":9.5096763},{"lat":47.0653643,"lon":9.5097398},{"lat":47.0653792,"lon":9.5098138},{"lat":47.0654309,"lon":9.5098754},{"lat":47.0654567,"lon":9.5098119},{"lat":47.065531,"lon":9.5097797},{"lat":47.0655717,"lon":9.50981},{"lat":47.065613,"lon":9.5096649}]},{"type":"way","id":3984,"tags":{"building":"yes"},"nodes":[50261,50203,50201,50172,50171,50242,50243,50276,50280,50260,50271,50258,50261],"geometry":[{"lat":47.0686533,"lon":9.5061858},{"lat":47.0685732,"lon":9.5061858},{"lat":47.0685694,"lon":9.5063442},{"lat":47.0685196,"lon":9.5063451},{"lat":47.0685183,"lon":9.5064343},{"lat":47.0686372,"lon":9.5064418},{"lat":47.0686372,"lon":9.5064646},{"lat":47.0686766,"lon":9.5064627},{"lat":47.0686824,"lon":9.5064086},{"lat":47.0686527,"lon":9.5064086},{"lat":47.0686675,"lon":9.5062996},{"lat":47.0686508,"lon":9.5063005},{"lat":47.0686533,"lon":9.5061858}]},{"type":"way","id":3985,"tags":{"building":"yes"},"nodes":[49196,48996,49011,48989,49030,49059,49112,49284,49210,49226,49207,49199,49196],"geometry":[{"lat":47.0669468,"lon":9.4981849},{"lat":47.0666084,"lon":9.4984255},{"lat":47.0666357,"lon":9.4985083},{"lat":47.0665977,"lon":9.4985353},{"lat":47.0666549,"lon":9.4987088},{"lat":47.0666983,"lon":9.498678},{"lat":47.0667625,"lon":9.4988725},{"lat":47.0670929,"lon":9.4986375},{"lat":47.0669689,"lon":9.4982617},{"lat":47.0669868,"lon":9.498249},{"lat":47.0669657,"lon":9.498185},{"lat":47.0669504,"lon":9.4981959},{"lat":47.0669468,"lon":9.4981849}]},{"type":"way","id":3986,"tags":{"building":"yes"},"nodes":[50212,50160,50164,50135,50145,50168,50179,50155,50161,50186,50180,50229,50212],"geometry":[{"lat":47.0685892,"lon":9.5072391},{"lat":47.0685018,"lon":9.5072657},{"lat":47.0685048,"lon":9.5072864},{"lat":47.0684808,"lon":9.5072937},{"lat":47.0684886,"lon":9.5073489},{"lat":47.0685152,"lon":9.5073408},{"lat":47.0685353,"lon":9.5074832},{"lat":47.0684942,"lon":9.5074957},{"lat":47.0685021,"lon":9.5075513},{"lat":47.0685414,"lon":9.5075393},{"lat":47.0685354,"lon":9.507497},{"lat":47.0686219,"lon":9.5074707},{"lat":47.0685892,"lon":9.5072391}]},{"type":"way","id":3987,"tags":{"building":"yes"},"nodes":[50283,50246,50245,50182,50185,50169,50173,50190,50193,50252,50249,50286,50283],"geometry":[{"lat":47.0686835,"lon":9.5094142},{"lat":47.0686393,"lon":9.5094192},{"lat":47.0686384,"lon":9.5094023},{"lat":47.0685372,"lon":9.5094137},{"lat":47.0685382,"lon":9.5094335},{"lat":47.0685179,"lon":9.5094358},{"lat":47.0685204,"lon":9.509483},{"lat":47.0685503,"lon":9.5094796},{"lat":47.0685536,"lon":9.5095431},{"lat":47.0686443,"lon":9.5095328},{"lat":47.0686421,"lon":9.5094906},{"lat":47.0686872,"lon":9.5094855},{"lat":47.0686835,"lon":9.5094142}]},{"type":"way","id":3988,"tags":{"building":"yes"},"nodes":[49990,49948,49963,49982,49991,50058,50049,50072,50062,50011,50005,49996,49990],"geometry":[{"lat":47.068254,"lon":9.5013832},{"lat":47.0681833,"lon":9.50141},{"lat":47.0682085,"lon":9.5015533},{"lat":47.0682385,"lon":9.5015419},{"lat":47.0682554,"lon":9.5016385},{"lat":47.068348,"lon":9.5016034},{"lat":47.0683373,"lon":9.5015425},{"lat":47.0683683,"lon":9.5015308},{"lat":47.0683538,"lon":9.5014487},{"lat":47.0682858,"lon":9.5014744},{"lat":47.068279,"lon":9.5014356},{"lat":47.0682642,"lon":9.5014412},{"lat":47.068254,"lon":9.5013832}]},{"type":"way","id":3990,"tags":{"building":"yes"},"nodes":[44061,43980,43972,43986,43976,44042,44046,44036,44041,44047,44050,44059,44061],"geometry":[{"lat":47.0603335,"lon":9.4975186},{"lat":47.0602175,"lon":9.4975022},{"lat":47.0602085,"lon":9.4976397},{"lat":47.0602226,"lon":9.4976417},{"lat":47.0602135,"lon":9.4977812},{"lat":47.06031,"lon":9.4977948},{"lat":47.0603155,"lon":9.4977099},{"lat":47.0603002,"lon":9.4977078},{"lat":47.0603068,"lon":9.4976068},{"lat":47.0603169,"lon":9.4976082},{"lat":47.0603193,"lon":9.4975711},{"lat":47.0603299,"lon":9.4975727},{"lat":47.0603335,"lon":9.4975186}]},{"type":"way","id":3992,"tags":{"building":"yes"},"nodes":[50874,50849,50858,50855,50866,50862,50879,50913,50895,50902,50896,50890,50874],"geometry":[{"lat":47.0697387,"lon":9.5014602},{"lat":47.0696662,"lon":9.501515},{"lat":47.0696981,"lon":9.5016058},{"lat":47.069688,"lon":9.5016134},{"lat":47.0697234,"lon":9.5017142},{"lat":47.0697083,"lon":9.5017256},{"lat":47.0697515,"lon":9.5018489},{"lat":47.069843,"lon":9.5017797},{"lat":47.0697944,"lon":9.5016411},{"lat":47.0698148,"lon":9.5016257},{"lat":47.0697961,"lon":9.5015726},{"lat":47.0697819,"lon":9.5015834},{"lat":47.0697387,"lon":9.5014602}]},{"type":"way","id":3993,"tags":{"building":"yes"},"nodes":[46623,46533,46535,46513,46517,46537,46544,46602,46608,46660,46651,46629,46623],"geometry":[{"lat":47.0632261,"lon":9.5101285},{"lat":47.063142,"lon":9.5101475},{"lat":47.0631435,"lon":9.5101613},{"lat":47.0631251,"lon":9.5101654},{"lat":47.0631283,"lon":9.5101961},{"lat":47.0631449,"lon":9.5101924},{"lat":47.0631526,"lon":9.510266},{"lat":47.06321,"lon":9.510253},{"lat":47.0632117,"lon":9.51027},{"lat":47.063258,"lon":9.5102596},{"lat":47.0632506,"lon":9.5101897},{"lat":47.063233,"lon":9.5101937},{"lat":47.0632261,"lon":9.5101285}]},{"type":"way","id":3995,"tags":{"building":"yes"},"nodes":[44691,44665,44667,44574,44573,44479,44478,44578,44592,44672,44673,44689,44691],"geometry":[{"lat":47.0610833,"lon":9.4941508},{"lat":47.0610611,"lon":9.4941503},{"lat":47.0610613,"lon":9.4941309},{"lat":47.0609683,"lon":9.4941284},{"lat":47.060968,"lon":9.4941545},{"lat":47.0608863,"lon":9.4941523},{"lat":47.0608848,"lon":9.4942705},{"lat":47.0609708,"lon":9.4942728},{"lat":47.0609803,"lon":9.494273},{"lat":47.0610657,"lon":9.4942753},{"lat":47.0610663,"lon":9.4942243},{"lat":47.0610824,"lon":9.4942247},{"lat":47.0610833,"lon":9.4941508}]},{"type":"way","id":3996,"tags":{"building":"yes"},"nodes":[51880,51893,51892,51904,51906,51911,51929,51915,51913,51900,51897,51891,51880],"geometry":[{"lat":47.0734993,"lon":9.5106872},{"lat":47.0735948,"lon":9.5107882},{"lat":47.0735852,"lon":9.5108078},{"lat":47.0736618,"lon":9.5108889},{"lat":47.073677,"lon":9.510858},{"lat":47.0737035,"lon":9.5108861},{"lat":47.0737998,"lon":9.5106899},{"lat":47.0737164,"lon":9.5106017},{"lat":47.0737089,"lon":9.5106171},{"lat":47.0736497,"lon":9.5105545},{"lat":47.0736407,"lon":9.510573},{"lat":47.0735845,"lon":9.5105136},{"lat":47.0734993,"lon":9.5106872}]},{"type":"way","id":3997,"tags":{"building":"yes"},"nodes":[51212,51255,51238,51266,51240,51219,51234,51224,51216,51187,51205,51192,51212],"geometry":[{"lat":47.0705154,"lon":9.503717},{"lat":47.0705958,"lon":9.5038932},{"lat":47.0705623,"lon":9.5039261},{"lat":47.0706226,"lon":9.5040582},{"lat":47.0705646,"lon":9.5041153},{"lat":47.0705264,"lon":9.5040315},{"lat":47.0705574,"lon":9.504001},{"lat":47.0705299,"lon":9.5039407},{"lat":47.0705233,"lon":9.5039472},{"lat":47.0704712,"lon":9.5038331},{"lat":47.070499,"lon":9.5038059},{"lat":47.0704761,"lon":9.5037558},{"lat":47.0705154,"lon":9.503717}]},{"type":"way","id":3998,"tags":{"building":"yes"},"nodes":[47524,47489,47499,47485,47508,47520,47536,47559,47548,47562,47542,47534,47524],"geometry":[{"lat":47.0643584,"lon":9.4971418},{"lat":47.0643133,"lon":9.4971734},{"lat":47.0643288,"lon":9.4972212},{"lat":47.064309,"lon":9.4972351},{"lat":47.0643352,"lon":9.4973155},{"lat":47.0643538,"lon":9.4973024},{"lat":47.0643714,"lon":9.4973563},{"lat":47.064404,"lon":9.4973335},{"lat":47.0643863,"lon":9.497279},{"lat":47.0644073,"lon":9.4972643},{"lat":47.0643771,"lon":9.4971714},{"lat":47.0643697,"lon":9.4971766},{"lat":47.0643584,"lon":9.4971418}]},{"type":"way","id":3999,"tags":{"building":"yes"},"nodes":[43428,43404,43380,43365,43361,43352,43332,43340,43330,43358,43395,43405,43428],"geometry":[{"lat":47.0594189,"lon":9.4978107},{"lat":47.0593584,"lon":9.4977277},{"lat":47.0593059,"lon":9.4978534},{"lat":47.0592626,"lon":9.4978032},{"lat":47.0592464,"lon":9.4978335},{"lat":47.0592296,"lon":9.497806},{"lat":47.0591754,"lon":9.497935},{"lat":47.0591954,"lon":9.4979663},{"lat":47.0591695,"lon":9.4980184},{"lat":47.0592425,"lon":9.4980857},{"lat":47.0593369,"lon":9.4978724},{"lat":47.0593698,"lon":9.4979094},{"lat":47.0594189,"lon":9.4978107}]},{"type":"way","id":4000,"tags":{"building":"yes"},"nodes":[48871,48833,48843,48795,48792,48773,48783,48812,48809,48844,48842,48881,48871],"geometry":[{"lat":47.0663949,"lon":9.5026672},{"lat":47.0663228,"lon":9.5026802},{"lat":47.0663322,"lon":9.5027925},{"lat":47.0662478,"lon":9.5028078},{"lat":47.0662457,"lon":9.5027825},{"lat":47.066198,"lon":9.5027911},{"lat":47.0662105,"lon":9.5029404},{"lat":47.0662838,"lon":9.5029272},{"lat":47.0662814,"lon":9.5028985},{"lat":47.0663336,"lon":9.5028891},{"lat":47.0663316,"lon":9.5028652},{"lat":47.0664103,"lon":9.502851},{"lat":47.0663949,"lon":9.5026672}]},{"type":"way","id":4001,"tags":{"building":"yes"},"nodes":[48144,48087,48107,48077,48060,48023,48045,48083,48106,48172,48149,48175,48144],"geometry":[{"lat":47.0652138,"lon":9.4985414},{"lat":47.0651294,"lon":9.4986026},{"lat":47.0651649,"lon":9.4987082},{"lat":47.0651217,"lon":9.4987395},{"lat":47.0650967,"lon":9.4986652},{"lat":47.0650465,"lon":9.4987015},{"lat":47.0650747,"lon":9.4987854},{"lat":47.0651278,"lon":9.4987469},{"lat":47.0651642,"lon":9.498855},{"lat":47.0652512,"lon":9.498792},{"lat":47.0652167,"lon":9.4986896},{"lat":47.0652545,"lon":9.4986622},{"lat":47.0652138,"lon":9.4985414}]},{"type":"way","id":4002,"tags":{"building":"yes"},"nodes":[50293,50382,50294,50266,50275,50300,50282,50273,50265,50255,50234,50244,50293],"geometry":[{"lat":47.0686915,"lon":9.499612},{"lat":47.0688111,"lon":9.4999413},{"lat":47.0686936,"lon":9.5000411},{"lat":47.0686602,"lon":9.4999583},{"lat":47.0686738,"lon":9.4998854},{"lat":47.0686997,"lon":9.4998585},{"lat":47.0686827,"lon":9.4998016},{"lat":47.0686718,"lon":9.4998076},{"lat":47.0686589,"lon":9.4997567},{"lat":47.0686473,"lon":9.4997707},{"lat":47.0686276,"lon":9.4997088},{"lat":47.0686378,"lon":9.4996469},{"lat":47.0686915,"lon":9.499612}]},{"type":"way","id":4003,"tags":{"building":"yes"},"nodes":[47237,47175,47192,47152,47170,47124,47161,47211,47200,47256,47269,47306,47237],"geometry":[{"lat":47.0639617,"lon":9.494932},{"lat":47.0638675,"lon":9.4949992},{"lat":47.063896,"lon":9.4950852},{"lat":47.0638356,"lon":9.4951283},{"lat":47.0638607,"lon":9.4952043},{"lat":47.0638002,"lon":9.4952475},{"lat":47.0638447,"lon":9.4953819},{"lat":47.0639275,"lon":9.4953229},{"lat":47.0639056,"lon":9.4952569},{"lat":47.0639849,"lon":9.4952003},{"lat":47.064001,"lon":9.495249},{"lat":47.0640541,"lon":9.4952111},{"lat":47.0639617,"lon":9.494932}]},{"type":"way","id":4004,"tags":{"building":"yes"},"nodes":[47676,47581,47654,47783,47750,47733,47718,47735,47727,47705,47696,47710,47676],"geometry":[{"lat":47.0645692,"lon":9.4933436},{"lat":47.0644382,"lon":9.4934403},{"lat":47.0645392,"lon":9.4937351},{"lat":47.0646727,"lon":9.4936365},{"lat":47.064642,"lon":9.4935469},{"lat":47.0646243,"lon":9.49356},{"lat":47.0646125,"lon":9.4935255},{"lat":47.0646296,"lon":9.4935129},{"lat":47.0646182,"lon":9.4934795},{"lat":47.0646009,"lon":9.4934923},{"lat":47.0645894,"lon":9.4934585},{"lat":47.0646047,"lon":9.4934472},{"lat":47.0645692,"lon":9.4933436}]},{"type":"way","id":4007,"tags":{"building":"yes"},"nodes":[49184,49005,49019,48938,48972,48984,49009,49113,49109,53507,49149,49245,49184],"geometry":[{"lat":47.0669318,"lon":9.5019718},{"lat":47.0666325,"lon":9.5021171},{"lat":47.0666461,"lon":9.5021771},{"lat":47.0665067,"lon":9.5022447},{"lat":47.0665716,"lon":9.5025328},{"lat":47.0665929,"lon":9.5025224},{"lat":47.0666336,"lon":9.5027029},{"lat":47.0667639,"lon":9.5026396},{"lat":47.0667595,"lon":9.50262},{"lat":47.0668452,"lon":9.5025784},{"lat":47.0668381,"lon":9.5025467},{"lat":47.0670392,"lon":9.5024492},{"lat":47.0669318,"lon":9.5019718}]},{"type":"way","id":4008,"tags":{"building":"yes"},"nodes":[49735,49722,49724,49708,49717,49692,49705,49743,49736,49772,49756,49746,49735],"geometry":[{"lat":47.0678513,"lon":9.5011128},{"lat":47.0678298,"lon":9.5011221},{"lat":47.0678397,"lon":9.5011715},{"lat":47.0678113,"lon":9.5011838},{"lat":47.0678224,"lon":9.5012388},{"lat":47.0677792,"lon":9.5012574},{"lat":47.0678053,"lon":9.5013876},{"lat":47.067858,"lon":9.5013649},{"lat":47.0678515,"lon":9.5013326},{"lat":47.0679079,"lon":9.5013083},{"lat":47.067877,"lon":9.501154},{"lat":47.0678609,"lon":9.5011609},{"lat":47.0678513,"lon":9.5011128}]},{"type":"way","id":4009,"tags":{"building":"yes"},"nodes":[51837,51839,51831,51825,51821,51823,51819,51814,51817,51820,51826,51832,51837],"geometry":[{"lat":47.0731988,"lon":9.5110721},{"lat":47.073218,"lon":9.51102},{"lat":47.0731504,"lon":9.5109528},{"lat":47.0731114,"lon":9.5109511},{"lat":47.0730839,"lon":9.5109403},{"lat":47.0730951,"lon":9.5108959},{"lat":47.0730667,"lon":9.5108523},{"lat":47.0729856,"lon":9.5110134},{"lat":47.0730406,"lon":9.5110721},{"lat":47.0730755,"lon":9.5110996},{"lat":47.0731229,"lon":9.5111114},{"lat":47.0731524,"lon":9.5110485},{"lat":47.0731988,"lon":9.5110721}]},{"type":"way","id":4010,"tags":{"building":"yes"},"nodes":[49782,49727,49734,49719,49720,49742,49744,49788,49786,49794,49792,49783,49782],"geometry":[{"lat":47.0679268,"lon":9.509779},{"lat":47.0678484,"lon":9.5097898},{"lat":47.0678512,"lon":9.5098344},{"lat":47.0678247,"lon":9.5098381},{"lat":47.0678278,"lon":9.509887},{"lat":47.0678578,"lon":9.5098828},{"lat":47.0678605,"lon":9.5099254},{"lat":47.0679333,"lon":9.5099154},{"lat":47.067931,"lon":9.5098794},{"lat":47.0679464,"lon":9.5098772},{"lat":47.0679427,"lon":9.5098195},{"lat":47.0679295,"lon":9.5098213},{"lat":47.0679268,"lon":9.509779}]},{"type":"way","id":4011,"tags":{"building":"yes"},"nodes":[48576,48591,48582,48585,48569,48580,48593,48608,48661,48646,48655,48634,48576],"geometry":[{"lat":47.0658755,"lon":9.5050742},{"lat":47.0658956,"lon":9.5051548},{"lat":47.0658833,"lon":9.5051738},{"lat":47.0658885,"lon":9.5052392},{"lat":47.0658671,"lon":9.5052477},{"lat":47.0658801,"lon":9.5052951},{"lat":47.0658969,"lon":9.5052875},{"lat":47.0659149,"lon":9.5053321},{"lat":47.0660002,"lon":9.5052923},{"lat":47.0659802,"lon":9.5052069},{"lat":47.0659963,"lon":9.5051937},{"lat":47.0659582,"lon":9.505041},{"lat":47.0658755,"lon":9.5050742}]},{"type":"way","id":4012,"tags":{"building":"yes"},"nodes":[49518,49482,49475,49469,49464,49462,49457,49465,49434,49436,49496,49493,49526,49518],"geometry":[{"lat":47.0674955,"lon":9.5107994},{"lat":47.0674367,"lon":9.510807},{"lat":47.0674296,"lon":9.5107842},{"lat":47.0674141,"lon":9.5107776},{"lat":47.0673999,"lon":9.5107842},{"lat":47.0673967,"lon":9.5108013},{"lat":47.0673889,"lon":9.5108241},{"lat":47.0674018,"lon":9.5109445},{"lat":47.067354,"lon":9.5109483},{"lat":47.0673599,"lon":9.5110422},{"lat":47.0674587,"lon":9.5110251},{"lat":47.0674516,"lon":9.510935},{"lat":47.0675039,"lon":9.5109265},{"lat":47.0674955,"lon":9.5107994}]},{"type":"way","id":4013,"tags":{"building":"yes"},"nodes":[49855,49918,49955,49959,49993,49951,49938,49946,49932,49915,49894,49900,49871,49855],"geometry":[{"lat":47.0680475,"lon":9.4966692},{"lat":47.0681284,"lon":9.4966396},{"lat":47.0681968,"lon":9.4966701},{"lat":47.068203,"lon":9.4966585},{"lat":47.0682585,"lon":9.4967525},{"lat":47.068189,"lon":9.4968497},{"lat":47.0681671,"lon":9.4968175},{"lat":47.0681822,"lon":9.496792},{"lat":47.0681497,"lon":9.4967656},{"lat":47.068125,"lon":9.4967574},{"lat":47.068102,"lon":9.4967689},{"lat":47.0681081,"lon":9.4967887},{"lat":47.0680762,"lon":9.4968019},{"lat":47.0680475,"lon":9.4966692}]},{"type":"way","id":4014,"tags":{"building":"yes"},"nodes":[49568,49535,49533,49448,49458,49363,49358,49460,49501,49494,49538,49540,49578,49568],"geometry":[{"lat":47.0675841,"lon":9.506956},{"lat":47.0675147,"lon":9.5069721},{"lat":47.0675138,"lon":9.5070002},{"lat":47.0673731,"lon":9.5070257},{"lat":47.0673932,"lon":9.5071867},{"lat":47.0672233,"lon":9.5071545},{"lat":47.0672187,"lon":9.5072738},{"lat":47.067395,"lon":9.5073074},{"lat":47.0674681,"lon":9.5072779},{"lat":47.0674544,"lon":9.5071746},{"lat":47.067522,"lon":9.5071545},{"lat":47.0675229,"lon":9.5071062},{"lat":47.067596,"lon":9.5070901},{"lat":47.0675841,"lon":9.506956}]},{"type":"way","id":4015,"tags":{"building":"yes"},"nodes":[45288,45079,45085,45126,45138,45184,45201,45164,45197,45292,45279,45332,45319,45311,45288],"geometry":[{"lat":47.0617579,"lon":9.4996147},{"lat":47.06155,"lon":9.4996988},{"lat":47.0615565,"lon":9.4997339},{"lat":47.0616059,"lon":9.4997139},{"lat":47.0616157,"lon":9.499766},{"lat":47.0616601,"lon":9.499748},{"lat":47.0616704,"lon":9.4998024},{"lat":47.0616381,"lon":9.4998155},{"lat":47.0616682,"lon":9.4999759},{"lat":47.0617655,"lon":9.4999366},{"lat":47.061753,"lon":9.4998702},{"lat":47.06182,"lon":9.4998431},{"lat":47.0618025,"lon":9.4997497},{"lat":47.0617846,"lon":9.499757},{"lat":47.0617579,"lon":9.4996147}]},{"type":"way","id":4016,"tags":{"building":"yes"},"nodes":[47869,47804,47813,47760,47749,47692,47704,47669,47673,47767,47762,47817,47819,47876,47869],"geometry":[{"lat":47.0647865,"lon":9.5100423},{"lat":47.0647015,"lon":9.5100643},{"lat":47.0647064,"lon":9.5101048},{"lat":47.0646494,"lon":9.5101196},{"lat":47.0646413,"lon":9.5100522},{"lat":47.0645862,"lon":9.5100665},{"lat":47.0645991,"lon":9.5101743},{"lat":47.0645616,"lon":9.510184},{"lat":47.064566,"lon":9.5102208},{"lat":47.0646592,"lon":9.5101966},{"lat":47.0646558,"lon":9.5101686},{"lat":47.0647107,"lon":9.5101543},{"lat":47.064713,"lon":9.5101733},{"lat":47.0647996,"lon":9.5101508},{"lat":47.0647865,"lon":9.5100423}]},{"type":"way","id":4017,"tags":{"building":"yes"},"nodes":[49691,49635,49650,49644,49658,49687,49689,49713,49707,49698,49682,49694,49688,49700,49691],"geometry":[{"lat":47.0677783,"lon":9.5008103},{"lat":47.0676824,"lon":9.5008679},{"lat":47.0677126,"lon":9.5009762},{"lat":47.0676945,"lon":9.5009871},{"lat":47.0677196,"lon":9.5010771},{"lat":47.0677694,"lon":9.5010471},{"lat":47.0677761,"lon":9.5010709},{"lat":47.067818,"lon":9.5010457},{"lat":47.0678102,"lon":9.5010178},{"lat":47.067792,"lon":9.5010287},{"lat":47.0677659,"lon":9.5009352},{"lat":47.0677824,"lon":9.5009253},{"lat":47.0677703,"lon":9.5008818},{"lat":47.0677942,"lon":9.5008674},{"lat":47.0677783,"lon":9.5008103}]},{"type":"way","id":4018,"tags":{"building":"yes"},"nodes":[43305,43344,43351,43368,43349,43337,43328,43333,43322,43319,43316,43293,43300,43297,43305],"geometry":[{"lat":47.0590992,"lon":9.4931473},{"lat":47.0592002,"lon":9.4932722},{"lat":47.0592279,"lon":9.4932239},{"lat":47.059273,"lon":9.4932797},{"lat":47.0592243,"lon":9.4933646},{"lat":47.0591819,"lon":9.4933122},{"lat":47.0591661,"lon":9.4933397},{"lat":47.0591755,"lon":9.4933513},{"lat":47.0591522,"lon":9.493392},{"lat":47.0591435,"lon":9.4933812},{"lat":47.0591346,"lon":9.4933967},{"lat":47.0590498,"lon":9.493292},{"lat":47.0590898,"lon":9.4932223},{"lat":47.0590701,"lon":9.493198},{"lat":47.0590992,"lon":9.4931473}]},{"type":"way","id":4020,"tags":{"building":"yes"},"nodes":[47720,47700,47698,47645,47652,47622,47618,47566,47593,47646,47642,47728,47716,47745,47720],"geometry":[{"lat":47.0646155,"lon":9.4955921},{"lat":47.0645962,"lon":9.495606},{"lat":47.0645911,"lon":9.4955908},{"lat":47.0645244,"lon":9.4956389},{"lat":47.064536,"lon":9.4956734},{"lat":47.0644887,"lon":9.4957075},{"lat":47.0644815,"lon":9.495686},{"lat":47.0644152,"lon":9.4957338},{"lat":47.0644515,"lon":9.4958426},{"lat":47.0645244,"lon":9.4957901},{"lat":47.0645179,"lon":9.4957708},{"lat":47.0646189,"lon":9.4956981},{"lat":47.0646112,"lon":9.4956753},{"lat":47.0646371,"lon":9.4956567},{"lat":47.0646155,"lon":9.4955921}]},{"type":"way","id":4021,"tags":{"building":"yes"},"nodes":[50650,50612,50608,50574,50573,50578,50577,50606,50605,50651,50654,50660,50662,50645,50650],"geometry":[{"lat":47.0692559,"lon":9.508821},{"lat":47.0692053,"lon":9.5088188},{"lat":47.0692031,"lon":9.5089271},{"lat":47.0691464,"lon":9.5089246},{"lat":47.0691451,"lon":9.5089878},{"lat":47.0691644,"lon":9.5089887},{"lat":47.0691636,"lon":9.5090269},{"lat":47.0692021,"lon":9.5090286},{"lat":47.0692016,"lon":9.5090534},{"lat":47.0692582,"lon":9.5090558},{"lat":47.0692588,"lon":9.5090242},{"lat":47.0692726,"lon":9.5090248},{"lat":47.0692746,"lon":9.5089257},{"lat":47.0692538,"lon":9.5089248},{"lat":47.0692559,"lon":9.508821}]},{"type":"way","id":4023,"tags":{"building":"yes"},"nodes":[47588,47699,47636,47629,47605,47575,47590,47578,47567,47546,47561,47550,47528,47501,47588],"geometry":[{"lat":47.0644494,"lon":9.5053899},{"lat":47.0645919,"lon":9.5056945},{"lat":47.0645061,"lon":9.5057811},{"lat":47.0644983,"lon":9.5057644},{"lat":47.0644667,"lon":9.5057963},{"lat":47.06443,"lon":9.5057179},{"lat":47.0644506,"lon":9.5056972},{"lat":47.0644364,"lon":9.5056668},{"lat":47.0644163,"lon":9.505687},{"lat":47.0643834,"lon":9.5056165},{"lat":47.0644058,"lon":9.5055939},{"lat":47.0643883,"lon":9.5055563},{"lat":47.0643643,"lon":9.5055805},{"lat":47.064331,"lon":9.5055093},{"lat":47.0644494,"lon":9.5053899}]},{"type":"way","id":4024,"tags":{"building":"yes"},"nodes":[45901,45850,45847,45829,45821,45776,45772,45759,45723,45761,45767,45831,45838,45870,45901],"geometry":[{"lat":47.062443,"lon":9.5111303},{"lat":47.0623989,"lon":9.5111064},{"lat":47.0623954,"lon":9.5111204},{"lat":47.0623775,"lon":9.5111107},{"lat":47.0623723,"lon":9.511131},{"lat":47.0623265,"lon":9.5111061},{"lat":47.0623226,"lon":9.5111215},{"lat":47.0623023,"lon":9.5111105},{"lat":47.0622675,"lon":9.5112484},{"lat":47.0623044,"lon":9.5112685},{"lat":47.0623148,"lon":9.511227},{"lat":47.0623792,"lon":9.511262},{"lat":47.0623869,"lon":9.5112312},{"lat":47.0624139,"lon":9.5112459},{"lat":47.062443,"lon":9.5111303}]},{"type":"way","id":4025,"tags":{"building":"yes"},"nodes":[45328,45237,45209,45144,45234,45251,45308,45410,45492,45474,45425,45340,45306,45390,45328],"geometry":[{"lat":47.0618181,"lon":9.4985741},{"lat":47.0617057,"lon":9.4987417},{"lat":47.0616774,"lon":9.4987122},{"lat":47.0616226,"lon":9.4987927},{"lat":47.0617048,"lon":9.498896},{"lat":47.0617167,"lon":9.4988812},{"lat":47.0617815,"lon":9.4989684},{"lat":47.0619067,"lon":9.4990354},{"lat":47.0619962,"lon":9.4990314},{"lat":47.0619816,"lon":9.4989054},{"lat":47.0619231,"lon":9.4989013},{"lat":47.0618263,"lon":9.4988906},{"lat":47.0617788,"lon":9.4988222},{"lat":47.0618784,"lon":9.4986613},{"lat":47.0618181,"lon":9.4985741}]},{"type":"way","id":4026,"tags":{"building":"yes"},"nodes":[44720,44743,44778,44820,44748,44800,44763,44694,44593,44555,44644,44661,44698,44654,44720],"geometry":[{"lat":47.0611061,"lon":9.4959766},{"lat":47.061141,"lon":9.4960657},{"lat":47.0611797,"lon":9.496043},{"lat":47.061225,"lon":9.4961681},{"lat":47.0611461,"lon":9.496225},{"lat":47.0612082,"lon":9.496335},{"lat":47.0611578,"lon":9.4963976},{"lat":47.0610854,"lon":9.4962592},{"lat":47.0609808,"lon":9.496299},{"lat":47.0609549,"lon":9.4961643},{"lat":47.061035,"lon":9.4961188},{"lat":47.0610531,"lon":9.4961871},{"lat":47.0610893,"lon":9.4961643},{"lat":47.0610454,"lon":9.4960012},{"lat":47.0611061,"lon":9.4959766}]},{"type":"way","id":4027,"tags":{"building":"yes"},"nodes":[49375,49361,49354,49295,49299,49260,49257,49219,49247,49310,49300,49330,49336,49397,49375],"geometry":[{"lat":47.0672498,"lon":9.5033921},{"lat":47.0672203,"lon":9.5034041},{"lat":47.0672152,"lon":9.5033772},{"lat":47.0671114,"lon":9.5034194},{"lat":47.0671152,"lon":9.5034393},{"lat":47.0670386,"lon":9.5034705},{"lat":47.0670349,"lon":9.5034509},{"lat":47.0669812,"lon":9.5034727},{"lat":47.0670207,"lon":9.5036824},{"lat":47.0671297,"lon":9.5036381},{"lat":47.0671161,"lon":9.5035661},{"lat":47.0671697,"lon":9.5035444},{"lat":47.0671808,"lon":9.5036029},{"lat":47.0672818,"lon":9.5035618},{"lat":47.0672498,"lon":9.5033921}]},{"type":"way","id":4028,"tags":{"building":"yes"},"nodes":[50534,50503,50502,50460,50458,50471,50470,50459,50455,50535,50536,50523,50524,50530,50534],"geometry":[{"lat":47.0690823,"lon":9.5087635},{"lat":47.0690205,"lon":9.5087611},{"lat":47.0690189,"lon":9.5088492},{"lat":47.0689564,"lon":9.5088469},{"lat":47.0689551,"lon":9.5089213},{"lat":47.0689755,"lon":9.5089221},{"lat":47.0689742,"lon":9.5089995},{"lat":47.0689556,"lon":9.5089988},{"lat":47.0689542,"lon":9.5090736},{"lat":47.0690828,"lon":9.5090784},{"lat":47.0690842,"lon":9.5090029},{"lat":47.069057,"lon":9.5090019},{"lat":47.0690582,"lon":9.5089342},{"lat":47.0690793,"lon":9.508935},{"lat":47.0690823,"lon":9.5087635}]},{"type":"way","id":4029,"tags":{"building":"yes"},"nodes":[50031,49994,50012,50028,50030,50009,50025,50044,50053,50147,50121,50089,50077,50041,50031],"geometry":[{"lat":47.0683154,"lon":9.5017361},{"lat":47.0682611,"lon":9.5017737},{"lat":47.0682903,"lon":9.5018647},{"lat":47.06831,"lon":9.5018511},{"lat":47.0683147,"lon":9.5018659},{"lat":47.0682852,"lon":9.5018863},{"lat":47.0683028,"lon":9.5019411},{"lat":47.0683327,"lon":9.5019205},{"lat":47.068343,"lon":9.5019527},{"lat":47.0684903,"lon":9.5018508},{"lat":47.068459,"lon":9.5017533},{"lat":47.0684027,"lon":9.5017923},{"lat":47.0683836,"lon":9.5017327},{"lat":47.0683269,"lon":9.501772},{"lat":47.0683154,"lon":9.5017361}]},{"type":"way","id":4031,"tags":{"building":"yes"},"nodes":[50402,50376,50364,50350,50358,50327,50340,50302,50320,50406,50410,50436,50432,50414,50402],"geometry":[{"lat":47.0688423,"lon":9.5011785},{"lat":47.0687966,"lon":9.5012124},{"lat":47.0687822,"lon":9.5011705},{"lat":47.068757,"lon":9.5011893},{"lat":47.068768,"lon":9.5012213},{"lat":47.0687359,"lon":9.501245},{"lat":47.0687487,"lon":9.5012822},{"lat":47.0687001,"lon":9.5013184},{"lat":47.068727,"lon":9.5013966},{"lat":47.0688514,"lon":9.5013043},{"lat":47.0688595,"lon":9.5013279},{"lat":47.0689142,"lon":9.5012873},{"lat":47.0689016,"lon":9.5012507},{"lat":47.0688742,"lon":9.5012711},{"lat":47.0688423,"lon":9.5011785}]},{"type":"way","id":4032,"tags":{"building":"yes"},"nodes":[49659,49416,49414,49404,49395,49308,49314,49250,49316,49595,49599,49657,49648,49718,49659],"geometry":[{"lat":47.0677204,"lon":9.4992013},{"lat":47.0673088,"lon":9.4994926},{"lat":47.0672995,"lon":9.4994642},{"lat":47.0672851,"lon":9.4994744},{"lat":47.0672743,"lon":9.4994418},{"lat":47.0671281,"lon":9.4995452},{"lat":47.0671372,"lon":9.499573},{"lat":47.0670233,"lon":9.4996536},{"lat":47.0671396,"lon":9.5000078},{"lat":47.0676296,"lon":9.499661},{"lat":47.0676356,"lon":9.4996794},{"lat":47.0677194,"lon":9.4996202},{"lat":47.0677122,"lon":9.4995985},{"lat":47.0678247,"lon":9.4995189},{"lat":47.0677204,"lon":9.4992013}]},{"type":"way","id":4033,"tags":{"building":"yes"},"nodes":[45653,45608,45600,45556,45590,45624,45642,45622,45643,45680,45698,45726,45711,45744,45653],"geometry":[{"lat":47.0621983,"lon":9.4932436},{"lat":47.0621387,"lon":9.4933063},{"lat":47.0621293,"lon":9.493287},{"lat":47.0620649,"lon":9.4933547},{"lat":47.0621131,"lon":9.4934534},{"lat":47.0621617,"lon":9.4934023},{"lat":47.0621844,"lon":9.4934487},{"lat":47.0621592,"lon":9.4934751},{"lat":47.0621878,"lon":9.4935337},{"lat":47.0622238,"lon":9.4934958},{"lat":47.0622402,"lon":9.4935294},{"lat":47.0622697,"lon":9.4934984},{"lat":47.0622522,"lon":9.4934625},{"lat":47.0622871,"lon":9.4934258},{"lat":47.0621983,"lon":9.4932436}]},{"type":"way","id":4034,"tags":{"building":"yes"},"nodes":[44652,44584,44586,44551,44569,44540,44527,44460,44497,44518,44512,44616,44625,44697,44652],"geometry":[{"lat":47.0610424,"lon":9.5106555},{"lat":47.0609748,"lon":9.5106954},{"lat":47.0609771,"lon":9.5107091},{"lat":47.0609514,"lon":9.5107251},{"lat":47.0609654,"lon":9.5107834},{"lat":47.0609265,"lon":9.5108096},{"lat":47.0609203,"lon":9.5107902},{"lat":47.0608627,"lon":9.510829},{"lat":47.0608962,"lon":9.5109398},{"lat":47.0609125,"lon":9.5109352},{"lat":47.0609086,"lon":9.5109866},{"lat":47.0610043,"lon":9.5109741},{"lat":47.0610137,"lon":9.510893},{"lat":47.0610876,"lon":9.510845},{"lat":47.0610424,"lon":9.5106555}]},{"type":"way","id":4035,"tags":{"building":"yes"},"nodes":[45886,45806,45780,45735,45754,45673,45647,45599,45639,45707,45728,45807,45797,45921,45886],"geometry":[{"lat":47.0624246,"lon":9.4947921},{"lat":47.0623602,"lon":9.4948351},{"lat":47.0623316,"lon":9.494743},{"lat":47.0622731,"lon":9.4947822},{"lat":47.0622979,"lon":9.4948621},{"lat":47.0622206,"lon":9.4949138},{"lat":47.0621936,"lon":9.4948268},{"lat":47.0621284,"lon":9.4948704},{"lat":47.0621816,"lon":9.4950418},{"lat":47.0622459,"lon":9.4949988},{"lat":47.0622705,"lon":9.495078},{"lat":47.062362,"lon":9.4950168},{"lat":47.0623529,"lon":9.4949877},{"lat":47.0624626,"lon":9.4949144},{"lat":47.0624246,"lon":9.4947921}]},{"type":"way","id":4037,"tags":{"building":"yes"},"nodes":[46135,46160,46177,46188,46206,46197,46218,46190,46220,46146,46095,46120,46077,46119,46109,46135],"geometry":[{"lat":47.0627134,"lon":9.4930771},{"lat":47.0627412,"lon":9.493116},{"lat":47.0627599,"lon":9.4931264},{"lat":47.0627748,"lon":9.493097},{"lat":47.0627909,"lon":9.4931236},{"lat":47.0627825,"lon":9.4931501},{"lat":47.0628045,"lon":9.4931757},{"lat":47.0627754,"lon":9.4932535},{"lat":47.0628116,"lon":9.4932848},{"lat":47.0627263,"lon":9.4934735},{"lat":47.0626611,"lon":9.493409},{"lat":47.0626888,"lon":9.4933322},{"lat":47.0626365,"lon":9.4932743},{"lat":47.0626863,"lon":9.4931605},{"lat":47.0626779,"lon":9.4931359},{"lat":47.0627134,"lon":9.4930771}]},{"type":"way","id":4039,"tags":{"building":"yes"},"nodes":[43936,43988,43996,43985,43967,43971,43981,44045,44051,44012,44018,44015,43994,43946,43886,43936],"geometry":[{"lat":47.0601605,"lon":9.4969283},{"lat":47.0602257,"lon":9.4970222},{"lat":47.0602309,"lon":9.4969605},{"lat":47.0602218,"lon":9.4969349},{"lat":47.0602038,"lon":9.4969141},{"lat":47.0602083,"lon":9.496879},{"lat":47.0602193,"lon":9.4968695},{"lat":47.0603149,"lon":9.4968562},{"lat":47.06032,"lon":9.4969425},{"lat":47.0602561,"lon":9.4969454},{"lat":47.0602612,"lon":9.4969861},{"lat":47.060258,"lon":9.4970269},{"lat":47.0602296,"lon":9.4970364},{"lat":47.0601773,"lon":9.4971179},{"lat":47.0601043,"lon":9.4970127},{"lat":47.0601605,"lon":9.4969283}]},{"type":"way","id":4040,"tags":{"building":"yes"},"nodes":[50863,50848,50846,50817,50830,50818,50807,50781,50806,50888,50883,50878,50873,50884,50875,50868,50863],"geometry":[{"lat":47.069712,"lon":9.5010733},{"lat":47.069663,"lon":9.501109},{"lat":47.0696541,"lon":9.5010827},{"lat":47.0695942,"lon":9.5011263},{"lat":47.0696269,"lon":9.5012235},{"lat":47.0695959,"lon":9.501246},{"lat":47.0695704,"lon":9.5011703},{"lat":47.0695102,"lon":9.501214},{"lat":47.0695665,"lon":9.5013812},{"lat":47.0697738,"lon":9.5012306},{"lat":47.0697586,"lon":9.5011855},{"lat":47.0697481,"lon":9.5011931},{"lat":47.0697366,"lon":9.5011589},{"lat":47.069759,"lon":9.5011426},{"lat":47.0697459,"lon":9.5011038},{"lat":47.0697269,"lon":9.5011176},{"lat":47.069712,"lon":9.5010733}]},{"type":"way","id":4041,"tags":{"building":"yes"},"nodes":[46554,46524,46536,46504,46492,46443,46414,46435,46412,46385,46368,46398,46370,46458,46507,46496,46554],"geometry":[{"lat":47.0631611,"lon":9.4925034},{"lat":47.0631346,"lon":9.4924702},{"lat":47.0631449,"lon":9.4924531},{"lat":47.0631191,"lon":9.4924247},{"lat":47.0631113,"lon":9.492436},{"lat":47.0630674,"lon":9.4923829},{"lat":47.063037,"lon":9.4924446},{"lat":47.0630622,"lon":9.492473},{"lat":47.0630351,"lon":9.4925337},{"lat":47.0630093,"lon":9.4925043},{"lat":47.0629899,"lon":9.4925432},{"lat":47.0630189,"lon":9.4925783},{"lat":47.0629937,"lon":9.4926314},{"lat":47.063081,"lon":9.4927224},{"lat":47.0631223,"lon":9.4926295},{"lat":47.0631133,"lon":9.4926105},{"lat":47.0631611,"lon":9.4925034}]},{"type":"way","id":4042,"tags":{"building":"yes"},"nodes":[45742,45733,45724,45715,45704,45686,45674,45665,45604,45597,45593,45582,45586,45589,45581,45706,45742],"geometry":[{"lat":47.0622828,"lon":9.5117805},{"lat":47.0622727,"lon":9.5117714},{"lat":47.062268,"lon":9.5117599},{"lat":47.0622579,"lon":9.5117462},{"lat":47.0622432,"lon":9.5117462},{"lat":47.062233,"lon":9.5117497},{"lat":47.0622206,"lon":9.5117451},{"lat":47.0622105,"lon":9.5117793},{"lat":47.0621342,"lon":9.5117314},{"lat":47.0621257,"lon":9.5117634},{"lat":47.0621179,"lon":9.5117656},{"lat":47.062107,"lon":9.5117851},{"lat":47.0621101,"lon":9.5118056},{"lat":47.0621125,"lon":9.5118273},{"lat":47.0621047,"lon":9.5118547},{"lat":47.0622447,"lon":9.5119255},{"lat":47.0622828,"lon":9.5117805}]},{"type":"way","id":4043,"tags":{"building":"yes"},"nodes":[48986,49004,49061,49092,49078,49085,49065,49106,49063,49018,49042,49025,48971,48957,48952,48934,48986],"geometry":[{"lat":47.0665957,"lon":9.5092742},{"lat":47.06663,"lon":9.509406},{"lat":47.0667004,"lon":9.5093614},{"lat":47.0667391,"lon":9.5094818},{"lat":47.0667197,"lon":9.509497},{"lat":47.0667281,"lon":9.5095378},{"lat":47.0667068,"lon":9.5095596},{"lat":47.066754,"lon":9.5096051},{"lat":47.0667029,"lon":9.5097237},{"lat":47.0666442,"lon":9.5096772},{"lat":47.0666732,"lon":9.5095843},{"lat":47.0666519,"lon":9.5095065},{"lat":47.0665705,"lon":9.5095444},{"lat":47.066544,"lon":9.5094534},{"lat":47.0665318,"lon":9.5094553},{"lat":47.0665027,"lon":9.5093386},{"lat":47.0665957,"lon":9.5092742}]},{"type":"way","id":4044,"tags":{"building":"yes"},"nodes":[47090,46995,47004,46992,46983,46907,46906,46890,46873,46866,46863,46860,46867,47008,47005,47103,47090],"geometry":[{"lat":47.0637569,"lon":9.5104186},{"lat":47.0636262,"lon":9.5104481},{"lat":47.0636326,"lon":9.5105232},{"lat":47.0636217,"lon":9.5105273},{"lat":47.0636125,"lon":9.5104562},{"lat":47.0635166,"lon":9.5104817},{"lat":47.0635157,"lon":9.5105045},{"lat":47.0634947,"lon":9.5105071},{"lat":47.0634755,"lon":9.5105192},{"lat":47.0634636,"lon":9.5105568},{"lat":47.0634554,"lon":9.5106024},{"lat":47.0634536,"lon":9.5106345},{"lat":47.0634645,"lon":9.5106949},{"lat":47.0636381,"lon":9.5106453},{"lat":47.0636372,"lon":9.5106278},{"lat":47.0637779,"lon":9.5105661},{"lat":47.0637569,"lon":9.5104186}]},{"type":"way","id":4045,"tags":{"building":"yes"},"nodes":[48624,48538,48532,48519,48516,48477,48476,48484,48482,48520,48523,48560,48564,48607,48610,48616,48624],"geometry":[{"lat":47.0659439,"lon":9.5076801},{"lat":47.0658265,"lon":9.507673},{"lat":47.0658219,"lon":9.5078397},{"lat":47.0658011,"lon":9.5078384},{"lat":47.0657971,"lon":9.5079835},{"lat":47.0657338,"lon":9.5079797},{"lat":47.0657302,"lon":9.5081101},{"lat":47.0657465,"lon":9.5081111},{"lat":47.0657457,"lon":9.5081402},{"lat":47.0658056,"lon":9.5081438},{"lat":47.0658066,"lon":9.5081055},{"lat":47.0658576,"lon":9.5081086},{"lat":47.0658603,"lon":9.5080103},{"lat":47.0659145,"lon":9.5080136},{"lat":47.0659184,"lon":9.5078745},{"lat":47.0659385,"lon":9.5078757},{"lat":47.0659439,"lon":9.5076801}]},{"type":"way","id":4046,"tags":{"building":"yes"},"nodes":[48347,48319,48325,48305,48298,48270,48263,48217,48238,48287,48308,48327,48314,48333,48337,48375,48347],"geometry":[{"lat":47.0655352,"lon":9.4983303},{"lat":47.0654867,"lon":9.4983666},{"lat":47.0654951,"lon":9.4983907},{"lat":47.0654578,"lon":9.4984186},{"lat":47.0654528,"lon":9.4984042},{"lat":47.0654135,"lon":9.4984335},{"lat":47.065407,"lon":9.4984149},{"lat":47.0653349,"lon":9.4984689},{"lat":47.0653702,"lon":9.4985708},{"lat":47.0654414,"lon":9.4985175},{"lat":47.0654592,"lon":9.4985687},{"lat":47.0654957,"lon":9.4985414},{"lat":47.0654803,"lon":9.498497},{"lat":47.0655058,"lon":9.4984779},{"lat":47.0655181,"lon":9.4985133},{"lat":47.0655821,"lon":9.4984654},{"lat":47.0655352,"lon":9.4983303}]},{"type":"way","id":4047,"tags":{"building":"yes"},"nodes":[51663,51662,51641,51643,51635,51628,51624,51623,51626,51636,51646,51658,51672,51675,51671,51666,51663],"geometry":[{"lat":47.0719268,"lon":9.5120413},{"lat":47.0719236,"lon":9.5119881},{"lat":47.0718342,"lon":9.5120043},{"lat":47.0718413,"lon":9.5120879},{"lat":47.0717973,"lon":9.5120689},{"lat":47.0717656,"lon":9.5120775},{"lat":47.0717546,"lon":9.5121012},{"lat":47.0717501,"lon":9.5121487},{"lat":47.0717617,"lon":9.5121792},{"lat":47.0718038,"lon":9.5122086},{"lat":47.0718452,"lon":9.5122267},{"lat":47.0718964,"lon":9.5122105},{"lat":47.0719792,"lon":9.5121734},{"lat":47.0719902,"lon":9.5121164},{"lat":47.0719786,"lon":9.5120708},{"lat":47.0719579,"lon":9.5120499},{"lat":47.0719268,"lon":9.5120413}]},{"type":"way","id":4048,"tags":{"building":"yes"},"nodes":[50670,50621,50634,50616,50629,50656,50669,50687,50693,50646,50659,50720,50699,50707,50700,50692,50670],"geometry":[{"lat":47.0692831,"lon":9.5009293},{"lat":47.069215,"lon":9.5009746},{"lat":47.0692375,"lon":9.5010477},{"lat":47.0692106,"lon":9.5010656},{"lat":47.0692281,"lon":9.5011221},{"lat":47.0692617,"lon":9.5010998},{"lat":47.0692825,"lon":9.5011672},{"lat":47.0693161,"lon":9.5011448},{"lat":47.0693259,"lon":9.5011766},{"lat":47.0692541,"lon":9.5012244},{"lat":47.0692723,"lon":9.5012833},{"lat":47.0693774,"lon":9.5012133},{"lat":47.0693406,"lon":9.501094},{"lat":47.0693582,"lon":9.5010823},{"lat":47.0693446,"lon":9.5010385},{"lat":47.0693216,"lon":9.5010538},{"lat":47.0692831,"lon":9.5009293}]},{"type":"way","id":4049,"tags":{"building":"yes"},"nodes":[51572,51552,51561,51549,51555,51540,51551,51545,51554,51581,51577,51592,51585,51587,51582,51578,51572],"geometry":[{"lat":47.071474,"lon":9.5102903},{"lat":47.0714295,"lon":9.5102686},{"lat":47.0714457,"lon":9.510197},{"lat":47.0714287,"lon":9.5101887},{"lat":47.071435,"lon":9.5101608},{"lat":47.0714089,"lon":9.5101481},{"lat":47.0714295,"lon":9.510057},{"lat":47.0714164,"lon":9.5100506},{"lat":47.0714349,"lon":9.5099683},{"lat":47.0714936,"lon":9.5099969},{"lat":47.0714849,"lon":9.5100358},{"lat":47.0715245,"lon":9.5100551},{"lat":47.0715066,"lon":9.5101343},{"lat":47.0715171,"lon":9.5101394},{"lat":47.0714956,"lon":9.5102346},{"lat":47.0714874,"lon":9.5102306},{"lat":47.071474,"lon":9.5102903}]},{"type":"way","id":4050,"tags":{"building":"yes"},"nodes":[47856,47800,47798,47803,47792,47785,47778,47759,47751,47682,47683,47627,47649,47707,47754,47873,47856],"geometry":[{"lat":47.0647632,"lon":9.5059319},{"lat":47.0646927,"lon":9.5059547},{"lat":47.0646909,"lon":9.5059345},{"lat":47.064701,"lon":9.505913},{"lat":47.0646845,"lon":9.5058915},{"lat":47.0646735,"lon":9.5059009},{"lat":47.064668,"lon":9.5058633},{"lat":47.0646488,"lon":9.5058754},{"lat":47.0646433,"lon":9.5058149},{"lat":47.0645765,"lon":9.5058526},{"lat":47.0645765,"lon":9.5058781},{"lat":47.064495,"lon":9.5059077},{"lat":47.0645298,"lon":9.5059802},{"lat":47.0646021,"lon":9.505952},{"lat":47.0646451,"lon":9.5061442},{"lat":47.0647907,"lon":9.5060676},{"lat":47.0647632,"lon":9.5059319}]},{"type":"way","id":4052,"tags":{"building":"yes"},"nodes":[45194,45148,45160,45122,45137,45127,45152,45133,45166,45154,45181,45290,45262,45225,45199,45239,45194],"geometry":[{"lat":47.0616667,"lon":9.4963912},{"lat":47.0616279,"lon":9.4964226},{"lat":47.0616344,"lon":9.4964398},{"lat":47.0615999,"lon":9.4964678},{"lat":47.0616154,"lon":9.4965091},{"lat":47.0616077,"lon":9.4965153},{"lat":47.0616297,"lon":9.4965738},{"lat":47.0616111,"lon":9.4965888},{"lat":47.0616426,"lon":9.4966727},{"lat":47.0616313,"lon":9.4966819},{"lat":47.061657,"lon":9.4967504},{"lat":47.0617618,"lon":9.4966656},{"lat":47.0617288,"lon":9.4965777},{"lat":47.0616972,"lon":9.4966033},{"lat":47.0616694,"lon":9.4965293},{"lat":47.0617071,"lon":9.4964988},{"lat":47.0616667,"lon":9.4963912}]},{"type":"way","id":4053,"tags":{"building":"yes"},"nodes":[45221,45077,45107,45096,45102,45130,45131,45193,45189,45249,45258,45192,45186,45165,45155,45276,45221],"geometry":[{"lat":47.0616956,"lon":9.495336},{"lat":47.0615457,"lon":9.495483},{"lat":47.0615799,"lon":9.4955475},{"lat":47.0615676,"lon":9.495555},{"lat":47.061576,"lon":9.4956992},{"lat":47.0616083,"lon":9.4956963},{"lat":47.0616083,"lon":9.4957219},{"lat":47.0616652,"lon":9.4957181},{"lat":47.0616645,"lon":9.4957722},{"lat":47.0617143,"lon":9.4957779},{"lat":47.0617246,"lon":9.4956878},{"lat":47.0616652,"lon":9.4956812},{"lat":47.0616613,"lon":9.4955854},{"lat":47.0616426,"lon":9.4955901},{"lat":47.0616316,"lon":9.4955636},{"lat":47.0617466,"lon":9.4954393},{"lat":47.0616956,"lon":9.495336}]},{"type":"way","id":4054,"tags":{"building":"yes"},"nodes":[48486,48473,48478,48452,48445,48394,48397,48382,48389,48408,48411,48442,48449,48512,48499,48489,48486],"geometry":[{"lat":47.0657503,"lon":9.5050958},{"lat":47.0657289,"lon":9.5051048},{"lat":47.0657339,"lon":9.5051303},{"lat":47.0656907,"lon":9.5051485},{"lat":47.0656857,"lon":9.5051229},{"lat":47.0655998,"lon":9.5051592},{"lat":47.0656085,"lon":9.5052039},{"lat":47.0655857,"lon":9.5052136},{"lat":47.0655942,"lon":9.5052569},{"lat":47.065623,"lon":9.5052447},{"lat":47.0656312,"lon":9.5052861},{"lat":47.0656841,"lon":9.5052637},{"lat":47.0656885,"lon":9.5052864},{"lat":47.0657925,"lon":9.5052425},{"lat":47.0657659,"lon":9.5051073},{"lat":47.0657536,"lon":9.5051125},{"lat":47.0657503,"lon":9.5050958}]},{"type":"way","id":4055,"tags":{"building":"yes"},"nodes":[50387,50257,50262,50296,50298,50199,50195,50156,50134,50021,50034,50128,50142,50223,50222,50393,50387],"geometry":[{"lat":47.0688188,"lon":9.5067363},{"lat":47.0686502,"lon":9.5067648},{"lat":47.0686548,"lon":9.5068359},{"lat":47.0686948,"lon":9.5068226},{"lat":47.0686987,"lon":9.5068795},{"lat":47.0685624,"lon":9.5068805},{"lat":47.0685572,"lon":9.5067999},{"lat":47.0684978,"lon":9.5068084},{"lat":47.0684797,"lon":9.5066747},{"lat":47.0682989,"lon":9.5067325},{"lat":47.068317,"lon":9.5069231},{"lat":47.068472,"lon":9.5068852},{"lat":47.0684862,"lon":9.5070512},{"lat":47.0686108,"lon":9.5070142},{"lat":47.0686102,"lon":9.5069734},{"lat":47.0688311,"lon":9.5069307},{"lat":47.0688188,"lon":9.5067363}]},{"type":"way","id":4056,"tags":{"building":"yes"},"nodes":[46523,46559,46574,46603,46588,46662,46615,46627,46590,46545,46553,46439,46469,46434,46449,46486,46523],"geometry":[{"lat":47.0631343,"lon":9.4931914},{"lat":47.0631654,"lon":9.4932195},{"lat":47.0631778,"lon":9.4931899},{"lat":47.0632103,"lon":9.4932194},{"lat":47.0631963,"lon":9.4932527},{"lat":47.0632586,"lon":9.4933091},{"lat":47.0632211,"lon":9.4933983},{"lat":47.0632324,"lon":9.4934085},{"lat":47.0631991,"lon":9.4934876},{"lat":47.0631531,"lon":9.493446},{"lat":47.0631597,"lon":9.4934303},{"lat":47.0630647,"lon":9.4933444},{"lat":47.0630891,"lon":9.4932862},{"lat":47.0630621,"lon":9.4932617},{"lat":47.0630725,"lon":9.493237},{"lat":47.0631035,"lon":9.493265},{"lat":47.0631343,"lon":9.4931914}]},{"type":"way","id":4057,"tags":{"building":"yes"},"nodes":[48640,48698,48639,48652,48629,48623,48589,48581,48567,48546,48557,48549,48497,48474,48521,48515,48632,48640],"geometry":[{"lat":47.0659749,"lon":9.4974133},{"lat":47.0660579,"lon":9.4976754},{"lat":47.065972,"lon":9.4977341},{"lat":47.0659913,"lon":9.497795},{"lat":47.0659518,"lon":9.497822},{"lat":47.0659437,"lon":9.4977965},{"lat":47.0658942,"lon":9.4978303},{"lat":47.0658815,"lon":9.4977903},{"lat":47.0658666,"lon":9.4978005},{"lat":47.0658411,"lon":9.4977198},{"lat":47.0658546,"lon":9.4977106},{"lat":47.0658426,"lon":9.4976728},{"lat":47.0657644,"lon":9.4977263},{"lat":47.0657297,"lon":9.4976168},{"lat":47.0658062,"lon":9.4975645},{"lat":47.0657968,"lon":9.497535},{"lat":47.0659558,"lon":9.4974263},{"lat":47.0659749,"lon":9.4974133}]},{"type":"way","id":4059,"tags":{"building":"yes"},"nodes":[51149,51101,51106,51080,51099,51132,51140,51150,51159,51146,51153,51171,51166,51195,51183,51207,51193,51175,51149],"geometry":[{"lat":47.0704086,"lon":9.5043618},{"lat":47.070321,"lon":9.5044234},{"lat":47.0703313,"lon":9.5044549},{"lat":47.0702784,"lon":9.5044921},{"lat":47.0703141,"lon":9.5046015},{"lat":47.0703695,"lon":9.5045624},{"lat":47.0703859,"lon":9.5046126},{"lat":47.0704092,"lon":9.5045963},{"lat":47.0704236,"lon":9.5046403},{"lat":47.0704021,"lon":9.5046555},{"lat":47.0704126,"lon":9.5046878},{"lat":47.0704469,"lon":9.5046637},{"lat":47.0704371,"lon":9.5046337},{"lat":47.0704808,"lon":9.5046029},{"lat":47.0704656,"lon":9.5045562},{"lat":47.0705004,"lon":9.5045316},{"lat":47.0704788,"lon":9.5044653},{"lat":47.0704492,"lon":9.5044861},{"lat":47.0704086,"lon":9.5043618}]},{"type":"way","id":4060,"tags":{"building":"yes"},"nodes":[49566,49544,49547,49554,49559,49553,49558,49548,49550,49560,49567,49614,49601,49591,49589,49581,49575,49571,49566],"geometry":[{"lat":47.06758,"lon":9.5011685},{"lat":47.0675318,"lon":9.5011827},{"lat":47.0675402,"lon":9.5012443},{"lat":47.0675612,"lon":9.5012381},{"lat":47.06757,"lon":9.5013026},{"lat":47.067559,"lon":9.5013059},{"lat":47.0675679,"lon":9.5013712},{"lat":47.0675423,"lon":9.5013788},{"lat":47.0675471,"lon":9.5014142},{"lat":47.0675713,"lon":9.5014071},{"lat":47.0675818,"lon":9.5014834},{"lat":47.067657,"lon":9.5014612},{"lat":47.0676394,"lon":9.5013332},{"lat":47.0676196,"lon":9.501339},{"lat":47.0676117,"lon":9.5012808},{"lat":47.0675996,"lon":9.5012844},{"lat":47.0675913,"lon":9.5012237},{"lat":47.0675877,"lon":9.5012247},{"lat":47.06758,"lon":9.5011685}]},{"type":"way","id":4061,"tags":{"building":"yes"},"nodes":[51506,51484,51480,51471,51470,51457,51454,51442,51439,51418,51414,51404,51392,51423,51427,51461,51462,51488,51506],"geometry":[{"lat":47.0713146,"lon":9.5103757},{"lat":47.0712622,"lon":9.5103489},{"lat":47.0712559,"lon":9.5103752},{"lat":47.0712274,"lon":9.5103606},{"lat":47.0712241,"lon":9.5103746},{"lat":47.0711794,"lon":9.5103517},{"lat":47.071174,"lon":9.5103744},{"lat":47.071144,"lon":9.5103591},{"lat":47.0711404,"lon":9.5103741},{"lat":47.0710933,"lon":9.51035},{"lat":47.0710865,"lon":9.5103783},{"lat":47.0710577,"lon":9.5103635},{"lat":47.0710229,"lon":9.5105098},{"lat":47.0711031,"lon":9.5105508},{"lat":47.0711127,"lon":9.5105102},{"lat":47.0711872,"lon":9.5105483},{"lat":47.0711966,"lon":9.5105086},{"lat":47.0712736,"lon":9.5105481},{"lat":47.0713146,"lon":9.5103757}]},{"type":"way","id":4062,"tags":{"building":"yes"},"nodes":[51279,51258,51251,51236,51239,51185,51162,51152,51176,51104,51082,51074,51097,51045,51032,51233,51244,51267,51279],"geometry":[{"lat":47.0706559,"lon":9.5111391},{"lat":47.0706023,"lon":9.5111284},{"lat":47.0705908,"lon":9.511252},{"lat":47.0705612,"lon":9.5112461},{"lat":47.070564,"lon":9.5112163},{"lat":47.0704674,"lon":9.5111969},{"lat":47.0704303,"lon":9.5115952},{"lat":47.0704111,"lon":9.5115913},{"lat":47.0704574,"lon":9.5110944},{"lat":47.0703286,"lon":9.5110685},{"lat":47.0702824,"lon":9.511565},{"lat":47.0702659,"lon":9.5115617},{"lat":47.0703123,"lon":9.5110643},{"lat":47.0701844,"lon":9.5110386},{"lat":47.0701344,"lon":9.5115748},{"lat":47.070556,"lon":9.5116595},{"lat":47.0705725,"lon":9.5114828},{"lat":47.0706229,"lon":9.5114929},{"lat":47.0706559,"lon":9.5111391}]},{"type":"way","id":4063,"tags":{"building":"yes"},"nodes":[47149,47130,47133,46980,46977,46959,46964,46932,46935,46889,46856,46929,46940,46961,46960,47115,47122,47143,47149],"geometry":[{"lat":47.0638306,"lon":9.4991636},{"lat":47.0638038,"lon":9.4991575},{"lat":47.063809,"lon":9.4991084},{"lat":47.0636097,"lon":9.4990625},{"lat":47.0636054,"lon":9.4991029},{"lat":47.0635878,"lon":9.4990989},{"lat":47.0635925,"lon":9.4990551},{"lat":47.0635527,"lon":9.4990459},{"lat":47.063557,"lon":9.4990056},{"lat":47.0634932,"lon":9.4989909},{"lat":47.0634516,"lon":9.4993801},{"lat":47.0635465,"lon":9.4994019},{"lat":47.0635655,"lon":9.4992243},{"lat":47.0635904,"lon":9.4992301},{"lat":47.0635878,"lon":9.4992545},{"lat":47.0637921,"lon":9.4993015},{"lat":47.0637967,"lon":9.4992584},{"lat":47.0638199,"lon":9.4992638},{"lat":47.0638306,"lon":9.4991636}]},{"type":"way","id":4064,"tags":{"building":"yes"},"nodes":[49785,49737,49747,49721,49748,49758,49769,49760,49771,49787,49791,49797,49807,49856,49844,49834,49813,49795,49785],"geometry":[{"lat":47.0679306,"lon":9.5017205},{"lat":47.067852,"lon":9.5017486},{"lat":47.0678621,"lon":9.5017889},{"lat":47.0678283,"lon":9.5018117},{"lat":47.0678621,"lon":9.5018814},{"lat":47.0678813,"lon":9.5018626},{"lat":47.0679032,"lon":9.5019619},{"lat":47.0678831,"lon":9.5019806},{"lat":47.0679041,"lon":9.502037},{"lat":47.0679324,"lon":9.5020303},{"lat":47.0679425,"lon":9.5020571},{"lat":47.0679543,"lon":9.502041},{"lat":47.0679662,"lon":9.5021161},{"lat":47.0680475,"lon":9.5020678},{"lat":47.0680283,"lon":9.5019806},{"lat":47.0680091,"lon":9.5019954},{"lat":47.0679699,"lon":9.5018076},{"lat":47.0679479,"lon":9.501821},{"lat":47.0679306,"lon":9.5017205}]},{"type":"way","id":4065,"tags":{"building":"yes"},"nodes":[47602,47452,47552,47612,47643,47586,47620,47721,47782,47726,47747,47859,47830,47799,47730,47684,47656,47697,47602],"geometry":[{"lat":47.0644622,"lon":9.5069237},{"lat":47.0642631,"lon":9.5070846},{"lat":47.0643928,"lon":9.5073877},{"lat":47.0644732,"lon":9.5073153},{"lat":47.0645188,"lon":9.5074119},{"lat":47.0644439,"lon":9.507487},{"lat":47.0644841,"lon":9.5075996},{"lat":47.0646157,"lon":9.5075192},{"lat":47.0646723,"lon":9.5076667},{"lat":47.0646175,"lon":9.507715},{"lat":47.0646394,"lon":9.5078222},{"lat":47.0647692,"lon":9.5077284},{"lat":47.0647253,"lon":9.5075621},{"lat":47.0646924,"lon":9.5074494},{"lat":47.0646212,"lon":9.5073126},{"lat":47.0645773,"lon":9.5073743},{"lat":47.0645408,"lon":9.5072912},{"lat":47.0645901,"lon":9.5072268},{"lat":47.0644622,"lon":9.5069237}]},{"type":"way","id":4066,"tags":{"building":"yes"},"nodes":[44225,44170,44216,44175,44189,44226,44266,44323,44317,44378,44335,44380,44351,44355,44322,44248,44275,44260,44225],"geometry":[{"lat":47.0605602,"lon":9.4964119},{"lat":47.0604935,"lon":9.496487},{"lat":47.0605529,"lon":9.496656},{"lat":47.0605054,"lon":9.4966909},{"lat":47.06052,"lon":9.4967459},{"lat":47.060562,"lon":9.4967164},{"lat":47.0606095,"lon":9.4968411},{"lat":47.0606835,"lon":9.4967861},{"lat":47.0606744,"lon":9.4967553},{"lat":47.0607511,"lon":9.4967204},{"lat":47.0606917,"lon":9.4964911},{"lat":47.0607529,"lon":9.4963516},{"lat":47.0607063,"lon":9.4962899},{"lat":47.0607109,"lon":9.4962711},{"lat":47.0606808,"lon":9.4962229},{"lat":47.0605885,"lon":9.4963583},{"lat":47.0606278,"lon":9.4964803},{"lat":47.0606022,"lon":9.4964951},{"lat":47.0605602,"lon":9.4964119}]},{"type":"way","id":4068,"tags":{"building":"yes"},"nodes":[50958,50939,50953,50947,50951,50963,50977,50964,50973,50987,51001,51020,51015,51019,51010,50997,50994,51005,50989,50968,50958],"geometry":[{"lat":47.069952,"lon":9.5046454},{"lat":47.0699086,"lon":9.504676},{"lat":47.0699427,"lon":9.5047801},{"lat":47.0699158,"lon":9.5047991},{"lat":47.0699312,"lon":9.5048462},{"lat":47.0699583,"lon":9.504827},{"lat":47.0699855,"lon":9.5049101},{"lat":47.0699592,"lon":9.5049287},{"lat":47.0699783,"lon":9.504987},{"lat":47.0700075,"lon":9.5049664},{"lat":47.07005,"lon":9.5050962},{"lat":47.0701124,"lon":9.5050521},{"lat":47.0700862,"lon":9.5049723},{"lat":47.0701076,"lon":9.5049572},{"lat":47.0700722,"lon":9.5048489},{"lat":47.0700425,"lon":9.5048699},{"lat":47.0700286,"lon":9.5048276},{"lat":47.0700585,"lon":9.5048065},{"lat":47.0700106,"lon":9.5046602},{"lat":47.069967,"lon":9.504691},{"lat":47.069952,"lon":9.5046454}]},{"type":"way","id":4069,"tags":{"building":"yes"},"nodes":[45634,45668,45655,45717,45695,45712,45720,45745,45727,45765,45731,45697,45721,45684,45703,45683,45644,45577,45594,45588,45634],"geometry":[{"lat":47.0621766,"lon":9.4926669},{"lat":47.0622134,"lon":9.492723},{"lat":47.0621999,"lon":9.4927421},{"lat":47.0622605,"lon":9.4928343},{"lat":47.0622371,"lon":9.4928675},{"lat":47.0622525,"lon":9.4928909},{"lat":47.0622637,"lon":9.4928751},{"lat":47.062288,"lon":9.492912},{"lat":47.0622698,"lon":9.4929377},{"lat":47.0623128,"lon":9.4930031},{"lat":47.0622713,"lon":9.4930619},{"lat":47.0622402,"lon":9.4930145},{"lat":47.0622656,"lon":9.4929785},{"lat":47.062231,"lon":9.4929259},{"lat":47.062243,"lon":9.4929089},{"lat":47.0622307,"lon":9.4928902},{"lat":47.0621887,"lon":9.4929495},{"lat":47.0620973,"lon":9.4928105},{"lat":47.0621217,"lon":9.4927759},{"lat":47.0621111,"lon":9.4927597},{"lat":47.0621766,"lon":9.4926669}]},{"type":"way","id":4070,"tags":{"building":"yes"},"nodes":[43430,43372,43376,43369,43384,43413,43443,43431,43416,43398,43433,43470,43477,43510,43475,43461,43440,43442,43426,43435,43439,43430],"geometry":[{"lat":47.0594267,"lon":9.4978809},{"lat":47.0592897,"lon":9.4981607},{"lat":47.0593007,"lon":9.4981749},{"lat":47.0592748,"lon":9.4982166},{"lat":47.0593175,"lon":9.4982612},{"lat":47.0593879,"lon":9.4981284},{"lat":47.0594467,"lon":9.4982176},{"lat":47.0594286,"lon":9.498264},{"lat":47.0593911,"lon":9.4982261},{"lat":47.0593453,"lon":9.4983171},{"lat":47.0594357,"lon":9.4984319},{"lat":47.0595106,"lon":9.4982451},{"lat":47.0595274,"lon":9.4982593},{"lat":47.0595752,"lon":9.4981426},{"lat":47.0595197,"lon":9.4980772},{"lat":47.0594932,"lon":9.4981151},{"lat":47.0594422,"lon":9.498044},{"lat":47.0594467,"lon":9.4980326},{"lat":47.0594137,"lon":9.4979909},{"lat":47.059437,"lon":9.4979445},{"lat":47.0594422,"lon":9.4978951},{"lat":47.0594267,"lon":9.4978809}]},{"type":"way","id":4071,"tags":{"building":"yes"},"nodes":[48828,48784,48788,48793,48801,48781,48774,48761,48766,48800,48797,48886,48889,48965,48955,48925,48924,48929,48922,48880,48883,48830,48828],"geometry":[{"lat":47.0663088,"lon":9.50375},{"lat":47.0662068,"lon":9.5037807},{"lat":47.0662221,"lon":9.5039667},{"lat":47.0662377,"lon":9.503964},{"lat":47.066254,"lon":9.5041086},{"lat":47.0661921,"lon":9.5041238},{"lat":47.0661989,"lon":9.5041552},{"lat":47.0661678,"lon":9.5041697},{"lat":47.066174,"lon":9.5042179},{"lat":47.0662661,"lon":9.5041964},{"lat":47.0662584,"lon":9.5041249},{"lat":47.0664195,"lon":9.5040871},{"lat":47.0664255,"lon":9.5041286},{"lat":47.0665561,"lon":9.5040938},{"lat":47.0665378,"lon":9.5039167},{"lat":47.0664871,"lon":9.5039295},{"lat":47.0664844,"lon":9.5038725},{"lat":47.0664958,"lon":9.5038624},{"lat":47.0664812,"lon":9.5036686},{"lat":47.0664086,"lon":9.5036908},{"lat":47.0664141,"lon":9.5037846},{"lat":47.0663131,"lon":9.5038034},{"lat":47.0663088,"lon":9.50375}]},{"type":"way","id":4072,"tags":{"building":"yes"},"nodes":[50187,50146,50133,50043,50035,49917,49925,49912,49904,49907,49887,49906,49936,49931,49952,49944,50014,50020,50094,50158,50194,50187],"geometry":[{"lat":47.0685444,"lon":9.5079516},{"lat":47.0684896,"lon":9.5079636},{"lat":47.0684796,"lon":9.5078926},{"lat":47.0683316,"lon":9.5079341},{"lat":47.068317,"lon":9.5078711},{"lat":47.0681279,"lon":9.5079207},{"lat":47.0681361,"lon":9.508024},{"lat":47.0681215,"lon":9.5080267},{"lat":47.0681105,"lon":9.5080374},{"lat":47.0681124,"lon":9.5080575},{"lat":47.0680914,"lon":9.5080629},{"lat":47.0681115,"lon":9.5082278},{"lat":47.0681617,"lon":9.5082037},{"lat":47.068148,"lon":9.508087},{"lat":47.0681891,"lon":9.5080736},{"lat":47.0681809,"lon":9.5080066},{"lat":47.0682914,"lon":9.5079824},{"lat":47.0682987,"lon":9.5080642},{"lat":47.0684102,"lon":9.5080361},{"lat":47.0684997,"lon":9.5080267},{"lat":47.0685545,"lon":9.5080159},{"lat":47.0685444,"lon":9.5079516}]},{"type":"way","id":4073,"tags":{"building":"yes"},"nodes":[49555,49511,49524,49504,49500,49451,49467,49440,49428,49254,49290,49420,49406,49485,49516,49592,49561,49611,49594,49570,49564,49572,49555],"geometry":[{"lat":47.0675621,"lon":9.5017731},{"lat":47.067488,"lon":9.5018085},{"lat":47.0675026,"lon":9.5018744},{"lat":47.0674734,"lon":9.5018883},{"lat":47.067468,"lon":9.5018639},{"lat":47.0673789,"lon":9.5019064},{"lat":47.0674114,"lon":9.5020532},{"lat":47.0673618,"lon":9.5020768},{"lat":47.0673371,"lon":9.5019652},{"lat":47.0670314,"lon":9.5021111},{"lat":47.0671029,"lon":9.5024339},{"lat":47.0673198,"lon":9.5023304},{"lat":47.067288,"lon":9.5021869},{"lat":47.0674423,"lon":9.5021133},{"lat":47.0674951,"lon":9.5023518},{"lat":47.0676209,"lon":9.5022918},{"lat":47.0675745,"lon":9.5020826},{"lat":47.0676559,"lon":9.5020437},{"lat":47.0676293,"lon":9.5019237},{"lat":47.0675871,"lon":9.5019438},{"lat":47.0675771,"lon":9.5018986},{"lat":47.0675887,"lon":9.5018931},{"lat":47.0675621,"lon":9.5017731}]},{"type":"way","id":4074,"tags":{"building":"church"},"nodes":[25196,48346,25158,25122,48177,48181,48134,48116,48102,48097,48088,48072,48065,48054,48066,48076,48080,48070,48112,48125,48277,8634,48255,48307,53481,25196],"geometry":[{"lat":47.0655452,"lon":9.5022202},{"lat":47.0655329,"lon":9.5022249},{"lat":47.0655432,"lon":9.5022525},{"lat":47.0653155,"lon":9.5023915},{"lat":47.065259,"lon":9.5024255},{"lat":47.0652674,"lon":9.5024464},{"lat":47.0651936,"lon":9.5024872},{"lat":47.0651703,"lon":9.5024159},{"lat":47.0651567,"lon":9.5024226},{"lat":47.0651483,"lon":9.5023922},{"lat":47.0651302,"lon":9.5023931},{"lat":47.0651088,"lon":9.5023798},{"lat":47.0650998,"lon":9.5023523},{"lat":47.0650926,"lon":9.5023209},{"lat":47.0651004,"lon":9.5022876},{"lat":47.0651179,"lon":9.5022563},{"lat":47.065125,"lon":9.5022449},{"lat":47.065107,"lon":9.5021617},{"lat":47.0651727,"lon":9.5021244},{"lat":47.065182,"lon":9.502165},{"lat":47.0654241,"lon":9.5020187},{"lat":47.0654166,"lon":9.5019778},{"lat":47.0654001,"lon":9.5019103},{"lat":47.0654622,"lon":9.5018826},{"lat":47.0654812,"lon":9.5019529},{"lat":47.0655452,"lon":9.5022202}]},{"type":"way","id":4075,"tags":{"building":"yes"},"nodes":[49809,49740,49754,49800,49810,49774,49779,49811,49817,49796,49789,49770,49768,49822,49830,49853,49867,49848,49849,49862,49852,49820,49809],"geometry":[{"lat":47.0679677,"lon":9.507597},{"lat":47.0678562,"lon":9.5076198},{"lat":47.0678717,"lon":9.5077472},{"lat":47.0679594,"lon":9.507723},{"lat":47.0679677,"lon":9.507896},{"lat":47.0679156,"lon":9.5079148},{"lat":47.0679192,"lon":9.5079591},{"lat":47.0679686,"lon":9.5079376},{"lat":47.067975,"lon":9.5081522},{"lat":47.0679503,"lon":9.5081428},{"lat":47.0679339,"lon":9.5083171},{"lat":47.0679037,"lon":9.5083131},{"lat":47.0679019,"lon":9.5083748},{"lat":47.0679868,"lon":9.5083869},{"lat":47.0679951,"lon":9.5083279},{"lat":47.0680462,"lon":9.5083306},{"lat":47.0680617,"lon":9.5081576},{"lat":47.068038,"lon":9.5081589},{"lat":47.0680398,"lon":9.5080476},{"lat":47.0680554,"lon":9.5080395},{"lat":47.0680462,"lon":9.5076895},{"lat":47.0679841,"lon":9.5076882},{"lat":47.0679677,"lon":9.507597}]},{"type":"way","id":4076,"tags":{"building":"yes"},"nodes":[43578,43523,43531,43536,43548,43568,43595,43597,43570,43581,43565,43572,43589,43606,43700,43686,43706,43666,43652,43634,43621,43605,43588,43578],"geometry":[{"lat":47.0596798,"lon":9.498506},{"lat":47.0595903,"lon":9.4984672},{"lat":47.0596031,"lon":9.4983585},{"lat":47.0596177,"lon":9.4983652},{"lat":47.0596369,"lon":9.4983049},{"lat":47.0596679,"lon":9.498317},{"lat":47.0597081,"lon":9.4981761},{"lat":47.0597091,"lon":9.4981413},{"lat":47.0596698,"lon":9.4981171},{"lat":47.0596844,"lon":9.4980742},{"lat":47.0596625,"lon":9.4980608},{"lat":47.0596707,"lon":9.4980152},{"lat":47.0596963,"lon":9.4980206},{"lat":47.0597264,"lon":9.4978985},{"lat":47.0598461,"lon":9.4979562},{"lat":47.059826,"lon":9.4980581},{"lat":47.0598534,"lon":9.4980782},{"lat":47.059805,"lon":9.4982687},{"lat":47.0597895,"lon":9.4982539},{"lat":47.0597703,"lon":9.4983357},{"lat":47.0597511,"lon":9.498329},{"lat":47.0597255,"lon":9.4984108},{"lat":47.0596944,"lon":9.4983894},{"lat":47.0596798,"lon":9.498506}]},{"type":"way","id":4077,"tags":{"building":"yes"},"nodes":[43314,43310,43355,43360,43387,43383,43422,43414,43445,43432,43467,43471,43501,43516,43481,43495,43469,43450,43446,43425,43429,43396,43394,43314],"geometry":[{"lat":47.0591303,"lon":9.4990421},{"lat":47.0591239,"lon":9.498912},{"lat":47.0592354,"lon":9.4988959},{"lat":47.0592445,"lon":9.4989321},{"lat":47.0593221,"lon":9.4989013},{"lat":47.0593157,"lon":9.4988476},{"lat":47.0594035,"lon":9.4988329},{"lat":47.0593888,"lon":9.4987819},{"lat":47.0594501,"lon":9.4987538},{"lat":47.059429,"lon":9.4986411},{"lat":47.059504,"lon":9.4986022},{"lat":47.0595122,"lon":9.498625},{"lat":47.0595624,"lon":9.4986036},{"lat":47.0595816,"lon":9.4987015},{"lat":47.0595304,"lon":9.4987229},{"lat":47.0595469,"lon":9.4988463},{"lat":47.0595094,"lon":9.4988946},{"lat":47.0594674,"lon":9.498916},{"lat":47.0594501,"lon":9.4988409},{"lat":47.0594135,"lon":9.4988624},{"lat":47.0594236,"lon":9.4989817},{"lat":47.0593386,"lon":9.4990113},{"lat":47.0593368,"lon":9.4990434},{"lat":47.0591303,"lon":9.4990421}]},{"type":"way","id":4078,"tags":{"building":"yes"},"nodes":[44939,44854,44890,44841,44892,44816,44851,44935,44912,44934,44921,44949,45003,44981,44917,44946,45012,45001,45024,45060,45008,44954,44925,44976,44939],"geometry":[{"lat":47.0613593,"lon":9.4965721},{"lat":47.0612663,"lon":9.496665},{"lat":47.0613012,"lon":9.4967371},{"lat":47.061256,"lon":9.4967883},{"lat":47.0613025,"lon":9.4968851},{"lat":47.0612198,"lon":9.4969723},{"lat":47.0612637,"lon":9.4970671},{"lat":47.0613516,"lon":9.4969704},{"lat":47.0613283,"lon":9.4969306},{"lat":47.0613516,"lon":9.4969097},{"lat":47.0613374,"lon":9.496868},{"lat":47.0613722,"lon":9.4968357},{"lat":47.0614304,"lon":9.4969837},{"lat":47.0614084,"lon":9.4970216},{"lat":47.0613322,"lon":9.4970766},{"lat":47.0613697,"lon":9.4971752},{"lat":47.061442,"lon":9.4971108},{"lat":47.0614278,"lon":9.4970425},{"lat":47.0614524,"lon":9.4970197},{"lat":47.0615157,"lon":9.4969401},{"lat":47.061433,"lon":9.4967788},{"lat":47.061376,"lon":9.4968207},{"lat":47.0613411,"lon":9.4967297},{"lat":47.0614019,"lon":9.4966643},{"lat":47.0613593,"lon":9.4965721}]},{"type":"way","id":4080,"tags":{"building":"yes"},"nodes":[47905,47867,47862,47838,47844,47761,47858,47809,47846,47881,47938,48000,48005,48032,48024,48084,48056,47994,47942,48002,47975,47922,47887,47928,47905],"geometry":[{"lat":47.0648666,"lon":9.4976034},{"lat":47.0647824,"lon":9.4976665},{"lat":47.0647702,"lon":9.4976314},{"lat":47.0647387,"lon":9.4976549},{"lat":47.0647465,"lon":9.4976774},{"lat":47.0646509,"lon":9.497749},{"lat":47.0647657,"lon":9.4980793},{"lat":47.0647053,"lon":9.4981246},{"lat":47.0647486,"lon":9.498249},{"lat":47.0648112,"lon":9.4982022},{"lat":47.0649269,"lon":9.4985351},{"lat":47.0650157,"lon":9.4984686},{"lat":47.0650221,"lon":9.4984873},{"lat":47.0650599,"lon":9.4984591},{"lat":47.0650467,"lon":9.4984213},{"lat":47.0651279,"lon":9.4983605},{"lat":47.0650935,"lon":9.4982616},{"lat":47.0650091,"lon":9.4983249},{"lat":47.0649344,"lon":9.4981102},{"lat":47.0650194,"lon":9.4980465},{"lat":47.0649801,"lon":9.4979335},{"lat":47.0648955,"lon":9.4979969},{"lat":47.0648202,"lon":9.4977803},{"lat":47.0649058,"lon":9.4977162},{"lat":47.0648666,"lon":9.4976034}]},{"type":"way","id":4081,"tags":{"building":"yes"},"nodes":[49075,49044,49051,48987,48998,49035,49054,49017,49037,49095,49117,49127,49140,49103,49110,49093,49104,49151,49143,49183,49159,49116,49100,49135,49126,49090,49081,49105,49102,49131,49124,49091,49075],"geometry":[{"lat":47.0667186,"lon":9.5082636},{"lat":47.0666756,"lon":9.5082834},{"lat":47.0666888,"lon":9.5083451},{"lat":47.0665962,"lon":9.5083877},{"lat":47.0666145,"lon":9.5084732},{"lat":47.0666597,"lon":9.5084525},{"lat":47.0666936,"lon":9.5086115},{"lat":47.0666433,"lon":9.5086346},{"lat":47.0666602,"lon":9.5087142},{"lat":47.0667451,"lon":9.5086752},{"lat":47.0667691,"lon":9.5087875},{"lat":47.0667824,"lon":9.5087814},{"lat":47.0668135,"lon":9.5089272},{"lat":47.0667504,"lon":9.5089562},{"lat":47.066758,"lon":9.5089916},{"lat":47.0667425,"lon":9.5089988},{"lat":47.0667508,"lon":9.5090377},{"lat":47.0668362,"lon":9.5089984},{"lat":47.0668258,"lon":9.5089493},{"lat":47.0669091,"lon":9.508911},{"lat":47.0668509,"lon":9.5086378},{"lat":47.0667689,"lon":9.5086754},{"lat":47.0667472,"lon":9.5085739},{"lat":47.0667948,"lon":9.5085521},{"lat":47.0667798,"lon":9.5084818},{"lat":47.0667329,"lon":9.5085032},{"lat":47.0667214,"lon":9.5084437},{"lat":47.0667537,"lon":9.5084248},{"lat":47.0667496,"lon":9.5084125},{"lat":47.0667891,"lon":9.508391},{"lat":47.0667787,"lon":9.5083285},{"lat":47.0667357,"lon":9.5083471},{"lat":47.0667186,"lon":9.5082636}]},{"type":"way","id":4082,"tags":{"building":"yes"},"nodes":[51645,51619,51625,51649,51645],"geometry":[{"lat":47.0718421,"lon":9.5090657},{"lat":47.0717372,"lon":9.509033},{"lat":47.0717556,"lon":9.508906},{"lat":47.0718605,"lon":9.5089388},{"lat":47.0718421,"lon":9.5090657}]},{"type":"way","id":4083,"tags":{"building":"yes"},"nodes":[47516,47535,47497,47476,47516],"geometry":[{"lat":47.0643468,"lon":9.4977084},{"lat":47.0643705,"lon":9.4977758},{"lat":47.0643223,"lon":9.4978122},{"lat":47.0642987,"lon":9.4977448},{"lat":47.0643468,"lon":9.4977084}]},{"type":"way","id":4084,"tags":{"building":"yes"},"nodes":[44974,44880,44860,44957,44974],"geometry":[{"lat":47.0614001,"lon":9.5119944},{"lat":47.0612922,"lon":9.5119411},{"lat":47.0612717,"lon":9.5120304},{"lat":47.0613797,"lon":9.5120838},{"lat":47.0614001,"lon":9.5119944}]},{"type":"way","id":4085,"tags":{"building":"yes"},"nodes":[51591,51542,51537,51589,51591],"geometry":[{"lat":47.0715243,"lon":9.5089063},{"lat":47.071413,"lon":9.5088955},{"lat":47.0714071,"lon":9.5090245},{"lat":47.0715185,"lon":9.5090354},{"lat":47.0715243,"lon":9.5089063}]},{"type":"way","id":4086,"tags":{"building":"yes"},"nodes":[48690,48483,48510,48714,48690],"geometry":[{"lat":47.0660416,"lon":9.4990929},{"lat":47.0657463,"lon":9.4992886},{"lat":47.0657878,"lon":9.4994235},{"lat":47.0660831,"lon":9.4992278},{"lat":47.0660416,"lon":9.4990929}]},{"type":"way","id":4089,"tags":{"building":"yes"},"nodes":[45349,45120,45159,45382,45349],"geometry":[{"lat":47.0618353,"lon":9.5101471},{"lat":47.0615979,"lon":9.5103002},{"lat":47.0616343,"lon":9.5104221},{"lat":47.0618718,"lon":9.510269},{"lat":47.0618353,"lon":9.5101471}]},{"type":"way","id":4091,"tags":{"building":"yes"},"nodes":[49198,49169,49168,49197,49198],"geometry":[{"lat":47.0669497,"lon":9.5078615},{"lat":47.0668728,"lon":9.5078644},{"lat":47.0668712,"lon":9.507771},{"lat":47.0669481,"lon":9.5077681},{"lat":47.0669497,"lon":9.5078615}]},{"type":"way","id":4092,"tags":{"building":"yes"},"nodes":[45567,45470,45536,45613,45567],"geometry":[{"lat":47.062085,"lon":9.4966101},{"lat":47.0619774,"lon":9.4967096},{"lat":47.0620402,"lon":9.4968561},{"lat":47.0621478,"lon":9.4967566},{"lat":47.062085,"lon":9.4966101}]},{"type":"way","id":4094,"tags":{"building":"yes"},"nodes":[46838,46776,46839,46882,46838],"geometry":[{"lat":47.0634247,"lon":9.5130178},{"lat":47.0633648,"lon":9.5130913},{"lat":47.0634264,"lon":9.5131996},{"lat":47.0634863,"lon":9.5131261},{"lat":47.0634247,"lon":9.5130178}]},{"type":"way","id":4095,"tags":{"building":"yes"},"nodes":[50232,50153,50202,50305,50232],"geometry":[{"lat":47.0686236,"lon":9.4978158},{"lat":47.0684935,"lon":9.4979122},{"lat":47.0685727,"lon":9.4981424},{"lat":47.0687027,"lon":9.498046},{"lat":47.0686236,"lon":9.4978158}]},{"type":"way","id":4096,"tags":{"building":"yes"},"nodes":[46393,46329,46346,46421,46393],"geometry":[{"lat":47.0630167,"lon":9.5131744},{"lat":47.0629436,"lon":9.5132052},{"lat":47.0629703,"lon":9.5133414},{"lat":47.0630433,"lon":9.5133106},{"lat":47.0630167,"lon":9.5131744}]},{"type":"way","id":4097,"tags":{"building":"yes"},"nodes":[49060,48991,48977,49047,49060],"geometry":[{"lat":47.0666996,"lon":9.5118647},{"lat":47.0665995,"lon":9.5118961},{"lat":47.0665824,"lon":9.5117787},{"lat":47.0666825,"lon":9.5117473},{"lat":47.0666996,"lon":9.5118647}]},{"type":"way","id":4098,"tags":{"building":"yes"},"nodes":[49579,49647,49221,49171,49579],"geometry":[{"lat":47.0675972,"lon":9.4987555},{"lat":47.0677044,"lon":9.4990783},{"lat":47.0669818,"lon":9.4995957},{"lat":47.0668746,"lon":9.499273},{"lat":47.0675972,"lon":9.4987555}]},{"type":"way","id":4100,"tags":{"building":"yes"},"nodes":[47159,47059,47076,47173,47159],"geometry":[{"lat":47.0638414,"lon":9.5116811},{"lat":47.0637201,"lon":9.5117363},{"lat":47.0637435,"lon":9.511847},{"lat":47.0638648,"lon":9.5117918},{"lat":47.0638414,"lon":9.5116811}]},{"type":"way","id":4101,"tags":{"building":"yes"},"nodes":[49981,49896,49928,50001,49981],"geometry":[{"lat":47.068237,"lon":9.5029615},{"lat":47.0681043,"lon":9.503025},{"lat":47.0681424,"lon":9.5031964},{"lat":47.068275,"lon":9.5031329},{"lat":47.068237,"lon":9.5029615}]},{"type":"way","id":4102,"tags":{"building":"yes"},"nodes":[49699,49652,49679,49725,49699],"geometry":[{"lat":47.0677923,"lon":9.5037764},{"lat":47.0677135,"lon":9.5038175},{"lat":47.0677626,"lon":9.5040203},{"lat":47.0678414,"lon":9.5039792},{"lat":47.0677923,"lon":9.5037764}]},{"type":"way","id":4103,"tags":{"building":"yes"},"nodes":[51877,51888,51896,51884,51877],"geometry":[{"lat":47.0734729,"lon":9.5088926},{"lat":47.0735679,"lon":9.5089785},{"lat":47.0736228,"lon":9.5088476},{"lat":47.0735279,"lon":9.5087617},{"lat":47.0734729,"lon":9.5088926}]},{"type":"way","id":4104,"tags":{"building":"yes"},"nodes":[48390,48336,48370,48424,48390],"geometry":[{"lat":47.0655947,"lon":9.5123214},{"lat":47.0655171,"lon":9.5121986},{"lat":47.0655734,"lon":9.5121218},{"lat":47.0656511,"lon":9.5122447},{"lat":47.0655947,"lon":9.5123214}]},{"type":"way","id":4105,"tags":{"building":"yes"},"nodes":[46151,46081,46112,46192,46151],"geometry":[{"lat":47.062734,"lon":9.4953566},{"lat":47.0626397,"lon":9.4954315},{"lat":47.0626816,"lon":9.4955453},{"lat":47.062776,"lon":9.4954703},{"lat":47.062734,"lon":9.4953566}]},{"type":"way","id":4106,"tags":{"building":"yes"},"nodes":[45789,45669,45692,45812,45789],"geometry":[{"lat":47.0623423,"lon":9.4984997},{"lat":47.0622142,"lon":9.4985503},{"lat":47.0622369,"lon":9.4986737},{"lat":47.0623649,"lon":9.4986231},{"lat":47.0623423,"lon":9.4984997}]},{"type":"way","id":4107,"tags":{"building":"yes"},"nodes":[46810,46575,46597,46826,46810],"geometry":[{"lat":47.0633904,"lon":9.5126318},{"lat":47.0631783,"lon":9.5127132},{"lat":47.0632042,"lon":9.5128451},{"lat":47.0634125,"lon":9.5127556},{"lat":47.0633904,"lon":9.5126318}]},{"type":"way","id":4110,"tags":{"building":"yes"},"nodes":[46234,46158,46199,46271,46234],"geometry":[{"lat":47.0628288,"lon":9.497449},{"lat":47.0627388,"lon":9.4975439},{"lat":47.0627842,"lon":9.4976368},{"lat":47.0628742,"lon":9.497542},{"lat":47.0628288,"lon":9.497449}]},{"type":"way","id":4111,"tags":{"building":"yes"},"nodes":[43889,43957,43933,43871,43889],"geometry":[{"lat":47.0601052,"lon":9.4921532},{"lat":47.0601901,"lon":9.4922171},{"lat":47.0601588,"lon":9.4923066},{"lat":47.0600739,"lon":9.4922427},{"lat":47.0601052,"lon":9.4921532}]},{"type":"way","id":4112,"tags":{"building":"yes"},"nodes":[45394,45331,45389,45449,45394],"geometry":[{"lat":47.0618876,"lon":9.4945767},{"lat":47.0618194,"lon":9.4946411},{"lat":47.061878,"lon":9.4947747},{"lat":47.0619462,"lon":9.4947103},{"lat":47.0618876,"lon":9.4945767}]},{"type":"way","id":4113,"tags":{"building":"yes"},"nodes":[48155,48122,48142,48179,48155],"geometry":[{"lat":47.0652299,"lon":9.4968995},{"lat":47.0651801,"lon":9.4969386},{"lat":47.0652123,"lon":9.4970271},{"lat":47.0652622,"lon":9.4969879},{"lat":47.0652299,"lon":9.4968995}]},{"type":"way","id":4114,"tags":{"building":"yes"},"nodes":[47477,47436,47478,47523,47477],"geometry":[{"lat":47.0642988,"lon":9.5084743},{"lat":47.0642419,"lon":9.5085086},{"lat":47.0643005,"lon":9.5087181},{"lat":47.0643574,"lon":9.5086838},{"lat":47.0642988,"lon":9.5084743}]},{"type":"way","id":4115,"tags":{"building":"yes"},"nodes":[49357,49337,49360,49378,49357],"geometry":[{"lat":47.0672166,"lon":9.5042842},{"lat":47.0671819,"lon":9.5043304},{"lat":47.06722,"lon":9.5043919},{"lat":47.0672546,"lon":9.5043458},{"lat":47.0672166,"lon":9.5042842}]},{"type":"way","id":4117,"tags":{"building":"yes"},"nodes":[44907,44830,44872,44951,44907],"geometry":[{"lat":47.0613255,"lon":9.4926097},{"lat":47.0612366,"lon":9.4926648},{"lat":47.061285,"lon":9.4928331},{"lat":47.0613739,"lon":9.492778},{"lat":47.0613255,"lon":9.4926097}]},{"type":"way","id":4118,"tags":{"building":"yes"},"nodes":[48615,48553,48558,48622,48615],"geometry":[{"lat":47.0659332,"lon":9.5109022},{"lat":47.065847,"lon":9.5109337},{"lat":47.065857,"lon":9.5109929},{"lat":47.0659432,"lon":9.5109614},{"lat":47.0659332,"lon":9.5109022}]},{"type":"way","id":4119,"tags":{"building":"yes"},"nodes":[48969,48932,48942,48979,48969],"geometry":[{"lat":47.0665684,"lon":9.507268},{"lat":47.0665012,"lon":9.5072949},{"lat":47.066518,"lon":9.5073855},{"lat":47.0665852,"lon":9.5073585},{"lat":47.0665684,"lon":9.507268}]},{"type":"way","id":4121,"tags":{"building":"yes"},"nodes":[50792,50767,50768,50794,50792],"geometry":[{"lat":47.0695341,"lon":9.5074063},{"lat":47.0694874,"lon":9.5074092},{"lat":47.0694891,"lon":9.5074668},{"lat":47.0695357,"lon":9.5074639},{"lat":47.0695341,"lon":9.5074063}]},{"type":"way","id":4122,"tags":{"building":"yes"},"nodes":[51743,51730,51729,51741,51743],"geometry":[{"lat":47.0723218,"lon":9.5093705},{"lat":47.0722417,"lon":9.509372},{"lat":47.0722411,"lon":9.5093014},{"lat":47.0723212,"lon":9.5092999},{"lat":47.0723218,"lon":9.5093705}]},{"type":"way","id":4123,"tags":{"building":"yes"},"nodes":[45995,45879,45902,46021,45995],"geometry":[{"lat":47.0625502,"lon":9.5134079},{"lat":47.0624206,"lon":9.5134526},{"lat":47.0624441,"lon":9.5135991},{"lat":47.0625737,"lon":9.5135545},{"lat":47.0625502,"lon":9.5134079}]},{"type":"way","id":4125,"tags":{"building":"yes"},"nodes":[44177,44099,44126,44211,44177],"geometry":[{"lat":47.0605073,"lon":9.4989831},{"lat":47.0603976,"lon":9.4990613},{"lat":47.0604366,"lon":9.4991792},{"lat":47.0605463,"lon":9.499101},{"lat":47.0605073,"lon":9.4989831}]},{"type":"way","id":4126,"tags":{"building":"yes"},"nodes":[48654,48530,48548,48676,48654],"geometry":[{"lat":47.0659961,"lon":9.5089974},{"lat":47.0658185,"lon":9.509067},{"lat":47.0658419,"lon":9.5091958},{"lat":47.0660195,"lon":9.5091263},{"lat":47.0659961,"lon":9.5089974}]},{"type":"way","id":4127,"tags":{"building":"yes"},"nodes":[50557,50508,50517,50569,50557],"geometry":[{"lat":47.0691144,"lon":9.5044648},{"lat":47.0690269,"lon":9.5045177},{"lat":47.0690484,"lon":9.5045944},{"lat":47.0691359,"lon":9.5045415},{"lat":47.0691144,"lon":9.5044648}]},{"type":"way","id":4129,"tags":{"building":"yes"},"nodes":[51346,51315,51320,51351,51346],"geometry":[{"lat":47.0708776,"lon":9.5051638},{"lat":47.0707723,"lon":9.5052059},{"lat":47.0707982,"lon":9.5053457},{"lat":47.0709035,"lon":9.5053037},{"lat":47.0708776,"lon":9.5051638}]},{"type":"way","id":4130,"tags":{"building":"yes"},"nodes":[48723,48673,48691,48733,48723],"geometry":[{"lat":47.066095,"lon":9.5120567},{"lat":47.0660167,"lon":9.5120868},{"lat":47.0660439,"lon":9.5122222},{"lat":47.0661187,"lon":9.5121936},{"lat":47.066095,"lon":9.5120567}]},{"type":"way","id":4136,"tags":{"building":"yes"},"nodes":[45732,45657,45690,45763,45732],"geometry":[{"lat":47.0622719,"lon":9.4976005},{"lat":47.0622014,"lon":9.4976626},{"lat":47.0622365,"lon":9.4977486},{"lat":47.0623071,"lon":9.4976865},{"lat":47.0622719,"lon":9.4976005}]},{"type":"way","id":4137,"tags":{"building":"yes"},"nodes":[46899,46872,46909,46934,46899],"geometry":[{"lat":47.0635088,"lon":9.4943278},{"lat":47.0634716,"lon":9.4943532},{"lat":47.0635183,"lon":9.4945006},{"lat":47.0635555,"lon":9.4944752},{"lat":47.0635088,"lon":9.4943278}]},{"type":"way","id":4138,"tags":{"building":"yes"},"nodes":[48312,48210,48230,48326,48312],"geometry":[{"lat":47.0654655,"lon":9.5085718},{"lat":47.0653266,"lon":9.5086595},{"lat":47.0653565,"lon":9.5087614},{"lat":47.0654953,"lon":9.5086738},{"lat":47.0654655,"lon":9.5085718}]},{"type":"way","id":4139,"tags":{"building":"yes"},"nodes":[49949,49870,49905,49975,49949],"geometry":[{"lat":47.0681873,"lon":9.5108935},{"lat":47.0680736,"lon":9.5109569},{"lat":47.0681107,"lon":9.5111002},{"lat":47.0682244,"lon":9.5110367},{"lat":47.0681873,"lon":9.5108935}]},{"type":"way","id":4140,"tags":{"building":"yes"},"nodes":[51066,51031,51024,51059,51066],"geometry":[{"lat":47.0702385,"lon":9.5089788},{"lat":47.0701323,"lon":9.5089513},{"lat":47.0701191,"lon":9.5090613},{"lat":47.0702253,"lon":9.5090888},{"lat":47.0702385,"lon":9.5089788}]},{"type":"way","id":4141,"tags":{"building":"yes"},"nodes":[47824,47793,47808,47834,47824],"geometry":[{"lat":47.064718,"lon":9.4957956},{"lat":47.0646868,"lon":9.4958157},{"lat":47.0647051,"lon":9.4958771},{"lat":47.0647364,"lon":9.4958571},{"lat":47.064718,"lon":9.4957956}]},{"type":"way","id":4142,"tags":{"building":"yes"},"nodes":[51809,51815,51812,51799,51809],"geometry":[{"lat":47.0728917,"lon":9.5106777},{"lat":47.0730149,"lon":9.510809},{"lat":47.0729419,"lon":9.5109567},{"lat":47.0728187,"lon":9.5108254},{"lat":47.0728917,"lon":9.5106777}]},{"type":"way","id":4144,"tags":{"building":"yes"},"nodes":[48614,48514,48537,48635,48614],"geometry":[{"lat":47.0659302,"lon":9.5032018},{"lat":47.0657964,"lon":9.5032596},{"lat":47.0658265,"lon":9.5034097},{"lat":47.0659603,"lon":9.5033519},{"lat":47.0659302,"lon":9.5032018}]},{"type":"way","id":4146,"tags":{"building":"yes"},"nodes":[49452,49410,49422,49466,49452],"geometry":[{"lat":47.06738,"lon":9.5113359},{"lat":47.0672898,"lon":9.5113818},{"lat":47.0673208,"lon":9.5115132},{"lat":47.067411,"lon":9.5114673},{"lat":47.06738,"lon":9.5113359}]},{"type":"way","id":4147,"tags":{"building":"yes"},"nodes":[49206,49224,49175,49160,49206],"geometry":[{"lat":47.0669656,"lon":9.5082695},{"lat":47.0669857,"lon":9.5084103},{"lat":47.0668788,"lon":9.5084546},{"lat":47.0668532,"lon":9.5083325},{"lat":47.0669656,"lon":9.5082695}]},{"type":"way","id":4149,"tags":{"building":"yes"},"nodes":[46784,46720,46741,46811,46784],"geometry":[{"lat":47.0633688,"lon":9.4950913},{"lat":47.0633121,"lon":9.4951321},{"lat":47.0633364,"lon":9.4952045},{"lat":47.063393,"lon":9.4951637},{"lat":47.0633688,"lon":9.4950913}]},{"type":"way","id":4150,"tags":{"building":"yes"},"nodes":[46266,46211,46217,46272,46266],"geometry":[{"lat":47.0628686,"lon":9.4985348},{"lat":47.062798,"lon":9.4985442},{"lat":47.0628036,"lon":9.4986352},{"lat":47.0628743,"lon":9.4986258},{"lat":47.0628686,"lon":9.4985348}]},{"type":"way","id":4151,"tags":{"building":"yes"},"nodes":[45358,45310,45359,45413,45358],"geometry":[{"lat":47.0618473,"lon":9.4979939},{"lat":47.0617841,"lon":9.4980423},{"lat":47.0618476,"lon":9.4982211},{"lat":47.0619108,"lon":9.4981727},{"lat":47.0618473,"lon":9.4979939}]},{"type":"way","id":4152,"tags":{"building":"yes"},"nodes":[43458,43490,43459,43436,43458],"geometry":[{"lat":47.0594879,"lon":9.4941858},{"lat":47.0595393,"lon":9.494254},{"lat":47.0594897,"lon":9.4943346},{"lat":47.0594383,"lon":9.4942665},{"lat":47.0594879,"lon":9.4941858}]},{"type":"way","id":4153,"tags":{"building":"yes"},"nodes":[47510,47456,47480,47533,47510],"geometry":[{"lat":47.064336,"lon":9.5096088},{"lat":47.0642701,"lon":9.5096546},{"lat":47.0643037,"lon":9.5097591},{"lat":47.0643696,"lon":9.5097133},{"lat":47.064336,"lon":9.5096088}]},{"type":"way","id":4154,"tags":{"building":"yes"},"nodes":[51345,51317,51323,51354,51345],"geometry":[{"lat":47.0708757,"lon":9.5044926},{"lat":47.0707776,"lon":9.5045611},{"lat":47.0708117,"lon":9.5046664},{"lat":47.0709098,"lon":9.5045979},{"lat":47.0708757,"lon":9.5044926}]},{"type":"way","id":4155,"tags":{"building":"yes"},"nodes":[48085,48034,48073,48120,48085],"geometry":[{"lat":47.0651281,"lon":9.5058669},{"lat":47.0650629,"lon":9.5059319},{"lat":47.0651092,"lon":9.5060323},{"lat":47.0651745,"lon":9.5059673},{"lat":47.0651281,"lon":9.5058669}]},{"type":"way","id":4156,"tags":{"building":"yes"},"nodes":[50547,50497,50501,50553,50547],"geometry":[{"lat":47.0690991,"lon":9.5066608},{"lat":47.0690113,"lon":9.5066773},{"lat":47.0690178,"lon":9.5067528},{"lat":47.0691057,"lon":9.5067363},{"lat":47.0690991,"lon":9.5066608}]},{"type":"way","id":4157,"tags":{"building":"yes"},"nodes":[50640,50582,50564,50610,50640],"geometry":[{"lat":47.0692428,"lon":9.5002768},{"lat":47.0691694,"lon":9.5003309},{"lat":47.0691308,"lon":9.5002181},{"lat":47.0692041,"lon":9.500164},{"lat":47.0692428,"lon":9.5002768}]},{"type":"way","id":4158,"tags":{"building":"yes"},"nodes":[50328,50247,50239,50322,50328],"geometry":[{"lat":47.068739,"lon":9.5059444},{"lat":47.0686414,"lon":9.5059259},{"lat":47.0686329,"lon":9.5060226},{"lat":47.0687306,"lon":9.506041},{"lat":47.068739,"lon":9.5059444}]},{"type":"way","id":4161,"tags":{"building":"yes"},"nodes":[51733,51722,51700,51713,51733],"geometry":[{"lat":47.0722673,"lon":9.5083086},{"lat":47.0722088,"lon":9.5084417},{"lat":47.0721118,"lon":9.5083498},{"lat":47.0721702,"lon":9.5082167},{"lat":47.0722673,"lon":9.5083086}]},{"type":"way","id":4162,"tags":{"building":"yes"},"nodes":[51355,51348,51347,51352,51355],"geometry":[{"lat":47.0709128,"lon":9.5094049},{"lat":47.0708892,"lon":9.5093997},{"lat":47.0708838,"lon":9.5094532},{"lat":47.0709074,"lon":9.5094583},{"lat":47.0709128,"lon":9.5094049}]},{"type":"way","id":4163,"tags":{"building":"yes"},"nodes":[45842,45813,45855,45888,45842],"geometry":[{"lat":47.0623927,"lon":9.4926033},{"lat":47.0623655,"lon":9.4926265},{"lat":47.0624018,"lon":9.492718},{"lat":47.062429,"lon":9.4926948},{"lat":47.0623927,"lon":9.4926033}]},{"type":"way","id":4164,"tags":{"building":"yes"},"nodes":[47469,47422,47454,47514,47469],"geometry":[{"lat":47.0642913,"lon":9.4947485},{"lat":47.0642138,"lon":9.494815},{"lat":47.0642667,"lon":9.4949478},{"lat":47.0643442,"lon":9.4948813},{"lat":47.0642913,"lon":9.4947485}]},{"type":"way","id":4165,"tags":{"building":"yes"},"nodes":[44240,44212,44209,44238,44240],"geometry":[{"lat":47.0605748,"lon":9.4922069},{"lat":47.0605464,"lon":9.4922052},{"lat":47.0605445,"lon":9.4922727},{"lat":47.0605729,"lon":9.4922744},{"lat":47.0605748,"lon":9.4922069}]},{"type":"way","id":4166,"tags":{"building":"yes"},"nodes":[47549,47482,47531,47591,47549],"geometry":[{"lat":47.0643881,"lon":9.5077885},{"lat":47.0643057,"lon":9.507851},{"lat":47.0643682,"lon":9.508029},{"lat":47.0644507,"lon":9.5079665},{"lat":47.0643881,"lon":9.5077885}]},{"type":"way","id":4167,"tags":{"building":"yes"},"nodes":[45004,44938,44967,45035,45004],"geometry":[{"lat":47.0614307,"lon":9.4935876},{"lat":47.0613578,"lon":9.4936181},{"lat":47.0613954,"lon":9.4938121},{"lat":47.0614684,"lon":9.4937816},{"lat":47.0614307,"lon":9.4935876}]},{"type":"way","id":4169,"tags":{"building":"yes"},"nodes":[50664,50583,50575,50655,50664],"geometry":[{"lat":47.0692756,"lon":9.51079},{"lat":47.0691714,"lon":9.5107691},{"lat":47.0691556,"lon":9.510938},{"lat":47.0692598,"lon":9.510959},{"lat":47.0692756,"lon":9.51079}]},{"type":"way","id":4170,"tags":{"building":"yes"},"nodes":[49212,49173,49176,49217,49212],"geometry":[{"lat":47.0669704,"lon":9.508132},{"lat":47.066877,"lon":9.5081412},{"lat":47.0668817,"lon":9.5082428},{"lat":47.0669751,"lon":9.5082335},{"lat":47.0669704,"lon":9.508132}]},{"type":"way","id":4171,"tags":{"building":"yes"},"nodes":[50613,50568,50541,50580,50613],"geometry":[{"lat":47.0692068,"lon":9.5060147},{"lat":47.0691351,"lon":9.5059827},{"lat":47.0690947,"lon":9.5061779},{"lat":47.0691664,"lon":9.5062098},{"lat":47.0692068,"lon":9.5060147}]},{"type":"way","id":4172,"tags":{"building":"yes"},"nodes":[49767,49706,49715,49775,49767],"geometry":[{"lat":47.0679007,"lon":9.5070377},{"lat":47.0678053,"lon":9.5070619},{"lat":47.0678207,"lon":9.5071928},{"lat":47.0679161,"lon":9.5071686},{"lat":47.0679007,"lon":9.5070377}]},{"type":"way","id":4174,"tags":{"building":"yes"},"nodes":[43714,43637,43607,43673,43714],"geometry":[{"lat":47.0598621,"lon":9.4995561},{"lat":47.0597759,"lon":9.4994724},{"lat":47.059727,"lon":9.499581},{"lat":47.0598132,"lon":9.4996647},{"lat":47.0598621,"lon":9.4995561}]},{"type":"way","id":4175,"tags":{"building":"yes"},"nodes":[50652,50588,50626,50676,50652],"geometry":[{"lat":47.0692584,"lon":9.5032358},{"lat":47.069187,"lon":9.5032814},{"lat":47.0692221,"lon":9.5033999},{"lat":47.0692935,"lon":9.5033542},{"lat":47.0692584,"lon":9.5032358}]},{"type":"way","id":4177,"tags":{"building":"yes"},"nodes":[48488,48409,48426,48506,48488],"geometry":[{"lat":47.0657521,"lon":9.5087711},{"lat":47.0656239,"lon":9.5088409},{"lat":47.0656535,"lon":9.5089579},{"lat":47.0657817,"lon":9.5088881},{"lat":47.0657521,"lon":9.5087711}]},{"type":"way","id":4179,"tags":{"building":"yes"},"nodes":[47401,47355,47371,47423,47401],"geometry":[{"lat":47.0641863,"lon":9.5130312},{"lat":47.0641165,"lon":9.5130587},{"lat":47.0641467,"lon":9.513204},{"lat":47.0642142,"lon":9.5131727},{"lat":47.0641863,"lon":9.5130312}]},{"type":"way","id":4180,"tags":{"building":"yes"},"nodes":[45975,45830,45835,45982,45975],"geometry":[{"lat":47.0625279,"lon":9.501001},{"lat":47.0623777,"lon":9.5010199},{"lat":47.0623833,"lon":9.5011612},{"lat":47.0625362,"lon":9.5011439},{"lat":47.0625279,"lon":9.501001}]},{"type":"way","id":4181,"tags":{"building":"yes"},"nodes":[48539,48496,48511,48554,48539],"geometry":[{"lat":47.065827,"lon":9.5071222},{"lat":47.0657619,"lon":9.5071523},{"lat":47.0657879,"lon":9.507273},{"lat":47.0658529,"lon":9.5072429},{"lat":47.065827,"lon":9.5071222}]},{"type":"way","id":4183,"tags":{"building":"yes"},"nodes":[45500,45407,45459,45555,45500],"geometry":[{"lat":47.0620075,"lon":9.5134772},{"lat":47.0619039,"lon":9.5135936},{"lat":47.0619592,"lon":9.5136996},{"lat":47.0620628,"lon":9.5135832},{"lat":47.0620075,"lon":9.5134772}]},{"type":"way","id":4184,"tags":{"building":"yes"},"nodes":[49723,49683,49704,49751,49723],"geometry":[{"lat":47.0678363,"lon":9.5111231},{"lat":47.0677674,"lon":9.5111616},{"lat":47.0677978,"lon":9.5112791},{"lat":47.0678668,"lon":9.5112406},{"lat":47.0678363,"lon":9.5111231}]},{"type":"way","id":4186,"tags":{"building":"yes"},"nodes":[47287,47208,47221,47303,47287],"geometry":[{"lat":47.0640279,"lon":9.5103752},{"lat":47.0639249,"lon":9.5104215},{"lat":47.063949,"lon":9.5105372},{"lat":47.064052,"lon":9.5104908},{"lat":47.0640279,"lon":9.5103752}]},{"type":"way","id":4188,"tags":{"building":"yes"},"nodes":[49238,49222,49229,49241,49238],"geometry":[{"lat":47.067005,"lon":9.5097117},{"lat":47.0669819,"lon":9.5097186},{"lat":47.0669882,"lon":9.5097643},{"lat":47.0670113,"lon":9.5097575},{"lat":47.067005,"lon":9.5097117}]},{"type":"way","id":4190,"tags":{"building":"yes"},"nodes":[45214,45195,45215,45231,45214],"geometry":[{"lat":47.0616828,"lon":9.4978466},{"lat":47.0616669,"lon":9.4978621},{"lat":47.0616848,"lon":9.4979017},{"lat":47.0617007,"lon":9.4978863},{"lat":47.0616828,"lon":9.4978466}]},{"type":"way","id":4191,"tags":{"building":"yes"},"nodes":[47420,47366,47405,47455,47420],"geometry":[{"lat":47.0642108,"lon":9.4929007},{"lat":47.0641322,"lon":9.4929601},{"lat":47.0641885,"lon":9.4931209},{"lat":47.0642672,"lon":9.4930615},{"lat":47.0642108,"lon":9.4929007}]},{"type":"way","id":4192,"tags":{"building":"yes"},"nodes":[45524,45482,45488,45534,45524],"geometry":[{"lat":47.0620316,"lon":9.5004397},{"lat":47.0619854,"lon":9.5004444},{"lat":47.0619918,"lon":9.5005784},{"lat":47.062038,"lon":9.5005736},{"lat":47.0620316,"lon":9.5004397}]},{"type":"way","id":4193,"tags":{"building":"yes"},"nodes":[48260,48195,48220,48306,48260],"geometry":[{"lat":47.0654051,"lon":9.4967635},{"lat":47.0652912,"lon":9.4968482},{"lat":47.0653441,"lon":9.4970015},{"lat":47.065458,"lon":9.4969168},{"lat":47.0654051,"lon":9.4967635}]},{"type":"way","id":4194,"tags":{"building":"yes"},"nodes":[49673,49645,49646,49674,49673],"geometry":[{"lat":47.0677514,"lon":9.5059766},{"lat":47.0677001,"lon":9.5059805},{"lat":47.0677024,"lon":9.5060467},{"lat":47.0677537,"lon":9.5060428},{"lat":47.0677514,"lon":9.5059766}]},{"type":"way","id":4196,"tags":{"building":"yes"},"nodes":[47037,46966,47002,47060,47037],"geometry":[{"lat":47.0636827,"lon":9.5121604},{"lat":47.0635942,"lon":9.5122006},{"lat":47.0636317,"lon":9.5123785},{"lat":47.0637202,"lon":9.5123382},{"lat":47.0636827,"lon":9.5121604}]},{"type":"way","id":4197,"tags":{"building":"yes"},"nodes":[48174,48062,48053,48169,48174],"geometry":[{"lat":47.065253,"lon":9.5104206},{"lat":47.0650974,"lon":9.5104054},{"lat":47.0650924,"lon":9.5105177},{"lat":47.0652479,"lon":9.5105328},{"lat":47.065253,"lon":9.5104206}]},{"type":"way","id":4198,"tags":{"building":"yes"},"nodes":[44760,44692,44681,44750,44760],"geometry":[{"lat":47.0611568,"lon":9.5120711},{"lat":47.0610847,"lon":9.512039},{"lat":47.0610747,"lon":9.5120874},{"lat":47.0611468,"lon":9.5121195},{"lat":47.0611568,"lon":9.5120711}]},{"type":"way","id":4199,"tags":{"building":"yes"},"nodes":[44054,44011,44020,44063,44054],"geometry":[{"lat":47.0603239,"lon":9.4956294},{"lat":47.0602538,"lon":9.4956623},{"lat":47.060267,"lon":9.4957229},{"lat":47.0603371,"lon":9.49569},{"lat":47.0603239,"lon":9.4956294}]},{"type":"way","id":4201,"tags":{"building":"yes"},"nodes":[50624,50552,50548,50619,50624],"geometry":[{"lat":47.069218,"lon":9.5097124},{"lat":47.0691047,"lon":9.5097026},{"lat":47.0690994,"lon":9.5098364},{"lat":47.0692127,"lon":9.5098462},{"lat":47.069218,"lon":9.5097124}]},{"type":"way","id":4202,"tags":{"building":"yes"},"nodes":[47043,46928,46894,47015,47043],"geometry":[{"lat":47.0636875,"lon":9.4925665},{"lat":47.063545,"lon":9.4928661},{"lat":47.063503,"lon":9.492823},{"lat":47.0636455,"lon":9.4925234},{"lat":47.0636875,"lon":9.4925665}]},{"type":"way","id":4203,"tags":{"building":"yes"},"nodes":[49798,49761,49824,49859,49798],"geometry":[{"lat":47.0679553,"lon":9.5024902},{"lat":47.0678916,"lon":9.5025674},{"lat":47.0679897,"lon":9.502742},{"lat":47.0680535,"lon":9.5026648},{"lat":47.0679553,"lon":9.5024902}]},{"type":"way","id":4204,"tags":{"building":"yes"},"nodes":[44303,44224,44251,44327,44303],"geometry":[{"lat":47.0606516,"lon":9.5119536},{"lat":47.0605592,"lon":9.5120024},{"lat":47.0605941,"lon":9.5121448},{"lat":47.0606865,"lon":9.5120961},{"lat":47.0606516,"lon":9.5119536}]},{"type":"way","id":4205,"tags":{"building":"yes"},"nodes":[49697,49672,49677,49703,49697],"geometry":[{"lat":47.0677892,"lon":9.5070768},{"lat":47.0677492,"lon":9.5070957},{"lat":47.0677559,"lon":9.5071262},{"lat":47.0677959,"lon":9.5071072},{"lat":47.0677892,"lon":9.5070768}]},{"type":"way","id":4209,"tags":{"building":"yes"},"nodes":[48276,48206,48225,48296,48276],"geometry":[{"lat":47.0654215,"lon":9.5101259},{"lat":47.0653233,"lon":9.5101658},{"lat":47.0653514,"lon":9.5103148},{"lat":47.0654496,"lon":9.5102749},{"lat":47.0654215,"lon":9.5101259}]},{"type":"way","id":4210,"tags":{"building":"yes"},"nodes":[51130,51085,51072,51116,51130],"geometry":[{"lat":47.0703686,"lon":9.5082951},{"lat":47.0702855,"lon":9.5082547},{"lat":47.0702597,"lon":9.5083693},{"lat":47.0703428,"lon":9.5084097},{"lat":47.0703686,"lon":9.5082951}]},{"type":"way","id":4212,"tags":{"building":"yes"},"nodes":[50996,50916,50941,51017,50996],"geometry":[{"lat":47.0700413,"lon":9.5033323},{"lat":47.0698552,"lon":9.5034513},{"lat":47.0699097,"lon":9.5036351},{"lat":47.0700959,"lon":9.503516},{"lat":47.0700413,"lon":9.5033323}]},{"type":"way","id":4213,"tags":{"building":"yes"},"nodes":[49276,49261,49265,49278,49276],"geometry":[{"lat":47.0670713,"lon":9.5076656},{"lat":47.0670411,"lon":9.5076694},{"lat":47.0670449,"lon":9.507735},{"lat":47.0670751,"lon":9.5077312},{"lat":47.0670713,"lon":9.5076656}]},{"type":"way","id":4214,"tags":{"building":"yes"},"nodes":[49898,49825,49829,49902,49898],"geometry":[{"lat":47.0681063,"lon":9.5062769},{"lat":47.0679912,"lon":9.5062812},{"lat":47.0679938,"lon":9.5064314},{"lat":47.0681089,"lon":9.5064272},{"lat":47.0681063,"lon":9.5062769}]},{"type":"way","id":4215,"tags":{"building":"yes"},"nodes":[47241,47189,47206,47263,47241],"geometry":[{"lat":47.0639667,"lon":9.5127671},{"lat":47.0638944,"lon":9.5127965},{"lat":47.063922,"lon":9.5129428},{"lat":47.0639943,"lon":9.5129134},{"lat":47.0639667,"lon":9.5127671}]},{"type":"way","id":4216,"tags":{"building":"yes"},"nodes":[50511,50420,50415,50510,50511],"geometry":[{"lat":47.0690341,"lon":9.5103389},{"lat":47.0688837,"lon":9.5103262},{"lat":47.0688784,"lon":9.5104605},{"lat":47.0690288,"lon":9.5104732},{"lat":47.0690341,"lon":9.5103389}]},{"type":"way","id":4217,"tags":{"building":"yes"},"nodes":[45412,45356,45397,45454,45412],"geometry":[{"lat":47.0619095,"lon":9.5093349},{"lat":47.0618466,"lon":9.5093654},{"lat":47.0618917,"lon":9.5095666},{"lat":47.0619547,"lon":9.5095362},{"lat":47.0619095,"lon":9.5093349}]},{"type":"way","id":4219,"tags":{"building":"yes"},"nodes":[44289,44198,44217,44308,44289],"geometry":[{"lat":47.0606405,"lon":9.5004287},{"lat":47.0605333,"lon":9.5004572},{"lat":47.0605549,"lon":9.5006323},{"lat":47.0606621,"lon":9.5006037},{"lat":47.0606405,"lon":9.5004287}]},{"type":"way","id":4221,"tags":{"building":"yes"},"nodes":[51769,51765,51762,51768,51769],"geometry":[{"lat":47.0725218,"lon":9.5107245},{"lat":47.0724857,"lon":9.5107144},{"lat":47.0724819,"lon":9.5107436},{"lat":47.072518,"lon":9.5107537},{"lat":47.0725218,"lon":9.5107245}]},{"type":"way","id":4222,"tags":{"building":"yes"},"nodes":[49978,49923,49924,49980,49978],"geometry":[{"lat":47.0682319,"lon":9.5058921},{"lat":47.0681337,"lon":9.5058942},{"lat":47.0681355,"lon":9.5060772},{"lat":47.0682337,"lon":9.5060751},{"lat":47.0682319,"lon":9.5058921}]},{"type":"way","id":4223,"tags":{"building":"yes"},"nodes":[49953,49986,49909,49863,49953],"geometry":[{"lat":47.0681892,"lon":9.4976456},{"lat":47.0682495,"lon":9.4978192},{"lat":47.0681182,"lon":9.4979176},{"lat":47.0680578,"lon":9.497744},{"lat":47.0681892,"lon":9.4976456}]},{"type":"way","id":4224,"tags":{"building":"yes"},"nodes":[49840,49773,49814,49874,49840],"geometry":[{"lat":47.0680189,"lon":9.503056},{"lat":47.0679117,"lon":9.5031011},{"lat":47.0679704,"lon":9.5034023},{"lat":47.0680777,"lon":9.5033572},{"lat":47.0680189,"lon":9.503056}]},{"type":"way","id":4225,"tags":{"building":"yes"},"nodes":[43513,43455,43505,43567,43513],"geometry":[{"lat":47.0595771,"lon":9.4936296},{"lat":47.0594801,"lon":9.4937918},{"lat":47.0595709,"lon":9.4939087},{"lat":47.0596678,"lon":9.4937465},{"lat":47.0595771,"lon":9.4936296}]},{"type":"way","id":4226,"tags":{"building":"yes"},"nodes":[51281,51264,51263,51278,51281],"geometry":[{"lat":47.0706592,"lon":9.5093287},{"lat":47.0706163,"lon":9.5093203},{"lat":47.0706111,"lon":9.5093777},{"lat":47.070654,"lon":9.5093862},{"lat":47.0706592,"lon":9.5093287}]},{"type":"way","id":4227,"tags":{"building":"yes"},"nodes":[48204,48153,48182,48231,48204],"geometry":[{"lat":47.0653218,"lon":9.5054707},{"lat":47.0652295,"lon":9.5055338},{"lat":47.0652685,"lon":9.505657},{"lat":47.0653608,"lon":9.505594},{"lat":47.0653218,"lon":9.5054707}]},{"type":"way","id":4228,"tags":{"building":"yes"},"nodes":[50745,50689,50647,50705,50745],"geometry":[{"lat":47.0694191,"lon":9.5001339},{"lat":47.0693184,"lon":9.5002132},{"lat":47.0692542,"lon":9.5000377},{"lat":47.0693549,"lon":9.4999583},{"lat":47.0694191,"lon":9.5001339}]},{"type":"way","id":4229,"tags":{"building":"yes"},"nodes":[45962,45863,45895,45987,45962],"geometry":[{"lat":47.0625124,"lon":9.4983982},{"lat":47.0624105,"lon":9.4984608},{"lat":47.0624372,"lon":9.4985546},{"lat":47.0625392,"lon":9.498492},{"lat":47.0625124,"lon":9.4983982}]},{"type":"way","id":4230,"tags":{"building":"yes"},"nodes":[47631,47616,47626,47639,47631],"geometry":[{"lat":47.0645,"lon":9.4940919},{"lat":47.0644796,"lon":9.4941042},{"lat":47.0644923,"lon":9.4941493},{"lat":47.0645127,"lon":9.494137},{"lat":47.0645,"lon":9.4940919}]},{"type":"way","id":4232,"tags":{"building":"yes"},"nodes":[45073,45002,45015,45087,45073],"geometry":[{"lat":47.0615391,"lon":9.4941381},{"lat":47.0614279,"lon":9.4941677},{"lat":47.0614462,"lon":9.4943152},{"lat":47.0615573,"lon":9.4942855},{"lat":47.0615391,"lon":9.4941381}]},{"type":"way","id":4233,"tags":{"building":"yes"},"nodes":[45968,45890,45841,45935,45968],"geometry":[{"lat":47.0625207,"lon":9.5115938},{"lat":47.0624323,"lon":9.5115465},{"lat":47.0623926,"lon":9.5117062},{"lat":47.062481,"lon":9.5117535},{"lat":47.0625207,"lon":9.5115938}]},{"type":"way","id":4234,"tags":{"building":"yes"},"nodes":[47218,47078,47031,47176,47218],"geometry":[{"lat":47.0639374,"lon":9.4921942},{"lat":47.063745,"lon":9.4920106},{"lat":47.0636769,"lon":9.4921644},{"lat":47.0638693,"lon":9.492348},{"lat":47.0639374,"lon":9.4921942}]},{"type":"way","id":4235,"tags":{"building":"yes"},"nodes":[49623,49600,49603,49628,49623],"geometry":[{"lat":47.0676696,"lon":9.5093927},{"lat":47.067637,"lon":9.5094057},{"lat":47.0676423,"lon":9.5094343},{"lat":47.0676749,"lon":9.5094213},{"lat":47.0676696,"lon":9.5093927}]},{"type":"way","id":4237,"tags":{"building":"yes"},"nodes":[45753,45708,45738,45777,45753],"geometry":[{"lat":47.0622972,"lon":9.4920498},{"lat":47.0622463,"lon":9.4920902},{"lat":47.0622767,"lon":9.4921731},{"lat":47.0623277,"lon":9.4921327},{"lat":47.0622972,"lon":9.4920498}]},{"type":"way","id":4238,"tags":{"building":"yes"},"nodes":[51694,51688,51687,51692,51694],"geometry":[{"lat":47.0720715,"lon":9.5088025},{"lat":47.0720486,"lon":9.5087989},{"lat":47.0720454,"lon":9.5088429},{"lat":47.0720684,"lon":9.5088464},{"lat":47.0720715,"lon":9.5088025}]},{"type":"way","id":4240,"tags":{"building":"yes"},"nodes":[45406,45381,45415,45446,45406],"geometry":[{"lat":47.0619037,"lon":9.4947849},{"lat":47.0618717,"lon":9.4948177},{"lat":47.0619123,"lon":9.4949031},{"lat":47.0619443,"lon":9.4948703},{"lat":47.0619037,"lon":9.4947849}]},{"type":"way","id":4241,"tags":{"building":"yes"},"nodes":[48011,47992,48007,48022,48011],"geometry":[{"lat":47.065031,"lon":9.4967242},{"lat":47.0650074,"lon":9.4967489},{"lat":47.0650225,"lon":9.49678},{"lat":47.0650461,"lon":9.4967552},{"lat":47.065031,"lon":9.4967242}]},{"type":"way","id":4243,"tags":{"building":"yes"},"nodes":[45859,45802,45818,45876,45859],"geometry":[{"lat":47.0624065,"lon":9.4981299},{"lat":47.0623574,"lon":9.4981641},{"lat":47.0623696,"lon":9.4982021},{"lat":47.0624188,"lon":9.4981679},{"lat":47.0624065,"lon":9.4981299}]},{"type":"way","id":4245,"tags":{"building":"yes"},"nodes":[50688,50628,50658,50706,50688],"geometry":[{"lat":47.0693166,"lon":9.5047103},{"lat":47.0692278,"lon":9.5047651},{"lat":47.069269,"lon":9.504909},{"lat":47.0693578,"lon":9.5048542},{"lat":47.0693166,"lon":9.5047103}]},{"type":"way","id":4246,"tags":{"building":"yes"},"nodes":[50108,50010,50015,50115,50108],"geometry":[{"lat":47.0684444,"lon":9.5094063},{"lat":47.0682856,"lon":9.5094213},{"lat":47.0682915,"lon":9.509555},{"lat":47.0684502,"lon":9.5095401},{"lat":47.0684444,"lon":9.5094063}]},{"type":"way","id":4247,"tags":{"building":"yes"},"nodes":[44397,44354,44402,44461,44397],"geometry":[{"lat":47.0607845,"lon":9.495306},{"lat":47.0607107,"lon":9.4953474},{"lat":47.0607903,"lon":9.4956534},{"lat":47.0608641,"lon":9.495612},{"lat":47.0607845,"lon":9.495306}]},{"type":"way","id":4248,"tags":{"building":"yes"},"nodes":[50576,50540,50560,50592,50576],"geometry":[{"lat":47.0691635,"lon":9.5043126},{"lat":47.0690943,"lon":9.5043567},{"lat":47.0691204,"lon":9.5044449},{"lat":47.0691896,"lon":9.5044007},{"lat":47.0691635,"lon":9.5043126}]},{"type":"way","id":4249,"tags":{"building":"yes"},"nodes":[51446,51395,51405,51460,51446],"geometry":[{"lat":47.0711609,"lon":9.5053023},{"lat":47.0710336,"lon":9.5053543},{"lat":47.071059,"lon":9.5054879},{"lat":47.0711862,"lon":9.5054359},{"lat":47.0711609,"lon":9.5053023}]},{"type":"way","id":4250,"tags":{"building":"yes"},"nodes":[48180,48151,48158,48187,48180],"geometry":[{"lat":47.0652637,"lon":9.4967229},{"lat":47.0652269,"lon":9.4967502},{"lat":47.0652368,"lon":9.496779},{"lat":47.0652736,"lon":9.4967516},{"lat":47.0652637,"lon":9.4967229}]},{"type":"way","id":4253,"tags":{"building":"yes"},"nodes":[48786,48740,48751,53498,48790,48786],"geometry":[{"lat":47.0662292,"lon":9.5031741},{"lat":47.0661227,"lon":9.5032195},{"lat":47.0661399,"lon":9.5033061},{"lat":47.0661441,"lon":9.5033275},{"lat":47.0662505,"lon":9.5032822},{"lat":47.0662292,"lon":9.5031741}]},{"type":"way","id":4254,"tags":{"building":"yes"},"nodes":[51886,51878,51887,51895,51886],"geometry":[{"lat":47.0735399,"lon":9.5113778},{"lat":47.0734803,"lon":9.5115019},{"lat":47.0735604,"lon":9.511585},{"lat":47.0736201,"lon":9.5114609},{"lat":47.0735399,"lon":9.5113778}]},{"type":"way","id":4255,"tags":{"building":"yes"},"nodes":[45820,45739,45694,45779,45820],"geometry":[{"lat":47.0623722,"lon":9.5130573},{"lat":47.0622778,"lon":9.5129925},{"lat":47.0622369,"lon":9.5131207},{"lat":47.0623313,"lon":9.5131855},{"lat":47.0623722,"lon":9.5130573}]},{"type":"way","id":4256,"tags":{"building":"yes"},"nodes":[47630,47563,47584,47650,47630],"geometry":[{"lat":47.0644993,"lon":9.5084636},{"lat":47.0644076,"lon":9.5085269},{"lat":47.0644398,"lon":9.5086276},{"lat":47.0645316,"lon":9.5085642},{"lat":47.0644993,"lon":9.5084636}]},{"type":"way","id":4257,"tags":{"building":"yes"},"nodes":[48359,48273,48293,48373,48359],"geometry":[{"lat":47.0655532,"lon":9.5116825},{"lat":47.0654168,"lon":9.5117444},{"lat":47.0654447,"lon":9.5118773},{"lat":47.0655811,"lon":9.5118154},{"lat":47.0655532,"lon":9.5116825}]},{"type":"way","id":4259,"tags":{"building":"yes"},"nodes":[44886,44873,44882,44897,44886],"geometry":[{"lat":47.0612994,"lon":9.4924529},{"lat":47.061286,"lon":9.4924591},{"lat":47.061296,"lon":9.4925058},{"lat":47.0613094,"lon":9.4924996},{"lat":47.0612994,"lon":9.4924529}]},{"type":"way","id":4260,"tags":{"building":"yes"},"nodes":[50267,50209,50221,50285,50267],"geometry":[{"lat":47.068661,"lon":9.5019054},{"lat":47.0685853,"lon":9.5019407},{"lat":47.0686097,"lon":9.5020535},{"lat":47.0686854,"lon":9.5020183},{"lat":47.068661,"lon":9.5019054}]},{"type":"way","id":4261,"tags":{"building":"yes"},"nodes":[51838,51827,51840,51848,51838],"geometry":[{"lat":47.0732001,"lon":9.5105228},{"lat":47.0731254,"lon":9.5106859},{"lat":47.0732234,"lon":9.5107826},{"lat":47.0732981,"lon":9.5106194},{"lat":47.0732001,"lon":9.5105228}]},{"type":"way","id":4262,"tags":{"building":"yes"},"nodes":[44556,44425,44394,44517,44556],"geometry":[{"lat":47.0609555,"lon":9.4994848},{"lat":47.0608202,"lon":9.4995764},{"lat":47.060777,"lon":9.4994389},{"lat":47.0609123,"lon":9.4993473},{"lat":47.0609555,"lon":9.4994848}]},{"type":"way","id":4263,"tags":{"building":"yes"},"nodes":[45550,45433,45471,45580,45550],"geometry":[{"lat":47.0620571,"lon":9.4983459},{"lat":47.0619346,"lon":9.4984465},{"lat":47.0619782,"lon":9.498561},{"lat":47.0621008,"lon":9.4984603},{"lat":47.0620571,"lon":9.4983459}]},{"type":"way","id":4264,"tags":{"building":"yes"},"nodes":[51703,51676,51667,51699,51703],"geometry":[{"lat":47.0721283,"lon":9.5103895},{"lat":47.0719918,"lon":9.5103289},{"lat":47.0719586,"lon":9.5104899},{"lat":47.0720951,"lon":9.5105505},{"lat":47.0721283,"lon":9.5103895}]},{"type":"way","id":4266,"tags":{"building":"yes"},"nodes":[47810,47725,47757,47835,47810],"geometry":[{"lat":47.064706,"lon":9.4947753},{"lat":47.0646175,"lon":9.4948381},{"lat":47.0646483,"lon":9.4949315},{"lat":47.0647367,"lon":9.4948687},{"lat":47.064706,"lon":9.4947753}]},{"type":"way","id":4267,"tags":{"building":"yes"},"nodes":[49266,49218,49249,49285,49266],"geometry":[{"lat":47.0670477,"lon":9.5103683},{"lat":47.066976,"lon":9.510426},{"lat":47.0670227,"lon":9.5105509},{"lat":47.0670943,"lon":9.5104932},{"lat":47.0670477,"lon":9.5103683}]},{"type":"way","id":4268,"tags":{"building":"yes"},"nodes":[43583,43614,43577,43541,43583],"geometry":[{"lat":47.059686,"lon":9.4970984},{"lat":47.0597405,"lon":9.4971525},{"lat":47.0596777,"lon":9.4972885},{"lat":47.0596233,"lon":9.4972344},{"lat":47.059686,"lon":9.4970984}]},{"type":"way","id":4269,"tags":{"building":"yes"},"nodes":[43447,43498,43456,43409,43447],"geometry":[{"lat":47.0594511,"lon":9.4931977},{"lat":47.0595528,"lon":9.4933351},{"lat":47.0594813,"lon":9.4934492},{"lat":47.0593796,"lon":9.4933118},{"lat":47.0594511,"lon":9.4931977}]},{"type":"way","id":4270,"tags":{"building":"yes"},"nodes":[51807,51803,51808,51811,51807],"geometry":[{"lat":47.0728704,"lon":9.5085377},{"lat":47.0728363,"lon":9.5086225},{"lat":47.0728909,"lon":9.5086698},{"lat":47.0729249,"lon":9.508585},{"lat":47.0728704,"lon":9.5085377}]},{"type":"way","id":4271,"tags":{"building":"yes"},"nodes":[50211,50046,50060,50217,50211],"geometry":[{"lat":47.0685864,"lon":9.5131765},{"lat":47.0683355,"lon":9.5132139},{"lat":47.0683489,"lon":9.5134075},{"lat":47.0685998,"lon":9.51337},{"lat":47.0685864,"lon":9.5131765}]},{"type":"way","id":4272,"tags":{"building":"yes"},"nodes":[47328,47252,47280,47356,47328],"geometry":[{"lat":47.0640809,"lon":9.5119621},{"lat":47.0639784,"lon":9.512001},{"lat":47.0640141,"lon":9.5122034},{"lat":47.0641166,"lon":9.5121645},{"lat":47.0640809,"lon":9.5119621}]},{"type":"way","id":4273,"tags":{"building":"yes"},"nodes":[51272,51246,51269,51293,51272],"geometry":[{"lat":47.0706407,"lon":9.5045939},{"lat":47.0705749,"lon":9.504664},{"lat":47.0706331,"lon":9.5047818},{"lat":47.0706989,"lon":9.5047117},{"lat":47.0706407,"lon":9.5045939}]},{"type":"way","id":4274,"tags":{"building":"yes"},"nodes":[49958,49926,49930,49967,49958],"geometry":[{"lat":47.0682026,"lon":9.5076872},{"lat":47.0681375,"lon":9.5076983},{"lat":47.0681464,"lon":9.5078109},{"lat":47.0682115,"lon":9.5077998},{"lat":47.0682026,"lon":9.5076872}]},{"type":"way","id":4275,"tags":{"building":"yes"},"nodes":[45619,45569,45592,45638,45619],"geometry":[{"lat":47.0621523,"lon":9.4986266},{"lat":47.062086,"lon":9.4986631},{"lat":47.0621148,"lon":9.4987763},{"lat":47.0621812,"lon":9.4987398},{"lat":47.0621523,"lon":9.4986266}]},{"type":"way","id":4277,"tags":{"building":"yes"},"nodes":[51127,51117,51129,51139,51127],"geometry":[{"lat":47.0703591,"lon":9.5037204},{"lat":47.070343,"lon":9.5037403},{"lat":47.0703674,"lon":9.503783},{"lat":47.0703835,"lon":9.5037631},{"lat":47.0703591,"lon":9.5037204}]},{"type":"way","id":4278,"tags":{"building":"yes"},"nodes":[47841,47827,47832,47852,47841],"geometry":[{"lat":47.0647415,"lon":9.4949887},{"lat":47.0647215,"lon":9.4950083},{"lat":47.0647351,"lon":9.4950385},{"lat":47.0647552,"lon":9.495019},{"lat":47.0647415,"lon":9.4949887}]},{"type":"way","id":4279,"tags":{"building":"yes"},"nodes":[47145,47022,47046,47172,47145],"geometry":[{"lat":47.0638223,"lon":9.4960209},{"lat":47.0636633,"lon":9.4961315},{"lat":47.0637042,"lon":9.4962583},{"lat":47.0638632,"lon":9.4961477},{"lat":47.0638223,"lon":9.4960209}]},{"type":"way","id":4283,"tags":{"building":"yes"},"nodes":[44096,44003,43979,44078,44096],"geometry":[{"lat":47.0603946,"lon":9.4964835},{"lat":47.0602447,"lon":9.4964071},{"lat":47.0602173,"lon":9.4965251},{"lat":47.0603644,"lon":9.4965828},{"lat":47.0603946,"lon":9.4964835}]},{"type":"way","id":4284,"tags":{"building":"yes"},"nodes":[47419,47370,47393,47437,47419],"geometry":[{"lat":47.0642106,"lon":9.4948584},{"lat":47.0641459,"lon":9.494904},{"lat":47.0641808,"lon":9.4950111},{"lat":47.0642456,"lon":9.4949655},{"lat":47.0642106,"lon":9.4948584}]},{"type":"way","id":4285,"tags":{"building":"yes"},"nodes":[47286,47212,47225,47301,47286],"geometry":[{"lat":47.0640277,"lon":9.5116019},{"lat":47.0639302,"lon":9.5116454},{"lat":47.0639529,"lon":9.5117554},{"lat":47.0640504,"lon":9.5117119},{"lat":47.0640277,"lon":9.5116019}]},{"type":"way","id":4286,"tags":{"building":"yes"},"nodes":[45173,45161,45178,45200,45173],"geometry":[{"lat":47.0616504,"lon":9.4977981},{"lat":47.0616349,"lon":9.4978128},{"lat":47.0616546,"lon":9.4978577},{"lat":47.0616701,"lon":9.4978431},{"lat":47.0616504,"lon":9.4977981}]},{"type":"way","id":4287,"tags":{"building":"yes"},"nodes":[51334,51321,51318,51330,51334],"geometry":[{"lat":47.0708379,"lon":9.5043373},{"lat":47.0708007,"lon":9.5043635},{"lat":47.0707924,"lon":9.5043381},{"lat":47.0708296,"lon":9.5043119},{"lat":47.0708379,"lon":9.5043373}]},{"type":"way","id":4288,"tags":{"building":"yes"},"nodes":[48167,48128,48078,48123,48167],"geometry":[{"lat":47.0652472,"lon":9.512381},{"lat":47.0651901,"lon":9.5124453},{"lat":47.0651234,"lon":9.5123177},{"lat":47.0651805,"lon":9.5122533},{"lat":47.0652472,"lon":9.512381}]},{"type":"way","id":4289,"tags":{"building":"yes"},"nodes":[49509,49463,49471,49525,49509],"geometry":[{"lat":47.0674812,"lon":9.5062962},{"lat":47.0673974,"lon":9.5063175},{"lat":47.067419,"lon":9.5065009},{"lat":47.0675028,"lon":9.5064796},{"lat":47.0674812,"lon":9.5062962}]},{"type":"way","id":4291,"tags":{"building":"yes"},"nodes":[46194,46129,46139,46208,46194],"geometry":[{"lat":47.0627767,"lon":9.4945623},{"lat":47.0627047,"lon":9.4946113},{"lat":47.0627203,"lon":9.494661},{"lat":47.0627924,"lon":9.494612},{"lat":47.0627767,"lon":9.4945623}]},{"type":"way","id":4292,"tags":{"building":"yes"},"nodes":[45952,45900,45957,46003,45952],"geometry":[{"lat":47.0624964,"lon":9.493357},{"lat":47.0624415,"lon":9.4934024},{"lat":47.0625014,"lon":9.4935585},{"lat":47.0625563,"lon":9.4935131},{"lat":47.0624964,"lon":9.493357}]},{"type":"way","id":4293,"tags":{"building":"yes"},"nodes":[50380,50335,50375,50408,50380],"geometry":[{"lat":47.0688076,"lon":9.5044497},{"lat":47.0687453,"lon":9.5044833},{"lat":47.0687951,"lon":9.5046822},{"lat":47.0688574,"lon":9.5046486},{"lat":47.0688076,"lon":9.5044497}]},{"type":"way","id":4295,"tags":{"building":"yes"},"nodes":[43827,43777,43825,43870,43827],"geometry":[{"lat":47.0600065,"lon":9.4997567},{"lat":47.05994,"lon":9.4998156},{"lat":47.0600039,"lon":9.4999711},{"lat":47.0600704,"lon":9.4999123},{"lat":47.0600065,"lon":9.4997567}]},{"type":"way","id":4298,"tags":{"building":"yes"},"nodes":[48135,48049,48089,48163,48135],"geometry":[{"lat":47.0651959,"lon":9.4952876},{"lat":47.0650852,"lon":9.4953709},{"lat":47.0651321,"lon":9.4955054},{"lat":47.0652428,"lon":9.4954221},{"lat":47.0651959,"lon":9.4952876}]},{"type":"way","id":4299,"tags":{"building":"yes"},"nodes":[49497,49453,49479,49531,49497],"geometry":[{"lat":47.067459,"lon":9.504126},{"lat":47.0673827,"lon":9.5041948},{"lat":47.0674359,"lon":9.5043221},{"lat":47.0675122,"lon":9.5042533},{"lat":47.067459,"lon":9.504126}]},{"type":"way","id":4300,"tags":{"building":"yes"},"nodes":[46294,46244,46309,46358,46294],"geometry":[{"lat":47.0628986,"lon":9.4917336},{"lat":47.0628399,"lon":9.4917736},{"lat":47.0629212,"lon":9.4920307},{"lat":47.0629799,"lon":9.4919907},{"lat":47.0628986,"lon":9.4917336}]},{"type":"way","id":4301,"tags":{"building":"yes"},"nodes":[49419,49408,49412,49423,49419],"geometry":[{"lat":47.0673162,"lon":9.5094514},{"lat":47.0672893,"lon":9.5094629},{"lat":47.067295,"lon":9.5094917},{"lat":47.0673219,"lon":9.5094802},{"lat":47.0673162,"lon":9.5094514}]},{"type":"way","id":4304,"tags":{"building":"yes"},"nodes":[51522,51474,51467,51514,51522],"geometry":[{"lat":47.0713594,"lon":9.5095672},{"lat":47.0712321,"lon":9.5095188},{"lat":47.0712119,"lon":9.5096333},{"lat":47.0713392,"lon":9.5096818},{"lat":47.0713594,"lon":9.5095672}]},{"type":"way","id":4306,"tags":{"building":"yes"},"nodes":[47062,46970,47012,47094,47062],"geometry":[{"lat":47.063726,"lon":9.4943002},{"lat":47.0636013,"lon":9.4943995},{"lat":47.0636422,"lon":9.4945103},{"lat":47.0637669,"lon":9.494411},{"lat":47.063726,"lon":9.4943002}]},{"type":"way","id":4307,"tags":{"building":"yes"},"nodes":[48067,47996,48035,48101,48067],"geometry":[{"lat":47.0651016,"lon":9.4957629},{"lat":47.0650094,"lon":9.4958265},{"lat":47.0650643,"lon":9.4959977},{"lat":47.0651564,"lon":9.4959341},{"lat":47.0651016,"lon":9.4957629}]},{"type":"way","id":4308,"tags":{"building":"yes"},"nodes":[48802,48767,48779,48816,48802],"geometry":[{"lat":47.0662644,"lon":9.5083524},{"lat":47.0661813,"lon":9.5083783},{"lat":47.0662034,"lon":9.5085317},{"lat":47.0662866,"lon":9.5085059},{"lat":47.0662644,"lon":9.5083524}]},{"type":"way","id":4309,"tags":{"building":"yes"},"nodes":[51599,51573,51593,51605,51599],"geometry":[{"lat":47.0715571,"lon":9.5040682},{"lat":47.0714774,"lon":9.5041292},{"lat":47.071529,"lon":9.5042743},{"lat":47.0716087,"lon":9.5042132},{"lat":47.0715571,"lon":9.5040682}]},{"type":"way","id":4310,"tags":{"building":"yes"},"nodes":[47970,47891,47900,47983,47970],"geometry":[{"lat":47.0649702,"lon":9.5092483},{"lat":47.0648268,"lon":9.5093151},{"lat":47.0648479,"lon":9.509413},{"lat":47.0649914,"lon":9.5093462},{"lat":47.0649702,"lon":9.5092483}]},{"type":"way","id":4311,"tags":{"building":"yes"},"nodes":[47930,47889,47935,47991,47930],"geometry":[{"lat":47.0649107,"lon":9.504387},{"lat":47.0648242,"lon":9.5044683},{"lat":47.0649181,"lon":9.5046839},{"lat":47.0650047,"lon":9.5046026},{"lat":47.0649107,"lon":9.504387}]},{"type":"way","id":4313,"tags":{"building":"yes"},"nodes":[44798,44650,44663,44817,44798],"geometry":[{"lat":47.0612055,"lon":9.4954783},{"lat":47.0610422,"lon":9.4955203},{"lat":47.0610571,"lon":9.4956447},{"lat":47.0612203,"lon":9.4956028},{"lat":47.0612055,"lon":9.4954783}]},{"type":"way","id":4314,"tags":{"building":"yes"},"nodes":[44909,44825,44792,44881,44909],"geometry":[{"lat":47.0613268,"lon":9.512262},{"lat":47.0612301,"lon":9.5122137},{"lat":47.0611992,"lon":9.512347},{"lat":47.0612959,"lon":9.5123953},{"lat":47.0613268,"lon":9.512262}]},{"type":"way","id":4315,"tags":{"building":"yes"},"nodes":[51914,51899,51890,51898,51914],"geometry":[{"lat":47.0737149,"lon":9.5110759},{"lat":47.073647,"lon":9.5110025},{"lat":47.0735782,"lon":9.5111399},{"lat":47.0736461,"lon":9.5112133},{"lat":47.0737149,"lon":9.5110759}]},{"type":"way","id":4316,"tags":{"building":"yes"},"nodes":[51311,51275,51268,51306,51311],"geometry":[{"lat":47.0707642,"lon":9.5101919},{"lat":47.0706495,"lon":9.5101617},{"lat":47.0706278,"lon":9.5103399},{"lat":47.0707425,"lon":9.5103701},{"lat":47.0707642,"lon":9.5101919}]},{"type":"way","id":4317,"tags":{"building":"yes"},"nodes":[50527,50476,50509,50558,50527],"geometry":[{"lat":47.0690727,"lon":9.4998038},{"lat":47.0689842,"lon":9.4998688},{"lat":47.0690288,"lon":9.4999999},{"lat":47.0691174,"lon":9.499935},{"lat":47.0690727,"lon":9.4998038}]},{"type":"way","id":4318,"tags":{"building":"yes"},"nodes":[48992,48914,48920,48999,48992],"geometry":[{"lat":47.066604,"lon":9.504474},{"lat":47.0664642,"lon":9.5045077},{"lat":47.0664769,"lon":9.5046204},{"lat":47.0666166,"lon":9.5045867},{"lat":47.066604,"lon":9.504474}]},{"type":"way","id":4319,"tags":{"building":"yes"},"nodes":[47142,47063,47074,47151,47142],"geometry":[{"lat":47.0638193,"lon":9.5106343},{"lat":47.0637267,"lon":9.5106749},{"lat":47.0637428,"lon":9.5107542},{"lat":47.0638354,"lon":9.5107135},{"lat":47.0638193,"lon":9.5106343}]},{"type":"way","id":4320,"tags":{"building":"yes"},"nodes":[47462,47396,47425,47492,47462],"geometry":[{"lat":47.0642772,"lon":9.5089267},{"lat":47.0641842,"lon":9.5089895},{"lat":47.0642232,"lon":9.5091139},{"lat":47.0643162,"lon":9.5090511},{"lat":47.0642772,"lon":9.5089267}]},{"type":"way","id":4321,"tags":{"building":"yes"},"nodes":[49089,49021,49036,49097,49089],"geometry":[{"lat":47.0667329,"lon":9.5064756},{"lat":47.0666476,"lon":9.5064986},{"lat":47.0666602,"lon":9.5066},{"lat":47.0667455,"lon":9.5065771},{"lat":47.0667329,"lon":9.5064756}]},{"type":"way","id":4322,"tags":{"building":"yes"},"nodes":[49255,49231,49233,49256,49255],"geometry":[{"lat":47.0670321,"lon":9.5072356},{"lat":47.066994,"lon":9.5072379},{"lat":47.0669954,"lon":9.5072859},{"lat":47.0670334,"lon":9.5072836},{"lat":47.0670321,"lon":9.5072356}]},{"type":"way","id":4323,"tags":{"building":"yes"},"nodes":[44156,44106,44120,44173,44156],"geometry":[{"lat":47.0604814,"lon":9.4973135},{"lat":47.0604076,"lon":9.4973332},{"lat":47.0604285,"lon":9.4975018},{"lat":47.0605022,"lon":9.4974822},{"lat":47.0604814,"lon":9.4973135}]},{"type":"way","id":4325,"tags":{"building":"yes"},"nodes":[47968,47911,47966,48027,47968],"geometry":[{"lat":47.0649659,"lon":9.4945687},{"lat":47.064878,"lon":9.4946357},{"lat":47.0649648,"lon":9.4948811},{"lat":47.0650527,"lon":9.4948141},{"lat":47.0649659,"lon":9.4945687}]},{"type":"way","id":4326,"tags":{"building":"yes"},"nodes":[46064,45972,45936,46022,46064],"geometry":[{"lat":47.0626199,"lon":9.4944876},{"lat":47.0625252,"lon":9.494373},{"lat":47.0624812,"lon":9.4944513},{"lat":47.0625758,"lon":9.4945659},{"lat":47.0626199,"lon":9.4944876}]},{"type":"way","id":4327,"tags":{"building":"yes"},"nodes":[51716,51692,51685,51705,51716],"geometry":[{"lat":47.0721716,"lon":9.5088866},{"lat":47.0720684,"lon":9.5088464},{"lat":47.0720429,"lon":9.5090019},{"lat":47.072145,"lon":9.5090401},{"lat":47.0721716,"lon":9.5088866}]},{"type":"way","id":4328,"tags":{"building":"yes"},"nodes":[49013,48961,48968,49031,49013],"geometry":[{"lat":47.0666401,"lon":9.5048789},{"lat":47.0665506,"lon":9.5049014},{"lat":47.0665654,"lon":9.5050288},{"lat":47.0666549,"lon":9.5050064},{"lat":47.0666401,"lon":9.5048789}]},{"type":"way","id":4330,"tags":{"building":"yes"},"nodes":[50581,50522,50531,50594,50581],"geometry":[{"lat":47.0691678,"lon":9.5045326},{"lat":47.0690565,"lon":9.5046023},{"lat":47.0690794,"lon":9.504681},{"lat":47.0691907,"lon":9.5046113},{"lat":47.0691678,"lon":9.5045326}]},{"type":"way","id":4332,"tags":{"building":"yes"},"nodes":[47348,47326,47327,47351,47348],"geometry":[{"lat":47.0641076,"lon":9.509652},{"lat":47.0640778,"lon":9.5096609},{"lat":47.0640804,"lon":9.5096796},{"lat":47.0641102,"lon":9.5096707},{"lat":47.0641076,"lon":9.509652}]},{"type":"way","id":4333,"tags":{"building":"yes"},"nodes":[51322,51305,51294,51312,51322],"geometry":[{"lat":47.0708037,"lon":9.506846},{"lat":47.0707356,"lon":9.506802},{"lat":47.0707003,"lon":9.5069199},{"lat":47.0707684,"lon":9.5069639},{"lat":47.0708037,"lon":9.506846}]},{"type":"way","id":4334,"tags":{"building":"yes"},"nodes":[47615,47592,47608,47628,47615],"geometry":[{"lat":47.0644779,"lon":9.4947329},{"lat":47.0644509,"lon":9.494749},{"lat":47.064469,"lon":9.4948146},{"lat":47.064496,"lon":9.4947985},{"lat":47.0644779,"lon":9.4947329}]},{"type":"way","id":4336,"tags":{"building":"yes"},"nodes":[47357,47267,47382,47467,47357],"geometry":[{"lat":47.0641203,"lon":9.5070598},{"lat":47.0639977,"lon":9.5071675},{"lat":47.0641637,"lon":9.5075748},{"lat":47.0642863,"lon":9.5074672},{"lat":47.0641203,"lon":9.5070598}]},{"type":"way","id":4338,"tags":{"building":"yes"},"nodes":[50903,50886,50926,50952,50903],"geometry":[{"lat":47.0698163,"lon":9.5013034},{"lat":47.0697639,"lon":9.5013388},{"lat":47.0698819,"lon":9.5017152},{"lat":47.0699343,"lon":9.5016798},{"lat":47.0698163,"lon":9.5013034}]},{"type":"way","id":4339,"tags":{"building":"yes"},"nodes":[50607,50563,50562,50603,50607],"geometry":[{"lat":47.0692022,"lon":9.5102295},{"lat":47.0691261,"lon":9.5102244},{"lat":47.0691212,"lon":9.51038},{"lat":47.0691973,"lon":9.5103851},{"lat":47.0692022,"lon":9.5102295}]},{"type":"way","id":4342,"tags":{"building":"yes"},"nodes":[45810,45775,45814,45889,45810],"geometry":[{"lat":47.0623639,"lon":9.500474},{"lat":47.0623246,"lon":9.5005049},{"lat":47.0623667,"lon":9.5006859},{"lat":47.0624297,"lon":9.5006792},{"lat":47.0623639,"lon":9.500474}]},{"type":"way","id":4343,"tags":{"building":"yes"},"nodes":[48443,48334,48355,48468,48443],"geometry":[{"lat":47.0656849,"lon":9.5092146},{"lat":47.0655097,"lon":9.5093161},{"lat":47.0655471,"lon":9.5094552},{"lat":47.0657223,"lon":9.5093537},{"lat":47.0656849,"lon":9.5092146}]},{"type":"way","id":4344,"tags":{"building":"yes"},"nodes":[51100,51064,51069,51113,51100],"geometry":[{"lat":47.0703177,"lon":9.501104},{"lat":47.070236,"lon":9.5011542},{"lat":47.0702567,"lon":9.5012271},{"lat":47.0703384,"lon":9.5011768},{"lat":47.0703177,"lon":9.501104}]},{"type":"way","id":4345,"tags":{"building":"yes"},"nodes":[46200,46144,46185,46235,46200],"geometry":[{"lat":47.0627865,"lon":9.4926264},{"lat":47.0627246,"lon":9.4926797},{"lat":47.0627671,"lon":9.4927861},{"lat":47.062829,"lon":9.4927327},{"lat":47.0627865,"lon":9.4926264}]},{"type":"way","id":4347,"tags":{"building":"yes"},"nodes":[51818,51813,51816,51829,51818],"geometry":[{"lat":47.073063,"lon":9.5106258},{"lat":47.0729523,"lon":9.5105089},{"lat":47.0730236,"lon":9.5103635},{"lat":47.0731342,"lon":9.5104804},{"lat":47.073063,"lon":9.5106258}]},{"type":"way","id":4348,"tags":{"building":"yes"},"nodes":[47845,47722,47731,47850,47845],"geometry":[{"lat":47.0647472,"lon":9.5105243},{"lat":47.0646164,"lon":9.5105411},{"lat":47.0646236,"lon":9.5106622},{"lat":47.0647545,"lon":9.5106453},{"lat":47.0647472,"lon":9.5105243}]},{"type":"way","id":4350,"tags":{"building":"yes"},"nodes":[48160,48104,48139,48190,48160],"geometry":[{"lat":47.0652401,"lon":9.4974029},{"lat":47.0651624,"lon":9.4974565},{"lat":47.0652021,"lon":9.4975805},{"lat":47.0652798,"lon":9.4975269},{"lat":47.0652401,"lon":9.4974029}]},{"type":"way","id":4351,"tags":{"building":"yes"},"nodes":[49274,49203,49190,49259,49274],"geometry":[{"lat":47.067069,"lon":9.5116614},{"lat":47.0669555,"lon":9.5117167},{"lat":47.0669216,"lon":9.5115669},{"lat":47.0670351,"lon":9.5115116},{"lat":47.067069,"lon":9.5116614}]},{"type":"way","id":4352,"tags":{"building":"yes"},"nodes":[51606,51586,51583,51604,51606],"geometry":[{"lat":47.071616,"lon":9.5109617},{"lat":47.0715159,"lon":9.5109268},{"lat":47.0715002,"lon":9.5110243},{"lat":47.0716003,"lon":9.5110591},{"lat":47.071616,"lon":9.5109617}]},{"type":"way","id":4353,"tags":{"building":"yes"},"nodes":[50205,50170,50189,50220,50205],"geometry":[{"lat":47.0685771,"lon":9.5006448},{"lat":47.0685181,"lon":9.5006891},{"lat":47.0685491,"lon":9.5007781},{"lat":47.0686081,"lon":9.5007338},{"lat":47.0685771,"lon":9.5006448}]},{"type":"way","id":4354,"tags":{"building":"yes"},"nodes":[51232,51178,51172,51229,51232],"geometry":[{"lat":47.0705496,"lon":9.5100114},{"lat":47.0704601,"lon":9.5099922},{"lat":47.0704471,"lon":9.5101231},{"lat":47.0705365,"lon":9.5101423},{"lat":47.0705496,"lon":9.5100114}]},{"type":"way","id":4355,"tags":{"building":"yes"},"nodes":[49833,49710,49759,49869,49833],"geometry":[{"lat":47.0680058,"lon":9.4984378},{"lat":47.0678149,"lon":9.4985937},{"lat":47.0678817,"lon":9.4987699},{"lat":47.0680726,"lon":9.498614},{"lat":47.0680058,"lon":9.4984378}]},{"type":"way","id":4356,"tags":{"building":"yes"},"nodes":[48047,47986,48004,48071,48047],"geometry":[{"lat":47.0650771,"lon":9.5085314},{"lat":47.0649927,"lon":9.5085797},{"lat":47.0650205,"lon":9.5086845},{"lat":47.0651049,"lon":9.5086361},{"lat":47.0650771,"lon":9.5085314}]},{"type":"way","id":4358,"tags":{"building":"yes"},"nodes":[51510,51469,51472,51512,51510],"geometry":[{"lat":47.0713261,"lon":9.5117304},{"lat":47.0712213,"lon":9.5117406},{"lat":47.0712285,"lon":9.5119},{"lat":47.0713333,"lon":9.5118898},{"lat":47.0713261,"lon":9.5117304}]},{"type":"way","id":4360,"tags":{"building":"yes"},"nodes":[49969,49897,49908,49973,49969],"geometry":[{"lat":47.0682139,"lon":9.5094312},{"lat":47.0681052,"lon":9.5094464},{"lat":47.0681136,"lon":9.5095758},{"lat":47.0682223,"lon":9.5095606},{"lat":47.0682139,"lon":9.5094312}]},{"type":"way","id":4361,"tags":{"building":"yes"},"nodes":[46238,46173,46212,46277,46238],"geometry":[{"lat":47.0628363,"lon":9.4978735},{"lat":47.0627546,"lon":9.4979205},{"lat":47.0627985,"lon":9.4980855},{"lat":47.0628803,"lon":9.4980386},{"lat":47.0628363,"lon":9.4978735}]},{"type":"way","id":4362,"tags":{"building":"yes"},"nodes":[44948,44931,44945,44964,44948],"geometry":[{"lat":47.0613707,"lon":9.4964328},{"lat":47.0613467,"lon":9.4964546},{"lat":47.0613673,"lon":9.4965037},{"lat":47.0613914,"lon":9.4964819},{"lat":47.0613707,"lon":9.4964328}]},{"type":"way","id":4363,"tags":{"building":"yes"},"nodes":[44263,44190,44223,44293,44263],"geometry":[{"lat":47.0606051,"lon":9.495242},{"lat":47.0605211,"lon":9.4952862},{"lat":47.0605582,"lon":9.4954384},{"lat":47.0606422,"lon":9.4953943},{"lat":47.0606051,"lon":9.495242}]},{"type":"way","id":4364,"tags":{"building":"yes"},"nodes":[48192,48150,48188,48216,48192],"geometry":[{"lat":47.0652857,"lon":9.4965253},{"lat":47.0652269,"lon":9.4965675},{"lat":47.0652759,"lon":9.4967146},{"lat":47.0653346,"lon":9.4966724},{"lat":47.0652857,"lon":9.4965253}]},{"type":"way","id":4365,"tags":{"building":"yes"},"nodes":[43773,43695,43653,43736,43773],"geometry":[{"lat":47.0599382,"lon":9.4993687},{"lat":47.0598403,"lon":9.499255},{"lat":47.0597911,"lon":9.4993464},{"lat":47.0598891,"lon":9.49946},{"lat":47.0599382,"lon":9.4993687}]},{"type":"way","id":4366,"tags":{"building":"yes"},"nodes":[48737,48681,48725,48761,48774,48781,48737],"geometry":[{"lat":47.0661279,"lon":9.5038267},{"lat":47.0660298,"lon":9.5038724},{"lat":47.0661008,"lon":9.5042009},{"lat":47.0661678,"lon":9.5041697},{"lat":47.0661989,"lon":9.5041552},{"lat":47.0661921,"lon":9.5041238},{"lat":47.0661279,"lon":9.5038267}]},{"type":"way","id":4368,"tags":{"building":"yes"},"nodes":[46155,46096,46107,46167,46155],"geometry":[{"lat":47.0627371,"lon":9.498542},{"lat":47.0626612,"lon":9.4985622},{"lat":47.0626722,"lon":9.4986509},{"lat":47.0627481,"lon":9.4986307},{"lat":47.0627371,"lon":9.498542}]},{"type":"way","id":4371,"tags":{"building":"yes"},"nodes":[49437,49384,49392,49446,49437],"geometry":[{"lat":47.06736,"lon":9.5096025},{"lat":47.0672619,"lon":9.5096199},{"lat":47.0672717,"lon":9.5097382},{"lat":47.0673697,"lon":9.5097207},{"lat":47.06736,"lon":9.5096025}]},{"type":"way","id":4373,"tags":{"building":"yes"},"nodes":[48958,48917,48933,48974,48958],"geometry":[{"lat":47.0665448,"lon":9.4993541},{"lat":47.0664728,"lon":9.499404},{"lat":47.0665023,"lon":9.4994959},{"lat":47.0665743,"lon":9.4994461},{"lat":47.0665448,"lon":9.4993541}]},{"type":"way","id":4374,"tags":{"building":"yes"},"nodes":[44707,44630,44631,44708,44707],"geometry":[{"lat":47.0610957,"lon":9.5000558},{"lat":47.0610189,"lon":9.5000561},{"lat":47.0610193,"lon":9.5002344},{"lat":47.0610961,"lon":9.500234},{"lat":47.0610957,"lon":9.5000558}]},{"type":"way","id":4376,"tags":{"building":"yes"},"nodes":[47077,46989,46981,47071,47077],"geometry":[{"lat":47.0637449,"lon":9.4993758},{"lat":47.0636189,"lon":9.4993505},{"lat":47.063611,"lon":9.4994349},{"lat":47.0637371,"lon":9.4994603},{"lat":47.0637449,"lon":9.4993758}]},{"type":"way","id":4377,"tags":{"building":"yes"},"nodes":[44454,44550,44521,44427,44454],"geometry":[{"lat":47.060858,"lon":9.5119518},{"lat":47.0609474,"lon":9.5120055},{"lat":47.0609143,"lon":9.5121238},{"lat":47.060825,"lon":9.5120701},{"lat":47.060858,"lon":9.5119518}]},{"type":"way","id":4381,"tags":{"building":"yes"},"nodes":[47438,47342,47343,47445,47438],"geometry":[{"lat":47.0642456,"lon":9.4992347},{"lat":47.064093,"lon":9.4992525},{"lat":47.0641025,"lon":9.4994285},{"lat":47.0642551,"lon":9.4994107},{"lat":47.0642456,"lon":9.4992347}]},{"type":"way","id":4382,"tags":{"building":"yes"},"nodes":[50976,50946,50940,50974,50976],"geometry":[{"lat":47.0699848,"lon":9.5098052},{"lat":47.0699157,"lon":9.509799},{"lat":47.0699093,"lon":9.509956},{"lat":47.0699783,"lon":9.5099622},{"lat":47.0699848,"lon":9.5098052}]},{"type":"way","id":4384,"tags":{"building":"yes"},"nodes":[45052,44973,44998,45065,45052],"geometry":[{"lat":47.0614962,"lon":9.492526},{"lat":47.0613994,"lon":9.4925647},{"lat":47.0614251,"lon":9.4927029},{"lat":47.0615218,"lon":9.4926643},{"lat":47.0614962,"lon":9.492526}]},{"type":"way","id":4385,"tags":{"building":"yes"},"nodes":[51505,51482,51501,51519,51505],"geometry":[{"lat":47.071312,"lon":9.5038889},{"lat":47.0712572,"lon":9.5039251},{"lat":47.0712977,"lon":9.5040572},{"lat":47.0713525,"lon":9.504021},{"lat":47.071312,"lon":9.5038889}]},{"type":"way","id":4386,"tags":{"building":"yes"},"nodes":[51614,51611,51603,51610,51614],"geometry":[{"lat":47.0717026,"lon":9.5119773},{"lat":47.071654,"lon":9.5118725},{"lat":47.0715971,"lon":9.5119294},{"lat":47.0716458,"lon":9.5120342},{"lat":47.0717026,"lon":9.5119773}]},{"type":"way","id":4387,"tags":{"building":"yes"},"nodes":[45699,45658,45675,45719,45699],"geometry":[{"lat":47.0622409,"lon":9.4983629},{"lat":47.062202,"lon":9.4983905},{"lat":47.0622227,"lon":9.4984532},{"lat":47.0622615,"lon":9.4984256},{"lat":47.0622409,"lon":9.4983629}]},{"type":"way","id":4388,"tags":{"building":"yes"},"nodes":[51659,51657,51661,51664,51659],"geometry":[{"lat":47.0719183,"lon":9.5098885},{"lat":47.0718943,"lon":9.5099271},{"lat":47.071921,"lon":9.5099629},{"lat":47.071945,"lon":9.5099243},{"lat":47.0719183,"lon":9.5098885}]},{"type":"way","id":4389,"tags":{"building":"yes"},"nodes":[50649,50596,50643,50686,50649],"geometry":[{"lat":47.0692559,"lon":9.5026867},{"lat":47.0691924,"lon":9.5027286},{"lat":47.0692511,"lon":9.5029203},{"lat":47.0693146,"lon":9.5028784},{"lat":47.0692559,"lon":9.5026867}]},{"type":"way","id":4390,"tags":{"building":"yes"},"nodes":[47740,47638,47658,47773,47740],"geometry":[{"lat":47.064631,"lon":9.4950056},{"lat":47.0645122,"lon":9.4950921},{"lat":47.0645478,"lon":9.4951974},{"lat":47.0646666,"lon":9.4951108},{"lat":47.064631,"lon":9.4950056}]},{"type":"way","id":4391,"tags":{"building":"yes"},"nodes":[43582,43507,43547,43618,43582],"geometry":[{"lat":47.0596855,"lon":9.4925183},{"lat":47.0595718,"lon":9.4927127},{"lat":47.0596307,"lon":9.4927869},{"lat":47.0597444,"lon":9.4925925},{"lat":47.0596855,"lon":9.4925183}]},{"type":"way","id":4392,"tags":{"building":"yes"},"nodes":[47923,47888,47895,47927,47923],"geometry":[{"lat":47.0648955,"lon":9.5125507},{"lat":47.0648214,"lon":9.5125403},{"lat":47.0648311,"lon":9.5123903},{"lat":47.0649052,"lon":9.5124006},{"lat":47.0648955,"lon":9.5125507}]},{"type":"way","id":4393,"tags":{"building":"yes"},"nodes":[47892,47849,47860,47898,47892],"geometry":[{"lat":47.064827,"lon":9.5103166},{"lat":47.0647503,"lon":9.5103394},{"lat":47.0647694,"lon":9.5104494},{"lat":47.0648416,"lon":9.5104266},{"lat":47.064827,"lon":9.5103166}]},{"type":"way","id":4394,"tags":{"building":"yes"},"nodes":[45843,45740,45783,45904,45843],"geometry":[{"lat":47.0623929,"lon":9.4967041},{"lat":47.0622824,"lon":9.496797},{"lat":47.0623367,"lon":9.4969362},{"lat":47.0624472,"lon":9.4968433},{"lat":47.0623929,"lon":9.4967041}]},{"type":"way","id":4396,"tags":{"building":"yes"},"nodes":[50051,50029,50026,50042,50051],"geometry":[{"lat":47.0683391,"lon":9.5077736},{"lat":47.0683118,"lon":9.5077599},{"lat":47.0683034,"lon":9.507796},{"lat":47.0683307,"lon":9.5078098},{"lat":47.0683391,"lon":9.5077736}]},{"type":"way","id":4397,"tags":{"building":"yes"},"nodes":[48997,48923,48943,49023,48997],"geometry":[{"lat":47.0666115,"lon":9.5100081},{"lat":47.0664833,"lon":9.5101034},{"lat":47.0665214,"lon":9.5102139},{"lat":47.0666496,"lon":9.5101185},{"lat":47.0666115,"lon":9.5100081}]},{"type":"way","id":4398,"tags":{"building":"yes"},"nodes":[51781,51775,51766,51774,51781],"geometry":[{"lat":47.0726386,"lon":9.5099608},{"lat":47.0725722,"lon":9.5099021},{"lat":47.0725015,"lon":9.5100746},{"lat":47.0725679,"lon":9.5101333},{"lat":47.0726386,"lon":9.5099608}]},{"type":"way","id":4399,"tags":{"building":"yes"},"nodes":[44646,44464,44511,44684,44646],"geometry":[{"lat":47.0610357,"lon":9.4967064},{"lat":47.0608679,"lon":9.4968312},{"lat":47.0609085,"lon":9.4969489},{"lat":47.0610763,"lon":9.4968241},{"lat":47.0610357,"lon":9.4967064}]},{"type":"way","id":4400,"tags":{"building":"yes"},"nodes":[47309,47254,47290,47353,47309],"geometry":[{"lat":47.0640589,"lon":9.4919572},{"lat":47.0639836,"lon":9.4920445},{"lat":47.0640379,"lon":9.4921454},{"lat":47.0641132,"lon":9.4920581},{"lat":47.0640589,"lon":9.4919572}]},{"type":"way","id":4401,"tags":{"building":"yes"},"nodes":[49630,49613,49622,49641,49630],"geometry":[{"lat":47.0676797,"lon":9.5093105},{"lat":47.0676568,"lon":9.5093204},{"lat":47.0676681,"lon":9.5093764},{"lat":47.067691,"lon":9.5093664},{"lat":47.0676797,"lon":9.5093105}]},{"type":"way","id":4402,"tags":{"building":"yes"},"nodes":[45419,45314,45350,45465,45419],"geometry":[{"lat":47.061918,"lon":9.4968397},{"lat":47.0617894,"lon":9.4969533},{"lat":47.0618363,"lon":9.4970676},{"lat":47.0619649,"lon":9.496954},{"lat":47.061918,"lon":9.4968397}]},{"type":"way","id":4403,"tags":{"building":"yes"},"nodes":[50112,50040,50038,50109,50112],"geometry":[{"lat":47.068449,"lon":9.5091766},{"lat":47.0683266,"lon":9.5091699},{"lat":47.0683234,"lon":9.5092966},{"lat":47.0684458,"lon":9.5093033},{"lat":47.068449,"lon":9.5091766}]},{"type":"way","id":4404,"tags":{"building":"yes"},"nodes":[45632,45578,45618,45682,45632],"geometry":[{"lat":47.062175,"lon":9.4918955},{"lat":47.0620981,"lon":9.4919581},{"lat":47.0621513,"lon":9.4920988},{"lat":47.0622282,"lon":9.4920361},{"lat":47.062175,"lon":9.4918955}]},{"type":"way","id":4405,"tags":{"building":"yes"},"nodes":[49322,49264,49273,49328,49322],"geometry":[{"lat":47.0671605,"lon":9.5100434},{"lat":47.0670442,"lon":9.510069},{"lat":47.0670649,"lon":9.5101799},{"lat":47.0671676,"lon":9.5101505},{"lat":47.0671605,"lon":9.5100434}]},{"type":"way","id":4407,"tags":{"building":"yes"},"nodes":[51143,51109,51160,51199,51143],"geometry":[{"lat":47.0703977,"lon":9.5030122},{"lat":47.070334,"lon":9.5030607},{"lat":47.0704269,"lon":9.5033237},{"lat":47.0704906,"lon":9.5032752},{"lat":47.0703977,"lon":9.5030122}]},{"type":"way","id":4408,"tags":{"building":"yes"},"nodes":[44049,43992,44009,44064,44049],"geometry":[{"lat":47.0603182,"lon":9.4957779},{"lat":47.0602294,"lon":9.4958021},{"lat":47.0602512,"lon":9.4959748},{"lat":47.06034,"lon":9.4959506},{"lat":47.0603182,"lon":9.4957779}]},{"type":"way","id":4410,"tags":{"building":"yes"},"nodes":[47529,47464,47502,47568,47529],"geometry":[{"lat":47.0643644,"lon":9.4927286},{"lat":47.0642791,"lon":9.4927819},{"lat":47.0643314,"lon":9.4929625},{"lat":47.0644167,"lon":9.4929092},{"lat":47.0643644,"lon":9.4927286}]},{"type":"way","id":4412,"tags":{"building":"yes"},"nodes":[48423,48351,48387,48459,48423],"geometry":[{"lat":47.0656501,"lon":9.4965875},{"lat":47.065541,"lon":9.4966657},{"lat":47.0655933,"lon":9.4968228},{"lat":47.0657023,"lon":9.4967446},{"lat":47.0656501,"lon":9.4965875}]},{"type":"way","id":4413,"tags":{"building":"yes"},"nodes":[49610,49563,49586,49634,49610],"geometry":[{"lat":47.0676517,"lon":9.5063193},{"lat":47.0675758,"lon":9.5063545},{"lat":47.0676062,"lon":9.5064959},{"lat":47.0676821,"lon":9.5064607},{"lat":47.0676517,"lon":9.5063193}]},{"type":"way","id":4415,"tags":{"building":"yes"},"nodes":[47717,47647,47665,47753,47717],"geometry":[{"lat":47.0646124,"lon":9.4969004},{"lat":47.0645275,"lon":9.4969579},{"lat":47.0645587,"lon":9.4970572},{"lat":47.0646436,"lon":9.4969997},{"lat":47.0646124,"lon":9.4969004}]},{"type":"way","id":4416,"tags":{"building":"yes"},"nodes":[50844,50801,50793,50837,50844],"geometry":[{"lat":47.0696508,"lon":9.5108675},{"lat":47.0695487,"lon":9.5108482},{"lat":47.0695345,"lon":9.5110108},{"lat":47.0696365,"lon":9.5110301},{"lat":47.0696508,"lon":9.5108675}]},{"type":"way","id":4417,"tags":{"building":"yes"},"nodes":[48542,48501,48503,48550,48542],"geometry":[{"lat":47.0658319,"lon":9.5121593},{"lat":47.065768,"lon":9.5121496},{"lat":47.0657793,"lon":9.5119877},{"lat":47.0658432,"lon":9.5119973},{"lat":47.0658319,"lon":9.5121593}]},{"type":"way","id":4418,"tags":{"building":"yes"},"nodes":[48596,48535,48517,48577,48596],"geometry":[{"lat":47.0659022,"lon":9.5124475},{"lat":47.0658263,"lon":9.5124774},{"lat":47.0657994,"lon":9.5123324},{"lat":47.0658755,"lon":9.5123014},{"lat":47.0659022,"lon":9.5124475}]},{"type":"way","id":4420,"tags":{"building":"yes"},"nodes":[47919,47899,47947,47974,47919],"geometry":[{"lat":47.0648883,"lon":9.4954063},{"lat":47.0648476,"lon":9.4954364},{"lat":47.0649391,"lon":9.4957032},{"lat":47.0649798,"lon":9.4956731},{"lat":47.0648883,"lon":9.4954063}]},{"type":"way","id":4421,"tags":{"building":"yes"},"nodes":[51844,51836,51845,51861,51844],"geometry":[{"lat":47.0732717,"lon":9.5110913},{"lat":47.0731982,"lon":9.5112474},{"lat":47.0732785,"lon":9.5113288},{"lat":47.0733519,"lon":9.5111728},{"lat":47.0732717,"lon":9.5110913}]},{"type":"way","id":4423,"tags":{"building":"yes"},"nodes":[48729,53497,48697,48706,48741,48729],"geometry":[{"lat":47.0661184,"lon":9.5029263},{"lat":47.0661159,"lon":9.5029127},{"lat":47.0660535,"lon":9.5029371},{"lat":47.066069,"lon":9.5030217},{"lat":47.0661313,"lon":9.5029971},{"lat":47.0661184,"lon":9.5029263}]},{"type":"way","id":4424,"tags":{"building":"yes"},"nodes":[47912,47865,47878,47926,47912],"geometry":[{"lat":47.0648782,"lon":9.5089653},{"lat":47.0647795,"lon":9.5090141},{"lat":47.0648061,"lon":9.50913},{"lat":47.0649048,"lon":9.5090812},{"lat":47.0648782,"lon":9.5089653}]},{"type":"way","id":4425,"tags":{"building":"yes"},"nodes":[51131,51065,51079,51147,51131],"geometry":[{"lat":47.070369,"lon":9.5012708},{"lat":47.0702368,"lon":9.5013531},{"lat":47.070275,"lon":9.5014854},{"lat":47.0704072,"lon":9.5014031},{"lat":47.070369,"lon":9.5012708}]},{"type":"way","id":4427,"tags":{"building":"yes"},"nodes":[49312,49271,49294,49338,49312],"geometry":[{"lat":47.067131,"lon":9.5041187},{"lat":47.0670575,"lon":9.5042205},{"lat":47.0671096,"lon":9.5043014},{"lat":47.067183,"lon":9.5041996},{"lat":47.067131,"lon":9.5041187}]},{"type":"way","id":4428,"tags":{"building":"yes"},"nodes":[47904,47711,47770,47934,47904],"geometry":[{"lat":47.0648621,"lon":9.4959317},{"lat":47.0646083,"lon":9.4961231},{"lat":47.0646643,"lon":9.4962829},{"lat":47.0649181,"lon":9.4960915},{"lat":47.0648621,"lon":9.4959317}]},{"type":"way","id":4429,"tags":{"building":"yes"},"nodes":[50050,49995,50032,50083,50050],"geometry":[{"lat":47.0683383,"lon":9.5037849},{"lat":47.0682612,"lon":9.5038927},{"lat":47.0683158,"lon":9.503977},{"lat":47.068393,"lon":9.5038692},{"lat":47.0683383,"lon":9.5037849}]},{"type":"way","id":4430,"tags":{"building":"yes"},"nodes":[44971,44896,44933,45011,44971],"geometry":[{"lat":47.0613983,"lon":9.4928894},{"lat":47.0613092,"lon":9.4929356},{"lat":47.0613491,"lon":9.493102},{"lat":47.0614383,"lon":9.4930559},{"lat":47.0613983,"lon":9.4928894}]},{"type":"way","id":4431,"tags":{"building":"yes"},"nodes":[49663,49606,49642,49690,49663],"geometry":[{"lat":47.0677269,"lon":9.5044256},{"lat":47.0676435,"lon":9.5045221},{"lat":47.067694,"lon":9.504616},{"lat":47.0677774,"lon":9.5045194},{"lat":47.0677269,"lon":9.5044256}]},{"type":"way","id":4432,"tags":{"building":"yes"},"nodes":[48147,48074,48095,48170,48147],"geometry":[{"lat":47.0652154,"lon":9.5042334},{"lat":47.0651119,"lon":9.5042866},{"lat":47.0651447,"lon":9.5044237},{"lat":47.0652481,"lon":9.5043705},{"lat":47.0652154,"lon":9.5042334}]},{"type":"way","id":4433,"tags":{"building":"yes"},"nodes":[48209,48189,48196,48222,48209],"geometry":[{"lat":47.0653262,"lon":9.5070688},{"lat":47.0652778,"lon":9.5071041},{"lat":47.0652989,"lon":9.5071664},{"lat":47.0653474,"lon":9.5071311},{"lat":47.0653262,"lon":9.5070688}]},{"type":"way","id":4434,"tags":{"building":"yes"},"nodes":[47951,47913,47958,47999,47951],"geometry":[{"lat":47.0649431,"lon":9.5061947},{"lat":47.0648785,"lon":9.5062622},{"lat":47.064951,"lon":9.5064117},{"lat":47.0650156,"lon":9.5063442},{"lat":47.0649431,"lon":9.5061947}]},{"type":"way","id":4435,"tags":{"building":"yes"},"nodes":[49001,48950,48956,49010,49001],"geometry":[{"lat":47.0666217,"lon":9.504707},{"lat":47.0665279,"lon":9.5047296},{"lat":47.0665418,"lon":9.5048535},{"lat":47.0666355,"lon":9.5048309},{"lat":47.0666217,"lon":9.504707}]},{"type":"way","id":4436,"tags":{"building":"yes"},"nodes":[50638,50615,50617,50639,50638],"geometry":[{"lat":47.0692403,"lon":9.5087358},{"lat":47.0692101,"lon":9.5087378},{"lat":47.069211,"lon":9.5087706},{"lat":47.0692412,"lon":9.5087686},{"lat":47.0692403,"lon":9.5087358}]},{"type":"way","id":4439,"tags":{"building":"yes"},"nodes":[47694,47614,47644,47736,47694],"geometry":[{"lat":47.0645873,"lon":9.4945703},{"lat":47.0644774,"lon":9.494656},{"lat":47.0645198,"lon":9.4947733},{"lat":47.0646298,"lon":9.4946876},{"lat":47.0645873,"lon":9.4945703}]},{"type":"way","id":4440,"tags":{"building":"yes"},"nodes":[46898,46801,46835,46925,46898],"geometry":[{"lat":47.0635065,"lon":9.4947414},{"lat":47.0633835,"lon":9.4948297},{"lat":47.0634188,"lon":9.4949355},{"lat":47.0635418,"lon":9.4948472},{"lat":47.0635065,"lon":9.4947414}]},{"type":"way","id":4442,"tags":{"building":"yes"},"nodes":[51953,51939,51959,51969,51953],"geometry":[{"lat":47.0739463,"lon":9.5103644},{"lat":47.0738621,"lon":9.5102637},{"lat":47.0739984,"lon":9.5100181},{"lat":47.0740825,"lon":9.5101188},{"lat":47.0739463,"lon":9.5103644}]},{"type":"way","id":4444,"tags":{"building":"yes"},"nodes":[51652,51629,51617,51642,51652],"geometry":[{"lat":47.0718716,"lon":9.5086991},{"lat":47.0717665,"lon":9.5086404},{"lat":47.0717307,"lon":9.5087785},{"lat":47.0718358,"lon":9.5088372},{"lat":47.0718716,"lon":9.5086991}]},{"type":"way","id":4445,"tags":{"building":"yes"},"nodes":[43841,43878,43837,43797,43841],"geometry":[{"lat":47.0600273,"lon":9.4929886},{"lat":47.0600824,"lon":9.4930564},{"lat":47.0600211,"lon":9.4931637},{"lat":47.059966,"lon":9.4930959},{"lat":47.0600273,"lon":9.4929886}]},{"type":"way","id":4446,"tags":{"building":"yes"},"nodes":[45118,45044,45018,45092,45118],"geometry":[{"lat":47.0615936,"lon":9.512418},{"lat":47.0614807,"lon":9.5123562},{"lat":47.0614493,"lon":9.5124799},{"lat":47.0615622,"lon":9.5125417},{"lat":47.0615936,"lon":9.512418}]},{"type":"way","id":4447,"tags":{"building":"yes"},"nodes":[46512,46406,46431,46547,46512],"geometry":[{"lat":47.0631244,"lon":9.4936659},{"lat":47.0630277,"lon":9.4937388},{"lat":47.0630572,"lon":9.4938231},{"lat":47.0631539,"lon":9.4937503},{"lat":47.0631244,"lon":9.4936659}]},{"type":"way","id":4448,"tags":{"building":"yes"},"nodes":[44583,44544,44588,44629,44583],"geometry":[{"lat":47.0609734,"lon":9.4975993},{"lat":47.0609337,"lon":9.4976401},{"lat":47.0609781,"lon":9.4977334},{"lat":47.0610178,"lon":9.4976926},{"lat":47.0609734,"lon":9.4975993}]},{"type":"way","id":4450,"tags":{"building":"yes"},"nodes":[45066,44991,45032,45094,45066],"geometry":[{"lat":47.0615226,"lon":9.4979047},{"lat":47.0614218,"lon":9.4980039},{"lat":47.0614657,"lon":9.4981},{"lat":47.0615665,"lon":9.4980008},{"lat":47.0615226,"lon":9.4979047}]},{"type":"way","id":4451,"tags":{"building":"yes"},"nodes":[48228,48186,48208,48262,48228],"geometry":[{"lat":47.0653548,"lon":9.5063456},{"lat":47.0652735,"lon":9.5064193},{"lat":47.0653254,"lon":9.5065427},{"lat":47.0654067,"lon":9.5064691},{"lat":47.0653548,"lon":9.5063456}]},{"type":"way","id":4453,"tags":{"building":"yes"},"nodes":[50909,50869,50864,50905,50909],"geometry":[{"lat":47.0698375,"lon":9.510909},{"lat":47.0697316,"lon":9.5108859},{"lat":47.069715,"lon":9.51105},{"lat":47.0698209,"lon":9.511073},{"lat":47.0698375,"lon":9.510909}]},{"type":"way","id":4454,"tags":{"building":"yes"},"nodes":[50642,50595,50589,50641,50642],"geometry":[{"lat":47.0692473,"lon":9.5104362},{"lat":47.0691909,"lon":9.5104311},{"lat":47.0691875,"lon":9.5105109},{"lat":47.069244,"lon":9.5105159},{"lat":47.0692473,"lon":9.5104362}]},{"type":"way","id":4455,"tags":{"building":"yes"},"nodes":[45141,45116,45124,45157,45141],"geometry":[{"lat":47.0616191,"lon":9.4929393},{"lat":47.0615911,"lon":9.49296},{"lat":47.0616038,"lon":9.4929971},{"lat":47.0616318,"lon":9.4929764},{"lat":47.0616191,"lon":9.4929393}]},{"type":"way","id":4459,"tags":{"building":"yes"},"nodes":[46264,46176,46187,46282,46264],"geometry":[{"lat":47.0628663,"lon":9.4999372},{"lat":47.0627587,"lon":9.4999716},{"lat":47.0627746,"lon":9.5000782},{"lat":47.0628821,"lon":9.5000437},{"lat":47.0628663,"lon":9.4999372}]},{"type":"way","id":4460,"tags":{"building":"yes"},"nodes":[45257,45278,45266,45241,45257],"geometry":[{"lat":47.0617245,"lon":9.4921554},{"lat":47.0617489,"lon":9.4921831},{"lat":47.061732,"lon":9.4922149},{"lat":47.0617077,"lon":9.4921872},{"lat":47.0617245,"lon":9.4921554}]},{"type":"way","id":4462,"tags":{"building":"yes"},"nodes":[47291,47242,47268,47320,47291],"geometry":[{"lat":47.064038,"lon":9.5130929},{"lat":47.0639698,"lon":9.5131232},{"lat":47.0640004,"lon":9.5132717},{"lat":47.0640686,"lon":9.5132415},{"lat":47.064038,"lon":9.5130929}]},{"type":"way","id":4463,"tags":{"building":"yes"},"nodes":[49332,49297,49335,49366,49332],"geometry":[{"lat":47.0671745,"lon":9.5037049},{"lat":47.0671133,"lon":9.5038001},{"lat":47.0671755,"lon":9.503898},{"lat":47.0672266,"lon":9.5038135},{"lat":47.0671745,"lon":9.5037049}]},{"type":"way","id":4465,"tags":{"building":"yes"},"nodes":[51520,51511,51518,51530,51520],"geometry":[{"lat":47.0713569,"lon":9.5041092},{"lat":47.071328,"lon":9.504129},{"lat":47.0713499,"lon":9.5041978},{"lat":47.0713787,"lon":9.5041781},{"lat":47.0713569,"lon":9.5041092}]},{"type":"way","id":4466,"tags":{"building":"yes"},"nodes":[49049,48988,48995,49056,49049],"geometry":[{"lat":47.0666853,"lon":9.5056913},{"lat":47.0665971,"lon":9.5057024},{"lat":47.0666074,"lon":9.5058787},{"lat":47.0666956,"lon":9.5058677},{"lat":47.0666853,"lon":9.5056913}]},{"type":"way","id":4467,"tags":{"building":"yes"},"nodes":[49639,49602,49638,49668,49639],"geometry":[{"lat":47.0676893,"lon":9.4997949},{"lat":47.0676398,"lon":9.4998301},{"lat":47.0676869,"lon":9.4999733},{"lat":47.0677365,"lon":9.4999381},{"lat":47.0676893,"lon":9.4997949}]},{"type":"way","id":4468,"tags":{"building":"yes"},"nodes":[51546,51494,51475,51529,51546],"geometry":[{"lat":47.0714225,"lon":9.5084254},{"lat":47.0712821,"lon":9.508983},{"lat":47.0712344,"lon":9.5089571},{"lat":47.0713748,"lon":9.5083995},{"lat":47.0714225,"lon":9.5084254}]},{"type":"way","id":4469,"tags":{"building":"yes"},"nodes":[48039,47988,48009,48063,48039],"geometry":[{"lat":47.0650668,"lon":9.5124865},{"lat":47.064994,"lon":9.5125185},{"lat":47.0650261,"lon":9.5126755},{"lat":47.0650989,"lon":9.5126435},{"lat":47.0650668,"lon":9.5124865}]},{"type":"way","id":4470,"tags":{"building":"yes"},"nodes":[43499,43556,43545,43486,43499],"geometry":[{"lat":47.0595537,"lon":9.4927595},{"lat":47.0596444,"lon":9.4928513},{"lat":47.0596276,"lon":9.4928871},{"lat":47.0595369,"lon":9.4927953},{"lat":47.0595537,"lon":9.4927595}]},{"type":"way","id":4471,"tags":{"building":"yes"},"nodes":[49355,49293,49317,49376,49355],"geometry":[{"lat":47.0672155,"lon":9.5114226},{"lat":47.0671094,"lon":9.5114761},{"lat":47.0671438,"lon":9.511623},{"lat":47.0672499,"lon":9.5115695},{"lat":47.0672155,"lon":9.5114226}]},{"type":"way","id":4472,"tags":{"building":"yes"},"nodes":[47196,47251,47183,47125,47196],"geometry":[{"lat":47.0639018,"lon":9.4963388},{"lat":47.0639782,"lon":9.4965791},{"lat":47.0638768,"lon":9.4966486},{"lat":47.0638004,"lon":9.4964082},{"lat":47.0639018,"lon":9.4963388}]},{"type":"way","id":4473,"tags":{"building":"yes"},"nodes":[51137,51091,51075,51122,51137],"geometry":[{"lat":47.0703827,"lon":9.5099237},{"lat":47.0702954,"lon":9.5099032},{"lat":47.0702677,"lon":9.5101586},{"lat":47.070355,"lon":9.5101791},{"lat":47.0703827,"lon":9.5099237}]},{"type":"way","id":4474,"tags":{"building":"yes"},"nodes":[50092,50070,50079,50098,50092],"geometry":[{"lat":47.0684085,"lon":9.4993594},{"lat":47.068366,"lon":9.4993931},{"lat":47.0683852,"lon":9.4994454},{"lat":47.0684277,"lon":9.4994117},{"lat":47.0684085,"lon":9.4993594}]},{"type":"way","id":4475,"tags":{"building":"yes"},"nodes":[47461,47439,47448,47466,47461],"geometry":[{"lat":47.0642758,"lon":9.5087036},{"lat":47.0642488,"lon":9.5087201},{"lat":47.0642569,"lon":9.5087487},{"lat":47.064284,"lon":9.5087321},{"lat":47.0642758,"lon":9.5087036}]},{"type":"way","id":4476,"tags":{"building":"yes"},"nodes":[49123,49064,49070,49130,49123],"geometry":[{"lat":47.0667784,"lon":9.5042784},{"lat":47.0667045,"lon":9.5042948},{"lat":47.0667148,"lon":9.5043949},{"lat":47.0667887,"lon":9.5043785},{"lat":47.0667784,"lon":9.5042784}]},{"type":"way","id":4478,"tags":{"building":"yes"},"nodes":[43746,43694,43698,43750,43746],"geometry":[{"lat":47.0599041,"lon":9.4959881},{"lat":47.0598387,"lon":9.4959906},{"lat":47.0598416,"lon":9.4961535},{"lat":47.0599069,"lon":9.496151},{"lat":47.0599041,"lon":9.4959881}]},{"type":"way","id":4479,"tags":{"building":"yes"},"nodes":[46859,46664,46727,46902,46859],"geometry":[{"lat":47.0634532,"lon":9.4954002},{"lat":47.06326,"lon":9.4955423},{"lat":47.0633175,"lon":9.4957107},{"lat":47.0635107,"lon":9.4955685},{"lat":47.0634532,"lon":9.4954002}]},{"type":"way","id":4481,"tags":{"building":"yes"},"nodes":[51748,51734,51740,51756,51748],"geometry":[{"lat":47.0723697,"lon":9.5099601},{"lat":47.0722745,"lon":9.5098833},{"lat":47.0723193,"lon":9.5097636},{"lat":47.0724145,"lon":9.5098404},{"lat":47.0723697,"lon":9.5099601}]},{"type":"way","id":4483,"tags":{"building":"yes"},"nodes":[51749,51725,51719,51747,51749],"geometry":[{"lat":47.0723851,"lon":9.5105337},{"lat":47.0722222,"lon":9.5104589},{"lat":47.0721954,"lon":9.5105844},{"lat":47.0723584,"lon":9.5106592},{"lat":47.0723851,"lon":9.5105337}]},{"type":"way","id":4485,"tags":{"building":"yes"},"nodes":[46183,46153,46164,46189,46183],"geometry":[{"lat":47.062766,"lon":9.4947011},{"lat":47.0627358,"lon":9.4947212},{"lat":47.0627446,"lon":9.4947499},{"lat":47.0627749,"lon":9.4947297},{"lat":47.062766,"lon":9.4947011}]},{"type":"way","id":4486,"tags":{"building":"yes"},"nodes":[51093,51084,51077,51088,51093],"geometry":[{"lat":47.0703023,"lon":9.5070464},{"lat":47.0702846,"lon":9.5070372},{"lat":47.0702708,"lon":9.5070944},{"lat":47.0702884,"lon":9.5071036},{"lat":47.0703023,"lon":9.5070464}]},{"type":"way","id":4488,"tags":{"building":"yes"},"nodes":[46725,46634,46672,46756,46725],"geometry":[{"lat":47.0633149,"lon":9.5132481},{"lat":47.0632373,"lon":9.5132806},{"lat":47.0632662,"lon":9.5134295},{"lat":47.0633438,"lon":9.513397},{"lat":47.0633149,"lon":9.5132481}]},{"type":"way","id":4490,"tags":{"building":"yes"},"nodes":[51371,51359,51353,51366,51371],"geometry":[{"lat":47.0709511,"lon":9.510617},{"lat":47.070919,"lon":9.510606},{"lat":47.0709075,"lon":9.5106789},{"lat":47.0709395,"lon":9.5106899},{"lat":47.0709511,"lon":9.510617}]},{"type":"way","id":4491,"tags":{"building":"yes"},"nodes":[46794,46820,46795,46762,46794],"geometry":[{"lat":47.0633784,"lon":9.4973813},{"lat":47.063407,"lon":9.4974625},{"lat":47.0633792,"lon":9.4974836},{"lat":47.0633506,"lon":9.4974023},{"lat":47.0633784,"lon":9.4973813}]},{"type":"way","id":4493,"tags":{"building":"yes"},"nodes":[48297,48140,48168,48324,48297],"geometry":[{"lat":47.0654526,"lon":9.5089091},{"lat":47.0652063,"lon":9.5090613},{"lat":47.0652474,"lon":9.5092047},{"lat":47.0654937,"lon":9.5090524},{"lat":47.0654526,"lon":9.5089091}]},{"type":"way","id":4494,"tags":{"building":"yes"},"nodes":[45168,45071,45091,45204,45168],"geometry":[{"lat":47.0616467,"lon":9.4991154},{"lat":47.0615343,"lon":9.4991672},{"lat":47.0615616,"lon":9.4992951},{"lat":47.0616741,"lon":9.4992433},{"lat":47.0616467,"lon":9.4991154}]},{"type":"way","id":4495,"tags":{"building":"yes"},"nodes":[47471,47424,47408,47453,47471],"geometry":[{"lat":47.0642932,"lon":9.4987411},{"lat":47.064223,"lon":9.498714},{"lat":47.0641939,"lon":9.4988771},{"lat":47.064264,"lon":9.4989041},{"lat":47.0642932,"lon":9.4987411}]},{"type":"way","id":4496,"tags":{"building":"yes"},"nodes":[45917,45866,45907,45954,45917],"geometry":[{"lat":47.0624606,"lon":9.4986907},{"lat":47.0624117,"lon":9.4987389},{"lat":47.0624482,"lon":9.4988188},{"lat":47.0624971,"lon":9.4987706},{"lat":47.0624606,"lon":9.4986907}]},{"type":"way","id":4497,"tags":{"building":"yes"},"nodes":[51034,51012,51008,51028,51034],"geometry":[{"lat":47.0701399,"lon":9.5094412},{"lat":47.0700773,"lon":9.5094279},{"lat":47.0700653,"lon":9.5095505},{"lat":47.0701279,"lon":9.5095638},{"lat":47.0701399,"lon":9.5094412}]},{"type":"way","id":4498,"tags":{"building":"yes"},"nodes":[48642,48596,48577,48628,48642],"geometry":[{"lat":47.0659776,"lon":9.5124178},{"lat":47.0659022,"lon":9.5124475},{"lat":47.0658755,"lon":9.5123014},{"lat":47.0659508,"lon":9.512272},{"lat":47.0659776,"lon":9.5124178}]},{"type":"way","id":4500,"tags":{"building":"yes"},"nodes":[44310,44232,44236,44314,44310],"geometry":[{"lat":47.0606665,"lon":9.5009017},{"lat":47.0605685,"lon":9.5009094},{"lat":47.0605728,"lon":9.5010297},{"lat":47.0606709,"lon":9.501022},{"lat":47.0606665,"lon":9.5009017}]},{"type":"way","id":4501,"tags":{"building":"yes"},"nodes":[48213,48162,48194,48240,48213],"geometry":[{"lat":47.0653284,"lon":9.4981126},{"lat":47.0652426,"lon":9.4981753},{"lat":47.0652906,"lon":9.4983171},{"lat":47.0653765,"lon":9.4982544},{"lat":47.0653284,"lon":9.4981126}]},{"type":"way","id":4503,"tags":{"building":"yes"},"nodes":[46541,46468,46454,46529,46541],"geometry":[{"lat":47.0631513,"lon":9.5131392},{"lat":47.0630868,"lon":9.5131296},{"lat":47.0630747,"lon":9.5133031},{"lat":47.0631391,"lon":9.5133127},{"lat":47.0631513,"lon":9.5131392}]},{"type":"way","id":4504,"tags":{"building":"yes"},"nodes":[48945,48882,48873,48935,48945],"geometry":[{"lat":47.0665216,"lon":9.5118943},{"lat":47.0664137,"lon":9.5119237},{"lat":47.0663964,"lon":9.5117862},{"lat":47.0665042,"lon":9.5117568},{"lat":47.0665216,"lon":9.5118943}]},{"type":"way","id":4505,"tags":{"building":"yes"},"nodes":[46319,46289,46287,46316,46319],"geometry":[{"lat":47.0629326,"lon":9.4985457},{"lat":47.0628901,"lon":9.4985431},{"lat":47.062888,"lon":9.4986176},{"lat":47.0629305,"lon":9.4986202},{"lat":47.0629326,"lon":9.4985457}]},{"type":"way","id":4507,"tags":{"building":"yes"},"nodes":[47820,47774,47787,47829,47820],"geometry":[{"lat":47.0647135,"lon":9.5057303},{"lat":47.0646668,"lon":9.5057543},{"lat":47.0646766,"lon":9.5057954},{"lat":47.0647232,"lon":9.5057714},{"lat":47.0647135,"lon":9.5057303}]},{"type":"way","id":4508,"tags":{"building":"yes"},"nodes":[46357,46252,46276,46383,46357],"geometry":[{"lat":47.0629791,"lon":9.5127542},{"lat":47.0628502,"lon":9.5128089},{"lat":47.0628798,"lon":9.5129593},{"lat":47.0630087,"lon":9.5129046},{"lat":47.0629791,"lon":9.5127542}]},{"type":"way","id":4510,"tags":{"building":"yes"},"nodes":[49178,49138,49119,49164,49178],"geometry":[{"lat":47.066893,"lon":9.5117384},{"lat":47.0668031,"lon":9.5117798},{"lat":47.0667698,"lon":9.511624},{"lat":47.0668597,"lon":9.5115826},{"lat":47.066893,"lon":9.5117384}]},{"type":"way","id":4511,"tags":{"building":"yes"},"nodes":[50263,50231,50254,50279,50263],"geometry":[{"lat":47.0686578,"lon":9.5004971},{"lat":47.0686228,"lon":9.5005241},{"lat":47.0686452,"lon":9.5005866},{"lat":47.0686802,"lon":9.5005596},{"lat":47.0686578,"lon":9.5004971}]},{"type":"way","id":4512,"tags":{"building":"yes"},"nodes":[44391,44331,44368,44421,44391],"geometry":[{"lat":47.0607731,"lon":9.4968745},{"lat":47.0606903,"lon":9.4969412},{"lat":47.0607349,"lon":9.4970604},{"lat":47.0608177,"lon":9.4969938},{"lat":47.0607731,"lon":9.4968745}]},{"type":"way","id":4513,"tags":{"building":"yes"},"nodes":[48450,48364,48386,48465,48450],"geometry":[{"lat":47.0656889,"lon":9.5040208},{"lat":47.0655627,"lon":9.5040765},{"lat":47.065592,"lon":9.5042192},{"lat":47.0657181,"lon":9.5041635},{"lat":47.0656889,"lon":9.5040208}]},{"type":"way","id":4514,"tags":{"building":"yes"},"nodes":[51396,51382,51339,51360,51396],"geometry":[{"lat":47.0710385,"lon":9.5083781},{"lat":47.0709802,"lon":9.5083492},{"lat":47.0708615,"lon":9.5088944},{"lat":47.07092,"lon":9.5089192},{"lat":47.0710385,"lon":9.5083781}]},{"type":"way","id":4516,"tags":{"building":"yes"},"nodes":[47118,46993,47011,47135,47118],"geometry":[{"lat":47.0637944,"lon":9.5115105},{"lat":47.063623,"lon":9.5115865},{"lat":47.0636416,"lon":9.5116772},{"lat":47.063813,"lon":9.5116012},{"lat":47.0637944,"lon":9.5115105}]},{"type":"way","id":4517,"tags":{"building":"yes"},"nodes":[47870,47765,47794,47885,47870],"geometry":[{"lat":47.0647883,"lon":9.5119927},{"lat":47.0646586,"lon":9.5120522},{"lat":47.0646869,"lon":9.5121848},{"lat":47.0648166,"lon":9.5121253},{"lat":47.0647883,"lon":9.5119927}]},{"type":"way","id":4519,"tags":{"building":"yes"},"nodes":[48673,48618,48636,48691,48673],"geometry":[{"lat":47.0660167,"lon":9.5120868},{"lat":47.0659392,"lon":9.5121204},{"lat":47.0659665,"lon":9.5122558},{"lat":47.0660439,"lon":9.5122222},{"lat":47.0660167,"lon":9.5120868}]},{"type":"way","id":4520,"tags":{"building":"yes"},"nodes":[47944,47903,47916,47964,47944],"geometry":[{"lat":47.0649363,"lon":9.5126955},{"lat":47.0648544,"lon":9.5127314},{"lat":47.064882,"lon":9.5128668},{"lat":47.0649632,"lon":9.5128322},{"lat":47.0649363,"lon":9.5126955}]},{"type":"way","id":4522,"tags":{"building":"yes"},"nodes":[50770,50732,50755,50795,50770],"geometry":[{"lat":47.0694983,"lon":9.5015763},{"lat":47.0693965,"lon":9.5016553},{"lat":47.0694396,"lon":9.5017751},{"lat":47.0695414,"lon":9.5016961},{"lat":47.0694983,"lon":9.5015763}]},{"type":"way","id":4523,"tags":{"building":"yes"},"nodes":[44717,44566,44619,44751,44717],"geometry":[{"lat":47.061103,"lon":9.4971484},{"lat":47.0609641,"lon":9.4972567},{"lat":47.0610081,"lon":9.4973786},{"lat":47.0611471,"lon":9.4972702},{"lat":47.061103,"lon":9.4971484}]},{"type":"way","id":4525,"tags":{"building":"yes"},"nodes":[44888,44790,44813,44904,44888],"geometry":[{"lat":47.0613002,"lon":9.4938276},{"lat":47.0611958,"lon":9.4938567},{"lat":47.0612167,"lon":9.4940183},{"lat":47.0613211,"lon":9.4939892},{"lat":47.0613002,"lon":9.4938276}]},{"type":"way","id":4526,"tags":{"building":"yes"},"nodes":[45238,45119,45182,45294,45238],"geometry":[{"lat":47.0617062,"lon":9.4969941},{"lat":47.061597,"lon":9.4970937},{"lat":47.0616579,"lon":9.4972378},{"lat":47.0617672,"lon":9.4971382},{"lat":47.0617062,"lon":9.4969941}]},{"type":"way","id":4527,"tags":{"building":"yes"},"nodes":[47538,47487,47539,47583,47538],"geometry":[{"lat":47.0643746,"lon":9.5125959},{"lat":47.06431,"lon":9.5126678},{"lat":47.0643747,"lon":9.512793},{"lat":47.0644393,"lon":9.5127212},{"lat":47.0643746,"lon":9.5125959}]},{"type":"way","id":4528,"tags":{"building":"yes"},"nodes":[49970,49883,49882,49968,49970],"geometry":[{"lat":47.0682144,"lon":9.5091733},{"lat":47.0680892,"lon":9.5091717},{"lat":47.0680885,"lon":9.5092965},{"lat":47.0682136,"lon":9.5092981},{"lat":47.0682144,"lon":9.5091733}]},{"type":"way","id":4529,"tags":{"building":"yes"},"nodes":[44076,44033,44028,44067,44076],"geometry":[{"lat":47.0603634,"lon":9.4950449},{"lat":47.0602979,"lon":9.4950129},{"lat":47.0602795,"lon":9.4950937},{"lat":47.0603451,"lon":9.4951258},{"lat":47.0603634,"lon":9.4950449}]},{"type":"way","id":4530,"tags":{"building":"yes"},"nodes":[48490,48447,48429,48471,48490],"geometry":[{"lat":47.0657537,"lon":9.5121747},{"lat":47.0656869,"lon":9.512199},{"lat":47.0656572,"lon":9.5120237},{"lat":47.065724,"lon":9.5119993},{"lat":47.0657537,"lon":9.5121747}]},{"type":"way","id":4531,"tags":{"building":"yes"},"nodes":[50680,50627,50644,50695,50680],"geometry":[{"lat":47.0693026,"lon":9.5045022},{"lat":47.0692261,"lon":9.5045505},{"lat":47.0692526,"lon":9.5046408},{"lat":47.069329,"lon":9.5045925},{"lat":47.0693026,"lon":9.5045022}]},{"type":"way","id":4532,"tags":{"building":"yes"},"nodes":[49386,49342,49344,49387,49386],"geometry":[{"lat":47.0672626,"lon":9.5100909},{"lat":47.0671938,"lon":9.5100973},{"lat":47.0671969,"lon":9.5101685},{"lat":47.0672657,"lon":9.5101621},{"lat":47.0672626,"lon":9.5100909}]},{"type":"way","id":4533,"tags":{"building":"yes"},"nodes":[48647,48574,48598,48666,48647],"geometry":[{"lat":47.0659821,"lon":9.504047},{"lat":47.065874,"lon":9.5040917},{"lat":47.0659042,"lon":9.5042497},{"lat":47.0660124,"lon":9.504205},{"lat":47.0659821,"lon":9.504047}]},{"type":"way","id":4534,"tags":{"building":"yes"},"nodes":[50047,50000,49979,50022,50047],"geometry":[{"lat":47.0683357,"lon":9.5053783},{"lat":47.0682679,"lon":9.5053436},{"lat":47.0682327,"lon":9.5054915},{"lat":47.0683004,"lon":9.5055263},{"lat":47.0683357,"lon":9.5053783}]},{"type":"way","id":4535,"tags":{"building":"yes"},"nodes":[51197,51167,51182,51209,51197],"geometry":[{"lat":47.0704856,"lon":9.5033155},{"lat":47.0704402,"lon":9.5033612},{"lat":47.0704655,"lon":9.5034154},{"lat":47.070511,"lon":9.5033696},{"lat":47.0704856,"lon":9.5033155}]},{"type":"way","id":4537,"tags":{"building":"yes"},"nodes":[46237,46205,46222,46260,46237],"geometry":[{"lat":47.0628348,"lon":9.4928098},{"lat":47.06279,"lon":9.4928435},{"lat":47.0628152,"lon":9.4929157},{"lat":47.06286,"lon":9.4928821},{"lat":47.0628348,"lon":9.4928098}]},{"type":"way","id":4538,"tags":{"building":"yes"},"nodes":[45264,45167,45134,45227,45264],"geometry":[{"lat":47.0617293,"lon":9.5118373},{"lat":47.0616439,"lon":9.5117941},{"lat":47.0616127,"lon":9.5119269},{"lat":47.061698,"lon":9.5119701},{"lat":47.0617293,"lon":9.5118373}]},{"type":"way","id":4540,"tags":{"building":"yes"},"nodes":[48583,48562,48570,48590,48583],"geometry":[{"lat":47.0658856,"lon":9.5102295},{"lat":47.0658587,"lon":9.5102452},{"lat":47.0658681,"lon":9.5102796},{"lat":47.0658949,"lon":9.5102638},{"lat":47.0658856,"lon":9.5102295}]},{"type":"way","id":4541,"tags":{"building":"yes"},"nodes":[47814,47702,47791,47874,47814],"geometry":[{"lat":47.0647074,"lon":9.4972127},{"lat":47.0645984,"lon":9.4972951},{"lat":47.064683,"lon":9.4975361},{"lat":47.0647919,"lon":9.4974537},{"lat":47.0647074,"lon":9.4972127}]},{"type":"way","id":4542,"tags":{"building":"yes"},"nodes":[45080,45062,45088,45117,45080],"geometry":[{"lat":47.0615506,"lon":9.4983237},{"lat":47.061518,"lon":9.4983551},{"lat":47.0615592,"lon":9.4984474},{"lat":47.0615918,"lon":9.498416},{"lat":47.0615506,"lon":9.4983237}]},{"type":"way","id":4543,"tags":{"building":"yes"},"nodes":[48456,48415,48438,48480,48456],"geometry":[{"lat":47.065701,"lon":9.5071567},{"lat":47.0656383,"lon":9.5072168},{"lat":47.0656749,"lon":9.5072992},{"lat":47.0657376,"lon":9.5072391},{"lat":47.065701,"lon":9.5071567}]},{"type":"way","id":4544,"tags":{"building":"yes"},"nodes":[48734,48703,48735,48769,48734],"geometry":[{"lat":47.0661235,"lon":9.5118437},{"lat":47.0660663,"lon":9.5119018},{"lat":47.0661248,"lon":9.5120257},{"lat":47.0661819,"lon":9.5119676},{"lat":47.0661235,"lon":9.5118437}]},{"type":"way","id":4545,"tags":{"building":"yes"},"nodes":[45621,45572,45605,45662,45621],"geometry":[{"lat":47.0621576,"lon":9.4977777},{"lat":47.0620877,"lon":9.4978415},{"lat":47.0621361,"lon":9.4979556},{"lat":47.0622059,"lon":9.4978918},{"lat":47.0621576,"lon":9.4977777}]},{"type":"way","id":4546,"tags":{"building":"yes"},"nodes":[49836,49763,49784,49857,49836],"geometry":[{"lat":47.0680128,"lon":9.5110185},{"lat":47.0678944,"lon":9.5110835},{"lat":47.0679304,"lon":9.5112247},{"lat":47.0680488,"lon":9.5111596},{"lat":47.0680128,"lon":9.5110185}]},{"type":"way","id":4547,"tags":{"building":"yes"},"nodes":[44572,44499,44448,44529,44572],"geometry":[{"lat":47.0609665,"lon":9.5127108},{"lat":47.060899,"lon":9.5126447},{"lat":47.0608531,"lon":9.5127455},{"lat":47.0609206,"lon":9.5128117},{"lat":47.0609665,"lon":9.5127108}]},{"type":"way","id":4548,"tags":{"building":"yes"},"nodes":[46450,46371,46402,46483,46450],"geometry":[{"lat":47.063073,"lon":9.4997131},{"lat":47.0629956,"lon":9.4997437},{"lat":47.0630241,"lon":9.4998994},{"lat":47.0631016,"lon":9.4998688},{"lat":47.063073,"lon":9.4997131}]},{"type":"way","id":4549,"tags":{"building":"yes"},"nodes":[45473,45405,45299,45357,45473],"geometry":[{"lat":47.0619789,"lon":9.4918772},{"lat":47.0619031,"lon":9.4918004},{"lat":47.0617713,"lon":9.4920807},{"lat":47.0618471,"lon":9.4921574},{"lat":47.0619789,"lon":9.4918772}]},{"type":"way","id":4551,"tags":{"building":"yes"},"nodes":[50073,49998,50027,50093,50073],"geometry":[{"lat":47.0683684,"lon":9.4978769},{"lat":47.0682662,"lon":9.4979483},{"lat":47.0683076,"lon":9.4980761},{"lat":47.0684098,"lon":9.4980047},{"lat":47.0683684,"lon":9.4978769}]},{"type":"way","id":4552,"tags":{"building":"yes"},"nodes":[44315,44221,44245,44346,44315],"geometry":[{"lat":47.0606724,"lon":9.5117195},{"lat":47.0605561,"lon":9.5117743},{"lat":47.0605853,"lon":9.5119079},{"lat":47.0607016,"lon":9.5118531},{"lat":47.0606724,"lon":9.5117195}]},{"type":"way","id":4553,"tags":{"building":"yes"},"nodes":[51792,51785,51791,51798,51792],"geometry":[{"lat":47.0727689,"lon":9.5024795},{"lat":47.0726936,"lon":9.5025258},{"lat":47.0727426,"lon":9.5026978},{"lat":47.0728179,"lon":9.5026515},{"lat":47.0727689,"lon":9.5024795}]},{"type":"way","id":4554,"tags":{"building":"yes"},"nodes":[45275,45254,45272,45297,45275],"geometry":[{"lat":47.0617462,"lon":9.494614},{"lat":47.0617176,"lon":9.4946324},{"lat":47.0617407,"lon":9.4947099},{"lat":47.0617693,"lon":9.4946915},{"lat":47.0617462,"lon":9.494614}]},{"type":"way","id":4555,"tags":{"building":"yes"},"nodes":[43934,43891,43892,43937,43934],"geometry":[{"lat":47.0601598,"lon":9.4960384},{"lat":47.0601064,"lon":9.4960401},{"lat":47.0601074,"lon":9.4961112},{"lat":47.0601609,"lon":9.4961094},{"lat":47.0601598,"lon":9.4960384}]},{"type":"way","id":4557,"tags":{"building":"yes"},"nodes":[45458,45398,45422,45480,45458],"geometry":[{"lat":47.061958,"lon":9.4978423},{"lat":47.0618931,"lon":9.4978967},{"lat":47.0619191,"lon":9.4979637},{"lat":47.0619841,"lon":9.4979093},{"lat":47.061958,"lon":9.4978423}]},{"type":"way","id":4558,"tags":{"building":"yes"},"nodes":[43671,43625,43692,43735,43671],"geometry":[{"lat":47.0598091,"lon":9.4926759},{"lat":47.0597545,"lon":9.492774},{"lat":47.0598345,"lon":9.4928699},{"lat":47.0598891,"lon":9.4927718},{"lat":47.0598091,"lon":9.4926759}]},{"type":"way","id":4559,"tags":{"building":"yes"},"nodes":[51957,51955,51968,51970,51957],"geometry":[{"lat":47.0739854,"lon":9.5084863},{"lat":47.0739555,"lon":9.5085812},{"lat":47.0740738,"lon":9.5086614},{"lat":47.0741036,"lon":9.5085665},{"lat":47.0739854,"lon":9.5084863}]},{"type":"way","id":4560,"tags":{"building":"yes"},"nodes":[45541,45429,45443,45553,45541],"geometry":[{"lat":47.0620463,"lon":9.5007323},{"lat":47.0619302,"lon":9.5007432},{"lat":47.0619438,"lon":9.5010542},{"lat":47.0620599,"lon":9.5010433},{"lat":47.0620463,"lon":9.5007323}]},{"type":"way","id":4561,"tags":{"building":"yes"},"nodes":[50274,50227,50228,50278,50274],"geometry":[{"lat":47.0686734,"lon":9.4995577},{"lat":47.068617,"lon":9.4996073},{"lat":47.0686219,"lon":9.4996194},{"lat":47.0686783,"lon":9.4995697},{"lat":47.0686734,"lon":9.4995577}]},{"type":"way","id":4562,"tags":{"building":"yes"},"nodes":[48105,48063,48039,48090,48105],"geometry":[{"lat":47.0651638,"lon":9.5126149},{"lat":47.0650989,"lon":9.5126435},{"lat":47.0650668,"lon":9.5124865},{"lat":47.0651345,"lon":9.5124603},{"lat":47.0651638,"lon":9.5126149}]},{"type":"way","id":4563,"tags":{"building":"yes"},"nodes":[50413,50373,50363,50411,50413],"geometry":[{"lat":47.0688733,"lon":9.50602},{"lat":47.068794,"lon":9.5059923},{"lat":47.0687809,"lon":9.506073},{"lat":47.0688602,"lon":9.5061007},{"lat":47.0688733,"lon":9.50602}]},{"type":"way","id":4565,"tags":{"building":"yes"},"nodes":[44875,44803,44852,44926,44875],"geometry":[{"lat":47.0612863,"lon":9.4951906},{"lat":47.0612093,"lon":9.4952402},{"lat":47.061265,"lon":9.4954263},{"lat":47.061342,"lon":9.4953766},{"lat":47.0612863,"lon":9.4951906}]},{"type":"way","id":4566,"tags":{"building":"yes"},"nodes":[45367,45293,45315,45393,45367],"geometry":[{"lat":47.0618585,"lon":9.4943555},{"lat":47.0617667,"lon":9.4944001},{"lat":47.0617922,"lon":9.4945132},{"lat":47.061884,"lon":9.4944686},{"lat":47.0618585,"lon":9.4943555}]},{"type":"way","id":4567,"tags":{"building":"yes"},"nodes":[47816,47763,47688,47741,47816],"geometry":[{"lat":47.0647086,"lon":9.5126491},{"lat":47.0646572,"lon":9.5127202},{"lat":47.0645805,"lon":9.5126007},{"lat":47.0646319,"lon":9.5125296},{"lat":47.0647086,"lon":9.5126491}]},{"type":"way","id":4568,"tags":{"building":"yes"},"nodes":[51300,51237,51222,51286,51300],"geometry":[{"lat":47.0707127,"lon":9.507971},{"lat":47.070562,"lon":9.5078878},{"lat":47.070529,"lon":9.5080165},{"lat":47.0706797,"lon":9.5080997},{"lat":47.0707127,"lon":9.507971}]},{"type":"way","id":4570,"tags":{"building":"yes"},"nodes":[45512,45423,45481,45565,45512],"geometry":[{"lat":47.062018,"lon":9.4979547},{"lat":47.0619201,"lon":9.4980295},{"lat":47.0619842,"lon":9.4982101},{"lat":47.0620821,"lon":9.4981353},{"lat":47.062018,"lon":9.4979547}]},{"type":"way","id":4572,"tags":{"building":"yes"},"nodes":[46007,45980,45992,46017,46007],"geometry":[{"lat":47.0625598,"lon":9.4925728},{"lat":47.0625334,"lon":9.4925962},{"lat":47.0625449,"lon":9.4926244},{"lat":47.0625713,"lon":9.492601},{"lat":47.0625598,"lon":9.4925728}]},{"type":"way","id":4573,"tags":{"building":"yes"},"nodes":[50394,50297,50301,50395,50394],"geometry":[{"lat":47.0688319,"lon":9.5061986},{"lat":47.0686957,"lon":9.5062084},{"lat":47.0686999,"lon":9.5063344},{"lat":47.0688361,"lon":9.5063245},{"lat":47.0688319,"lon":9.5061986}]},{"type":"way","id":4574,"tags":{"building":"yes"},"nodes":[45860,45758,45725,45828,45860],"geometry":[{"lat":47.0624077,"lon":9.5120488},{"lat":47.0623019,"lon":9.5119878},{"lat":47.0622696,"lon":9.5121089},{"lat":47.0623753,"lon":9.5121698},{"lat":47.0624077,"lon":9.5120488}]},{"type":"way","id":4575,"tags":{"building":"yes"},"nodes":[47355,47291,47320,47371,47355],"geometry":[{"lat":47.0641165,"lon":9.5130587},{"lat":47.064038,"lon":9.5130929},{"lat":47.0640686,"lon":9.5132415},{"lat":47.0641467,"lon":9.513204},{"lat":47.0641165,"lon":9.5130587}]},{"type":"way","id":4576,"tags":{"building":"yes"},"nodes":[45097,45055,45051,45082,45097],"geometry":[{"lat":47.0615689,"lon":9.5125872},{"lat":47.0615086,"lon":9.5125539},{"lat":47.0614943,"lon":9.5126099},{"lat":47.0615545,"lon":9.5126432},{"lat":47.0615689,"lon":9.5125872}]},{"type":"way","id":4577,"tags":{"building":"yes"},"nodes":[46684,46580,46618,46728,46684],"geometry":[{"lat":47.0632775,"lon":9.4935256},{"lat":47.0631829,"lon":9.4935945},{"lat":47.0632232,"lon":9.4937136},{"lat":47.0633178,"lon":9.4936447},{"lat":47.0632775,"lon":9.4935256}]},{"type":"way","id":4578,"tags":{"building":"yes"},"nodes":[50778,50727,50724,50775,50778],"geometry":[{"lat":47.0695074,"lon":9.5063843},{"lat":47.0693866,"lon":9.5063751},{"lat":47.069382,"lon":9.5065059},{"lat":47.0695028,"lon":9.5065152},{"lat":47.0695074,"lon":9.5063843}]},{"type":"way","id":4579,"tags":{"building":"yes"},"nodes":[49649,49582,49590,49660,49649],"geometry":[{"lat":47.0677123,"lon":9.5071184},{"lat":47.0676032,"lon":9.5071456},{"lat":47.067614,"lon":9.5072388},{"lat":47.0677231,"lon":9.5072117},{"lat":47.0677123,"lon":9.5071184}]},{"type":"way","id":4580,"tags":{"building":"yes"},"nodes":[50384,50304,50291,50377,50384],"geometry":[{"lat":47.0688115,"lon":9.5097702},{"lat":47.0687021,"lon":9.509754},{"lat":47.0686902,"lon":9.5099287},{"lat":47.0687995,"lon":9.5099448},{"lat":47.0688115,"lon":9.5097702}]},{"type":"way","id":4581,"tags":{"building":"yes"},"nodes":[44302,44215,44249,44330,44302],"geometry":[{"lat":47.0606515,"lon":9.499223},{"lat":47.0605521,"lon":9.4992869},{"lat":47.0605906,"lon":9.4994156},{"lat":47.0606899,"lon":9.4993517},{"lat":47.0606515,"lon":9.499223}]},{"type":"way","id":4583,"tags":{"building":"yes"},"nodes":[45135,45095,45090,45128,45135],"geometry":[{"lat":47.0616142,"lon":9.4967267},{"lat":47.0615671,"lon":9.4967116},{"lat":47.0615606,"lon":9.4967554},{"lat":47.0616077,"lon":9.4967705},{"lat":47.0616142,"lon":9.4967267}]},{"type":"way","id":4584,"tags":{"building":"yes"},"nodes":[49729,49662,49675,49757,49729],"geometry":[{"lat":47.0678494,"lon":9.501531},{"lat":47.0677253,"lon":9.5015865},{"lat":47.0677551,"lon":9.5017302},{"lat":47.0678792,"lon":9.5016748},{"lat":47.0678494,"lon":9.501531}]},{"type":"way","id":4586,"tags":{"building":"yes"},"nodes":[49432,49311,49318,49441,49432],"geometry":[{"lat":47.0673473,"lon":9.5075205},{"lat":47.0671299,"lon":9.5075595},{"lat":47.0671444,"lon":9.5077339},{"lat":47.0673618,"lon":9.5076949},{"lat":47.0673473,"lon":9.5075205}]},{"type":"way","id":4587,"tags":{"building":"yes"},"nodes":[51382,51364,51326,51339,51382],"geometry":[{"lat":47.0709802,"lon":9.5083492},{"lat":47.0709347,"lon":9.5083278},{"lat":47.070816,"lon":9.508873},{"lat":47.0708615,"lon":9.5088944},{"lat":47.0709802,"lon":9.5083492}]},{"type":"way","id":4588,"tags":{"building":"yes"},"nodes":[47332,47277,47276,47330,47332],"geometry":[{"lat":47.0640828,"lon":9.5127333},{"lat":47.0640097,"lon":9.5127328},{"lat":47.0640092,"lon":9.5128834},{"lat":47.0640823,"lon":9.5128839},{"lat":47.0640828,"lon":9.5127333}]},{"type":"way","id":4590,"tags":{"building":"yes"},"nodes":[47049,46978,47013,47079,47049],"geometry":[{"lat":47.063708,"lon":9.509578},{"lat":47.0636057,"lon":9.5096282},{"lat":47.0636432,"lon":9.5097925},{"lat":47.0637455,"lon":9.5097423},{"lat":47.063708,"lon":9.509578}]},{"type":"way","id":4591,"tags":{"building":"yes"},"nodes":[50760,50712,50701,50758,50760],"geometry":[{"lat":47.0694676,"lon":9.5108227},{"lat":47.0693624,"lon":9.5107999},{"lat":47.069345,"lon":9.5109726},{"lat":47.0694502,"lon":9.5109955},{"lat":47.0694676,"lon":9.5108227}]},{"type":"way","id":4593,"tags":{"building":"yes"},"nodes":[45136,45076,45108,45176,45136],"geometry":[{"lat":47.0616148,"lon":9.4930932},{"lat":47.0615426,"lon":9.4931464},{"lat":47.0615807,"lon":9.4932576},{"lat":47.0616529,"lon":9.4932044},{"lat":47.0616148,"lon":9.4930932}]},{"type":"way","id":4597,"tags":{"building":"yes"},"nodes":[46802,46725,46756,46832,46802],"geometry":[{"lat":47.0633836,"lon":9.5132161},{"lat":47.0633149,"lon":9.5132481},{"lat":47.0633438,"lon":9.513397},{"lat":47.0634158,"lon":9.5133671},{"lat":47.0633836,"lon":9.5132161}]},{"type":"way","id":4599,"tags":{"building":"yes"},"nodes":[49498,49541,49530,49490,49498],"geometry":[{"lat":47.0674661,"lon":9.5045964},{"lat":47.0675296,"lon":9.504701},{"lat":47.067512,"lon":9.504724},{"lat":47.0674485,"lon":9.5046193},{"lat":47.0674661,"lon":9.5045964}]},{"type":"way","id":4600,"tags":{"building":"yes"},"nodes":[43942,43888,43897,43949,43942],"geometry":[{"lat":47.0601733,"lon":9.4966966},{"lat":47.0601044,"lon":9.4967062},{"lat":47.0601111,"lon":9.4968096},{"lat":47.06018,"lon":9.4968},{"lat":47.0601733,"lon":9.4966966}]},{"type":"way","id":4601,"tags":{"building":"yes"},"nodes":[48031,47973,48006,48068,48031],"geometry":[{"lat":47.0650587,"lon":9.505645},{"lat":47.0649785,"lon":9.5057241},{"lat":47.0650221,"lon":9.5058194},{"lat":47.0651023,"lon":9.5057403},{"lat":47.0650587,"lon":9.505645}]},{"type":"way","id":4602,"tags":{"building":"yes"},"nodes":[50183,50110,50152,50208,50183],"geometry":[{"lat":47.0685373,"lon":9.5003266},{"lat":47.0684477,"lon":9.5003937},{"lat":47.0684924,"lon":9.5005225},{"lat":47.0685821,"lon":9.5004555},{"lat":47.0685373,"lon":9.5003266}]},{"type":"way","id":4603,"tags":{"building":"yes"},"nodes":[51401,51380,51393,51422,51401],"geometry":[{"lat":47.0710503,"lon":9.5055876},{"lat":47.070974,"lon":9.5056438},{"lat":47.0710268,"lon":9.5057982},{"lat":47.0711031,"lon":9.505742},{"lat":47.0710503,"lon":9.5055876}]},{"type":"way","id":4604,"tags":{"building":"yes"},"nodes":[45005,44930,44953,45028,45005],"geometry":[{"lat":47.0614323,"lon":9.5109482},{"lat":47.0613465,"lon":9.51099},{"lat":47.0613752,"lon":9.511117},{"lat":47.061461,"lon":9.5110752},{"lat":47.0614323,"lon":9.5109482}]},{"type":"way","id":4605,"tags":{"building":"yes"},"nodes":[50955,50910,50906,50950,50955],"geometry":[{"lat":47.0699446,"lon":9.5081052},{"lat":47.069838,"lon":9.5080817},{"lat":47.0698223,"lon":9.5082346},{"lat":47.0699289,"lon":9.5082581},{"lat":47.0699446,"lon":9.5081052}]},{"type":"way","id":4606,"tags":{"building":"yes"},"nodes":[47962,47946,47971,47985,47962],"geometry":[{"lat":47.0649597,"lon":9.4967637},{"lat":47.0649389,"lon":9.4967797},{"lat":47.0649719,"lon":9.4968725},{"lat":47.0649927,"lon":9.4968565},{"lat":47.0649597,"lon":9.4967637}]},{"type":"way","id":4607,"tags":{"building":"yes"},"nodes":[49313,49246,49263,49321,49313],"geometry":[{"lat":47.0671327,"lon":9.5089646},{"lat":47.0670174,"lon":9.5090174},{"lat":47.0670437,"lon":9.5091416},{"lat":47.0671591,"lon":9.5090888},{"lat":47.0671327,"lon":9.5089646}]},{"type":"way","id":4608,"tags":{"building":"yes"},"nodes":[51695,51677,51684,51702,51695],"geometry":[{"lat":47.0720848,"lon":9.5085395},{"lat":47.0719999,"lon":9.5084781},{"lat":47.0720405,"lon":9.508357},{"lat":47.0721254,"lon":9.5084185},{"lat":47.0720848,"lon":9.5085395}]},{"type":"way","id":4609,"tags":{"building":"yes"},"nodes":[51384,51332,51324,51374,51384],"geometry":[{"lat":47.0709824,"lon":9.5103426},{"lat":47.0708363,"lon":9.5102883},{"lat":47.0708135,"lon":9.5104204},{"lat":47.0709596,"lon":9.5104747},{"lat":47.0709824,"lon":9.5103426}]},{"type":"way","id":4611,"tags":{"building":"yes"},"nodes":[49933,49865,49911,49966,49933],"geometry":[{"lat":47.0681504,"lon":9.5017294},{"lat":47.0680595,"lon":9.5017787},{"lat":47.0681204,"lon":9.5020213},{"lat":47.0682114,"lon":9.501972},{"lat":47.0681504,"lon":9.5017294}]},{"type":"way","id":4612,"tags":{"building":"yes"},"nodes":[45430,45348,45378,45462,45430],"geometry":[{"lat":47.0619312,"lon":9.4991883},{"lat":47.061835,"lon":9.4992491},{"lat":47.0618676,"lon":9.49936},{"lat":47.0619638,"lon":9.4992992},{"lat":47.0619312,"lon":9.4991883}]},{"type":"way","id":4613,"tags":{"building":"yes"},"nodes":[49612,49409,49447,49669,49612],"geometry":[{"lat":47.0676568,"lon":9.502482},{"lat":47.0672894,"lon":9.5026403},{"lat":47.0673715,"lon":9.5030511},{"lat":47.0677389,"lon":9.5028929},{"lat":47.0676568,"lon":9.502482}]},{"type":"way","id":4614,"tags":{"building":"yes"},"nodes":[46474,46404,46424,46501,46497,46474],"geometry":[{"lat":47.0630942,"lon":9.5135138},{"lat":47.063027,"lon":9.5135397},{"lat":47.0630506,"lon":9.5136714},{"lat":47.0631178,"lon":9.5136454},{"lat":47.0631145,"lon":9.5136268},{"lat":47.0630942,"lon":9.5135138}]},{"type":"way","id":4616,"tags":{"building":"yes"},"nodes":[47939,47902,47910,47950,47957,47939],"geometry":[{"lat":47.0649271,"lon":9.5115842},{"lat":47.0648528,"lon":9.5116143},{"lat":47.0648778,"lon":9.5117466},{"lat":47.0649407,"lon":9.5117178},{"lat":47.0649509,"lon":9.5117105},{"lat":47.0649271,"lon":9.5115842}]},{"type":"way","id":4617,"tags":{"building":"yes"},"nodes":[51035,50993,50944,50971,51050,51035],"geometry":[{"lat":47.0701486,"lon":9.5036999},{"lat":47.0700233,"lon":9.5037852},{"lat":47.0699122,"lon":9.5038289},{"lat":47.069973,"lon":9.5040204},{"lat":47.0702068,"lon":9.5038801},{"lat":47.0701486,"lon":9.5036999}]},{"type":"way","id":4618,"tags":{"building":"yes"},"nodes":[44361,44296,44301,44321,44386,44361],"geometry":[{"lat":47.0607254,"lon":9.5112488},{"lat":47.0606444,"lon":9.5112905},{"lat":47.0606513,"lon":9.5113208},{"lat":47.0606792,"lon":9.511439},{"lat":47.0607608,"lon":9.5113971},{"lat":47.0607254,"lon":9.5112488}]},{"type":"way","id":4620,"tags":{"building":"yes"},"nodes":[47950,47969,47914,47901,47910,47950],"geometry":[{"lat":47.0649407,"lon":9.5117178},{"lat":47.0649682,"lon":9.5118473},{"lat":47.064879,"lon":9.5118882},{"lat":47.0648515,"lon":9.5117586},{"lat":47.0648778,"lon":9.5117466},{"lat":47.0649407,"lon":9.5117178}]},{"type":"way","id":4622,"tags":{"building":"yes"},"nodes":[47007,46931,46815,46886,46893,47007],"geometry":[{"lat":47.0636379,"lon":9.492495},{"lat":47.0635503,"lon":9.4924066},{"lat":47.0634023,"lon":9.4927226},{"lat":47.06349,"lon":9.492811},{"lat":47.0634998,"lon":9.49279},{"lat":47.0636379,"lon":9.492495}]},{"type":"way","id":4625,"tags":{"building":"yes"},"nodes":[43778,43729,43767,43774,43813,43778],"geometry":[{"lat":47.0599409,"lon":9.4923863},{"lat":47.0598752,"lon":9.4924951},{"lat":47.0599265,"lon":9.4925618},{"lat":47.0599387,"lon":9.492543},{"lat":47.059992,"lon":9.4924526},{"lat":47.0599409,"lon":9.4923863}]},{"type":"way","id":4626,"tags":{"building":"yes"},"nodes":[51806,51801,51797,51795,51800,51806],"geometry":[{"lat":47.072863,"lon":9.5102562},{"lat":47.0728326,"lon":9.5102319},{"lat":47.0728051,"lon":9.5103095},{"lat":47.0727971,"lon":9.5103285},{"lat":47.0728271,"lon":9.5103526},{"lat":47.072863,"lon":9.5102562}]},{"type":"way","id":4628,"tags":{"building":"yes"},"nodes":[48851,48815,48837,48870,48861,48851],"geometry":[{"lat":47.0663465,"lon":9.5102688},{"lat":47.0662856,"lon":9.5103523},{"lat":47.0663272,"lon":9.5104287},{"lat":47.0663927,"lon":9.5103518},{"lat":47.0663794,"lon":9.510326},{"lat":47.0663465,"lon":9.5102688}]},{"type":"way","id":4629,"tags":{"building":"yes"},"nodes":[44462,44410,44432,44498,44496,44462],"geometry":[{"lat":47.0608655,"lon":9.5112181},{"lat":47.0607977,"lon":9.5112527},{"lat":47.0608309,"lon":9.5113931},{"lat":47.0608988,"lon":9.5113584},{"lat":47.0608961,"lon":9.5113471},{"lat":47.0608655,"lon":9.5112181}]},{"type":"way","id":4630,"tags":{"building":"yes"},"nodes":[45242,45283,45208,45153,45229,45242],"geometry":[{"lat":47.0617088,"lon":9.4949583},{"lat":47.0617554,"lon":9.4950668},{"lat":47.0616765,"lon":9.4951398},{"lat":47.0616299,"lon":9.4950313},{"lat":47.0616989,"lon":9.4949675},{"lat":47.0617088,"lon":9.4949583}]},{"type":"way","id":4631,"tags":{"building":"yes"},"nodes":[45994,46005,45840,45835,45982,45994],"geometry":[{"lat":47.0625486,"lon":9.5011425},{"lat":47.0625574,"lon":9.5013097},{"lat":47.062392,"lon":9.5013284},{"lat":47.0623833,"lon":9.5011612},{"lat":47.0625362,"lon":9.5011439},{"lat":47.0625486,"lon":9.5011425}]},{"type":"way","id":4632,"tags":{"building":"yes"},"nodes":[45289,45255,45233,45269,45321,45289],"geometry":[{"lat":47.0617586,"lon":9.49931},{"lat":47.0617211,"lon":9.4993347},{"lat":47.061703,"lon":9.4994048},{"lat":47.0617379,"lon":9.4994902},{"lat":47.061809,"lon":9.4994352},{"lat":47.0617586,"lon":9.49931}]},{"type":"way","id":4635,"tags":{"building":"yes"},"nodes":[44611,44532,44541,44562,44645,44611],"geometry":[{"lat":47.0609978,"lon":9.5110942},{"lat":47.0609218,"lon":9.5111334},{"lat":47.0609287,"lon":9.5111614},{"lat":47.0609604,"lon":9.511289},{"lat":47.0610352,"lon":9.5112505},{"lat":47.0609978,"lon":9.5110942}]},{"type":"way","id":4636,"tags":{"building":"yes"},"nodes":[44237,44171,44196,44264,44258,44237],"geometry":[{"lat":47.0605728,"lon":9.5113833},{"lat":47.0604969,"lon":9.511422},{"lat":47.0605306,"lon":9.5115644},{"lat":47.0606065,"lon":9.5115257},{"lat":47.0606009,"lon":9.5115023},{"lat":47.0605728,"lon":9.5113833}]},{"type":"way","id":4637,"tags":{"building":"yes"},"nodes":[47903,47864,47877,47918,47916,47903],"geometry":[{"lat":47.0648544,"lon":9.5127314},{"lat":47.0647719,"lon":9.5127677},{"lat":47.0648028,"lon":9.5129191},{"lat":47.0648853,"lon":9.5128828},{"lat":47.064882,"lon":9.5128668},{"lat":47.0648544,"lon":9.5127314}]},{"type":"way","id":4638,"tags":{"building":"yes"},"nodes":[49374,49332,49366,49400,49385,49374],"geometry":[{"lat":47.0672494,"lon":9.5036485},{"lat":47.0671745,"lon":9.5037049},{"lat":47.0672266,"lon":9.5038135},{"lat":47.0672832,"lon":9.5037719},{"lat":47.0672623,"lon":9.5037091},{"lat":47.0672494,"lon":9.5036485}]},{"type":"way","id":4639,"tags":{"building":"yes"},"nodes":[49631,49565,49562,49556,49618,49631],"geometry":[{"lat":47.0676797,"lon":9.510461},{"lat":47.0675796,"lon":9.5104332},{"lat":47.0675753,"lon":9.5104669},{"lat":47.067563,"lon":9.5105626},{"lat":47.0676631,"lon":9.5105903},{"lat":47.0676797,"lon":9.510461}]},{"type":"way","id":4640,"tags":{"building":"yes"},"nodes":[43821,43857,43900,43867,43859,43821],"geometry":[{"lat":47.0599976,"lon":9.4925918},{"lat":47.06005,"lon":9.4926606},{"lat":47.0601139,"lon":9.4925558},{"lat":47.0600615,"lon":9.492487},{"lat":47.0600519,"lon":9.4925027},{"lat":47.0599976,"lon":9.4925918}]},{"type":"way","id":4642,"tags":{"building":"yes"},"nodes":[46566,46473,46474,46497,46585,46566],"geometry":[{"lat":47.0631711,"lon":9.5134739},{"lat":47.063094,"lon":9.5135042},{"lat":47.0630942,"lon":9.5135138},{"lat":47.0631145,"lon":9.5136268},{"lat":47.0631933,"lon":9.5135959},{"lat":47.0631711,"lon":9.5134739}]},{"type":"way","id":4645,"tags":{"building":"yes"},"nodes":[45229,45153,45145,45114,45188,45229],"geometry":[{"lat":47.0616989,"lon":9.4949675},{"lat":47.0616299,"lon":9.4950313},{"lat":47.0616233,"lon":9.4950366},{"lat":47.0615881,"lon":9.4949545},{"lat":47.0616635,"lon":9.4948848},{"lat":47.0616989,"lon":9.4949675}]},{"type":"way","id":4646,"tags":{"building":"yes"},"nodes":[51937,51949,51940,51928,51935,51937],"geometry":[{"lat":47.0738507,"lon":9.5117699},{"lat":47.0739212,"lon":9.5118374},{"lat":47.0738637,"lon":9.5119669},{"lat":47.0737921,"lon":9.5119036},{"lat":47.0738441,"lon":9.5117829},{"lat":47.0738507,"lon":9.5117699}]},{"type":"way","id":4647,"tags":{"building":"yes"},"nodes":[46631,46561,46566,46585,46668,46631],"geometry":[{"lat":47.0632358,"lon":9.5134332},{"lat":47.0631675,"lon":9.5134633},{"lat":47.0631711,"lon":9.5134739},{"lat":47.0631933,"lon":9.5135959},{"lat":47.0632628,"lon":9.5135652},{"lat":47.0632358,"lon":9.5134332}]},{"type":"way","id":4648,"tags":{"building":"yes"},"nodes":[49577,49537,49522,49562,49565,49577],"geometry":[{"lat":47.067595,"lon":9.5103147},{"lat":47.067521,"lon":9.5102942},{"lat":47.0675014,"lon":9.5104464},{"lat":47.0675753,"lon":9.5104669},{"lat":47.0675796,"lon":9.5104332},{"lat":47.067595,"lon":9.5103147}]},{"type":"way","id":4649,"tags":{"building":"yes"},"nodes":[46697,46644,46567,46525,46640,46697],"geometry":[{"lat":47.0632926,"lon":9.5105231},{"lat":47.0632453,"lon":9.5104948},{"lat":47.0631716,"lon":9.510507},{"lat":47.0631347,"lon":9.510662},{"lat":47.0632426,"lon":9.5107242},{"lat":47.0632926,"lon":9.5105231}]},{"type":"way","id":4650,"tags":{"building":"yes"},"nodes":[43960,44025,43998,43929,43932,43960],"geometry":[{"lat":47.0601932,"lon":9.4918944},{"lat":47.0602761,"lon":9.4919535},{"lat":47.0602344,"lon":9.4920795},{"lat":47.0601515,"lon":9.4920203},{"lat":47.0601583,"lon":9.4919997},{"lat":47.0601932,"lon":9.4918944}]},{"type":"way","id":4652,"tags":{"building":"yes"},"nodes":[49716,49651,49702,49728,49799,49716],"geometry":[{"lat":47.0678213,"lon":9.5062569},{"lat":47.0677127,"lon":9.5063071},{"lat":47.0677952,"lon":9.5066918},{"lat":47.0678493,"lon":9.5069443},{"lat":47.067958,"lon":9.5068941},{"lat":47.0678213,"lon":9.5062569}]},{"type":"way","id":4653,"tags":{"building":"yes"},"nodes":[51805,51793,51788,51797,51801,51805],"geometry":[{"lat":47.0728521,"lon":9.5101769},{"lat":47.0727695,"lon":9.5101137},{"lat":47.0727225,"lon":9.5102463},{"lat":47.0728051,"lon":9.5103095},{"lat":47.0728326,"lon":9.5102319},{"lat":47.0728521,"lon":9.5101769}]},{"type":"way","id":4654,"tags":{"building":"yes"},"nodes":[51425,51403,51396,51360,51381,51425],"geometry":[{"lat":47.0711083,"lon":9.50835},{"lat":47.071051,"lon":9.5083227},{"lat":47.0710385,"lon":9.5083781},{"lat":47.07092,"lon":9.5089192},{"lat":47.0709784,"lon":9.5089397},{"lat":47.0711083,"lon":9.50835}]},{"type":"way","id":4657,"tags":{"building":"yes"},"nodes":[44133,44101,44070,44086,44080,44098,44133],"geometry":[{"lat":47.0604529,"lon":9.4963456},{"lat":47.0604005,"lon":9.4962567},{"lat":47.0603544,"lon":9.4963153},{"lat":47.0603785,"lon":9.4963561},{"lat":47.0603681,"lon":9.4963692},{"lat":47.0603965,"lon":9.4964173},{"lat":47.0604529,"lon":9.4963456}]},{"type":"way","id":4658,"tags":{"building":"yes"},"nodes":[45510,45438,45466,45447,45472,45564,45510],"geometry":[{"lat":47.0620164,"lon":9.497423},{"lat":47.061937,"lon":9.4974987},{"lat":47.0619666,"lon":9.4975656},{"lat":47.061945,"lon":9.4975862},{"lat":47.0619783,"lon":9.4976614},{"lat":47.0620793,"lon":9.4975652},{"lat":47.0620164,"lon":9.497423}]},{"type":"way","id":4659,"tags":{"building":"yes"},"nodes":[44184,44129,44121,44092,44085,44164,44184],"geometry":[{"lat":47.0605156,"lon":9.4920749},{"lat":47.0604417,"lon":9.4920477},{"lat":47.0604288,"lon":9.4921236},{"lat":47.0603881,"lon":9.4921086},{"lat":47.0603746,"lon":9.4921877},{"lat":47.0604892,"lon":9.4922298},{"lat":47.0605156,"lon":9.4920749}]},{"type":"way","id":4660,"tags":{"building":"yes"},"nodes":[48912,48866,48876,48887,48900,48931,48912],"geometry":[{"lat":47.0664619,"lon":9.5086158},{"lat":47.0663883,"lon":9.50866},{"lat":47.0664053,"lon":9.5087207},{"lat":47.0664208,"lon":9.5087114},{"lat":47.0664423,"lon":9.5087884},{"lat":47.0665003,"lon":9.5087536},{"lat":47.0664619,"lon":9.5086158}]},{"type":"way","id":4661,"tags":{"building":"yes"},"nodes":[50499,50429,50426,50442,50444,50493,50499],"geometry":[{"lat":47.0690142,"lon":9.5097303},{"lat":47.0688989,"lon":9.5097162},{"lat":47.0688892,"lon":9.5098876},{"lat":47.0689309,"lon":9.5098927},{"lat":47.0689334,"lon":9.5098478},{"lat":47.0690071,"lon":9.5098568},{"lat":47.0690142,"lon":9.5097303}]},{"type":"way","id":4662,"tags":{"building":"yes"},"nodes":[50106,50236,50213,50181,50176,50080,50106],"geometry":[{"lat":47.068441,"lon":9.5053233},{"lat":47.0686282,"lon":9.5054368},{"lat":47.0685908,"lon":9.5055699},{"lat":47.068537,"lon":9.5055374},{"lat":47.0685215,"lon":9.5055927},{"lat":47.068388,"lon":9.5055118},{"lat":47.068441,"lon":9.5053233}]},{"type":"way","id":4663,"tags":{"building":"yes"},"nodes":[46098,46141,46113,46130,46094,46027,46098],"geometry":[{"lat":47.0626654,"lon":9.4941214},{"lat":47.0627207,"lon":9.4941787},{"lat":47.0626818,"lon":9.4942596},{"lat":47.0627054,"lon":9.4942839},{"lat":47.062661,"lon":9.4943763},{"lat":47.0625822,"lon":9.4942947},{"lat":47.0626654,"lon":9.4941214}]},{"type":"way","id":4664,"tags":{"building":"yes"},"nodes":[50191,50197,50214,50224,50154,50126,50191],"geometry":[{"lat":47.0685507,"lon":9.5043638},{"lat":47.0685591,"lon":9.50442},{"lat":47.0685945,"lon":9.5044086},{"lat":47.0686119,"lon":9.5045252},{"lat":47.0684937,"lon":9.5045634},{"lat":47.0684678,"lon":9.5043905},{"lat":47.0685507,"lon":9.5043638}]},{"type":"way","id":4665,"tags":{"building":"yes"},"nodes":[48464,48436,48432,48396,48418,48481,48464],"geometry":[{"lat":47.0657149,"lon":9.4982213},{"lat":47.0656718,"lon":9.4982517},{"lat":47.065665,"lon":9.4982311},{"lat":47.0656032,"lon":9.4982747},{"lat":47.0656404,"lon":9.4983884},{"lat":47.0657454,"lon":9.4983144},{"lat":47.0657149,"lon":9.4982213}]},{"type":"way","id":4666,"tags":{"building":"yes"},"nodes":[48463,48420,48410,48341,48372,48487,48463],"geometry":[{"lat":47.0657145,"lon":9.5076506},{"lat":47.0656421,"lon":9.5076953},{"lat":47.0656253,"lon":9.5076367},{"lat":47.0655236,"lon":9.5076995},{"lat":47.0655771,"lon":9.5078861},{"lat":47.0657512,"lon":9.5077786},{"lat":47.0657145,"lon":9.5076506}]},{"type":"way","id":4667,"tags":{"building":"yes"},"nodes":[43400,43434,43412,43401,43390,43370,43400],"geometry":[{"lat":47.0593491,"lon":9.4927635},{"lat":47.0594359,"lon":9.4928725},{"lat":47.0593867,"lon":9.492957},{"lat":47.0593496,"lon":9.4929105},{"lat":47.0593327,"lon":9.4929396},{"lat":47.0592829,"lon":9.4928772},{"lat":47.0593491,"lon":9.4927635}]},{"type":"way","id":4668,"tags":{"building":"yes"},"nodes":[50731,50667,50673,50682,50696,50751,50731],"geometry":[{"lat":47.069393,"lon":9.5019349},{"lat":47.0692782,"lon":9.5020149},{"lat":47.0692926,"lon":9.5020592},{"lat":47.0693111,"lon":9.5020464},{"lat":47.0693322,"lon":9.5021118},{"lat":47.0694285,"lon":9.5020446},{"lat":47.069393,"lon":9.5019349}]},{"type":"way","id":4669,"tags":{"building":"yes"},"nodes":[51329,51304,51301,51308,51299,51319,51329],"geometry":[{"lat":47.0708239,"lon":9.5087508},{"lat":47.0707334,"lon":9.5086901},{"lat":47.0707225,"lon":9.5087195},{"lat":47.0707451,"lon":9.5087376},{"lat":47.0707102,"lon":9.5088551},{"lat":47.0707935,"lon":9.5088798},{"lat":47.0708239,"lon":9.5087508}]},{"type":"way","id":4670,"tags":{"building":"yes"},"nodes":[48012,47949,47990,48042,48020,48037,48012],"geometry":[{"lat":47.0650321,"lon":9.4949754},{"lat":47.0649394,"lon":9.4950446},{"lat":47.0649985,"lon":9.4952151},{"lat":47.0650705,"lon":9.4951613},{"lat":47.0650449,"lon":9.4950874},{"lat":47.0650655,"lon":9.495072},{"lat":47.0650321,"lon":9.4949754}]},{"type":"way","id":4671,"tags":{"building":"yes"},"nodes":[47065,47019,47032,47083,47075,47087,47065],"geometry":[{"lat":47.0637294,"lon":9.5112964},{"lat":47.063649,"lon":9.5113298},{"lat":47.0636798,"lon":9.5114902},{"lat":47.0637491,"lon":9.5114615},{"lat":47.0637433,"lon":9.5114313},{"lat":47.0637545,"lon":9.5114267},{"lat":47.0637294,"lon":9.5112964}]},{"type":"way","id":4672,"tags":{"building":"yes"},"nodes":[51188,51141,51136,51126,51121,51179,51188],"geometry":[{"lat":47.0704732,"lon":9.5090425},{"lat":47.070387,"lon":9.5090182},{"lat":47.070381,"lon":9.5090639},{"lat":47.070359,"lon":9.5090576},{"lat":47.0703534,"lon":9.5090998},{"lat":47.0704617,"lon":9.5091304},{"lat":47.0704732,"lon":9.5090425}]},{"type":"way","id":4673,"tags":{"building":"yes"},"nodes":[50803,50763,50776,50761,50772,50827,50803],"geometry":[{"lat":47.0695584,"lon":9.5017813},{"lat":47.0694724,"lon":9.5018477},{"lat":47.0695041,"lon":9.5019363},{"lat":47.0694699,"lon":9.5019628},{"lat":47.069501,"lon":9.5020497},{"lat":47.0696213,"lon":9.5019569},{"lat":47.0695584,"lon":9.5017813}]},{"type":"way","id":4674,"tags":{"building":"yes"},"nodes":[44626,44553,44599,44643,44624,44636,44626],"geometry":[{"lat":47.0610155,"lon":9.4950089},{"lat":47.0609519,"lon":9.4950474},{"lat":47.0609853,"lon":9.4951664},{"lat":47.061035,"lon":9.4951364},{"lat":47.0610116,"lon":9.4950532},{"lat":47.0610256,"lon":9.4950448},{"lat":47.0610155,"lon":9.4950089}]},{"type":"way","id":4675,"tags":{"building":"yes"},"nodes":[43978,43865,43856,43908,43907,43966,43978],"geometry":[{"lat":47.0602159,"lon":9.4972106},{"lat":47.0600588,"lon":9.4971858},{"lat":47.0600498,"lon":9.4973091},{"lat":47.0601269,"lon":9.4973213},{"lat":47.0601237,"lon":9.4973645},{"lat":47.0602037,"lon":9.4973771},{"lat":47.0602159,"lon":9.4972106}]},{"type":"way","id":4676,"tags":{"building":"yes"},"nodes":[47374,47314,47317,47285,47305,47392,47374],"geometry":[{"lat":47.0641489,"lon":9.5122636},{"lat":47.064064,"lon":9.5122983},{"lat":47.0640672,"lon":9.5123149},{"lat":47.0640243,"lon":9.5123324},{"lat":47.0640528,"lon":9.5124828},{"lat":47.0641806,"lon":9.5124306},{"lat":47.0641489,"lon":9.5122636}]},{"type":"way","id":4677,"tags":{"building":"yes"},"nodes":[50059,50006,50052,50071,50087,50097,50059],"geometry":[{"lat":47.0683481,"lon":9.5050993},{"lat":47.0682796,"lon":9.5052308},{"lat":47.0683426,"lon":9.5052991},{"lat":47.0683682,"lon":9.5052455},{"lat":47.0683965,"lon":9.5052643},{"lat":47.0684203,"lon":9.5051677},{"lat":47.0683481,"lon":9.5050993}]},{"type":"way","id":4678,"tags":{"building":"yes"},"nodes":[51602,51598,51579,51566,51601,51609,51602],"geometry":[{"lat":47.0715809,"lon":9.5096601},{"lat":47.0715551,"lon":9.509721},{"lat":47.0714913,"lon":9.5096629},{"lat":47.0714511,"lon":9.5097579},{"lat":47.0715743,"lon":9.5098701},{"lat":47.0716402,"lon":9.5097141},{"lat":47.0715809,"lon":9.5096601}]},{"type":"way","id":4679,"tags":{"building":"yes"},"nodes":[45461,45346,45338,45362,45343,45431,45461],"geometry":[{"lat":47.0619627,"lon":9.5117696},{"lat":47.061834,"lon":9.5117026},{"lat":47.061825,"lon":9.5117399},{"lat":47.061851,"lon":9.5117535},{"lat":47.0618293,"lon":9.5118434},{"lat":47.061932,"lon":9.5118969},{"lat":47.0619627,"lon":9.5117696}]},{"type":"way","id":4681,"tags":{"building":"yes"},"nodes":[44147,44097,44103,44090,44100,44169,44147],"geometry":[{"lat":47.0604716,"lon":9.4978732},{"lat":47.0603961,"lon":9.4978969},{"lat":47.0604034,"lon":9.4979469},{"lat":47.0603854,"lon":9.4979526},{"lat":47.0603995,"lon":9.4980497},{"lat":47.060493,"lon":9.4980204},{"lat":47.0604716,"lon":9.4978732}]},{"type":"way","id":4683,"tags":{"building":"yes"},"nodes":[50441,50391,50403,50417,50437,50472,50441],"geometry":[{"lat":47.0689284,"lon":9.5049362},{"lat":47.0688296,"lon":9.504983},{"lat":47.0688446,"lon":9.5050514},{"lat":47.0688817,"lon":9.5050338},{"lat":47.0689177,"lon":9.5051975},{"lat":47.0689794,"lon":9.5051682},{"lat":47.0689284,"lon":9.5049362}]},{"type":"way","id":4685,"tags":{"building":"yes"},"nodes":[48114,47997,48014,48055,48086,48157,48114],"geometry":[{"lat":47.0651693,"lon":9.509449},{"lat":47.0650102,"lon":9.5095334},{"lat":47.0650378,"lon":9.5096455},{"lat":47.0650927,"lon":9.5096163},{"lat":47.0651281,"lon":9.50976},{"lat":47.0652323,"lon":9.5097047},{"lat":47.0651693,"lon":9.509449}]},{"type":"way","id":4686,"tags":{"building":"yes"},"nodes":[46118,46033,46110,46175,46123,46132,46118],"geometry":[{"lat":47.0626857,"lon":9.4922245},{"lat":47.0625898,"lon":9.4923094},{"lat":47.0626786,"lon":9.4925253},{"lat":47.0627573,"lon":9.4924556},{"lat":47.0626923,"lon":9.4922973},{"lat":47.0627094,"lon":9.4922822},{"lat":47.0626857,"lon":9.4922245}]},{"type":"way","id":4687,"tags":{"building":"yes"},"nodes":[51789,51782,51776,51783,51787,51786,51789],"geometry":[{"lat":47.0727328,"lon":9.5105361},{"lat":47.0726572,"lon":9.5104667},{"lat":47.0725758,"lon":9.5106577},{"lat":47.0726595,"lon":9.5107346},{"lat":47.0727057,"lon":9.5106261},{"lat":47.0726976,"lon":9.5106186},{"lat":47.0727328,"lon":9.5105361}]},{"type":"way","id":4688,"tags":{"building":"yes"},"nodes":[45546,45484,45489,45561,45558,45548,45546],"geometry":[{"lat":47.0620521,"lon":9.5011331},{"lat":47.0619872,"lon":9.501136},{"lat":47.0619918,"lon":9.5013644},{"lat":47.0620717,"lon":9.5013609},{"lat":47.0620691,"lon":9.501231},{"lat":47.0620541,"lon":9.5012316},{"lat":47.0620521,"lon":9.5011331}]},{"type":"way","id":4689,"tags":{"building":"yes"},"nodes":[49477,49426,49442,49449,49456,49505,49477],"geometry":[{"lat":47.0674343,"lon":9.5032688},{"lat":47.0673356,"lon":9.5033145},{"lat":47.067362,"lon":9.5034373},{"lat":47.0673737,"lon":9.5034319},{"lat":47.0673873,"lon":9.5034952},{"lat":47.0674743,"lon":9.5034549},{"lat":47.0674343,"lon":9.5032688}]},{"type":"way","id":4690,"tags":{"building":"yes"},"nodes":[43801,43679,43657,43725,43721,43779,43801],"geometry":[{"lat":47.0599691,"lon":9.4969784},{"lat":47.0598195,"lon":9.4969177},{"lat":47.0597958,"lon":9.4970438},{"lat":47.05987,"lon":9.497074},{"lat":47.0598665,"lon":9.4970923},{"lat":47.0599419,"lon":9.4971229},{"lat":47.0599691,"lon":9.4969784}]},{"type":"way","id":4691,"tags":{"building":"yes"},"nodes":[47511,47519,47527,47543,47503,47479,47511],"geometry":[{"lat":47.0643396,"lon":9.4938578},{"lat":47.0643538,"lon":9.4938946},{"lat":47.0643636,"lon":9.4938864},{"lat":47.0643783,"lon":9.4939245},{"lat":47.0643315,"lon":9.4939635},{"lat":47.0643026,"lon":9.4938886},{"lat":47.0643396,"lon":9.4938578}]},{"type":"way","id":4692,"tags":{"building":"yes"},"nodes":[47387,47335,47379,47411,47404,47428,47387],"geometry":[{"lat":47.0641676,"lon":9.5085087},{"lat":47.0640851,"lon":9.5085576},{"lat":47.0641553,"lon":9.5088129},{"lat":47.0641979,"lon":9.5087876},{"lat":47.0641875,"lon":9.5087496},{"lat":47.0642273,"lon":9.508726},{"lat":47.0641676,"lon":9.5085087}]},{"type":"way","id":4693,"tags":{"building":"yes"},"nodes":[51367,51331,51325,51341,51336,51356,51367],"geometry":[{"lat":47.0709407,"lon":9.5091665},{"lat":47.0708308,"lon":9.5091328},{"lat":47.0708136,"lon":9.5092536},{"lat":47.0708655,"lon":9.5092695},{"lat":47.0708552,"lon":9.5093419},{"lat":47.0709132,"lon":9.5093597},{"lat":47.0709407,"lon":9.5091665}]},{"type":"way","id":4694,"tags":{"building":"yes"},"nodes":[46703,46638,46654,46593,46661,46779,46703],"geometry":[{"lat":47.0632982,"lon":9.4924053},{"lat":47.0632418,"lon":9.4923479},{"lat":47.0632532,"lon":9.4923236},{"lat":47.0632017,"lon":9.4922711},{"lat":47.0632584,"lon":9.492151},{"lat":47.0633664,"lon":9.4922609},{"lat":47.0632982,"lon":9.4924053}]},{"type":"way","id":4696,"tags":{"building":"yes"},"nodes":[49730,49685,49680,49671,49670,49726,49730],"geometry":[{"lat":47.0678495,"lon":9.5104035},{"lat":47.0677677,"lon":9.5103986},{"lat":47.0677639,"lon":9.5105353},{"lat":47.0677458,"lon":9.5105342},{"lat":47.0677444,"lon":9.5105867},{"lat":47.0678442,"lon":9.5105926},{"lat":47.0678495,"lon":9.5104035}]},{"type":"way","id":4697,"tags":{"building":"yes"},"nodes":[47311,47205,47236,47321,47307,47341,47311],"geometry":[{"lat":47.0640595,"lon":9.4976089},{"lat":47.0639143,"lon":9.4977241},{"lat":47.0639612,"lon":9.4978512},{"lat":47.0640688,"lon":9.4977658},{"lat":47.0640551,"lon":9.4977286},{"lat":47.0640926,"lon":9.4976989},{"lat":47.0640595,"lon":9.4976089}]},{"type":"way","id":4698,"tags":{"building":"yes"},"nodes":[50753,50690,50709,50746,50756,50771,50753],"geometry":[{"lat":47.0694314,"lon":9.5012697},{"lat":47.0693195,"lon":9.5013584},{"lat":47.0693613,"lon":9.5014719},{"lat":47.0694205,"lon":9.501425},{"lat":47.069446,"lon":9.5014942},{"lat":47.0694986,"lon":9.5014525},{"lat":47.0694314,"lon":9.5012697}]},{"type":"way","id":4699,"tags":{"building":"yes"},"nodes":[47474,47412,47435,47498,47491,47500,47474],"geometry":[{"lat":47.0642969,"lon":9.5093182},{"lat":47.0641981,"lon":9.5093738},{"lat":47.0642414,"lon":9.5095397},{"lat":47.0643251,"lon":9.5094926},{"lat":47.0643147,"lon":9.5094525},{"lat":47.0643297,"lon":9.509444},{"lat":47.0642969,"lon":9.5093182}]},{"type":"way","id":4700,"tags":{"building":"yes"},"nodes":[46773,46709,46716,46675,46700,46812,46773],"geometry":[{"lat":47.0633617,"lon":9.4940069},{"lat":47.063302,"lon":9.4940539},{"lat":47.0633102,"lon":9.4940762},{"lat":47.0632678,"lon":9.4941096},{"lat":47.0632935,"lon":9.49418},{"lat":47.0633956,"lon":9.4940996},{"lat":47.0633617,"lon":9.4940069}]},{"type":"way","id":4702,"tags":{"building":"yes"},"nodes":[51903,51919,51908,51905,51901,51894,51903],"geometry":[{"lat":47.0736587,"lon":9.5115482},{"lat":47.073738,"lon":9.5116268},{"lat":47.0736922,"lon":9.5117267},{"lat":47.0736625,"lon":9.5116973},{"lat":47.0736524,"lon":9.5117193},{"lat":47.0736027,"lon":9.5116701},{"lat":47.0736587,"lon":9.5115482}]},{"type":"way","id":4703,"tags":{"building":"yes"},"nodes":[43451,43402,43423,43444,43479,43532,43451],"geometry":[{"lat":47.0594686,"lon":9.4990655},{"lat":47.059352,"lon":9.4992289},{"lat":47.0594091,"lon":9.4993165},{"lat":47.0594477,"lon":9.4992624},{"lat":47.0595289,"lon":9.4993871},{"lat":47.0596068,"lon":9.4992779},{"lat":47.0594686,"lon":9.4990655}]},{"type":"way","id":4704,"tags":{"building":"yes"},"nodes":[48353,48310,48329,48388,48371,48363,48353],"geometry":[{"lat":47.065544,"lon":9.5100167},{"lat":47.065462,"lon":9.5100517},{"lat":47.0654971,"lon":9.5102289},{"lat":47.0655933,"lon":9.5101879},{"lat":47.0655744,"lon":9.5100922},{"lat":47.0655601,"lon":9.5100983},{"lat":47.065544,"lon":9.5100167}]},{"type":"way","id":4705,"tags":{"building":"yes"},"nodes":[48096,48040,48061,48127,48109,48100,48096],"geometry":[{"lat":47.0651448,"lon":9.4975059},{"lat":47.0650683,"lon":9.4975568},{"lat":47.0650971,"lon":9.49765},{"lat":47.0651847,"lon":9.4975918},{"lat":47.0651655,"lon":9.4975296},{"lat":47.0651544,"lon":9.497537},{"lat":47.0651448,"lon":9.4975059}]},{"type":"way","id":4706,"tags":{"building":"yes"},"nodes":[50355,50215,50272,50345,50352,50404,50355],"geometry":[{"lat":47.0687642,"lon":9.4983133},{"lat":47.0685966,"lon":9.4984324},{"lat":47.06867,"lon":9.4986548},{"lat":47.06875,"lon":9.4985979},{"lat":47.0687594,"lon":9.4986264},{"lat":47.0688469,"lon":9.4985642},{"lat":47.0687642,"lon":9.4983133}]},{"type":"way","id":4708,"tags":{"building":"yes"},"nodes":[43509,43550,43508,43491,43483,43465,43509],"geometry":[{"lat":47.0595743,"lon":9.4929291},{"lat":47.0596378,"lon":9.492998},{"lat":47.0595735,"lon":9.4931259},{"lat":47.0595427,"lon":9.4930925},{"lat":47.0595306,"lon":9.4931166},{"lat":47.0594979,"lon":9.4930811},{"lat":47.0595743,"lon":9.4929291}]},{"type":"way","id":4709,"tags":{"building":"yes"},"nodes":[50935,50897,50891,50904,50901,50927,50935],"geometry":[{"lat":47.0699036,"lon":9.5093055},{"lat":47.0697989,"lon":9.5092696},{"lat":47.0697857,"lon":9.5093528},{"lat":47.0698205,"lon":9.5093648},{"lat":47.0698131,"lon":9.5094111},{"lat":47.069883,"lon":9.5094351},{"lat":47.0699036,"lon":9.5093055}]},{"type":"way","id":4710,"tags":{"building":"yes"},"nodes":[47659,47596,47666,47691,47714,47789,47659],"geometry":[{"lat":47.064548,"lon":9.5035989},{"lat":47.0644541,"lon":9.5036898},{"lat":47.0645598,"lon":9.503925},{"lat":47.0645861,"lon":9.5038995},{"lat":47.0646106,"lon":9.5039539},{"lat":47.0646782,"lon":9.5038885},{"lat":47.064548,"lon":9.5035989}]},{"type":"way","id":4711,"tags":{"building":"yes"},"nodes":[49790,49745,49793,49827,49802,49828,49790],"geometry":[{"lat":47.0679423,"lon":9.5007318},{"lat":47.0678609,"lon":9.5007934},{"lat":47.067944,"lon":9.5010301},{"lat":47.0679931,"lon":9.5009929},{"lat":47.0679616,"lon":9.5009031},{"lat":47.0679938,"lon":9.5008787},{"lat":47.0679423,"lon":9.5007318}]},{"type":"way","id":4712,"tags":{"building":"yes"},"nodes":[50088,50037,50067,50061,50068,50114,50088],"geometry":[{"lat":47.0684016,"lon":9.498897},{"lat":47.0683231,"lon":9.4989571},{"lat":47.0683603,"lon":9.4990618},{"lat":47.0683504,"lon":9.4990694},{"lat":47.0683619,"lon":9.4991017},{"lat":47.0684502,"lon":9.4990341},{"lat":47.0684016,"lon":9.498897}]},{"type":"way","id":4713,"tags":{"building":"yes"},"nodes":[51771,51753,51742,51755,51758,51764,51771],"geometry":[{"lat":47.0725488,"lon":9.5103934},{"lat":47.0724063,"lon":9.5102311},{"lat":47.0723213,"lon":9.5103881},{"lat":47.072409,"lon":9.5104484},{"lat":47.07242,"lon":9.5104216},{"lat":47.0724839,"lon":9.5105034},{"lat":47.0725488,"lon":9.5103934}]},{"type":"way","id":4714,"tags":{"building":"yes"},"nodes":[45196,45132,45151,45110,45129,45246,45196],"geometry":[{"lat":47.0616679,"lon":9.5137517},{"lat":47.0616107,"lon":9.5137853},{"lat":47.0616292,"lon":9.513853},{"lat":47.0615821,"lon":9.5138806},{"lat":47.0616077,"lon":9.5139745},{"lat":47.0617119,"lon":9.5139133},{"lat":47.0616679,"lon":9.5137517}]},{"type":"way","id":4715,"tags":{"building":"yes"},"nodes":[47358,47395,47345,47318,47333,47315,47358],"geometry":[{"lat":47.0641263,"lon":9.4969115},{"lat":47.0641832,"lon":9.4970705},{"lat":47.0641067,"lon":9.4971295},{"lat":47.0640686,"lon":9.4970231},{"lat":47.0640839,"lon":9.4970113},{"lat":47.0640651,"lon":9.4969587},{"lat":47.0641263,"lon":9.4969115}]},{"type":"way","id":4716,"tags":{"building":"yes"},"nodes":[43747,43681,43628,43639,43630,43684,43747],"geometry":[{"lat":47.0599043,"lon":9.4985965},{"lat":47.0598231,"lon":9.4985109},{"lat":47.0597602,"lon":9.4986395},{"lat":47.0597765,"lon":9.4986567},{"lat":47.0597609,"lon":9.4986886},{"lat":47.0598258,"lon":9.498757},{"lat":47.0599043,"lon":9.4985965}]},{"type":"way","id":4717,"tags":{"building":"yes"},"nodes":[46963,46844,46879,46920,46911,46996,46963],"geometry":[{"lat":47.0635923,"lon":9.5116881},{"lat":47.0634343,"lon":9.5117565},{"lat":47.0634799,"lon":9.5119837},{"lat":47.0635321,"lon":9.5119611},{"lat":47.063521,"lon":9.5119061},{"lat":47.0636269,"lon":9.5118603},{"lat":47.0635923,"lon":9.5116881}]},{"type":"way","id":4718,"tags":{"building":"yes"},"nodes":[46076,45977,45949,45924,45908,46011,46076],"geometry":[{"lat":47.062632,"lon":9.5122821},{"lat":47.0625297,"lon":9.5122264},{"lat":47.0624928,"lon":9.5123653},{"lat":47.0624642,"lon":9.5123613},{"lat":47.0624488,"lon":9.5124824},{"lat":47.0625676,"lon":9.5125422},{"lat":47.062632,"lon":9.5122821}]},{"type":"way","id":4719,"tags":{"building":"yes"},"nodes":[44520,44438,44449,44396,44426,44577,44520],"geometry":[{"lat":47.0609136,"lon":9.4964672},{"lat":47.060837,"lon":9.4965295},{"lat":47.0608536,"lon":9.4965735},{"lat":47.0607841,"lon":9.49663},{"lat":47.0608244,"lon":9.4967365},{"lat":47.0609704,"lon":9.4966177},{"lat":47.0609136,"lon":9.4964672}]},{"type":"way","id":4723,"tags":{"building":"yes"},"nodes":[51123,51076,51040,51022,51051,51094,51123],"geometry":[{"lat":47.0703553,"lon":9.5041892},{"lat":47.0702701,"lon":9.5042253},{"lat":47.0701719,"lon":9.5042992},{"lat":47.0701138,"lon":9.5041172},{"lat":47.0702068,"lon":9.5040868},{"lat":47.0703024,"lon":9.5040109},{"lat":47.0703553,"lon":9.5041892}]},{"type":"way","id":4724,"tags":{"building":"yes"},"nodes":[45025,44905,44932,44979,44988,45048,45025],"geometry":[{"lat":47.061453,"lon":9.4987161},{"lat":47.0613218,"lon":9.4987952},{"lat":47.0613474,"lon":9.4988867},{"lat":47.0614044,"lon":9.4988524},{"lat":47.0614159,"lon":9.4988933},{"lat":47.06149,"lon":9.4988487},{"lat":47.061453,"lon":9.4987161}]},{"type":"way","id":4725,"tags":{"building":"yes"},"nodes":[47679,47587,47634,47670,47660,47723,47679],"geometry":[{"lat":47.0645706,"lon":9.4974469},{"lat":47.0644442,"lon":9.4975373},{"lat":47.0645023,"lon":9.4977122},{"lat":47.0645621,"lon":9.4976695},{"lat":47.0645499,"lon":9.4976326},{"lat":47.0646165,"lon":9.497585},{"lat":47.0645706,"lon":9.4974469}]},{"type":"way","id":4726,"tags":{"building":"yes"},"nodes":[51415,51376,51369,51363,51361,51407,51415],"geometry":[{"lat":47.071088,"lon":9.5111427},{"lat":47.0709637,"lon":9.5111013},{"lat":47.0709464,"lon":9.5112129},{"lat":47.070928,"lon":9.5112067},{"lat":47.0709215,"lon":9.5112492},{"lat":47.0710642,"lon":9.5112968},{"lat":47.071088,"lon":9.5111427}]},{"type":"way","id":4729,"tags":{"building":"yes"},"nodes":[44814,44737,44710,44711,44735,44818,44814],"geometry":[{"lat":47.0612189,"lon":9.4920572},{"lat":47.0611285,"lon":9.4920605},{"lat":47.0610982,"lon":9.4920597},{"lat":47.0610982,"lon":9.4921495},{"lat":47.0611268,"lon":9.4921487},{"lat":47.0612228,"lon":9.4921421},{"lat":47.0612189,"lon":9.4920572}]},{"type":"way","id":4730,"tags":{"building":"yes"},"nodes":[50714,50679,50704,50715,50725,50752,50714],"geometry":[{"lat":47.0693642,"lon":9.5030802},{"lat":47.0693015,"lon":9.5031164},{"lat":47.0693495,"lon":9.5032956},{"lat":47.0693667,"lon":9.5032857},{"lat":47.069383,"lon":9.5033467},{"lat":47.0694286,"lon":9.5033203},{"lat":47.0693642,"lon":9.5030802}]},{"type":"way","id":4731,"tags":{"building":"yes"},"nodes":[46967,46881,46887,46874,46896,47000,46967],"geometry":[{"lat":47.0635946,"lon":9.4949493},{"lat":47.063483,"lon":9.4950278},{"lat":47.06349,"lon":9.4950494},{"lat":47.0634757,"lon":9.4950595},{"lat":47.0635041,"lon":9.4951463},{"lat":47.06363,"lon":9.4950577},{"lat":47.0635946,"lon":9.4949493}]},{"type":"way","id":4732,"tags":{"building":"yes"},"nodes":[51557,51523,51533,51547,51553,51574,51557],"geometry":[{"lat":47.0714379,"lon":9.5033058},{"lat":47.0713614,"lon":9.50335},{"lat":47.0713947,"lon":9.5034739},{"lat":47.0714263,"lon":9.5034555},{"lat":47.0714335,"lon":9.5034823},{"lat":47.0714783,"lon":9.5034564},{"lat":47.0714379,"lon":9.5033058}]},{"type":"way","id":4733,"tags":{"building":"yes"},"nodes":[48605,48526,48533,48500,48515,48632,48605],"geometry":[{"lat":47.065914,"lon":9.4973013},{"lat":47.0658117,"lon":9.497375},{"lat":47.0658226,"lon":9.4974077},{"lat":47.0657667,"lon":9.497448},{"lat":47.0657968,"lon":9.497535},{"lat":47.0659558,"lon":9.4974263},{"lat":47.065914,"lon":9.4973013}]},{"type":"way","id":4734,"tags":{"building":"yes"},"nodes":[49913,49956,49866,49837,49877,49858,49913],"geometry":[{"lat":47.068124,"lon":9.5040259},{"lat":47.0681998,"lon":9.5041478},{"lat":47.0680601,"lon":9.5043351},{"lat":47.0680135,"lon":9.50426},{"lat":47.0680824,"lon":9.5041676},{"lat":47.0680533,"lon":9.5041208},{"lat":47.068124,"lon":9.5040259}]},{"type":"way","id":4735,"tags":{"building":"yes"},"nodes":[48380,48352,48350,48315,48330,48392,48380],"geometry":[{"lat":47.0655838,"lon":9.5107658},{"lat":47.0655412,"lon":9.510776},{"lat":47.0655396,"lon":9.5107622},{"lat":47.0654817,"lon":9.5107761},{"lat":47.0654975,"lon":9.5109175},{"lat":47.065598,"lon":9.5108933},{"lat":47.0655838,"lon":9.5107658}]},{"type":"way","id":4737,"tags":{"building":"yes"},"nodes":[46592,46481,46528,46568,46572,46639,46592],"geometry":[{"lat":47.0632009,"lon":9.5118679},{"lat":47.0630995,"lon":9.5119168},{"lat":47.0631382,"lon":9.5120901},{"lat":47.0631732,"lon":9.5120732},{"lat":47.0631758,"lon":9.5120846},{"lat":47.0632422,"lon":9.5120526},{"lat":47.0632009,"lon":9.5118679}]},{"type":"way","id":4738,"tags":{"building":"yes"},"nodes":[44204,44157,44153,44131,44128,44194,44204],"geometry":[{"lat":47.0605371,"lon":9.4924516},{"lat":47.0604817,"lon":9.4924473},{"lat":47.0604796,"lon":9.4925044},{"lat":47.060446,"lon":9.4925017},{"lat":47.0604396,"lon":9.4926754},{"lat":47.0605286,"lon":9.4926825},{"lat":47.0605371,"lon":9.4924516}]},{"type":"way","id":4739,"tags":{"building":"yes"},"nodes":[51714,51683,51681,51708,51709,51712,51714],"geometry":[{"lat":47.0721705,"lon":9.5094533},{"lat":47.0720393,"lon":9.5094566},{"lat":47.0720371,"lon":9.5092706},{"lat":47.0721565,"lon":9.5092675},{"lat":47.0721577,"lon":9.5093678},{"lat":47.0721695,"lon":9.5093675},{"lat":47.0721705,"lon":9.5094533}]},{"type":"way","id":4741,"tags":{"building":"yes"},"nodes":[46381,46327,46326,46249,46243,46373,46381],"geometry":[{"lat":47.0630085,"lon":9.4982348},{"lat":47.0629396,"lon":9.4982268},{"lat":47.0629373,"lon":9.4982694},{"lat":47.0628481,"lon":9.498259},{"lat":47.0628396,"lon":9.4984173},{"lat":47.0629977,"lon":9.4984357},{"lat":47.0630085,"lon":9.4982348}]},{"type":"way","id":4742,"tags":{"building":"yes"},"nodes":[48645,48600,48604,48579,48602,48674,48645],"geometry":[{"lat":47.0659794,"lon":9.5092142},{"lat":47.0659048,"lon":9.5092562},{"lat":47.0659134,"lon":9.5092888},{"lat":47.0658777,"lon":9.509309},{"lat":47.0659072,"lon":9.5094216},{"lat":47.0660174,"lon":9.5093593},{"lat":47.0659794,"lon":9.5092142}]},{"type":"way","id":4744,"tags":{"building":"yes"},"nodes":[43488,43559,43520,43487,43497,43457,43488],"geometry":[{"lat":47.0595376,"lon":9.491847},{"lat":47.0596553,"lon":9.4919569},{"lat":47.0595882,"lon":9.4921117},{"lat":47.0595372,"lon":9.4920641},{"lat":47.0595527,"lon":9.4920283},{"lat":47.059486,"lon":9.491966},{"lat":47.0595376,"lon":9.491847}]},{"type":"way","id":4745,"tags":{"building":"yes"},"nodes":[44579,44514,44509,44473,44470,44575,44579],"geometry":[{"lat":47.0609715,"lon":9.4930472},{"lat":47.0609093,"lon":9.4930452},{"lat":47.0609081,"lon":9.4931207},{"lat":47.0608812,"lon":9.4931198},{"lat":47.0608799,"lon":9.4932026},{"lat":47.0609691,"lon":9.4932055},{"lat":47.0609715,"lon":9.4930472}]},{"type":"way","id":4746,"tags":{"building":"yes"},"nodes":[47681,47600,47603,47513,47554,47737,47681],"geometry":[{"lat":47.0645716,"lon":9.4953045},{"lat":47.0644557,"lon":9.4953905},{"lat":47.0644639,"lon":9.4954144},{"lat":47.0643437,"lon":9.4955036},{"lat":47.0643938,"lon":9.4956493},{"lat":47.06463,"lon":9.4954741},{"lat":47.0645716,"lon":9.4953045}]},{"type":"way","id":4748,"tags":{"building":"yes"},"nodes":[49016,48893,48910,48947,48953,49043,49016],"geometry":[{"lat":47.0666431,"lon":9.5088023},{"lat":47.0664335,"lon":9.5089119},{"lat":47.0664574,"lon":9.5090103},{"lat":47.066524,"lon":9.5089755},{"lat":47.0665321,"lon":9.5090089},{"lat":47.0666751,"lon":9.5089341},{"lat":47.0666431,"lon":9.5088023}]},{"type":"way","id":4749,"tags":{"building":"yes"},"nodes":[48302,48259,48268,48223,48235,48316,48302],"geometry":[{"lat":47.0654553,"lon":9.5041366},{"lat":47.0654039,"lon":9.5041597},{"lat":47.0654112,"lon":9.5041945},{"lat":47.0653478,"lon":9.504223},{"lat":47.0653674,"lon":9.5043169},{"lat":47.0654821,"lon":9.5042654},{"lat":47.0654553,"lon":9.5041366}]},{"type":"way","id":4750,"tags":{"building":"yes"},"nodes":[50082,49992,50002,50138,50127,50086,50082],"geometry":[{"lat":47.068391,"lon":9.5062717},{"lat":47.0682559,"lon":9.5063015},{"lat":47.068275,"lon":9.5064886},{"lat":47.068484,"lon":9.5064426},{"lat":47.06847,"lon":9.5063056},{"lat":47.0683961,"lon":9.5063219},{"lat":47.068391,"lon":9.5062717}]},{"type":"way","id":4751,"tags":{"building":"yes"},"nodes":[47613,47662,47632,47621,47601,47555,47613],"geometry":[{"lat":47.0644734,"lon":9.5041048},{"lat":47.064553,"lon":9.5042775},{"lat":47.0645003,"lon":9.5043298},{"lat":47.0644846,"lon":9.5042956},{"lat":47.0644586,"lon":9.5043214},{"lat":47.0643947,"lon":9.5041829},{"lat":47.0644734,"lon":9.5041048}]},{"type":"way","id":4752,"tags":{"building":"yes"},"nodes":[46656,46710,46610,46578,46635,46614,46656],"geometry":[{"lat":47.0632546,"lon":9.4951379},{"lat":47.0633021,"lon":9.4952942},{"lat":47.0632129,"lon":9.4953527},{"lat":47.063182,"lon":9.4952513},{"lat":47.0632374,"lon":9.495215},{"lat":47.0632207,"lon":9.4951601},{"lat":47.0632546,"lon":9.4951379}]},{"type":"way","id":4753,"tags":{"building":"yes"},"nodes":[50479,50424,50454,50494,50487,50514,50479],"geometry":[{"lat":47.0689916,"lon":9.5004737},{"lat":47.068887,"lon":9.5005496},{"lat":47.0689539,"lon":9.5007483},{"lat":47.0690097,"lon":9.5007077},{"lat":47.0689987,"lon":9.500675},{"lat":47.0690474,"lon":9.5006396},{"lat":47.0689916,"lon":9.5004737}]},{"type":"way","id":4754,"tags":{"building":"yes"},"nodes":[49893,49879,49881,49872,49884,49910,49893],"geometry":[{"lat":47.0681008,"lon":9.4987639},{"lat":47.0680828,"lon":9.4987752},{"lat":47.068088,"lon":9.4987928},{"lat":47.0680762,"lon":9.4988003},{"lat":47.0680898,"lon":9.4988468},{"lat":47.0681195,"lon":9.4988281},{"lat":47.0681008,"lon":9.4987639}]},{"type":"way","id":4755,"tags":{"building":"yes"},"nodes":[48916,48869,48879,48860,48867,48926,48916],"geometry":[{"lat":47.0664647,"lon":9.5032795},{"lat":47.0663925,"lon":9.5032959},{"lat":47.066406,"lon":9.5034245},{"lat":47.0663794,"lon":9.5034306},{"lat":47.0663885,"lon":9.503517},{"lat":47.0664874,"lon":9.5034945},{"lat":47.0664647,"lon":9.5032795}]},{"type":"way","id":4756,"tags":{"building":"yes"},"nodes":[43774,43810,43821,43859,43823,43813,43774],"geometry":[{"lat":47.0599387,"lon":9.492543},{"lat":47.0599896,"lon":9.4926076},{"lat":47.0599976,"lon":9.4925918},{"lat":47.0600519,"lon":9.4925027},{"lat":47.0600008,"lon":9.4924377},{"lat":47.059992,"lon":9.4924526},{"lat":47.0599387,"lon":9.492543}]},{"type":"way","id":4757,"tags":{"building":"yes"},"nodes":[46689,46591,46612,46558,46596,46752,46689],"geometry":[{"lat":47.0632822,"lon":9.4963336},{"lat":47.0631993,"lon":9.4964074},{"lat":47.0632195,"lon":9.4964562},{"lat":47.0631641,"lon":9.4965055},{"lat":47.0632042,"lon":9.4966025},{"lat":47.0633424,"lon":9.4964794},{"lat":47.0632822,"lon":9.4963336}]},{"type":"way","id":4758,"tags":{"building":"yes"},"nodes":[45445,45325,45333,45371,45376,45456,45445],"geometry":[{"lat":47.0619441,"lon":9.4999193},{"lat":47.0618128,"lon":9.499941},{"lat":47.0618223,"lon":9.5000644},{"lat":47.0618624,"lon":9.5000578},{"lat":47.0618659,"lon":9.5001037},{"lat":47.0619571,"lon":9.5000886},{"lat":47.0619441,"lon":9.4999193}]},{"type":"way","id":4759,"tags":{"building":"yes"},"nodes":[47655,47604,47624,47598,47609,47685,47655],"geometry":[{"lat":47.0645395,"lon":9.5094392},{"lat":47.0644651,"lon":9.5094943},{"lat":47.0644894,"lon":9.5095649},{"lat":47.0644552,"lon":9.5095903},{"lat":47.064469,"lon":9.5096304},{"lat":47.0645775,"lon":9.5095499},{"lat":47.0645395,"lon":9.5094392}]},{"type":"way","id":4760,"tags":{"building":"yes"},"nodes":[51385,51357,51350,51344,51337,51372,51385],"geometry":[{"lat":47.0709832,"lon":9.5098656},{"lat":47.0709135,"lon":9.5098308},{"lat":47.0709025,"lon":9.509878},{"lat":47.0708736,"lon":9.5098636},{"lat":47.0708566,"lon":9.5099373},{"lat":47.0709552,"lon":9.5099866},{"lat":47.0709832,"lon":9.5098656}]},{"type":"way","id":4761,"tags":{"building":"yes"},"nodes":[45123,45056,45112,45147,45250,45207,45123],"geometry":[{"lat":47.0616012,"lon":9.4980721},{"lat":47.0615116,"lon":9.4981571},{"lat":47.0615872,"lon":9.4983287},{"lat":47.061627,"lon":9.4984192},{"lat":47.0617166,"lon":9.4983342},{"lat":47.0616749,"lon":9.4982394},{"lat":47.0616012,"lon":9.4980721}]},{"type":"way","id":4762,"tags":{"building":"yes"},"nodes":[46420,46334,46296,46382,46411,46395,46420],"geometry":[{"lat":47.0630427,"lon":9.5106275},{"lat":47.062951,"lon":9.5105747},{"lat":47.0629016,"lon":9.5107596},{"lat":47.0630085,"lon":9.5108211},{"lat":47.063032,"lon":9.5107329},{"lat":47.0630169,"lon":9.5107242},{"lat":47.0630427,"lon":9.5106275}]},{"type":"way","id":4763,"tags":{"building":"yes"},"nodes":[49125,49055,49088,49058,49069,49145,49125],"geometry":[{"lat":47.0667788,"lon":9.4997696},{"lat":47.0666944,"lon":9.4998297},{"lat":47.066731,"lon":9.4999405},{"lat":47.0666978,"lon":9.4999641},{"lat":47.0667118,"lon":9.5000062},{"lat":47.0668293,"lon":9.4999225},{"lat":47.0667788,"lon":9.4997696}]},{"type":"way","id":4764,"tags":{"building":"yes"},"nodes":[44301,44230,44237,44258,44325,44321,44301],"geometry":[{"lat":47.0606513,"lon":9.5113208},{"lat":47.0605681,"lon":9.5113632},{"lat":47.0605728,"lon":9.5113833},{"lat":47.0606009,"lon":9.5115023},{"lat":47.0606841,"lon":9.5114599},{"lat":47.0606792,"lon":9.511439},{"lat":47.0606513,"lon":9.5113208}]},{"type":"way","id":4765,"tags":{"building":"yes"},"nodes":[47041,46957,46985,46997,47024,47086,47041],"geometry":[{"lat":47.063687,"lon":9.4965036},{"lat":47.0635859,"lon":9.4965695},{"lat":47.0636133,"lon":9.4966599},{"lat":47.0636288,"lon":9.4966497},{"lat":47.0636686,"lon":9.4967811},{"lat":47.0637541,"lon":9.4967254},{"lat":47.063687,"lon":9.4965036}]},{"type":"way","id":4766,"tags":{"building":"yes"},"nodes":[49741,49709,49778,49821,49776,49764,49741],"geometry":[{"lat":47.0678578,"lon":9.5048775},{"lat":47.0678142,"lon":9.5049344},{"lat":47.067919,"lon":9.5051074},{"lat":47.067986,"lon":9.50502},{"lat":47.0679185,"lon":9.5049087},{"lat":47.0678952,"lon":9.5049392},{"lat":47.0678578,"lon":9.5048775}]},{"type":"way","id":4767,"tags":{"building":"yes"},"nodes":[45796,45741,45743,45691,45714,45822,45796],"geometry":[{"lat":47.0623526,"lon":9.499482},{"lat":47.0622825,"lon":9.4994958},{"lat":47.0622845,"lon":9.4995179},{"lat":47.0622368,"lon":9.4995273},{"lat":47.062255,"lon":9.4997262},{"lat":47.0623728,"lon":9.499703},{"lat":47.0623526,"lon":9.499482}]},{"type":"way","id":4770,"tags":{"building":"yes"},"nodes":[48313,48249,48280,48349,48338,48320,48313],"geometry":[{"lat":47.0654725,"lon":9.5049218},{"lat":47.0653899,"lon":9.5049617},{"lat":47.0654289,"lon":9.5051355},{"lat":47.0655396,"lon":9.5050821},{"lat":47.0655187,"lon":9.5049888},{"lat":47.0654905,"lon":9.5050024},{"lat":47.0654725,"lon":9.5049218}]},{"type":"way","id":4771,"tags":{"building":"yes"},"nodes":[45756,45702,45681,45640,45700,45786,45756],"geometry":[{"lat":47.0622983,"lon":9.5135517},{"lat":47.0622411,"lon":9.5136118},{"lat":47.0622262,"lon":9.5135813},{"lat":47.0621827,"lon":9.513627},{"lat":47.062241,"lon":9.5137467},{"lat":47.0623418,"lon":9.5136409},{"lat":47.0622983,"lon":9.5135517}]},{"type":"way","id":4773,"tags":{"building":"yes"},"nodes":[46196,46133,46115,46091,46074,46147,46196],"geometry":[{"lat":47.062779,"lon":9.5124448},{"lat":47.0627105,"lon":9.5124037},{"lat":47.0626834,"lon":9.5125008},{"lat":47.0626562,"lon":9.5124845},{"lat":47.0626307,"lon":9.5125759},{"lat":47.0627265,"lon":9.5126333},{"lat":47.062779,"lon":9.5124448}]},{"type":"way","id":4774,"tags":{"building":"yes"},"nodes":[48738,48758,48862,48778,48649,48658,48738],"geometry":[{"lat":47.0661291,"lon":9.4979158},{"lat":47.0661676,"lon":9.4979327},{"lat":47.06638,"lon":9.4985509},{"lat":47.0662022,"lon":9.4986765},{"lat":47.0659849,"lon":9.4980612},{"lat":47.0659974,"lon":9.4980118},{"lat":47.0661291,"lon":9.4979158}]},{"type":"way","id":4775,"tags":{"building":"yes"},"nodes":[43385,43438,43404,43374,43386,43366,43385],"geometry":[{"lat":47.0593192,"lon":9.4974211},{"lat":47.05944,"lon":9.497527},{"lat":47.0593584,"lon":9.4977277},{"lat":47.0592923,"lon":9.4976697},{"lat":47.0593204,"lon":9.4976007},{"lat":47.0592656,"lon":9.4975528},{"lat":47.0593192,"lon":9.4974211}]},{"type":"way","id":4776,"tags":{"building":"yes"},"nodes":[43635,43719,43636,43592,43626,43612,43635],"geometry":[{"lat":47.0597705,"lon":9.4937807},{"lat":47.0598635,"lon":9.4939051},{"lat":47.0597747,"lon":9.4940479},{"lat":47.0597038,"lon":9.4939531},{"lat":47.0597571,"lon":9.4938673},{"lat":47.0597351,"lon":9.4938378},{"lat":47.0597705,"lon":9.4937807}]},{"type":"way","id":4777,"tags":{"building":"yes"},"nodes":[45061,45023,44994,44913,44893,45031,45061],"geometry":[{"lat":47.0615175,"lon":9.4933892},{"lat":47.0614514,"lon":9.4934192},{"lat":47.0614239,"lon":9.4932887},{"lat":47.0613287,"lon":9.4933319},{"lat":47.0613042,"lon":9.4932155},{"lat":47.0614655,"lon":9.4931424},{"lat":47.0615175,"lon":9.4933892}]},{"type":"way","id":4778,"tags":{"building":"yes"},"nodes":[46490,46417,46446,46471,46543,46518,46490],"geometry":[{"lat":47.0631066,"lon":9.4962943},{"lat":47.0630403,"lon":9.4963352},{"lat":47.0630691,"lon":9.496403},{"lat":47.0630922,"lon":9.4964495},{"lat":47.0631518,"lon":9.4964001},{"lat":47.0631287,"lon":9.4963479},{"lat":47.0631066,"lon":9.4962943}]},{"type":"way","id":4779,"tags":{"building":"yes"},"nodes":[44205,44161,44167,44125,44150,44243,44205],"geometry":[{"lat":47.0605378,"lon":9.5109677},{"lat":47.0604865,"lon":9.5109926},{"lat":47.0604911,"lon":9.5110132},{"lat":47.0604342,"lon":9.5110408},{"lat":47.0604742,"lon":9.5112187},{"lat":47.0605824,"lon":9.5111662},{"lat":47.0605378,"lon":9.5109677}]},{"type":"way","id":4780,"tags":{"building":"yes"},"nodes":[49974,49919,49927,49965,49960,49976,49974],"geometry":[{"lat":47.0682224,"lon":9.5097878},{"lat":47.0681295,"lon":9.5097992},{"lat":47.0681409,"lon":9.5099991},{"lat":47.0682104,"lon":9.5099906},{"lat":47.0682045,"lon":9.509887},{"lat":47.0682279,"lon":9.5098841},{"lat":47.0682224,"lon":9.5097878}]},{"type":"way","id":4782,"tags":{"building":"yes"},"nodes":[48115,48013,48025,48051,48064,48133,48115],"geometry":[{"lat":47.0651696,"lon":9.5106832},{"lat":47.0650339,"lon":9.5107171},{"lat":47.0650467,"lon":9.5108272},{"lat":47.0650889,"lon":9.5108166},{"lat":47.0650995,"lon":9.5109075},{"lat":47.0651929,"lon":9.5108841},{"lat":47.0651696,"lon":9.5106832}]},{"type":"way","id":4783,"tags":{"building":"yes"},"nodes":[44377,44319,44339,44307,44345,44419,44377],"geometry":[{"lat":47.060748,"lon":9.4972903},{"lat":47.0606783,"lon":9.4973333},{"lat":47.0606974,"lon":9.4974001},{"lat":47.0606611,"lon":9.4974225},{"lat":47.0607015,"lon":9.4975636},{"lat":47.0608075,"lon":9.4974982},{"lat":47.060748,"lon":9.4972903}]},{"type":"way","id":4784,"tags":{"building":"yes"},"nodes":[47574,47504,47509,47472,47493,47597,47574],"geometry":[{"lat":47.0644293,"lon":9.5117939},{"lat":47.0643327,"lon":9.5118349},{"lat":47.0643357,"lon":9.5118504},{"lat":47.0642938,"lon":9.5118682},{"lat":47.0643164,"lon":9.5119835},{"lat":47.064455,"lon":9.5119248},{"lat":47.0644293,"lon":9.5117939}]},{"type":"way","id":4785,"tags":{"building":"yes"},"nodes":[45441,45335,45339,45386,45388,45444,45441],"geometry":[{"lat":47.0619424,"lon":9.4956091},{"lat":47.0618237,"lon":9.4956109},{"lat":47.0618251,"lon":9.4958008},{"lat":47.0618764,"lon":9.4958},{"lat":47.0618766,"lon":9.4958224},{"lat":47.0619439,"lon":9.4958214},{"lat":47.0619424,"lon":9.4956091}]},{"type":"way","id":4786,"tags":{"building":"yes"},"nodes":[44842,44755,44731,44773,44758,44807,44842],"geometry":[{"lat":47.0612568,"lon":9.5117677},{"lat":47.061153,"lon":9.5117189},{"lat":47.0611243,"lon":9.5118507},{"lat":47.0611696,"lon":9.511872},{"lat":47.0611554,"lon":9.5119366},{"lat":47.0612139,"lon":9.5119642},{"lat":47.0612568,"lon":9.5117677}]},{"type":"way","id":4787,"tags":{"building":"yes"},"nodes":[51078,51041,51027,51046,51054,51068,51078],"geometry":[{"lat":47.0702729,"lon":9.5070131},{"lat":47.0701768,"lon":9.5069641},{"lat":47.0701278,"lon":9.5071709},{"lat":47.0701892,"lon":9.5072023},{"lat":47.070215,"lon":9.5070936},{"lat":47.0702497,"lon":9.5071113},{"lat":47.0702729,"lon":9.5070131}]},{"type":"way","id":4788,"tags":{"building":"yes"},"nodes":[49983,50033,49984,49971,49916,49875,49983],"geometry":[{"lat":47.0682399,"lon":9.5044227},{"lat":47.0683161,"lon":9.5045373},{"lat":47.0682418,"lon":9.504644},{"lat":47.0682157,"lon":9.5046047},{"lat":47.0681279,"lon":9.5047306},{"lat":47.0680778,"lon":9.5046553},{"lat":47.0682399,"lon":9.5044227}]},{"type":"way","id":4789,"tags":{"building":"yes"},"nodes":[51316,51276,51287,51302,51307,51328,51316],"geometry":[{"lat":47.0707769,"lon":9.5041441},{"lat":47.0706523,"lon":9.5042299},{"lat":47.0706817,"lon":9.5043219},{"lat":47.0707268,"lon":9.5042909},{"lat":47.0707439,"lon":9.5043444},{"lat":47.0708234,"lon":9.5042896},{"lat":47.0707769,"lon":9.5041441}]},{"type":"way","id":4790,"tags":{"building":"yes"},"nodes":[47993,47941,47943,47936,47960,48026,47993],"geometry":[{"lat":47.0650081,"lon":9.5079789},{"lat":47.0649321,"lon":9.5080284},{"lat":47.0649363,"lon":9.5080425},{"lat":47.0649192,"lon":9.5080537},{"lat":47.0649572,"lon":9.5081789},{"lat":47.0650502,"lon":9.5081182},{"lat":47.0650081,"lon":9.5079789}]},{"type":"way","id":4792,"tags":{"building":"yes"},"nodes":[46384,46315,46285,46303,46269,46313,46384],"geometry":[{"lat":47.063009,"lon":9.4928534},{"lat":47.0629287,"lon":9.4927754},{"lat":47.0628871,"lon":9.4928677},{"lat":47.0629122,"lon":9.492892},{"lat":47.0628716,"lon":9.492982},{"lat":47.0629269,"lon":9.4930356},{"lat":47.063009,"lon":9.4928534}]},{"type":"way","id":4793,"tags":{"building":"yes"},"nodes":[48696,48668,48679,48665,48667,48708,48696],"geometry":[{"lat":47.0660511,"lon":9.510271},{"lat":47.0660136,"lon":9.5102911},{"lat":47.0660237,"lon":9.5103259},{"lat":47.0660072,"lon":9.5103393},{"lat":47.0660127,"lon":9.5103648},{"lat":47.0660721,"lon":9.5103715},{"lat":47.0660511,"lon":9.510271}]},{"type":"way","id":4795,"tags":{"building":"yes"},"nodes":[51584,51525,51509,51541,51544,51570,51584],"geometry":[{"lat":47.0715036,"lon":9.509402},{"lat":47.0713651,"lon":9.5093022},{"lat":47.0713242,"lon":9.5094244},{"lat":47.0714098,"lon":9.509486},{"lat":47.0714155,"lon":9.5094688},{"lat":47.0714686,"lon":9.509507},{"lat":47.0715036,"lon":9.509402}]},{"type":"way","id":4796,"tags":{"building":"yes"},"nodes":[51868,51879,51873,51872,51866,51855,51868],"geometry":[{"lat":47.0734013,"lon":9.5112382},{"lat":47.0734833,"lon":9.5113238},{"lat":47.0734422,"lon":9.5114086},{"lat":47.0734285,"lon":9.5113942},{"lat":47.073396,"lon":9.5114614},{"lat":47.0733277,"lon":9.5113902},{"lat":47.0734013,"lon":9.5112382}]},{"type":"way","id":4797,"tags":{"building":"yes"},"nodes":[44714,44677,44679,44638,44657,44733,44714],"geometry":[{"lat":47.0611005,"lon":9.4926758},{"lat":47.0610697,"lon":9.4926873},{"lat":47.0610731,"lon":9.4927069},{"lat":47.0610267,"lon":9.4927243},{"lat":47.0610486,"lon":9.4928511},{"lat":47.0611259,"lon":9.4928222},{"lat":47.0611005,"lon":9.4926758}]},{"type":"way","id":4799,"tags":{"building":"yes"},"nodes":[45375,45273,45281,45303,45317,45402,45375],"geometry":[{"lat":47.0618652,"lon":9.5136825},{"lat":47.0617407,"lon":9.5137473},{"lat":47.0617547,"lon":9.5138053},{"lat":47.0617778,"lon":9.5137933},{"lat":47.061794,"lon":9.5138606},{"lat":47.0618955,"lon":9.5138078},{"lat":47.0618652,"lon":9.5136825}]},{"type":"way","id":4800,"tags":{"building":"yes"},"nodes":[43250,43246,43249,43257,43255,43251,43250],"geometry":[{"lat":47.0587891,"lon":9.4979861},{"lat":47.0586986,"lon":9.4980237},{"lat":47.0587223,"lon":9.4981467},{"lat":47.0588782,"lon":9.4980819},{"lat":47.0588644,"lon":9.4980102},{"lat":47.058799,"lon":9.4980373},{"lat":47.0587891,"lon":9.4979861}]},{"type":"way","id":4801,"tags":{"building":"yes"},"nodes":[44393,44252,44284,44417,44403,44413,44393],"geometry":[{"lat":47.0607769,"lon":9.5108452},{"lat":47.0605946,"lon":9.5109402},{"lat":47.0606359,"lon":9.5111113},{"lat":47.0608058,"lon":9.5110228},{"lat":47.0607908,"lon":9.5109605},{"lat":47.0608033,"lon":9.510954},{"lat":47.0607769,"lon":9.5108452}]},{"type":"way","id":4802,"tags":{"building":"yes"},"nodes":[43393,43427,43397,43367,43381,43375,43393],"geometry":[{"lat":47.0593364,"lon":9.4933938},{"lat":47.0594173,"lon":9.4934949},{"lat":47.0593395,"lon":9.4936291},{"lat":47.0592707,"lon":9.4935432},{"lat":47.0593064,"lon":9.4934816},{"lat":47.0592943,"lon":9.4934665},{"lat":47.0593364,"lon":9.4933938}]},{"type":"way","id":4803,"tags":{"building":"yes"},"nodes":[51810,51802,51796,51794,51790,51804,51810],"geometry":[{"lat":47.0729047,"lon":9.5087379},{"lat":47.072834,"lon":9.5086834},{"lat":47.0728004,"lon":9.5087775},{"lat":47.0727699,"lon":9.508754},{"lat":47.0727377,"lon":9.508844},{"lat":47.0728389,"lon":9.508922},{"lat":47.0729047,"lon":9.5087379}]},{"type":"way","id":4804,"tags":{"building":"yes"},"nodes":[45498,45440,45495,45533,45505,45537,45498],"geometry":[{"lat":47.062005,"lon":9.4952653},{"lat":47.061939,"lon":9.4953456},{"lat":47.062,"lon":9.4954537},{"lat":47.062038,"lon":9.4954074},{"lat":47.0620129,"lon":9.495363},{"lat":47.0620409,"lon":9.495329},{"lat":47.062005,"lon":9.4952653}]},{"type":"way","id":4805,"tags":{"building":"yes"},"nodes":[44910,44862,44863,44805,44809,44915,44910],"geometry":[{"lat":47.061327,"lon":9.49409},{"lat":47.061276,"lon":9.4940914},{"lat":47.0612764,"lon":9.4941212},{"lat":47.0612122,"lon":9.4941231},{"lat":47.061214,"lon":9.4942588},{"lat":47.0613292,"lon":9.4942555},{"lat":47.061327,"lon":9.49409}]},{"type":"way","id":4806,"tags":{"building":"yes"},"nodes":[44286,44199,44219,44269,44271,44309,44286],"geometry":[{"lat":47.0606401,"lon":9.4978235},{"lat":47.0605336,"lon":9.4978573},{"lat":47.0605558,"lon":9.4980072},{"lat":47.0606136,"lon":9.4979887},{"lat":47.0606177,"lon":9.4980164},{"lat":47.0606663,"lon":9.498001},{"lat":47.0606401,"lon":9.4978235}]},{"type":"way","id":4807,"tags":{"building":"yes"},"nodes":[43267,43281,43265,43253,43256,43262,43267],"geometry":[{"lat":47.0589441,"lon":9.4934293},{"lat":47.059008,"lon":9.4935124},{"lat":47.0589293,"lon":9.4936424},{"lat":47.0588352,"lon":9.4935197},{"lat":47.0588725,"lon":9.4934579},{"lat":47.0589029,"lon":9.4934975},{"lat":47.0589441,"lon":9.4934293}]},{"type":"way","id":4808,"tags":{"building":"yes"},"nodes":[46904,46840,46833,46790,46845,46938,46904],"geometry":[{"lat":47.0635126,"lon":9.4936069},{"lat":47.0634279,"lon":9.4936687},{"lat":47.0634163,"lon":9.4936344},{"lat":47.0633742,"lon":9.4936651},{"lat":47.0634358,"lon":9.4938469},{"lat":47.0635625,"lon":9.4937543},{"lat":47.0635126,"lon":9.4936069}]},{"type":"way","id":4809,"tags":{"building":"yes"},"nodes":[51280,51231,51217,51252,51256,51274,51280],"geometry":[{"lat":47.0706583,"lon":9.508702},{"lat":47.0705417,"lon":9.5086674},{"lat":47.0705249,"lon":9.5087893},{"lat":47.0705919,"lon":9.5088092},{"lat":47.0705966,"lon":9.5087748},{"lat":47.0706463,"lon":9.5087896},{"lat":47.0706583,"lon":9.508702}]},{"type":"way","id":4810,"tags":{"building":"yes"},"nodes":[45424,45341,45366,45345,45374,45475,45424],"geometry":[{"lat":47.0619219,"lon":9.4971941},{"lat":47.0618273,"lon":9.4972788},{"lat":47.0618569,"lon":9.4973498},{"lat":47.0618334,"lon":9.4973709},{"lat":47.0618636,"lon":9.4974437},{"lat":47.0619817,"lon":9.4973379},{"lat":47.0619219,"lon":9.4971941}]},{"type":"way","id":4811,"tags":{"building":"yes"},"nodes":[44833,44759,44738,44796,44815,44827,44833],"geometry":[{"lat":47.0612452,"lon":9.5125528},{"lat":47.0611561,"lon":9.5125094},{"lat":47.0611289,"lon":9.5126299},{"lat":47.0612041,"lon":9.5126666},{"lat":47.0612196,"lon":9.5125981},{"lat":47.0612335,"lon":9.5126048},{"lat":47.0612452,"lon":9.5125528}]},{"type":"way","id":4812,"tags":{"building":"yes"},"nodes":[50836,50791,50789,50779,50777,50835,50836],"geometry":[{"lat":47.069636,"lon":9.5093867},{"lat":47.0695317,"lon":9.5093809},{"lat":47.0695305,"lon":9.5094308},{"lat":47.0695084,"lon":9.5094296},{"lat":47.0695065,"lon":9.5095038},{"lat":47.0696329,"lon":9.5095108},{"lat":47.069636,"lon":9.5093867}]},{"type":"way","id":4813,"tags":{"building":"yes"},"nodes":[49890,49816,49781,49803,49815,49860,49890],"geometry":[{"lat":47.0680943,"lon":9.5055966},{"lat":47.0679749,"lon":9.5054791},{"lat":47.0679249,"lon":9.5055884},{"lat":47.0679631,"lon":9.505626},{"lat":47.0679724,"lon":9.5056055},{"lat":47.0680537,"lon":9.5056855},{"lat":47.0680943,"lon":9.5055966}]},{"type":"way","id":4814,"tags":{"building":"yes"},"nodes":[49625,49573,49580,49574,49583,49643,49625],"geometry":[{"lat":47.0676728,"lon":9.5090745},{"lat":47.0675897,"lon":9.5091038},{"lat":47.0675985,"lon":9.5091576},{"lat":47.0675911,"lon":9.5091602},{"lat":47.0676039,"lon":9.5092384},{"lat":47.0676944,"lon":9.5092065},{"lat":47.0676728,"lon":9.5090745}]},{"type":"way","id":4815,"tags":{"building":"yes"},"nodes":[44528,44503,44493,44422,44443,44548,44528],"geometry":[{"lat":47.0609204,"lon":9.4950933},{"lat":47.0609028,"lon":9.4951035},{"lat":47.0608951,"lon":9.4950746},{"lat":47.0608181,"lon":9.4951191},{"lat":47.060848,"lon":9.4952303},{"lat":47.0609425,"lon":9.4951756},{"lat":47.0609204,"lon":9.4950933}]},{"type":"way","id":4816,"tags":{"building":"yes"},"nodes":[48851,48894,48936,48909,48884,48861,48851],"geometry":[{"lat":47.0663465,"lon":9.5102688},{"lat":47.0664335,"lon":9.5101611},{"lat":47.0665045,"lon":9.5102849},{"lat":47.0664548,"lon":9.5103464},{"lat":47.0664166,"lon":9.5102799},{"lat":47.0663794,"lon":9.510326},{"lat":47.0663465,"lon":9.5102688}]},{"type":"way","id":4817,"tags":{"building":"yes"},"nodes":[49532,49492,49513,49489,49514,49576,49532],"geometry":[{"lat":47.0675128,"lon":9.5048149},{"lat":47.0674505,"lon":9.504905},{"lat":47.0674891,"lon":9.5049624},{"lat":47.0674484,"lon":9.5050213},{"lat":47.0674899,"lon":9.505083},{"lat":47.0675928,"lon":9.504934},{"lat":47.0675128,"lon":9.5048149}]},{"type":"way","id":4818,"tags":{"building":"yes"},"nodes":[48381,48335,48354,48395,48391,48400,48381],"geometry":[{"lat":47.0655855,"lon":9.5109686},{"lat":47.0655146,"lon":9.5110056},{"lat":47.0655452,"lon":9.5111323},{"lat":47.0656025,"lon":9.5111025},{"lat":47.0655966,"lon":9.5110781},{"lat":47.0656103,"lon":9.511071},{"lat":47.0655855,"lon":9.5109686}]},{"type":"way","id":4819,"tags":{"building":"yes"},"nodes":[48819,48756,48780,48813,48798,48825,48819],"geometry":[{"lat":47.0662885,"lon":9.5033509},{"lat":47.0661614,"lon":9.5034141},{"lat":47.0662043,"lon":9.5036003},{"lat":47.0662841,"lon":9.5035606},{"lat":47.0662575,"lon":9.5034452},{"lat":47.0663048,"lon":9.5034216},{"lat":47.0662885,"lon":9.5033509}]},{"type":"way","id":4820,"tags":{"building":"yes"},"nodes":[45220,45064,45103,45114,45188,45277,45220],"geometry":[{"lat":47.061694,"lon":9.4946763},{"lat":47.0615217,"lon":9.4948217},{"lat":47.0615765,"lon":9.4949614},{"lat":47.0615881,"lon":9.4949545},{"lat":47.0616635,"lon":9.4948848},{"lat":47.0617487,"lon":9.4948161},{"lat":47.061694,"lon":9.4946763}]},{"type":"way","id":4821,"tags":{"building":"yes"},"nodes":[47961,47896,47907,47955,47945,47978,47961],"geometry":[{"lat":47.0649593,"lon":9.4968674},{"lat":47.0648361,"lon":9.4969629},{"lat":47.0648729,"lon":9.4970651},{"lat":47.0649461,"lon":9.4970083},{"lat":47.064938,"lon":9.4969856},{"lat":47.0649879,"lon":9.4969469},{"lat":47.0649593,"lon":9.4968674}]},{"type":"way","id":4822,"tags":{"building":"yes"},"nodes":[48460,48393,48414,48467,48457,48469,48460],"geometry":[{"lat":47.0657026,"lon":9.5112397},{"lat":47.0655985,"lon":9.511285},{"lat":47.0656376,"lon":9.5114782},{"lat":47.0657205,"lon":9.5114421},{"lat":47.0657013,"lon":9.5113469},{"lat":47.0657224,"lon":9.5113377},{"lat":47.0657026,"lon":9.5112397}]},{"type":"way","id":4823,"tags":{"building":"yes"},"nodes":[51108,51060,51053,51087,51089,51102,51108],"geometry":[{"lat":47.0703339,"lon":9.5086219},{"lat":47.0702276,"lon":9.5085958},{"lat":47.0702135,"lon":9.5087198},{"lat":47.0702876,"lon":9.508738},{"lat":47.0702935,"lon":9.5086868},{"lat":47.0703256,"lon":9.5086947},{"lat":47.0703339,"lon":9.5086219}]},{"type":"way","id":4824,"tags":{"building":"yes"},"nodes":[45477,45421,45468,45574,45560,45507,45477],"geometry":[{"lat":47.0619824,"lon":9.4950398},{"lat":47.0619188,"lon":9.49508},{"lat":47.0619718,"lon":9.4952611},{"lat":47.0620923,"lon":9.495185},{"lat":47.0620708,"lon":9.4951116},{"lat":47.0620139,"lon":9.4951475},{"lat":47.0619824,"lon":9.4950398}]},{"type":"way","id":4825,"tags":{"building":"yes"},"nodes":[44116,44069,44071,44058,44065,44127,44116],"geometry":[{"lat":47.0604216,"lon":9.4970976},{"lat":47.0603502,"lon":9.4971179},{"lat":47.0603552,"lon":9.4971557},{"lat":47.0603282,"lon":9.4971634},{"lat":47.06034,"lon":9.4972529},{"lat":47.0604385,"lon":9.4972248},{"lat":47.0604216,"lon":9.4970976}]},{"type":"way","id":4826,"tags":{"building":"yes"},"nodes":[51882,51889,51885,51883,51881,51874,51882],"geometry":[{"lat":47.0735014,"lon":9.5108811},{"lat":47.0735781,"lon":9.5109588},{"lat":47.0735293,"lon":9.5110625},{"lat":47.0735089,"lon":9.5110418},{"lat":47.0735011,"lon":9.5110582},{"lat":47.0734449,"lon":9.5110012},{"lat":47.0735014,"lon":9.5108811}]},{"type":"way","id":4827,"tags":{"building":"yes"},"nodes":[51438,51377,51365,51394,51399,51432,51438],"geometry":[{"lat":47.0711395,"lon":9.508234},{"lat":47.0709662,"lon":9.5081473},{"lat":47.0709387,"lon":9.5082655},{"lat":47.0710334,"lon":9.5083128},{"lat":47.0710451,"lon":9.5082622},{"lat":47.0711239,"lon":9.5083016},{"lat":47.0711395,"lon":9.508234}]},{"type":"way","id":4828,"tags":{"building":"yes"},"nodes":[49686,49598,49605,49615,49617,49693,49686],"geometry":[{"lat":47.0677685,"lon":9.5086642},{"lat":47.0676352,"lon":9.5087004},{"lat":47.0676434,"lon":9.508797},{"lat":47.0676607,"lon":9.5088037},{"lat":47.0676626,"lon":9.5088453},{"lat":47.0677822,"lon":9.5087876},{"lat":47.0677685,"lon":9.5086642}]},{"type":"way","id":4829,"tags":{"building":"yes"},"nodes":[43917,43881,43880,43852,43843,43906,43917],"geometry":[{"lat":47.0601365,"lon":9.4974621},{"lat":47.0600898,"lon":9.4974537},{"lat":47.0600874,"lon":9.4974826},{"lat":47.0600427,"lon":9.4974746},{"lat":47.0600302,"lon":9.4976262},{"lat":47.0601215,"lon":9.4976425},{"lat":47.0601365,"lon":9.4974621}]},{"type":"way","id":4830,"tags":{"building":"yes"},"nodes":[48804,48771,48775,48749,48763,48829,48804],"geometry":[{"lat":47.0662679,"lon":9.5096632},{"lat":47.0661873,"lon":9.5097223},{"lat":47.0662008,"lon":9.5097621},{"lat":47.0661479,"lon":9.5098009},{"lat":47.0661782,"lon":9.5098902},{"lat":47.0663118,"lon":9.5097923},{"lat":47.0662679,"lon":9.5096632}]},{"type":"way","id":4831,"tags":{"building":"yes"},"nodes":[50512,50474,50485,50466,50473,50532,50512],"geometry":[{"lat":47.0690471,"lon":9.5010524},{"lat":47.068982,"lon":9.5010794},{"lat":47.0689981,"lon":9.5011628},{"lat":47.0689651,"lon":9.5011765},{"lat":47.0689817,"lon":9.5012628},{"lat":47.0690798,"lon":9.5012222},{"lat":47.0690471,"lon":9.5010524}]},{"type":"way","id":4832,"tags":{"building":"yes"},"nodes":[50226,50196,50204,50210,50219,50256,50226],"geometry":[{"lat":47.0686138,"lon":9.4994284},{"lat":47.0685573,"lon":9.4994745},{"lat":47.0685746,"lon":9.4995202},{"lat":47.0685862,"lon":9.4995107},{"lat":47.0686037,"lon":9.499557},{"lat":47.0686486,"lon":9.4995204},{"lat":47.0686138,"lon":9.4994284}]},{"type":"way","id":4833,"tags":{"building":"yes"},"nodes":[51521,51490,51504,51539,51532,51527,51521],"geometry":[{"lat":47.0713571,"lon":9.5059023},{"lat":47.0712752,"lon":9.5059322},{"lat":47.0713063,"lon":9.5061162},{"lat":47.0714085,"lon":9.506079},{"lat":47.0713883,"lon":9.5059598},{"lat":47.0713681,"lon":9.5059672},{"lat":47.0713571,"lon":9.5059023}]},{"type":"way","id":4834,"tags":{"building":"yes"},"nodes":[44843,44757,44781,44918,44895,44847,44843],"geometry":[{"lat":47.0612572,"lon":9.5105021},{"lat":47.061154,"lon":9.5105663},{"lat":47.0611853,"lon":9.5106748},{"lat":47.0613345,"lon":9.510582},{"lat":47.0613076,"lon":9.5104891},{"lat":47.0612616,"lon":9.5105177},{"lat":47.0612572,"lon":9.5105021}]},{"type":"way","id":4836,"tags":{"building":"yes"},"nodes":[45086,45042,45039,45014,45013,45081,45086],"geometry":[{"lat":47.0615568,"lon":9.5004304},{"lat":47.061479,"lon":9.5004277},{"lat":47.0614766,"lon":9.500578},{"lat":47.061445,"lon":9.5005769},{"lat":47.0614427,"lon":9.5007182},{"lat":47.061552,"lon":9.5007221},{"lat":47.0615568,"lon":9.5004304}]},{"type":"way","id":4837,"tags":{"building":"yes"},"nodes":[51406,51383,51390,51421,51416,51412,51406],"geometry":[{"lat":47.0710635,"lon":9.5050305},{"lat":47.0709815,"lon":9.5050569},{"lat":47.0710079,"lon":9.5052332},{"lat":47.0711022,"lon":9.5052028},{"lat":47.0710897,"lon":9.5051192},{"lat":47.0710773,"lon":9.5051232},{"lat":47.0710635,"lon":9.5050305}]},{"type":"way","id":4838,"tags":{"building":"yes"},"nodes":[45609,45451,45491,45659,45628,45614,45609],"geometry":[{"lat":47.0621395,"lon":9.509902},{"lat":47.0619504,"lon":9.5100167},{"lat":47.0619937,"lon":9.5101706},{"lat":47.0622024,"lon":9.5100441},{"lat":47.0621676,"lon":9.5099204},{"lat":47.062148,"lon":9.5099323},{"lat":47.0621395,"lon":9.509902}]},{"type":"way","id":4841,"tags":{"building":"yes"},"nodes":[49430,49368,49383,49429,49427,49443,49430],"geometry":[{"lat":47.0673444,"lon":9.5088732},{"lat":47.0672355,"lon":9.5089219},{"lat":47.0672605,"lon":9.5090424},{"lat":47.0673413,"lon":9.5090063},{"lat":47.0673368,"lon":9.5089848},{"lat":47.067365,"lon":9.5089722},{"lat":47.0673444,"lon":9.5088732}]},{"type":"way","id":4842,"tags":{"building":"yes"},"nodes":[49861,49806,49823,49835,49838,49878,49861],"geometry":[{"lat":47.0680548,"lon":9.5014756},{"lat":47.067965,"lon":9.5015084},{"lat":47.0679892,"lon":9.5016515},{"lat":47.068011,"lon":9.5016435},{"lat":47.0680145,"lon":9.5016641},{"lat":47.0680825,"lon":9.5016393},{"lat":47.0680548,"lon":9.5014756}]},{"type":"way","id":4843,"tags":{"building":"yes"},"nodes":[50609,50571,50572,50556,50561,50622,50609],"geometry":[{"lat":47.0692032,"lon":9.5074306},{"lat":47.0691387,"lon":9.5074425},{"lat":47.0691447,"lon":9.5075135},{"lat":47.0691139,"lon":9.5075192},{"lat":47.0691204,"lon":9.5075955},{"lat":47.0692157,"lon":9.507578},{"lat":47.0692032,"lon":9.5074306}]},{"type":"way","id":4844,"tags":{"building":"yes"},"nodes":[50412,50339,50351,50270,50292,50433,50412],"geometry":[{"lat":47.0688719,"lon":9.5047165},{"lat":47.0687484,"lon":9.5047878},{"lat":47.0687572,"lon":9.5048208},{"lat":47.0686616,"lon":9.504876},{"lat":47.0686907,"lon":9.5049847},{"lat":47.0689098,"lon":9.5048582},{"lat":47.0688719,"lon":9.5047165}]},{"type":"way","id":4845,"tags":{"building":"yes"},"nodes":[44299,44349,44287,44222,44239,44256,44299],"geometry":[{"lat":47.0606461,"lon":9.4936705},{"lat":47.0607035,"lon":9.4937358},{"lat":47.0606402,"lon":9.4938557},{"lat":47.0605576,"lon":9.4937617},{"lat":47.0605739,"lon":9.4937307},{"lat":47.0605991,"lon":9.4937594},{"lat":47.0606461,"lon":9.4936705}]},{"type":"way","id":4847,"tags":{"building":"yes"},"nodes":[49666,49712,49665,49637,49656,49627,49666],"geometry":[{"lat":47.0677294,"lon":9.5049692},{"lat":47.0678177,"lon":9.505148},{"lat":47.067729,"lon":9.5052425},{"lat":47.0676859,"lon":9.5051554},{"lat":47.0677183,"lon":9.505121},{"lat":47.067673,"lon":9.5050293},{"lat":47.0677294,"lon":9.5049692}]},{"type":"way","id":4848,"tags":{"building":"yes"},"nodes":[46230,46152,46184,46201,46215,46268,46230],"geometry":[{"lat":47.0628252,"lon":9.4919855},{"lat":47.0627358,"lon":9.4920504},{"lat":47.0627663,"lon":9.4921411},{"lat":47.0627867,"lon":9.4921263},{"lat":47.0628016,"lon":9.4921705},{"lat":47.0628706,"lon":9.4921204},{"lat":47.0628252,"lon":9.4919855}]},{"type":"way","id":4850,"tags":{"building":"yes"},"nodes":[47141,47084,47126,47197,47177,47156,47141],"geometry":[{"lat":47.063818,"lon":9.4947625},{"lat":47.0637511,"lon":9.4948104},{"lat":47.0638017,"lon":9.4949627},{"lat":47.0639023,"lon":9.4948907},{"lat":47.0638707,"lon":9.4947955},{"lat":47.063837,"lon":9.4948197},{"lat":47.063818,"lon":9.4947625}]},{"type":"way","id":4851,"tags":{"building":"yes"},"nodes":[50463,50421,50427,50381,50399,50483,50463],"geometry":[{"lat":47.0689589,"lon":9.5014349},{"lat":47.068884,"lon":9.501489},{"lat":47.0688908,"lon":9.5015092},{"lat":47.0688081,"lon":9.5015688},{"lat":47.0688401,"lon":9.5016644},{"lat":47.0689977,"lon":9.5015507},{"lat":47.0689589,"lon":9.5014349}]},{"type":"way","id":4852,"tags":{"building":"yes"},"nodes":[47848,47779,47801,47815,47822,47866,47848],"geometry":[{"lat":47.0647502,"lon":9.5116626},{"lat":47.0646702,"lon":9.511696},{"lat":47.0646938,"lon":9.5118183},{"lat":47.0647079,"lon":9.5118125},{"lat":47.0647163,"lon":9.5118558},{"lat":47.0647823,"lon":9.5118283},{"lat":47.0647502,"lon":9.5116626}]},{"type":"way","id":4853,"tags":{"building":"yes"},"nodes":[48731,48675,48683,48664,48671,48746,48731],"geometry":[{"lat":47.066116,"lon":9.5083364},{"lat":47.066019,"lon":9.5083661},{"lat":47.0660339,"lon":9.5084708},{"lat":47.0660061,"lon":9.5084793},{"lat":47.0660163,"lon":9.5085513},{"lat":47.0661411,"lon":9.508513},{"lat":47.066116,"lon":9.5083364}]},{"type":"way","id":4854,"tags":{"building":"yes"},"nodes":[43357,43389,43373,43378,43363,43325,43357],"geometry":[{"lat":47.0592425,"lon":9.492944},{"lat":47.0593239,"lon":9.4930454},{"lat":47.0592906,"lon":9.493103},{"lat":47.0593016,"lon":9.4931166},{"lat":47.0592539,"lon":9.4931991},{"lat":47.0591615,"lon":9.4930842},{"lat":47.0592425,"lon":9.492944}]},{"type":"way","id":4855,"tags":{"building":"yes"},"nodes":[48904,48846,48838,48799,48822,48919,48904],"geometry":[{"lat":47.0664468,"lon":9.4977178},{"lat":47.0663384,"lon":9.497794},{"lat":47.0663274,"lon":9.4977603},{"lat":47.066259,"lon":9.4978084},{"lat":47.0662999,"lon":9.4979338},{"lat":47.0664767,"lon":9.4978095},{"lat":47.0664468,"lon":9.4977178}]},{"type":"way","id":4857,"tags":{"building":"yes"},"nodes":[43863,43784,43745,43805,43826,43845,43863],"geometry":[{"lat":47.0600564,"lon":9.4981422},{"lat":47.0599475,"lon":9.498095},{"lat":47.0599017,"lon":9.4983228},{"lat":47.0599824,"lon":9.4983577},{"lat":47.0600062,"lon":9.4982391},{"lat":47.0600345,"lon":9.4982514},{"lat":47.0600564,"lon":9.4981422}]},{"type":"way","id":4858,"tags":{"building":"yes"},"nodes":[51296,51260,51259,51249,51242,51288,51296],"geometry":[{"lat":47.0707025,"lon":9.5106283},{"lat":47.0706081,"lon":9.5106073},{"lat":47.0706044,"lon":9.5106435},{"lat":47.0705855,"lon":9.5106393},{"lat":47.0705715,"lon":9.5107756},{"lat":47.0706847,"lon":9.5108008},{"lat":47.0707025,"lon":9.5106283}]},{"type":"way","id":4859,"tags":{"building":"yes"},"nodes":[51447,51411,51409,51391,51388,51443,51447],"geometry":[{"lat":47.0711618,"lon":9.509492},{"lat":47.0710696,"lon":9.5094611},{"lat":47.0710655,"lon":9.5094871},{"lat":47.0710149,"lon":9.5094701},{"lat":47.0710018,"lon":9.5095539},{"lat":47.0711446,"lon":9.5096019},{"lat":47.0711618,"lon":9.509492}]},{"type":"way","id":4860,"tags":{"building":"yes"},"nodes":[45893,45823,45751,45785,45800,45826,45893],"geometry":[{"lat":47.062436,"lon":9.492276},{"lat":47.0623729,"lon":9.4922125},{"lat":47.0622962,"lon":9.4923766},{"lat":47.0623393,"lon":9.49242},{"lat":47.0623538,"lon":9.4923888},{"lat":47.0623739,"lon":9.492409},{"lat":47.062436,"lon":9.492276}]},{"type":"way","id":4861,"tags":{"building":"yes"},"nodes":[50784,50757,50765,50759,50769,50810,50784],"geometry":[{"lat":47.069518,"lon":9.5049529},{"lat":47.0694461,"lon":9.5049994},{"lat":47.0694826,"lon":9.5051209},{"lat":47.0694658,"lon":9.5051317},{"lat":47.0694967,"lon":9.5052346},{"lat":47.0695854,"lon":9.5051772},{"lat":47.069518,"lon":9.5049529}]},{"type":"way","id":4862,"tags":{"building":"yes"},"nodes":[45606,45552,45566,45525,45559,45652,45606],"geometry":[{"lat":47.0621363,"lon":9.4944827},{"lat":47.0620592,"lon":9.4945576},{"lat":47.062084,"lon":9.4946126},{"lat":47.0620327,"lon":9.4946623},{"lat":47.0620698,"lon":9.4947445},{"lat":47.0621981,"lon":9.4946198},{"lat":47.0621363,"lon":9.4944827}]},{"type":"way","id":4863,"tags":{"building":"yes"},"nodes":[49012,48944,48962,48981,48983,49041,49012],"geometry":[{"lat":47.0666397,"lon":9.5050964},{"lat":47.0665216,"lon":9.5051233},{"lat":47.0665518,"lon":9.5054091},{"lat":47.0665887,"lon":9.5054007},{"lat":47.0665916,"lon":9.5054276},{"lat":47.0666728,"lon":9.5054091},{"lat":47.0666397,"lon":9.5050964}]},{"type":"way","id":4864,"tags":{"building":"yes"},"nodes":[49805,49731,49739,49752,49753,49812,49805],"geometry":[{"lat":47.0679641,"lon":9.5096417},{"lat":47.06785,"lon":9.509653},{"lat":47.0678535,"lon":9.5097286},{"lat":47.067868,"lon":9.5097272},{"lat":47.0678689,"lon":9.5097484},{"lat":47.0679686,"lon":9.5097386},{"lat":47.0679641,"lon":9.5096417}]},{"type":"way","id":4865,"tags":{"building":"yes"},"nodes":[44531,44459,44452,44408,44424,44546,44531],"geometry":[{"lat":47.0609218,"lon":9.4948749},{"lat":47.0608623,"lon":9.4948927},{"lat":47.060857,"lon":9.4948542},{"lat":47.0607964,"lon":9.4948724},{"lat":47.0608194,"lon":9.4950381},{"lat":47.0609394,"lon":9.4950021},{"lat":47.0609218,"lon":9.4948749}]},{"type":"way","id":4866,"tags":{"building":"yes"},"nodes":[44793,44729,44745,44712,44730,44835,44793],"geometry":[{"lat":47.0612005,"lon":9.4932572},{"lat":47.0611224,"lon":9.4932885},{"lat":47.0611432,"lon":9.4934004},{"lat":47.0611002,"lon":9.4934177},{"lat":47.0611242,"lon":9.493547},{"lat":47.0612454,"lon":9.4934984},{"lat":47.0612005,"lon":9.4932572}]},{"type":"way","id":4867,"tags":{"building":"yes"},"nodes":[47433,47349,47364,47378,47399,47475,47433],"geometry":[{"lat":47.0642394,"lon":9.4925119},{"lat":47.064108,"lon":9.4926299},{"lat":47.0641318,"lon":9.4926872},{"lat":47.0641518,"lon":9.4926692},{"lat":47.0641855,"lon":9.4927502},{"lat":47.064297,"lon":9.4926501},{"lat":47.0642394,"lon":9.4925119}]},{"type":"way","id":4868,"tags":{"building":"yes"},"nodes":[50538,50448,50461,50521,50519,50542,50538],"geometry":[{"lat":47.0690868,"lon":9.5077244},{"lat":47.0689452,"lon":9.5077474},{"lat":47.068957,"lon":9.5079053},{"lat":47.0690531,"lon":9.5078897},{"lat":47.0690495,"lon":9.5078421},{"lat":47.069095,"lon":9.5078347},{"lat":47.0690868,"lon":9.5077244}]},{"type":"way","id":4869,"tags":{"building":"yes"},"nodes":[48985,48927,48928,48891,48897,48990,48985],"geometry":[{"lat":47.0665931,"lon":9.5069438},{"lat":47.0664897,"lon":9.5069505},{"lat":47.0664917,"lon":9.5070172},{"lat":47.0664327,"lon":9.507021},{"lat":47.066436,"lon":9.5071322},{"lat":47.0665984,"lon":9.5071217},{"lat":47.0665931,"lon":9.5069438}]},{"type":"way","id":4871,"tags":{"building":"yes"},"nodes":[43834,43789,43836,43855,43874,43904,43834],"geometry":[{"lat":47.0600187,"lon":9.4987627},{"lat":47.0599536,"lon":9.4989223},{"lat":47.0600204,"lon":9.498981},{"lat":47.0600496,"lon":9.4989094},{"lat":47.0600807,"lon":9.4989367},{"lat":47.0601166,"lon":9.4988488},{"lat":47.0600187,"lon":9.4987627}]},{"type":"way","id":4872,"tags":{"building":"yes"},"nodes":[48587,48531,48543,48495,48505,48611,48587],"geometry":[{"lat":47.0658902,"lon":9.5035564},{"lat":47.0658212,"lon":9.5035888},{"lat":47.065832,"lon":9.5036383},{"lat":47.0657615,"lon":9.5036715},{"lat":47.0657809,"lon":9.5037604},{"lat":47.0659204,"lon":9.5036948},{"lat":47.0658902,"lon":9.5035564}]},{"type":"way","id":4873,"tags":{"building":"yes"},"nodes":[45595,45522,45531,45486,45528,45636,45595],"geometry":[{"lat":47.0621241,"lon":9.5137143},{"lat":47.0620282,"lon":9.5138152},{"lat":47.062036,"lon":9.5138313},{"lat":47.0619894,"lon":9.5138805},{"lat":47.0620349,"lon":9.5139736},{"lat":47.0621775,"lon":9.5138235},{"lat":47.0621241,"lon":9.5137143}]},{"type":"way","id":4874,"tags":{"building":"yes"},"nodes":[48743,48702,48724,48777,48762,48748,48743],"geometry":[{"lat":47.0661383,"lon":9.5077871},{"lat":47.0660648,"lon":9.5078142},{"lat":47.0660989,"lon":9.5080137},{"lat":47.0662016,"lon":9.5079759},{"lat":47.0661755,"lon":9.5078231},{"lat":47.0661463,"lon":9.5078339},{"lat":47.0661383,"lon":9.5077871}]},{"type":"way","id":4877,"tags":{"building":"yes"},"nodes":[46758,46659,46687,46695,46717,46807,46758],"geometry":[{"lat":47.0633468,"lon":9.5122898},{"lat":47.0632579,"lon":9.5123324},{"lat":47.0632802,"lon":9.5124328},{"lat":47.0632921,"lon":9.5124271},{"lat":47.0633104,"lon":9.5125095},{"lat":47.0633875,"lon":9.5124725},{"lat":47.0633468,"lon":9.5122898}]},{"type":"way","id":4878,"tags":{"building":"yes"},"nodes":[49681,49629,49624,49588,49597,49695,49681],"geometry":[{"lat":47.0677656,"lon":9.5067967},{"lat":47.0676751,"lon":9.5068195},{"lat":47.0676712,"lon":9.506786},{"lat":47.0676113,"lon":9.5068012},{"lat":47.0676326,"lon":9.5069828},{"lat":47.067783,"lon":9.5069449},{"lat":47.0677656,"lon":9.5067967}]},{"type":"way","id":4879,"tags":{"building":"yes"},"nodes":[48659,48625,48627,48613,48620,48672,48659],"geometry":[{"lat":47.0659975,"lon":9.5106852},{"lat":47.0659455,"lon":9.5107003},{"lat":47.0659505,"lon":9.5107369},{"lat":47.0659267,"lon":9.5107438},{"lat":47.0659409,"lon":9.5108492},{"lat":47.0660166,"lon":9.5108272},{"lat":47.0659975,"lon":9.5106852}]},{"type":"way","id":4880,"tags":{"building":"yes"},"nodes":[49007,48960,48976,49028,49014,49027,49007],"geometry":[{"lat":47.0666328,"lon":9.5090356},{"lat":47.0665455,"lon":9.5090785},{"lat":47.0665763,"lon":9.5092139},{"lat":47.0666531,"lon":9.5091763},{"lat":47.0666426,"lon":9.5091302},{"lat":47.0666531,"lon":9.509125},{"lat":47.0666328,"lon":9.5090356}]},{"type":"way","id":4881,"tags":{"building":"yes"},"nodes":[48191,48171,48165,48118,48143,48202,48191],"geometry":[{"lat":47.0652856,"lon":9.4979139},{"lat":47.065249,"lon":9.4979431},{"lat":47.0652439,"lon":9.4979295},{"lat":47.0651731,"lon":9.497986},{"lat":47.0652126,"lon":9.4980924},{"lat":47.06532,"lon":9.4980065},{"lat":47.0652856,"lon":9.4979139}]},{"type":"way","id":4882,"tags":{"building":"yes"},"nodes":[47331,47223,47259,47299,47313,47363,47331],"geometry":[{"lat":47.0640828,"lon":9.4942595},{"lat":47.0639507,"lon":9.4943554},{"lat":47.0639874,"lon":9.4944644},{"lat":47.064048,"lon":9.4944204},{"lat":47.0640601,"lon":9.4944565},{"lat":47.0641317,"lon":9.4944045},{"lat":47.0640828,"lon":9.4942595}]},{"type":"way","id":4884,"tags":{"building":"yes"},"nodes":[48082,48016,48028,47982,47998,48110,48082],"geometry":[{"lat":47.0651259,"lon":9.5073402},{"lat":47.0650395,"lon":9.5073921},{"lat":47.0650547,"lon":9.5074467},{"lat":47.0649892,"lon":9.5074862},{"lat":47.0650139,"lon":9.5075747},{"lat":47.0651658,"lon":9.5074834},{"lat":47.0651259,"lon":9.5073402}]},{"type":"way","id":4886,"tags":{"building":"yes"},"nodes":[46410,46311,46297,46288,46265,46369,46410],"geometry":[{"lat":47.0630309,"lon":9.5115191},{"lat":47.0629229,"lon":9.5114635},{"lat":47.0629021,"lon":9.5115506},{"lat":47.0628882,"lon":9.5115434},{"lat":47.0628681,"lon":9.5116275},{"lat":47.06299,"lon":9.5116903},{"lat":47.0630309,"lon":9.5115191}]},{"type":"way","id":4887,"tags":{"building":"yes"},"nodes":[47818,47689,47708,47756,47769,47843,47818],"geometry":[{"lat":47.0647115,"lon":9.5093048},{"lat":47.0645845,"lon":9.5093571},{"lat":47.0646028,"lon":9.509467},{"lat":47.0646467,"lon":9.5094456},{"lat":47.0646622,"lon":9.5094979},{"lat":47.0647453,"lon":9.5094335},{"lat":47.0647115,"lon":9.5093048}]},{"type":"way","id":4889,"tags":{"building":"yes"},"nodes":[44340,44280,44333,44292,44334,44414,44340],"geometry":[{"lat":47.0606976,"lon":9.4956243},{"lat":47.0606344,"lon":9.4956758},{"lat":47.060691,"lon":9.4958254},{"lat":47.0606416,"lon":9.4958657},{"lat":47.0606913,"lon":9.4959972},{"lat":47.060804,"lon":9.4959054},{"lat":47.0606976,"lon":9.4956243}]},{"type":"way","id":4890,"tags":{"building":"yes"},"nodes":[51156,51124,51118,51095,51081,51138,51156],"geometry":[{"lat":47.0704155,"lon":9.5080478},{"lat":47.0703555,"lon":9.5080168},{"lat":47.0703448,"lon":9.5080615},{"lat":47.0703029,"lon":9.5080399},{"lat":47.0702812,"lon":9.5081308},{"lat":47.0703831,"lon":9.5081834},{"lat":47.0704155,"lon":9.5080478}]},{"type":"way","id":4892,"tags":{"building":"yes"},"nodes":[50539,50484,50478,50462,50451,50528,50539],"geometry":[{"lat":47.0690898,"lon":9.5107392},{"lat":47.0689977,"lon":9.5107201},{"lat":47.0689884,"lon":9.5108165},{"lat":47.0689574,"lon":9.5108102},{"lat":47.0689496,"lon":9.5108917},{"lat":47.0690727,"lon":9.5109171},{"lat":47.0690898,"lon":9.5107392}]},{"type":"way","id":4893,"tags":{"building":"yes"},"nodes":[45928,45854,45892,45881,45913,45984,45928],"geometry":[{"lat":47.0624722,"lon":9.4976048},{"lat":47.0624007,"lon":9.4976673},{"lat":47.0624346,"lon":9.4977509},{"lat":47.0624219,"lon":9.4977619},{"lat":47.0624535,"lon":9.4978397},{"lat":47.0625376,"lon":9.4977661},{"lat":47.0624722,"lon":9.4976048}]},{"type":"way","id":4896,"tags":{"building":"yes"},"nodes":[51184,51163,51170,51206,51202,51191,51184],"geometry":[{"lat":47.0704661,"lon":9.5009975},{"lat":47.0704317,"lon":9.5010175},{"lat":47.0704467,"lon":9.5010732},{"lat":47.0704991,"lon":9.5010428},{"lat":47.0704928,"lon":9.5010197},{"lat":47.0704749,"lon":9.5010301},{"lat":47.0704661,"lon":9.5009975}]},{"type":"way","id":4897,"tags":{"building":"yes"},"nodes":[49379,49320,49331,49371,49372,49405,49379],"geometry":[{"lat":47.067259,"lon":9.5109711},{"lat":47.0671478,"lon":9.5110238},{"lat":47.0671722,"lon":9.5111346},{"lat":47.067243,"lon":9.511101},{"lat":47.0672463,"lon":9.5111157},{"lat":47.0672866,"lon":9.5110965},{"lat":47.067259,"lon":9.5109711}]},{"type":"way","id":4898,"tags":{"building":"yes"},"nodes":[51834,51841,51833,51824,51828,51822,51834],"geometry":[{"lat":47.0731626,"lon":9.5099839},{"lat":47.0732519,"lon":9.5100748},{"lat":47.0731577,"lon":9.5102743},{"lat":47.0731054,"lon":9.5102211},{"lat":47.0731306,"lon":9.5101675},{"lat":47.0730937,"lon":9.5101299},{"lat":47.0731626,"lon":9.5099839}]},{"type":"way","id":4899,"tags":{"building":"yes"},"nodes":[50733,50683,50684,50671,50672,50734,50733],"geometry":[{"lat":47.0693983,"lon":9.5093242},{"lat":47.0693133,"lon":9.5093242},{"lat":47.0693133,"lon":9.50941},{"lat":47.06929,"lon":9.50941},{"lat":47.06929,"lon":9.509467},{"lat":47.0693983,"lon":9.509467},{"lat":47.0693983,"lon":9.5093242}]},{"type":"way","id":4900,"tags":{"building":"yes"},"nodes":[47594,47537,47577,47623,47607,47625,47594],"geometry":[{"lat":47.0644527,"lon":9.4963385},{"lat":47.0643727,"lon":9.4963961},{"lat":47.0644334,"lon":9.4965779},{"lat":47.0644892,"lon":9.4965377},{"lat":47.0644676,"lon":9.4964729},{"lat":47.0644917,"lon":9.4964555},{"lat":47.0644527,"lon":9.4963385}]},{"type":"way","id":4901,"tags":{"building":"yes"},"nodes":[47187,47146,47153,47089,47113,47213,47187],"geometry":[{"lat":47.063886,"lon":9.5107831},{"lat":47.0638224,"lon":9.510813},{"lat":47.0638358,"lon":9.5108741},{"lat":47.063756,"lon":9.5109116},{"lat":47.0637876,"lon":9.5110566},{"lat":47.063931,"lon":9.5109891},{"lat":47.063886,"lon":9.5107831}]},{"type":"way","id":4902,"tags":{"building":"yes"},"nodes":[46946,46888,46914,46954,46949,46965,46946],"geometry":[{"lat":47.0635713,"lon":9.4961985},{"lat":47.0634906,"lon":9.4962439},{"lat":47.0635223,"lon":9.4963649},{"lat":47.0635809,"lon":9.4963319},{"lat":47.0635721,"lon":9.496298},{"lat":47.0635941,"lon":9.4962856},{"lat":47.0635713,"lon":9.4961985}]},{"type":"way","id":4903,"tags":{"building":"yes"},"nodes":[50099,50045,50048,50008,50024,50116,50099],"geometry":[{"lat":47.0684306,"lon":9.50976},{"lat":47.0683344,"lon":9.509773},{"lat":47.0683362,"lon":9.5098017},{"lat":47.0682841,"lon":9.5098088},{"lat":47.0683025,"lon":9.5101035},{"lat":47.0684509,"lon":9.5100834},{"lat":47.0684306,"lon":9.50976}]},{"type":"way","id":4904,"tags":{"building":"yes"},"nodes":[43406,43348,43356,43377,43382,43420,43406],"geometry":[{"lat":47.0593705,"lon":9.4984398},{"lat":47.0592162,"lon":9.4985108},{"lat":47.0592373,"lon":9.4986097},{"lat":47.0593007,"lon":9.4985805},{"lat":47.0593079,"lon":9.4986143},{"lat":47.0593989,"lon":9.4985725},{"lat":47.0593705,"lon":9.4984398}]},{"type":"way","id":4905,"tags":{"building":"yes"},"nodes":[47956,47932,47925,47906,47924,47972,47956],"geometry":[{"lat":47.0649507,"lon":9.5054555},{"lat":47.0649118,"lon":9.5054925},{"lat":47.0649036,"lon":9.505474},{"lat":47.0648673,"lon":9.5055085},{"lat":47.0649011,"lon":9.5055852},{"lat":47.0649764,"lon":9.5055137},{"lat":47.0649507,"lon":9.5054555}]},{"type":"way","id":4906,"tags":{"building":"yes"},"nodes":[47875,47839,47811,47872,47879,47868,47875],"geometry":[{"lat":47.0647959,"lon":9.5125867},{"lat":47.0647407,"lon":9.5126098},{"lat":47.064706,"lon":9.5124315},{"lat":47.0647887,"lon":9.5123968},{"lat":47.0648099,"lon":9.5125057},{"lat":47.0647824,"lon":9.5125173},{"lat":47.0647959,"lon":9.5125867}]},{"type":"way","id":4907,"tags":{"building":"yes"},"nodes":[44884,44822,44784,44858,44879,44866,44884],"geometry":[{"lat":47.0612984,"lon":9.5115027},{"lat":47.0612275,"lon":9.5114648},{"lat":47.0611866,"lon":9.5116295},{"lat":47.0612706,"lon":9.5116744},{"lat":47.0612915,"lon":9.5115903},{"lat":47.0612784,"lon":9.5115834},{"lat":47.0612984,"lon":9.5115027}]},{"type":"way","id":4908,"tags":{"building":"yes"},"nodes":[49868,49846,49851,49819,49832,49889,49868],"geometry":[{"lat":47.0680677,"lon":9.5011094},{"lat":47.0680373,"lon":9.5011213},{"lat":47.0680427,"lon":9.5011507},{"lat":47.0679814,"lon":9.5011747},{"lat":47.0680015,"lon":9.5012854},{"lat":47.0680932,"lon":9.5012494},{"lat":47.0680677,"lon":9.5011094}]},{"type":"way","id":4909,"tags":{"building":"yes"},"nodes":[49167,49101,49132,49155,49162,49186,49167],"geometry":[{"lat":47.0668642,"lon":9.5098247},{"lat":47.066748,"lon":9.5099075},{"lat":47.0667893,"lon":9.5100323},{"lat":47.066845,"lon":9.5099926},{"lat":47.0668553,"lon":9.5100238},{"lat":47.0669158,"lon":9.5099806},{"lat":47.0668642,"lon":9.5098247}]},{"type":"way","id":4910,"tags":{"building":"yes"},"nodes":[44541,44458,44462,44496,44570,44562,44541],"geometry":[{"lat":47.0609287,"lon":9.5111614},{"lat":47.0608599,"lon":9.5111982},{"lat":47.0608655,"lon":9.5112181},{"lat":47.0608961,"lon":9.5113471},{"lat":47.0609656,"lon":9.51131},{"lat":47.0609604,"lon":9.511289},{"lat":47.0609287,"lon":9.5111614}]},{"type":"way","id":4911,"tags":{"building":"yes"},"nodes":[50738,50630,50599,50657,50663,50726,50738],"geometry":[{"lat":47.0694084,"lon":9.5040802},{"lat":47.0692305,"lon":9.5039852},{"lat":47.0691947,"lon":9.5041298},{"lat":47.0692644,"lon":9.504167},{"lat":47.069275,"lon":9.5041242},{"lat":47.0693832,"lon":9.504182},{"lat":47.0694084,"lon":9.5040802}]},{"type":"way","id":4912,"tags":{"building":"yes"},"nodes":[43887,43840,43899,43928,43901,43931,43887],"geometry":[{"lat":47.0601044,"lon":9.4952822},{"lat":47.0600266,"lon":9.495361},{"lat":47.0601113,"lon":9.4955411},{"lat":47.0601514,"lon":9.4955005},{"lat":47.0601151,"lon":9.4954234},{"lat":47.0601529,"lon":9.4953852},{"lat":47.0601044,"lon":9.4952822}]},{"type":"way","id":4913,"tags":{"building":"yes"},"nodes":[44001,43944,43911,43879,43954,44032,44001],"geometry":[{"lat":47.0602418,"lon":9.4931509},{"lat":47.0601755,"lon":9.4932621},{"lat":47.0601302,"lon":9.493204},{"lat":47.0600839,"lon":9.4932817},{"lat":47.060184,"lon":9.4934104},{"lat":47.0602967,"lon":9.4932214},{"lat":47.0602418,"lon":9.4931509}]},{"type":"way","id":4914,"tags":{"building":"yes"},"nodes":[50742,50678,50677,50703,50702,50740,50742],"geometry":[{"lat":47.0694145,"lon":9.509701},{"lat":47.0693001,"lon":9.509698},{"lat":47.0692986,"lon":9.5098245},{"lat":47.0693484,"lon":9.5098258},{"lat":47.0693478,"lon":9.5098788},{"lat":47.0694123,"lon":9.5098805},{"lat":47.0694145,"lon":9.509701}]},{"type":"way","id":4915,"tags":{"building":"yes"},"nodes":[50525,50492,50488,50434,50431,50516,50525],"geometry":[{"lat":47.0690665,"lon":9.5062012},{"lat":47.0690062,"lon":9.506173},{"lat":47.0689989,"lon":9.5062441},{"lat":47.0689112,"lon":9.5062294},{"lat":47.0689011,"lon":9.5063139},{"lat":47.0690482,"lon":9.5063514},{"lat":47.0690665,"lon":9.5062012}]},{"type":"way","id":4916,"tags":{"building":"yes"},"nodes":[50425,50368,50366,50343,50337,50416,50425],"geometry":[{"lat":47.0688876,"lon":9.5107056},{"lat":47.0687877,"lon":9.5106944},{"lat":47.0687827,"lon":9.5107915},{"lat":47.0687494,"lon":9.5107878},{"lat":47.0687455,"lon":9.5108612},{"lat":47.0688787,"lon":9.5108761},{"lat":47.0688876,"lon":9.5107056}]},{"type":"way","id":4917,"tags":{"building":"yes"},"nodes":[45912,45938,45926,45983,45959,45858,45912],"geometry":[{"lat":47.0624525,"lon":9.4945358},{"lat":47.0624823,"lon":9.494575},{"lat":47.0624701,"lon":9.4945949},{"lat":47.062537,"lon":9.4946828},{"lat":47.0625016,"lon":9.4947408},{"lat":47.062405,"lon":9.4946137},{"lat":47.0624525,"lon":9.4945358}]},{"type":"way","id":4918,"tags":{"building":"yes"},"nodes":[45748,45676,45713,45677,45734,45819,45748],"geometry":[{"lat":47.0622919,"lon":9.4942534},{"lat":47.0622231,"lon":9.4943564},{"lat":47.0622526,"lon":9.4943989},{"lat":47.0622231,"lon":9.4944431},{"lat":47.0622731,"lon":9.4945152},{"lat":47.0623715,"lon":9.494368},{"lat":47.0622919,"lon":9.4942534}]},{"type":"way","id":4919,"tags":{"building":"yes"},"nodes":[48711,48719,48726,48736,48682,48656,48711],"geometry":[{"lat":47.0660769,"lon":9.4987953},{"lat":47.0660906,"lon":9.4988411},{"lat":47.0661039,"lon":9.4988325},{"lat":47.066127,"lon":9.4989094},{"lat":47.0660339,"lon":9.4989694},{"lat":47.0659972,"lon":9.4988466},{"lat":47.0660769,"lon":9.4987953}]},{"type":"way","id":4920,"tags":{"building":"yes"},"nodes":[45547,45460,45464,45435,45439,45551,45547],"geometry":[{"lat":47.0620521,"lon":9.5129784},{"lat":47.0619622,"lon":9.5129832},{"lat":47.0619647,"lon":9.5130849},{"lat":47.061935,"lon":9.5130865},{"lat":47.061938,"lon":9.5132107},{"lat":47.0620576,"lon":9.5132044},{"lat":47.0620521,"lon":9.5129784}]},{"type":"way","id":4921,"tags":{"building":"yes"},"nodes":[51835,51843,51842,51860,51850,51830,51835],"geometry":[{"lat":47.0731941,"lon":9.5083403},{"lat":47.0732635,"lon":9.5084072},{"lat":47.0732537,"lon":9.5084293},{"lat":47.0733505,"lon":9.5085224},{"lat":47.073312,"lon":9.5086086},{"lat":47.0731457,"lon":9.5084487},{"lat":47.0731941,"lon":9.5083403}]},{"type":"way","id":4922,"tags":{"building":"yes"},"nodes":[48136,48081,48103,48093,48119,48164,48136],"geometry":[{"lat":47.0651966,"lon":9.5078604},{"lat":47.0651254,"lon":9.5078993},{"lat":47.0651573,"lon":9.5080174},{"lat":47.0651409,"lon":9.5080697},{"lat":47.0651738,"lon":9.5080911},{"lat":47.0652432,"lon":9.5080589},{"lat":47.0651966,"lon":9.5078604}]},{"type":"way","id":4923,"tags":{"building":"yes"},"nodes":[49022,48973,48975,48980,48982,49024,49022],"geometry":[{"lat":47.0666493,"lon":9.5079849},{"lat":47.0665738,"lon":9.5079869},{"lat":47.0665744,"lon":9.508033},{"lat":47.0665883,"lon":9.5080326},{"lat":47.0665901,"lon":9.5081718},{"lat":47.0666516,"lon":9.5081701},{"lat":47.0666493,"lon":9.5079849}]},{"type":"way","id":4924,"tags":{"building":"yes"},"nodes":[51945,51958,51954,51951,51946,51933,51945],"geometry":[{"lat":47.0739012,"lon":9.5112847},{"lat":47.0739858,"lon":9.5113726},{"lat":47.0739474,"lon":9.5114524},{"lat":47.0739323,"lon":9.5114368},{"lat":47.0739055,"lon":9.5114924},{"lat":47.0738359,"lon":9.5114201},{"lat":47.0739012,"lon":9.5112847}]},{"type":"way","id":4926,"tags":{"building":"yes"},"nodes":[46203,46134,46142,46125,46137,46228,46203],"geometry":[{"lat":47.0627883,"lon":9.4958252},{"lat":47.0627115,"lon":9.4958742},{"lat":47.062722,"lon":9.4959099},{"lat":47.0626951,"lon":9.4959271},{"lat":47.0627195,"lon":9.4960092},{"lat":47.0628232,"lon":9.4959431},{"lat":47.0627883,"lon":9.4958252}]},{"type":"way","id":4927,"tags":{"building":"yes"},"nodes":[46958,46847,46852,46821,46843,46990,46958],"geometry":[{"lat":47.0635878,"lon":9.4938321},{"lat":47.0634407,"lon":9.4939384},{"lat":47.0634498,"lon":9.4939655},{"lat":47.0634075,"lon":9.4939961},{"lat":47.0634304,"lon":9.4940643},{"lat":47.0636198,"lon":9.4939274},{"lat":47.0635878,"lon":9.4938321}]},{"type":"way","id":4928,"tags":{"building":"yes"},"nodes":[50166,50096,50117,50122,50149,50200,50166],"geometry":[{"lat":47.0685066,"lon":9.499124},{"lat":47.0684165,"lon":9.4991951},{"lat":47.0684518,"lon":9.4992916},{"lat":47.0684635,"lon":9.4992824},{"lat":47.0684908,"lon":9.4993571},{"lat":47.0685693,"lon":9.4992952},{"lat":47.0685066,"lon":9.499124}]},{"type":"way","id":4931,"tags":{"building":"yes"},"nodes":[46605,46706,46648,46621,46583,46509,46605],"geometry":[{"lat":47.0632106,"lon":9.4968325},{"lat":47.0633011,"lon":9.4970371},{"lat":47.0632492,"lon":9.4970866},{"lat":47.0632251,"lon":9.4970322},{"lat":47.0631898,"lon":9.4970659},{"lat":47.0631234,"lon":9.4969156},{"lat":47.0632106,"lon":9.4968325}]},{"type":"way","id":4932,"tags":{"building":"yes"},"nodes":[45354,45307,45243,45324,45360,45326,45354],"geometry":[{"lat":47.0618444,"lon":9.5129812},{"lat":47.06178,"lon":9.5129347},{"lat":47.06171,"lon":9.5131435},{"lat":47.0618105,"lon":9.513216},{"lat":47.06185,"lon":9.5130981},{"lat":47.061814,"lon":9.5130721},{"lat":47.0618444,"lon":9.5129812}]},{"type":"way","id":4933,"tags":{"building":"yes"},"nodes":[44956,44779,44828,44950,44936,44986,44956],"geometry":[{"lat":47.0613766,"lon":9.4975068},{"lat":47.0611803,"lon":9.4977267},{"lat":47.0612357,"lon":9.4978332},{"lat":47.0613731,"lon":9.4976793},{"lat":47.0613564,"lon":9.497647},{"lat":47.0614152,"lon":9.497581},{"lat":47.0613766,"lon":9.4975068}]},{"type":"way","id":4934,"tags":{"building":"yes"},"nodes":[49584,49520,49491,49398,49459,49620,49584],"geometry":[{"lat":47.0676041,"lon":9.5051034},{"lat":47.0674995,"lon":9.505206},{"lat":47.0674497,"lon":9.5050966},{"lat":47.0672827,"lon":9.5052603},{"lat":47.067394,"lon":9.5055051},{"lat":47.0676657,"lon":9.5052389},{"lat":47.0676041,"lon":9.5051034}]},{"type":"way","id":4935,"tags":{"building":"yes"},"nodes":[48366,48289,48317,48356,48367,48407,48366],"geometry":[{"lat":47.065565,"lon":9.5066782},{"lat":47.0654424,"lon":9.5068006},{"lat":47.0654822,"lon":9.5068863},{"lat":47.0655472,"lon":9.5068213},{"lat":47.0655652,"lon":9.50686},{"lat":47.0656226,"lon":9.5068026},{"lat":47.065565,"lon":9.5066782}]},{"type":"way","id":4936,"tags":{"building":"yes"},"nodes":[48017,47937,47959,47979,47984,48044,48017],"geometry":[{"lat":47.0650409,"lon":9.5083128},{"lat":47.0649218,"lon":9.5083735},{"lat":47.0649514,"lon":9.5084987},{"lat":47.064988,"lon":9.50848},{"lat":47.0649919,"lon":9.5084966},{"lat":47.0650744,"lon":9.5084545},{"lat":47.0650409,"lon":9.5083128}]},{"type":"way","id":4937,"tags":{"building":"yes"},"nodes":[48485,48437,48441,48421,48433,48504,48485],"geometry":[{"lat":47.0657499,"lon":9.511573},{"lat":47.0656741,"lon":9.5116072},{"lat":47.0656835,"lon":9.5116519},{"lat":47.0656445,"lon":9.5116696},{"lat":47.0656654,"lon":9.5117694},{"lat":47.0657803,"lon":9.5117174},{"lat":47.0657499,"lon":9.511573}]},{"type":"way","id":4938,"tags":{"building":"yes"},"nodes":[50370,50289,50295,50332,50333,50374,50370],"geometry":[{"lat":47.0687889,"lon":9.5064477},{"lat":47.0686889,"lon":9.5064533},{"lat":47.0686939,"lon":9.5066413},{"lat":47.0687425,"lon":9.5066386},{"lat":47.0687437,"lon":9.5066841},{"lat":47.068795,"lon":9.5066812},{"lat":47.0687889,"lon":9.5064477}]},{"type":"way","id":4939,"tags":{"building":"yes"},"nodes":[51935,51928,51916,51921,51918,51922,51935],"geometry":[{"lat":47.0738441,"lon":9.5117829},{"lat":47.0737921,"lon":9.5119036},{"lat":47.0737216,"lon":9.5118382},{"lat":47.0737523,"lon":9.5117668},{"lat":47.0737317,"lon":9.5117477},{"lat":47.073753,"lon":9.5116983},{"lat":47.0738441,"lon":9.5117829}]},{"type":"way","id":4940,"tags":{"building":"yes"},"nodes":[48892,48849,48836,48902,48908,48890,48892],"geometry":[{"lat":47.0664332,"lon":9.506033},{"lat":47.0663417,"lon":9.5060542},{"lat":47.0663252,"lon":9.5059},{"lat":47.0664436,"lon":9.5058726},{"lat":47.0664533,"lon":9.5059626},{"lat":47.0664263,"lon":9.5059688},{"lat":47.0664332,"lon":9.506033}]},{"type":"way","id":4941,"tags":{"building":"yes"},"nodes":[46258,46207,46221,46163,46181,46293,46258],"geometry":[{"lat":47.0628585,"lon":9.509866},{"lat":47.0627923,"lon":9.5099013},{"lat":47.0628132,"lon":9.5099858},{"lat":47.0627443,"lon":9.5100225},{"lat":47.0627619,"lon":9.5100938},{"lat":47.062897,"lon":9.5100219},{"lat":47.0628585,"lon":9.509866}]},{"type":"way","id":4942,"tags":{"building":"yes"},"nodes":[47576,47522,47507,47565,47572,47611,47576],"geometry":[{"lat":47.0644318,"lon":9.4949315},{"lat":47.0643569,"lon":9.4949959},{"lat":47.064335,"lon":9.4950938},{"lat":47.0644145,"lon":9.4951206},{"lat":47.0644254,"lon":9.495071},{"lat":47.0644729,"lon":9.4950347},{"lat":47.0644318,"lon":9.4949315}]},{"type":"way","id":4943,"tags":{"building":"yes"},"nodes":[43417,43449,43415,43403,43410,43399,43417],"geometry":[{"lat":47.0593939,"lon":9.4940017},{"lat":47.0594667,"lon":9.494096},{"lat":47.0593898,"lon":9.4942239},{"lat":47.059354,"lon":9.4941775},{"lat":47.0593844,"lon":9.4941269},{"lat":47.0593474,"lon":9.494079},{"lat":47.0593939,"lon":9.4940017}]},{"type":"way","id":4944,"tags":{"building":"yes"},"nodes":[43478,43521,43476,43464,43453,43441,43478],"geometry":[{"lat":47.059528,"lon":9.4923924},{"lat":47.0595883,"lon":9.4924678},{"lat":47.0595247,"lon":9.4925774},{"lat":47.0594961,"lon":9.4925417},{"lat":47.0594749,"lon":9.4925782},{"lat":47.0594432,"lon":9.4925385},{"lat":47.059528,"lon":9.4923924}]},{"type":"way","id":4945,"tags":{"building":"yes"},"nodes":[44947,44856,44859,44838,44839,44952,44947],"geometry":[{"lat":47.0613698,"lon":9.5004511},{"lat":47.0612699,"lon":9.5004544},{"lat":47.0612717,"lon":9.5005705},{"lat":47.0612528,"lon":9.5005712},{"lat":47.0612551,"lon":9.5007278},{"lat":47.0613739,"lon":9.5007239},{"lat":47.0613698,"lon":9.5004511}]},{"type":"way","id":4946,"tags":{"building":"yes"},"nodes":[47431,47381,47403,47373,47402,47470,47431],"geometry":[{"lat":47.0642295,"lon":9.4956791},{"lat":47.0641616,"lon":9.495732},{"lat":47.0641871,"lon":9.4958027},{"lat":47.0641488,"lon":9.4958325},{"lat":47.0641864,"lon":9.4959366},{"lat":47.0642927,"lon":9.4958539},{"lat":47.0642295,"lon":9.4956791}]},{"type":"way","id":4947,"tags":{"building":"yes"},"nodes":[45651,45620,45610,45570,45544,45617,45651],"geometry":[{"lat":47.0621978,"lon":9.5119816},{"lat":47.062153,"lon":9.5119557},{"lat":47.0621425,"lon":9.5119948},{"lat":47.0620862,"lon":9.5119623},{"lat":47.0620499,"lon":9.5120976},{"lat":47.0621511,"lon":9.512156},{"lat":47.0621978,"lon":9.5119816}]},{"type":"way","id":4948,"tags":{"building":"yes"},"nodes":[44052,44105,44083,44038,44043,44035,44052],"geometry":[{"lat":47.0603203,"lon":9.4928479},{"lat":47.0604048,"lon":9.4928847},{"lat":47.0603722,"lon":9.4930462},{"lat":47.0603003,"lon":9.4930149},{"lat":47.0603123,"lon":9.4929554},{"lat":47.0602998,"lon":9.4929499},{"lat":47.0603203,"lon":9.4928479}]},{"type":"way","id":4950,"tags":{"building":"yes"},"nodes":[47505,47447,47449,47460,47483,47490,47526,47505],"geometry":[{"lat":47.0643328,"lon":9.5128038},{"lat":47.0642566,"lon":9.5128322},{"lat":47.0642592,"lon":9.5128558},{"lat":47.0642754,"lon":9.5129492},{"lat":47.0643072,"lon":9.5129374},{"lat":47.0643145,"lon":9.5129795},{"lat":47.0643602,"lon":9.5129624},{"lat":47.0643328,"lon":9.5128038}]},{"type":"way","id":4952,"tags":{"building":"yes"},"nodes":[47995,47944,47964,47967,47980,47989,48021,47995],"geometry":[{"lat":47.0650092,"lon":9.5126652},{"lat":47.0649363,"lon":9.5126955},{"lat":47.0649632,"lon":9.5128322},{"lat":47.0649655,"lon":9.5128468},{"lat":47.0649882,"lon":9.5128376},{"lat":47.0649955,"lon":9.5128759},{"lat":47.0650452,"lon":9.5128556},{"lat":47.0650092,"lon":9.5126652}]},{"type":"way","id":4953,"tags":{"building":"yes"},"nodes":[49269,49213,49243,49223,49262,49275,49298,49269],"geometry":[{"lat":47.0670521,"lon":9.504348},{"lat":47.0669714,"lon":9.5044334},{"lat":47.0670134,"lon":9.5044685},{"lat":47.0669849,"lon":9.5045301},{"lat":47.0670431,"lon":9.5045813},{"lat":47.0670695,"lon":9.5045159},{"lat":47.0671141,"lon":9.5044542},{"lat":47.0670521,"lon":9.504348}]},{"type":"way","id":4954,"tags":{"building":"yes"},"nodes":[49439,49418,49415,49385,49400,49431,49481,49439],"geometry":[{"lat":47.0673614,"lon":9.5036646},{"lat":47.0673147,"lon":9.5036982},{"lat":47.0673075,"lon":9.5036766},{"lat":47.0672623,"lon":9.5037091},{"lat":47.0672832,"lon":9.5037719},{"lat":47.0673448,"lon":9.5039564},{"lat":47.0674367,"lon":9.5038903},{"lat":47.0673614,"lon":9.5036646}]},{"type":"way","id":4955,"tags":{"building":"yes"},"nodes":[48517,48466,48491,48509,48524,48556,48535,48517],"geometry":[{"lat":47.0657994,"lon":9.5123324},{"lat":47.0657203,"lon":9.5123641},{"lat":47.0657538,"lon":9.5125446},{"lat":47.0657869,"lon":9.5125313},{"lat":47.0658081,"lon":9.5126457},{"lat":47.0658542,"lon":9.5126272},{"lat":47.0658263,"lon":9.5124774},{"lat":47.0657994,"lon":9.5123324}]},{"type":"way","id":4956,"tags":{"building":"yes"},"nodes":[44114,44055,44079,44110,44113,44149,44146,44114],"geometry":[{"lat":47.0604183,"lon":9.4953288},{"lat":47.0603242,"lon":9.4953892},{"lat":47.0603662,"lon":9.49553},{"lat":47.0604147,"lon":9.4954965},{"lat":47.0604174,"lon":9.4955635},{"lat":47.0604731,"lon":9.4955514},{"lat":47.0604704,"lon":9.4954696},{"lat":47.0604183,"lon":9.4953288}]},{"type":"way","id":4958,"tags":{"building":"yes"},"nodes":[45880,45851,45817,45768,45803,45862,45927,45880],"geometry":[{"lat":47.062421,"lon":9.4958472},{"lat":47.0623992,"lon":9.4958842},{"lat":47.0623688,"lon":9.4958188},{"lat":47.0623152,"lon":9.4958747},{"lat":47.0623579,"lon":9.4959525},{"lat":47.0624095,"lon":9.4960179},{"lat":47.0624703,"lon":9.4959088},{"lat":47.062421,"lon":9.4958472}]},{"type":"way","id":4959,"tags":{"building":"yes"},"nodes":[47449,47394,47414,47450,47446,47465,47460,47449],"geometry":[{"lat":47.0642592,"lon":9.5128558},{"lat":47.0641813,"lon":9.5128849},{"lat":47.0642051,"lon":9.5130221},{"lat":47.0642596,"lon":9.5130018},{"lat":47.0642559,"lon":9.5129804},{"lat":47.0642793,"lon":9.5129716},{"lat":47.0642754,"lon":9.5129492},{"lat":47.0642592,"lon":9.5128558}]},{"type":"way","id":4960,"tags":{"building":"yes"},"nodes":[51701,51721,51706,51693,51686,51690,51698,51701],"geometry":[{"lat":47.0721136,"lon":9.5095822},{"lat":47.0721958,"lon":9.5096477},{"lat":47.0721524,"lon":9.5097732},{"lat":47.0720709,"lon":9.5097152},{"lat":47.0720437,"lon":9.5097038},{"lat":47.0720521,"lon":9.5096297},{"lat":47.0720942,"lon":9.5096382},{"lat":47.0721136,"lon":9.5095822}]},{"type":"way","id":4961,"tags":{"building":"yes"},"nodes":[50713,50620,50602,50729,50735,50744,50711,50713],"geometry":[{"lat":47.0693625,"lon":9.505521},{"lat":47.0692146,"lon":9.5054982},{"lat":47.0691952,"lon":9.5057372},{"lat":47.0693896,"lon":9.5057599},{"lat":47.0694019,"lon":9.5057429},{"lat":47.0694161,"lon":9.5055418},{"lat":47.0693618,"lon":9.5055342},{"lat":47.0693625,"lon":9.505521}]},{"type":"way","id":4962,"tags":{"building":"yes"},"nodes":[49847,49885,49864,49899,49850,49826,49845,49818,49847],"geometry":[{"lat":47.0680373,"lon":9.5050364},{"lat":47.0680907,"lon":9.5051328},{"lat":47.0680581,"lon":9.5051719},{"lat":47.0681068,"lon":9.5052599},{"lat":47.0680413,"lon":9.5053382},{"lat":47.0679915,"lon":9.5052484},{"lat":47.0680291,"lon":9.5052034},{"lat":47.0679767,"lon":9.5051089},{"lat":47.0680373,"lon":9.5050364}]},{"type":"way","id":4963,"tags":{"building":"yes"},"nodes":[46743,46669,46686,46625,46657,46763,46739,46770,46743],"geometry":[{"lat":47.0633366,"lon":9.4996257},{"lat":47.0632647,"lon":9.4996587},{"lat":47.0632777,"lon":9.4997198},{"lat":47.0632289,"lon":9.4997421},{"lat":47.0632557,"lon":9.499868},{"lat":47.0633515,"lon":9.4998241},{"lat":47.0633326,"lon":9.499735},{"lat":47.0633574,"lon":9.4997236},{"lat":47.0633366,"lon":9.4996257}]},{"type":"way","id":4964,"tags":{"building":"yes"},"nodes":[50979,50936,50930,50960,50957,50985,50990,50975,50979],"geometry":[{"lat":47.0699897,"lon":9.5089023},{"lat":47.0699054,"lon":9.5088782},{"lat":47.0698901,"lon":9.5089934},{"lat":47.0699531,"lon":9.5090115},{"lat":47.069948,"lon":9.5090505},{"lat":47.0700047,"lon":9.5090667},{"lat":47.0700146,"lon":9.5089927},{"lat":47.069979,"lon":9.5089825},{"lat":47.0699897,"lon":9.5089023}]},{"type":"way","id":4965,"tags":{"building":"yes"},"nodes":[51948,51941,51947,51931,51943,51956,51961,51965,51948],"geometry":[{"lat":47.0739184,"lon":9.5107538},{"lat":47.0738806,"lon":9.5108272},{"lat":47.0739083,"lon":9.510858},{"lat":47.0738205,"lon":9.5110288},{"lat":47.0738941,"lon":9.5111104},{"lat":47.07398,"lon":9.5109433},{"lat":47.0740091,"lon":9.5109756},{"lat":47.0740488,"lon":9.5108984},{"lat":47.0739184,"lon":9.5107538}]},{"type":"way","id":4966,"tags":{"building":"yes"},"nodes":[45749,45693,45787,45804,45846,45867,45848,45873,45749],"geometry":[{"lat":47.0622927,"lon":9.4990275},{"lat":47.0622369,"lon":9.4989257},{"lat":47.0623421,"lon":9.4988012},{"lat":47.0623592,"lon":9.4988325},{"lat":47.0623932,"lon":9.4987924},{"lat":47.0624122,"lon":9.498827},{"lat":47.0623978,"lon":9.498844},{"lat":47.0624175,"lon":9.4988799},{"lat":47.0622927,"lon":9.4990275}]},{"type":"way","id":4967,"tags":{"building":"yes"},"nodes":[44213,44140,44145,44094,44109,44165,44158,44229,44213],"geometry":[{"lat":47.0605467,"lon":9.4975082},{"lat":47.0604637,"lon":9.4975331},{"lat":47.0604677,"lon":9.4975621},{"lat":47.0603928,"lon":9.4975846},{"lat":47.0604134,"lon":9.4977329},{"lat":47.0604898,"lon":9.49771},{"lat":47.0604846,"lon":9.4976723},{"lat":47.0605661,"lon":9.4976479},{"lat":47.0605467,"lon":9.4975082}]},{"type":"way","id":4968,"tags":{"building":"yes"},"nodes":[48699,48617,48631,48689,48688,48720,48713,48700,48699],"geometry":[{"lat":47.0660586,"lon":9.5086277},{"lat":47.0659386,"lon":9.5086481},{"lat":47.0659523,"lon":9.5088226},{"lat":47.0660399,"lon":9.5088077},{"lat":47.0660376,"lon":9.5087791},{"lat":47.0660919,"lon":9.5087699},{"lat":47.0660823,"lon":9.5086486},{"lat":47.0660605,"lon":9.5086523},{"lat":47.0660586,"lon":9.5086277}]},{"type":"way","id":4969,"tags":{"building":"yes"},"nodes":[51724,51710,51723,51720,51727,51731,51738,51746,51724],"geometry":[{"lat":47.0722157,"lon":9.507602},{"lat":47.0721612,"lon":9.5077239},{"lat":47.0722114,"lon":9.5077722},{"lat":47.0721955,"lon":9.5078079},{"lat":47.0722291,"lon":9.5078403},{"lat":47.0722434,"lon":9.5078081},{"lat":47.0722871,"lon":9.5078501},{"lat":47.0723431,"lon":9.5077246},{"lat":47.0722157,"lon":9.507602}]},{"type":"way","id":4970,"tags":{"building":"yes"},"nodes":[48716,48669,48692,48653,48670,48718,48705,48730,48716],"geometry":[{"lat":47.0660869,"lon":9.5034421},{"lat":47.0660168,"lon":9.5034785},{"lat":47.0660403,"lon":9.5035758},{"lat":47.0659913,"lon":9.5036013},{"lat":47.0660181,"lon":9.5037122},{"lat":47.0660907,"lon":9.5036744},{"lat":47.0660687,"lon":9.5035834},{"lat":47.0661152,"lon":9.5035592},{"lat":47.0660869,"lon":9.5034421}]},{"type":"way","id":4971,"tags":{"building":"yes"},"nodes":[46451,46340,46333,46442,46438,46493,46505,46447,46451],"geometry":[{"lat":47.0630739,"lon":9.4985669},{"lat":47.0629574,"lon":9.498539},{"lat":47.0629476,"lon":9.4986274},{"lat":47.0630666,"lon":9.498656},{"lat":47.0630639,"lon":9.49868},{"lat":47.0631113,"lon":9.4986914},{"lat":47.0631191,"lon":9.4986213},{"lat":47.0630692,"lon":9.4986093},{"lat":47.0630739,"lon":9.4985669}]},{"type":"way","id":4972,"tags":{"building":"yes"},"nodes":[47119,47081,47109,47137,47139,47169,47160,47140,47119],"geometry":[{"lat":47.0637948,"lon":9.5124226},{"lat":47.0637467,"lon":9.5124465},{"lat":47.0637828,"lon":9.5126029},{"lat":47.0638137,"lon":9.5125875},{"lat":47.0638158,"lon":9.5125966},{"lat":47.0638601,"lon":9.5125746},{"lat":47.0638431,"lon":9.512501},{"lat":47.0638161,"lon":9.5125145},{"lat":47.0637948,"lon":9.5124226}]},{"type":"way","id":4973,"tags":{"building":"yes"},"nodes":[49424,49205,49209,49195,49208,49228,49267,49470,49424],"geometry":[{"lat":47.0673248,"lon":9.497741},{"lat":47.0669618,"lon":9.4980059},{"lat":47.0669689,"lon":9.4980269},{"lat":47.0669455,"lon":9.498044},{"lat":47.0669664,"lon":9.4981059},{"lat":47.066988,"lon":9.4980902},{"lat":47.0670493,"lon":9.4982712},{"lat":47.0674142,"lon":9.498005},{"lat":47.0673248,"lon":9.497741}]},{"type":"way","id":4974,"tags":{"building":"yes"},"nodes":[43675,43642,43665,43648,43688,43699,43710,43738,43675],"geometry":[{"lat":47.0598137,"lon":9.4921791},{"lat":47.0597791,"lon":9.4922806},{"lat":47.0598023,"lon":9.4922977},{"lat":47.0597867,"lon":9.4923433},{"lat":47.0598295,"lon":9.4923747},{"lat":47.0598454,"lon":9.4923282},{"lat":47.0598578,"lon":9.4923374},{"lat":47.0598922,"lon":9.4922368},{"lat":47.0598137,"lon":9.4921791}]},{"type":"way","id":4975,"tags":{"building":"yes"},"nodes":[44437,44383,44404,44387,44415,44467,44442,44474,44437],"geometry":[{"lat":47.0608348,"lon":9.4961439},{"lat":47.0607555,"lon":9.4962008},{"lat":47.0607915,"lon":9.496309},{"lat":47.0607612,"lon":9.4963308},{"lat":47.0608051,"lon":9.4964625},{"lat":47.0608781,"lon":9.4964101},{"lat":47.0608449,"lon":9.4963105},{"lat":47.0608816,"lon":9.4962842},{"lat":47.0608348,"lon":9.4961439}]},{"type":"way","id":4976,"tags":{"building":"yes"},"nodes":[48472,48434,48435,48419,48412,48379,48405,48492,48472],"geometry":[{"lat":47.0657258,"lon":9.504268},{"lat":47.065666,"lon":9.5042966},{"lat":47.0656701,"lon":9.5043148},{"lat":47.0656408,"lon":9.5043288},{"lat":47.0656358,"lon":9.5043062},{"lat":47.0655835,"lon":9.5043312},{"lat":47.0656155,"lon":9.5044755},{"lat":47.0657568,"lon":9.5044079},{"lat":47.0657258,"lon":9.504268}]},{"type":"way","id":4977,"tags":{"building":"yes"},"nodes":[49655,49604,49609,49593,49607,49696,49684,49661,49655],"geometry":[{"lat":47.0677179,"lon":9.5032288},{"lat":47.067643,"lon":9.5032612},{"lat":47.0676483,"lon":9.5032878},{"lat":47.0676281,"lon":9.5032965},{"lat":47.0676476,"lon":9.5033941},{"lat":47.0677853,"lon":9.5033346},{"lat":47.0677676,"lon":9.5032461},{"lat":47.0677251,"lon":9.5032644},{"lat":47.0677179,"lon":9.5032288}]},{"type":"way","id":4978,"tags":{"building":"yes"},"nodes":[51772,51761,51760,51739,51754,51773,51770,51780,51772],"geometry":[{"lat":47.0725539,"lon":9.5096372},{"lat":47.0724785,"lon":9.5095633},{"lat":47.0724668,"lon":9.5095889},{"lat":47.0723069,"lon":9.5094324},{"lat":47.0724076,"lon":9.5092107},{"lat":47.0725569,"lon":9.5093569},{"lat":47.0725359,"lon":9.5094031},{"lat":47.0726219,"lon":9.5094872},{"lat":47.0725539,"lon":9.5096372}]},{"type":"way","id":4979,"tags":{"building":"yes"},"nodes":[47386,47329,47337,47264,47296,47427,47407,47410,47386],"geometry":[{"lat":47.0641652,"lon":9.492173},{"lat":47.0640821,"lon":9.4922655},{"lat":47.0640885,"lon":9.4922937},{"lat":47.0639944,"lon":9.4924171},{"lat":47.0640473,"lon":9.4925176},{"lat":47.0642237,"lon":9.4923205},{"lat":47.0641935,"lon":9.4922642},{"lat":47.0641962,"lon":9.4922427},{"lat":47.0641652,"lon":9.492173}]},{"type":"way","id":4980,"tags":{"building":"yes"},"nodes":[48764,48722,48709,48721,48712,48754,48765,48753,48764],"geometry":[{"lat":47.0661787,"lon":9.5115267},{"lat":47.0660947,"lon":9.5115657},{"lat":47.0660721,"lon":9.5114608},{"lat":47.0660942,"lon":9.5114505},{"lat":47.0660769,"lon":9.5113703},{"lat":47.0661609,"lon":9.5113313},{"lat":47.0661792,"lon":9.5114162},{"lat":47.0661571,"lon":9.5114265},{"lat":47.0661787,"lon":9.5115267}]},{"type":"way","id":4981,"tags":{"building":"yes"},"nodes":[46532,46408,46338,46407,46436,46457,46491,46521,46532],"geometry":[{"lat":47.0631404,"lon":9.4935203},{"lat":47.0630286,"lon":9.4934127},{"lat":47.0629544,"lon":9.4935789},{"lat":47.0630279,"lon":9.4936497},{"lat":47.0630626,"lon":9.4935722},{"lat":47.0630792,"lon":9.4935883},{"lat":47.063108,"lon":9.4935239},{"lat":47.0631295,"lon":9.4935446},{"lat":47.0631404,"lon":9.4935203}]},{"type":"way","id":4982,"tags":{"building":"yes"},"nodes":[47088,47033,47023,47003,46962,47025,47044,47061,47088],"geometry":[{"lat":47.0637546,"lon":9.4922825},{"lat":47.0636803,"lon":9.4922163},{"lat":47.0636644,"lon":9.4922549},{"lat":47.063632,"lon":9.4922261},{"lat":47.063591,"lon":9.4923253},{"lat":47.0636713,"lon":9.4923968},{"lat":47.0636994,"lon":9.4923286},{"lat":47.0637259,"lon":9.4923522},{"lat":47.0637546,"lon":9.4922825}]},{"type":"way","id":4983,"tags":{"building":"yes"},"nodes":[50372,50316,50315,50238,50235,50312,50310,50371,50372],"geometry":[{"lat":47.0687938,"lon":9.5102505},{"lat":47.0687211,"lon":9.5102469},{"lat":47.0687195,"lon":9.510321},{"lat":47.0686299,"lon":9.5103166},{"lat":47.0686279,"lon":9.5104087},{"lat":47.0687167,"lon":9.510413},{"lat":47.0687162,"lon":9.5104337},{"lat":47.0687895,"lon":9.5104373},{"lat":47.0687938,"lon":9.5102505}]},{"type":"way","id":4984,"tags":{"building":"yes"},"nodes":[44585,44510,44506,44433,44446,44504,44507,44609,44585],"geometry":[{"lat":47.0609759,"lon":9.4937982},{"lat":47.0609084,"lon":9.4938212},{"lat":47.0609045,"lon":9.4937961},{"lat":47.0608311,"lon":9.493821},{"lat":47.0608501,"lon":9.4939414},{"lat":47.0609032,"lon":9.4939233},{"lat":47.060906,"lon":9.4939408},{"lat":47.0609937,"lon":9.493911},{"lat":47.0609759,"lon":9.4937982}]},{"type":"way","id":4985,"tags":{"building":"yes"},"nodes":[50991,50945,50938,50948,50943,50933,50931,50983,50991],"geometry":[{"lat":47.0700163,"lon":9.5109606},{"lat":47.0699129,"lon":9.5109384},{"lat":47.0699084,"lon":9.5109833},{"lat":47.0699164,"lon":9.510985},{"lat":47.0699116,"lon":9.5110331},{"lat":47.0698962,"lon":9.5110298},{"lat":47.0698906,"lon":9.5110869},{"lat":47.0700013,"lon":9.5111107},{"lat":47.0700163,"lon":9.5109606}]},{"type":"way","id":4987,"tags":{"building":"yes"},"nodes":[46916,46846,46855,46868,46880,46936,46927,46921,46916],"geometry":[{"lat":47.063523,"lon":9.5125579},{"lat":47.0634398,"lon":9.5125925},{"lat":47.0634511,"lon":9.5126512},{"lat":47.0634658,"lon":9.5126451},{"lat":47.063481,"lon":9.5127236},{"lat":47.0635608,"lon":9.5126904},{"lat":47.0635449,"lon":9.512608},{"lat":47.0635336,"lon":9.5126128},{"lat":47.063523,"lon":9.5125579}]},{"type":"way","id":4988,"tags":{"building":"yes"},"nodes":[49585,49539,49528,49499,49512,49523,49552,49621,49585],"geometry":[{"lat":47.0676056,"lon":9.5042642},{"lat":47.0675228,"lon":9.5043682},{"lat":47.067505,"lon":9.5043377},{"lat":47.0674665,"lon":9.5043861},{"lat":47.0674888,"lon":9.5044243},{"lat":47.0675018,"lon":9.504408},{"lat":47.0675576,"lon":9.5045036},{"lat":47.0676659,"lon":9.5043676},{"lat":47.0676056,"lon":9.5042642}]},{"type":"way","id":4989,"tags":{"building":"yes"},"nodes":[51262,51180,51174,51177,51169,51164,51148,51227,51262],"geometry":[{"lat":47.07061,"lon":9.5062544},{"lat":47.070464,"lon":9.5062107},{"lat":47.0704485,"lon":9.506261},{"lat":47.0704588,"lon":9.5062629},{"lat":47.0704466,"lon":9.5063141},{"lat":47.0704323,"lon":9.5063065},{"lat":47.0704084,"lon":9.5063966},{"lat":47.0705357,"lon":9.5064772},{"lat":47.07061,"lon":9.5062544}]},{"type":"way","id":4990,"tags":{"building":"yes"},"nodes":[49174,49154,49156,49067,49172,49417,49377,49230,49174],"geometry":[{"lat":47.0668786,"lon":9.5009551},{"lat":47.0668404,"lon":9.5009736},{"lat":47.0668465,"lon":9.5010005},{"lat":47.0667106,"lon":9.5010664},{"lat":47.0668759,"lon":9.5018018},{"lat":47.0673124,"lon":9.5015902},{"lat":47.067254,"lon":9.5013301},{"lat":47.0669915,"lon":9.5014573},{"lat":47.0668786,"lon":9.5009551}]},{"type":"way","id":4991,"tags":{"building":"yes"},"nodes":[50467,50428,50443,50465,50475,50518,50500,50481,50467],"geometry":[{"lat":47.0689663,"lon":9.5040563},{"lat":47.0688912,"lon":9.5041352},{"lat":47.0689328,"lon":9.5042207},{"lat":47.0689629,"lon":9.5041891},{"lat":47.0689835,"lon":9.5042316},{"lat":47.0690492,"lon":9.5041627},{"lat":47.0690149,"lon":9.5040923},{"lat":47.0689943,"lon":9.5041139},{"lat":47.0689663,"lon":9.5040563}]},{"type":"way","id":4992,"tags":{"building":"yes"},"nodes":[49394,49329,49325,49272,49279,49350,49346,49399,49394],"geometry":[{"lat":47.0672729,"lon":9.5065214},{"lat":47.0671683,"lon":9.506543},{"lat":47.0671638,"lon":9.5064966},{"lat":47.0670596,"lon":9.5065181},{"lat":47.0670783,"lon":9.5067135},{"lat":47.0672069,"lon":9.5066869},{"lat":47.0672024,"lon":9.50664},{"lat":47.0672827,"lon":9.5066233},{"lat":47.0672729,"lon":9.5065214}]},{"type":"way","id":4993,"tags":{"building":"yes"},"nodes":[44358,44295,44294,44235,44234,44342,44343,44357,44358],"geometry":[{"lat":47.0607129,"lon":9.494075},{"lat":47.0606433,"lon":9.4940741},{"lat":47.0606427,"lon":9.4941685},{"lat":47.0605721,"lon":9.4941675},{"lat":47.0605711,"lon":9.4943217},{"lat":47.0606982,"lon":9.4943234},{"lat":47.0606989,"lon":9.4942105},{"lat":47.060712,"lon":9.4942107},{"lat":47.0607129,"lon":9.494075}]},{"type":"way","id":4995,"tags":{"building":"yes"},"nodes":[48377,48343,48342,48328,48331,48285,48288,48383,48377],"geometry":[{"lat":47.0655829,"lon":9.5104175},{"lat":47.0655272,"lon":9.5104214},{"lat":47.0655258,"lon":9.5103803},{"lat":47.0654964,"lon":9.5103824},{"lat":47.0654999,"lon":9.5104864},{"lat":47.0654381,"lon":9.5104908},{"lat":47.065442,"lon":9.5106071},{"lat":47.0655888,"lon":9.5105966},{"lat":47.0655829,"lon":9.5104175}]},{"type":"way","id":4996,"tags":{"building":"yes"},"nodes":[49000,48940,48941,48896,48901,48948,48951,49008,49000],"geometry":[{"lat":47.0666187,"lon":9.5065439},{"lat":47.0665136,"lon":9.5065673},{"lat":47.0665169,"lon":9.5065994},{"lat":47.0664357,"lon":9.5066175},{"lat":47.0664428,"lon":9.5066857},{"lat":47.0665251,"lon":9.5066673},{"lat":47.066529,"lon":9.5067053},{"lat":47.066633,"lon":9.5066821},{"lat":47.0666187,"lon":9.5065439}]},{"type":"way","id":4997,"tags":{"building":"yes"},"nodes":[48124,48152,48099,48058,48075,48052,48091,48113,48124],"geometry":[{"lat":47.0651807,"lon":9.5049656},{"lat":47.0652279,"lon":9.5050624},{"lat":47.065149,"lon":9.5051453},{"lat":47.0650957,"lon":9.5050359},{"lat":47.0651137,"lon":9.505017},{"lat":47.0650906,"lon":9.5049696},{"lat":47.0651399,"lon":9.5049178},{"lat":47.0651691,"lon":9.5049778},{"lat":47.0651807,"lon":9.5049656}]},{"type":"way","id":5000,"tags":{"building":"yes"},"nodes":[50554,50505,50533,50625,50611,50593,50585,50566,50554],"geometry":[{"lat":47.069106,"lon":9.504696},{"lat":47.0690261,"lon":9.5047396},{"lat":47.0690823,"lon":9.5049977},{"lat":47.0692211,"lon":9.5049394},{"lat":47.0692051,"lon":9.5048696},{"lat":47.0691896,"lon":9.5048723},{"lat":47.0691818,"lon":9.5048147},{"lat":47.0691325,"lon":9.5048287},{"lat":47.069106,"lon":9.504696}]},{"type":"way","id":5003,"tags":{"building":"yes"},"nodes":[44338,44273,44279,44231,44253,44276,44278,44371,44338],"geometry":[{"lat":47.0606936,"lon":9.4988051},{"lat":47.0606203,"lon":9.4988472},{"lat":47.0606323,"lon":9.4988924},{"lat":47.0605684,"lon":9.498929},{"lat":47.0605954,"lon":9.4990303},{"lat":47.060628,"lon":9.4990116},{"lat":47.0606321,"lon":9.4990273},{"lat":47.0607368,"lon":9.4989673},{"lat":47.0606936,"lon":9.4988051}]},{"type":"way","id":5004,"tags":{"building":"yes"},"nodes":[47051,47018,47021,46950,46968,47111,47097,47064,47051],"geometry":[{"lat":47.0637127,"lon":9.5099071},{"lat":47.0636479,"lon":9.5099368},{"lat":47.0636536,"lon":9.5099636},{"lat":47.0635723,"lon":9.5100009},{"lat":47.0635979,"lon":9.510121},{"lat":47.0637857,"lon":9.5100348},{"lat":47.0637706,"lon":9.5099637},{"lat":47.0637289,"lon":9.5099828},{"lat":47.0637127,"lon":9.5099071}]},{"type":"way","id":5005,"tags":{"building":"yes"},"nodes":[44565,44468,44466,44489,44481,44571,44582,44558,44565],"geometry":[{"lat":47.0609621,"lon":9.4927687},{"lat":47.0608782,"lon":9.4927595},{"lat":47.060872,"lon":9.4928808},{"lat":47.0608932,"lon":9.4928831},{"lat":47.0608869,"lon":9.4930075},{"lat":47.0609658,"lon":9.4930162},{"lat":47.0609723,"lon":9.492887},{"lat":47.0609561,"lon":9.4928852},{"lat":47.0609621,"lon":9.4927687}]},{"type":"way","id":5006,"tags":{"building":"yes"},"nodes":[50597,50546,50549,50600,50598,50637,50636,50601,50597],"geometry":[{"lat":47.0691942,"lon":9.509283},{"lat":47.0690982,"lon":9.5092849},{"lat":47.0691,"lon":9.5094847},{"lat":47.0691948,"lon":9.5094828},{"lat":47.0691943,"lon":9.5094259},{"lat":47.0692401,"lon":9.509425},{"lat":47.0692395,"lon":9.5093606},{"lat":47.069195,"lon":9.5093615},{"lat":47.0691942,"lon":9.509283}]},{"type":"way","id":5007,"tags":{"building":"yes"},"nodes":[45808,45755,45781,45791,45801,45914,45882,45827,45808],"geometry":[{"lat":47.0623628,"lon":9.5103961},{"lat":47.0622982,"lon":9.5104281},{"lat":47.0623323,"lon":9.5105761},{"lat":47.0623462,"lon":9.5105692},{"lat":47.0623554,"lon":9.510609},{"lat":47.0624545,"lon":9.5105599},{"lat":47.0624227,"lon":9.5104218},{"lat":47.0623742,"lon":9.5104458},{"lat":47.0623628,"lon":9.5103961}]},{"type":"way","id":5008,"tags":{"building":"yes"},"nodes":[44533,44431,44469,44581,44564,44615,44580,44542,44533],"geometry":[{"lat":47.0609225,"lon":9.4970288},{"lat":47.0608293,"lon":9.4971173},{"lat":47.0608798,"lon":9.4972319},{"lat":47.0609716,"lon":9.4971448},{"lat":47.060962,"lon":9.4971231},{"lat":47.0610042,"lon":9.4970831},{"lat":47.0609716,"lon":9.4970091},{"lat":47.0609308,"lon":9.4970478},{"lat":47.0609225,"lon":9.4970288}]},{"type":"way","id":5009,"tags":{"building":"yes"},"nodes":[48906,48863,48865,48854,48872,48885,48898,48937,48906],"geometry":[{"lat":47.0664512,"lon":9.5090225},{"lat":47.0663843,"lon":9.5090629},{"lat":47.066387,"lon":9.5090724},{"lat":47.066365,"lon":9.5090857},{"lat":47.0663955,"lon":9.5091942},{"lat":47.0664187,"lon":9.5091802},{"lat":47.0664401,"lon":9.5092563},{"lat":47.0665057,"lon":9.5092166},{"lat":47.0664512,"lon":9.5090225}]},{"type":"way","id":5010,"tags":{"building":"yes"},"nodes":[51298,51270,51265,51248,51243,51292,51297,51291,51298],"geometry":[{"lat":47.0707048,"lon":9.5091042},{"lat":47.0706341,"lon":9.5090837},{"lat":47.0706211,"lon":9.5091807},{"lat":47.0705826,"lon":9.5091695},{"lat":47.0705724,"lon":9.5092457},{"lat":47.070694,"lon":9.5092809},{"lat":47.0707035,"lon":9.5092104},{"lat":47.070691,"lon":9.5092068},{"lat":47.0707048,"lon":9.5091042}]},{"type":"way","id":5011,"tags":{"building":"yes"},"nodes":[47637,47579,47573,47541,47545,47525,47553,47653,47637],"geometry":[{"lat":47.064507,"lon":9.5091809},{"lat":47.0644366,"lon":9.5092205},{"lat":47.0644283,"lon":9.5091886},{"lat":47.064376,"lon":9.509218},{"lat":47.064382,"lon":9.5092408},{"lat":47.0643593,"lon":9.5092536},{"lat":47.0643929,"lon":9.5093821},{"lat":47.0645382,"lon":9.5093003},{"lat":47.064507,"lon":9.5091809}]},{"type":"way","id":5012,"tags":{"building":"yes"},"nodes":[43755,43707,43704,43680,43656,43709,43713,43733,43755],"geometry":[{"lat":47.0599113,"lon":9.4973985},{"lat":47.0598551,"lon":9.4973717},{"lat":47.0598516,"lon":9.4973876},{"lat":47.059822,"lon":9.4973735},{"lat":47.0597956,"lon":9.4974927},{"lat":47.0598566,"lon":9.4975218},{"lat":47.0598605,"lon":9.4975041},{"lat":47.0598853,"lon":9.4975159},{"lat":47.0599113,"lon":9.4973985}]},{"type":"way","id":5013,"tags":{"building":"yes"},"nodes":[49608,49551,49569,49636,49626,49640,49633,49616,49608],"geometry":[{"lat":47.067648,"lon":9.511203},{"lat":47.0675517,"lon":9.5112554},{"lat":47.0675862,"lon":9.5113921},{"lat":47.0676851,"lon":9.5113382},{"lat":47.0676729,"lon":9.5112898},{"lat":47.0676897,"lon":9.5112806},{"lat":47.0676813,"lon":9.5112475},{"lat":47.0676619,"lon":9.511258},{"lat":47.067648,"lon":9.511203}]},{"type":"way","id":5014,"tags":{"building":"yes"},"nodes":[48522,48413,48428,48417,48430,48439,48451,48561,48522],"geometry":[{"lat":47.0658064,"lon":9.5056138},{"lat":47.0656376,"lon":9.5057335},{"lat":47.0656553,"lon":9.5057875},{"lat":47.0656397,"lon":9.5057985},{"lat":47.0656588,"lon":9.5058569},{"lat":47.065675,"lon":9.5058454},{"lat":47.0656894,"lon":9.5058892},{"lat":47.0658577,"lon":9.5057699},{"lat":47.0658064,"lon":9.5056138}]},{"type":"way","id":5017,"tags":{"building":"yes"},"nodes":[51639,51616,51620,51627,51631,51655,51656,51651,51639],"geometry":[{"lat":47.0718303,"lon":9.5095599},{"lat":47.0717244,"lon":9.5094593},{"lat":47.0717445,"lon":9.509403},{"lat":47.0717618,"lon":9.5093238},{"lat":47.0717691,"lon":9.5092568},{"lat":47.0718842,"lon":9.5092434},{"lat":47.0718924,"lon":9.5093306},{"lat":47.0718714,"lon":9.509466},{"lat":47.0718303,"lon":9.5095599}]},{"type":"way","id":5018,"tags":{"building":"yes"},"nodes":[47354,47295,47319,47298,47323,47390,47372,47369,47354],"geometry":[{"lat":47.0641163,"lon":9.5089823},{"lat":47.0640456,"lon":9.5090291},{"lat":47.0640686,"lon":9.5091043},{"lat":47.0640475,"lon":9.5091182},{"lat":47.0640713,"lon":9.5091957},{"lat":47.0641712,"lon":9.5091296},{"lat":47.0641485,"lon":9.5090557},{"lat":47.0641405,"lon":9.509061},{"lat":47.0641163,"lon":9.5089823}]},{"type":"way","id":5019,"tags":{"building":"yes"},"nodes":[44418,44344,44369,44400,44407,44440,44436,44441,44418],"geometry":[{"lat":47.0608064,"lon":9.4991059},{"lat":47.0607001,"lon":9.4991741},{"lat":47.0607357,"lon":9.4992936},{"lat":47.0607887,"lon":9.4992596},{"lat":47.060795,"lon":9.4992808},{"lat":47.06084,"lon":9.4992519},{"lat":47.0608335,"lon":9.4992299},{"lat":47.0608418,"lon":9.4992246},{"lat":47.0608064,"lon":9.4991059}]},{"type":"way","id":5020,"tags":{"building":"yes"},"nodes":[45934,45986,45939,45884,45905,45887,45906,45925,45934],"geometry":[{"lat":47.0624796,"lon":9.4940261},{"lat":47.0625389,"lon":9.494096},{"lat":47.0624827,"lon":9.4941986},{"lat":47.0624233,"lon":9.4941285},{"lat":47.0624474,"lon":9.4940845},{"lat":47.0624268,"lon":9.4940602},{"lat":47.0624475,"lon":9.4940223},{"lat":47.0624683,"lon":9.4940468},{"lat":47.0624796,"lon":9.4940261}]},{"type":"way","id":5021,"tags":{"building":"yes"},"nodes":[47203,47107,47116,47105,47128,47168,47164,47216,47203],"geometry":[{"lat":47.0639096,"lon":9.509479},{"lat":47.0637824,"lon":9.5095263},{"lat":47.0637938,"lon":9.5095926},{"lat":47.0637803,"lon":9.5095976},{"lat":47.0638033,"lon":9.5097311},{"lat":47.0638588,"lon":9.5097105},{"lat":47.0638488,"lon":9.5096527},{"lat":47.0639341,"lon":9.5096209},{"lat":47.0639096,"lon":9.509479}]},{"type":"way","id":5022,"tags":{"building":"yes"},"nodes":[45654,45611,45635,45645,45649,45747,45718,45663,45654],"geometry":[{"lat":47.0621984,"lon":9.5104886},{"lat":47.062143,"lon":9.5105147},{"lat":47.0621769,"lon":9.5106691},{"lat":47.0621904,"lon":9.5106627},{"lat":47.0621961,"lon":9.5106885},{"lat":47.062291,"lon":9.5106436},{"lat":47.0622608,"lon":9.5105062},{"lat":47.0622078,"lon":9.5105313},{"lat":47.0621984,"lon":9.5104886}]},{"type":"way","id":5024,"tags":{"building":"yes"},"nodes":[51674,51668,51665,51660,51679,51689,51682,51691,51674],"geometry":[{"lat":47.0719817,"lon":9.509939},{"lat":47.0719634,"lon":9.5099807},{"lat":47.0719508,"lon":9.5099688},{"lat":47.0719198,"lon":9.5100394},{"lat":47.0720232,"lon":9.5101373},{"lat":47.0720501,"lon":9.5100761},{"lat":47.072038,"lon":9.5100647},{"lat":47.0720604,"lon":9.5100137},{"lat":47.0719817,"lon":9.509939}]},{"type":"way","id":5025,"tags":{"building":"yes"},"nodes":[48803,48715,48728,48817,48810,48827,48821,48806,48803],"geometry":[{"lat":47.0662656,"lon":9.5089997},{"lat":47.0660848,"lon":9.509056},{"lat":47.0661089,"lon":9.5092226},{"lat":47.0662868,"lon":9.5091672},{"lat":47.0662818,"lon":9.5091324},{"lat":47.0663079,"lon":9.5091243},{"lat":47.0662963,"lon":9.5090441},{"lat":47.0662731,"lon":9.5090513},{"lat":47.0662656,"lon":9.5089997}]},{"type":"way","id":5026,"tags":{"building":"yes"},"nodes":[45997,45941,45948,45894,45933,45985,45976,46037,45997],"geometry":[{"lat":47.0625523,"lon":9.4950808},{"lat":47.0624845,"lon":9.4951189},{"lat":47.062492,"lon":9.4951476},{"lat":47.0624366,"lon":9.4951787},{"lat":47.0624785,"lon":9.4953391},{"lat":47.0625385,"lon":9.4953054},{"lat":47.0625289,"lon":9.4952689},{"lat":47.0625921,"lon":9.4952334},{"lat":47.0625523,"lon":9.4950808}]},{"type":"way","id":5027,"tags":{"building":"yes"},"nodes":[47797,47713,47746,47764,47771,47842,47837,47823,47797],"geometry":[{"lat":47.0646894,"lon":9.5097184},{"lat":47.0646104,"lon":9.509749},{"lat":47.0646373,"lon":9.5098986},{"lat":47.0646582,"lon":9.5098905},{"lat":47.0646647,"lon":9.5099264},{"lat":47.0647437,"lon":9.5098958},{"lat":47.0647374,"lon":9.5098603},{"lat":47.0647164,"lon":9.5098684},{"lat":47.0646894,"lon":9.5097184}]},{"type":"way","id":5028,"tags":{"building":"yes"},"nodes":[48888,48859,48857,48841,48845,48820,48831,48905,48888],"geometry":[{"lat":47.0664366,"lon":9.5029834},{"lat":47.0663908,"lon":9.5029948},{"lat":47.0663876,"lon":9.5029674},{"lat":47.0663234,"lon":9.5029834},{"lat":47.0663292,"lon":9.5030337},{"lat":47.06629,"lon":9.5030435},{"lat":47.0663091,"lon":9.503209},{"lat":47.0664584,"lon":9.5031718},{"lat":47.0664366,"lon":9.5029834}]},{"type":"way","id":5029,"tags":{"building":"yes"},"nodes":[46827,46747,46724,46667,46704,46750,46775,46850,46827],"geometry":[{"lat":47.0634126,"lon":9.4966946},{"lat":47.0633395,"lon":9.4967578},{"lat":47.0633149,"lon":9.4966965},{"lat":47.063262,"lon":9.4967422},{"lat":47.0632999,"lon":9.4968369},{"lat":47.0633405,"lon":9.4968018},{"lat":47.0633627,"lon":9.4968572},{"lat":47.0634482,"lon":9.4967834},{"lat":47.0634126,"lon":9.4966946}]},{"type":"way","id":5030,"tags":{"building":"yes"},"nodes":[49152,49086,49087,49080,49083,49161,49158,49153,49152],"geometry":[{"lat":47.0668383,"lon":9.5070591},{"lat":47.0667284,"lon":9.5070656},{"lat":47.06673,"lon":9.5071256},{"lat":47.0667214,"lon":9.5071261},{"lat":47.0667259,"lon":9.5072908},{"lat":47.0668533,"lon":9.5072834},{"lat":47.0668487,"lon":9.5071146},{"lat":47.0668398,"lon":9.5071151},{"lat":47.0668383,"lon":9.5070591}]},{"type":"way","id":5033,"tags":{"building":"yes"},"nodes":[50419,50344,50342,50326,50325,50357,50356,50418,50419],"geometry":[{"lat":47.0688833,"lon":9.508753},{"lat":47.0687498,"lon":9.5087514},{"lat":47.0687493,"lon":9.50883},{"lat":47.0687344,"lon":9.5088299},{"lat":47.0687337,"lon":9.5089511},{"lat":47.0687675,"lon":9.5089515},{"lat":47.0687671,"lon":9.5090176},{"lat":47.0688819,"lon":9.5090189},{"lat":47.0688833,"lon":9.508753}]},{"type":"way","id":5035,"tags":{"building":"yes"},"nodes":[49351,49287,49309,49343,49352,49391,49373,49367,49351],"geometry":[{"lat":47.0672105,"lon":9.5092659},{"lat":47.0671009,"lon":9.509319},{"lat":47.0671282,"lon":9.5094403},{"lat":47.0671959,"lon":9.5094075},{"lat":47.0672138,"lon":9.5094872},{"lat":47.0672714,"lon":9.5094593},{"lat":47.0672481,"lon":9.509356},{"lat":47.0672324,"lon":9.5093636},{"lat":47.0672105,"lon":9.5092659}]},{"type":"way","id":5036,"tags":{"building":"yes"},"nodes":[47457,47398,47409,47352,47375,47442,47434,47484,47457],"geometry":[{"lat":47.0642704,"lon":9.4965137},{"lat":47.0641852,"lon":9.4965725},{"lat":47.0641957,"lon":9.4966054},{"lat":47.0641123,"lon":9.4966629},{"lat":47.0641496,"lon":9.4967794},{"lat":47.0642506,"lon":9.4967097},{"lat":47.0642403,"lon":9.4966774},{"lat":47.0643079,"lon":9.4966308},{"lat":47.0642704,"lon":9.4965137}]},{"type":"way","id":5038,"tags":{"building":"yes"},"nodes":[47752,47680,47674,47617,47641,47734,47729,47776,47752],"geometry":[{"lat":47.0646436,"lon":9.4957994},{"lat":47.0645711,"lon":9.4958539},{"lat":47.0645667,"lon":9.4958412},{"lat":47.0644802,"lon":9.4959063},{"lat":47.0645176,"lon":9.4960137},{"lat":47.0646291,"lon":9.49593},{"lat":47.0646197,"lon":9.4959031},{"lat":47.0646673,"lon":9.4958673},{"lat":47.0646436,"lon":9.4957994}]},{"type":"way","id":5039,"tags":{"building":"yes"},"nodes":[49323,49280,49303,49282,49304,49349,49334,49345,49323],"geometry":[{"lat":47.067161,"lon":9.4971916},{"lat":47.0670785,"lon":9.4972513},{"lat":47.0671179,"lon":9.4973686},{"lat":47.0670915,"lon":9.4973878},{"lat":47.0671194,"lon":9.4974708},{"lat":47.067205,"lon":9.4974113},{"lat":47.0671754,"lon":9.497323},{"lat":47.0671993,"lon":9.4973057},{"lat":47.067161,"lon":9.4971916}]},{"type":"way","id":5040,"tags":{"building":"yes"},"nodes":[45104,45070,45075,45027,45053,45100,45113,45158,45104],"geometry":[{"lat":47.0615776,"lon":9.492701},{"lat":47.0615336,"lon":9.492719},{"lat":47.061542,"lon":9.4927646},{"lat":47.061458,"lon":9.4927949},{"lat":47.0614987,"lon":9.4929286},{"lat":47.0615717,"lon":9.4928765},{"lat":47.0615879,"lon":9.4929277},{"lat":47.0616325,"lon":9.4928983},{"lat":47.0615776,"lon":9.492701}]},{"type":"way","id":5041,"tags":{"building":"yes"},"nodes":[46413,46387,46372,46318,46331,46295,46323,46445,46413],"geometry":[{"lat":47.0630351,"lon":9.4966201},{"lat":47.0630119,"lon":9.4966392},{"lat":47.062997,"lon":9.4966003},{"lat":47.0629316,"lon":9.4966541},{"lat":47.0629457,"lon":9.496691},{"lat":47.0629009,"lon":9.4967279},{"lat":47.0629354,"lon":9.4968184},{"lat":47.0630688,"lon":9.4967086},{"lat":47.0630351,"lon":9.4966201}]},{"type":"way","id":5042,"tags":{"building":"yes"},"nodes":[45101,45021,45007,44924,44894,44980,44996,45074,45101],"geometry":[{"lat":47.0615745,"lon":9.5129877},{"lat":47.0614511,"lon":9.5129108},{"lat":47.0614329,"lon":9.512974},{"lat":47.0613395,"lon":9.5129159},{"lat":47.061305,"lon":9.5130355},{"lat":47.061407,"lon":9.513099},{"lat":47.0614246,"lon":9.5130381},{"lat":47.0615393,"lon":9.5131096},{"lat":47.0615745,"lon":9.5129877}]},{"type":"way","id":5043,"tags":{"building":"yes"},"nodes":[48322,48264,48267,48239,48241,48229,48242,48340,48322],"geometry":[{"lat":47.0654927,"lon":9.5114097},{"lat":47.0654078,"lon":9.5114461},{"lat":47.0654102,"lon":9.5114581},{"lat":47.0653725,"lon":9.5114743},{"lat":47.0653775,"lon":9.5114998},{"lat":47.0653558,"lon":9.5115091},{"lat":47.0653776,"lon":9.5116187},{"lat":47.065522,"lon":9.5115567},{"lat":47.0654927,"lon":9.5114097}]},{"type":"way","id":5044,"tags":{"building":"yes"},"nodes":[46823,46718,46666,46611,46586,46655,46676,46771,46823],"geometry":[{"lat":47.0634102,"lon":9.4977026},{"lat":47.0633106,"lon":9.4976656},{"lat":47.0632619,"lon":9.4979483},{"lat":47.0632134,"lon":9.4979302},{"lat":47.0631937,"lon":9.4980444},{"lat":47.0632534,"lon":9.4980666},{"lat":47.0632695,"lon":9.4979731},{"lat":47.0633579,"lon":9.4980059},{"lat":47.0634102,"lon":9.4977026}]},{"type":"way","id":5045,"tags":{"building":"yes"},"nodes":[47732,47693,47695,47657,47671,47712,47715,47755,47732],"geometry":[{"lat":47.0646238,"lon":9.5103211},{"lat":47.0645867,"lon":9.5103326},{"lat":47.0645883,"lon":9.5103434},{"lat":47.0645457,"lon":9.5103567},{"lat":47.0645644,"lon":9.5104852},{"lat":47.0646095,"lon":9.5104711},{"lat":47.064611,"lon":9.5104811},{"lat":47.0646454,"lon":9.5104704},{"lat":47.0646238,"lon":9.5103211}]},{"type":"way","id":5046,"tags":{"building":"yes"},"nodes":[45041,44978,44983,44959,44966,44982,44993,45057,45041],"geometry":[{"lat":47.0614788,"lon":9.4994527},{"lat":47.0614042,"lon":9.4994877},{"lat":47.0614125,"lon":9.4995261},{"lat":47.061382,"lon":9.4995404},{"lat":47.0613952,"lon":9.4996008},{"lat":47.0614117,"lon":9.4995931},{"lat":47.0614235,"lon":9.4996475},{"lat":47.0615121,"lon":9.499606},{"lat":47.0614788,"lon":9.4994527}]},{"type":"way","id":5047,"tags":{"building":"yes"},"nodes":[45557,45508,45501,45467,45485,45545,45554,45623,45557],"geometry":[{"lat":47.0620679,"lon":9.4957059},{"lat":47.062014,"lon":9.4957206},{"lat":47.0620076,"lon":9.4956884},{"lat":47.0619692,"lon":9.4957059},{"lat":47.0619884,"lon":9.4958494},{"lat":47.0620505,"lon":9.4958292},{"lat":47.0620606,"lon":9.4958708},{"lat":47.0621611,"lon":9.4958373},{"lat":47.0620679,"lon":9.4957059}]},{"type":"way","id":5048,"tags":{"building":"yes"},"nodes":[43613,43664,43598,43558,43587,43542,43560,43601,43613],"geometry":[{"lat":47.0597376,"lon":9.4934481},{"lat":47.0598018,"lon":9.4935279},{"lat":47.0597124,"lon":9.4936829},{"lat":47.0596505,"lon":9.493606},{"lat":47.0596908,"lon":9.4935361},{"lat":47.0596257,"lon":9.4934551},{"lat":47.0596562,"lon":9.4934022},{"lat":47.0597191,"lon":9.4934803},{"lat":47.0597376,"lon":9.4934481}]},{"type":"way","id":5050,"tags":{"building":"yes"},"nodes":[48159,48030,48046,48098,48092,48108,48121,48178,48159],"geometry":[{"lat":47.0652387,"lon":9.5100997},{"lat":47.0650573,"lon":9.5101536},{"lat":47.0650762,"lon":9.510291},{"lat":47.0651487,"lon":9.5102695},{"lat":47.0651405,"lon":9.5102104},{"lat":47.0651653,"lon":9.5102031},{"lat":47.0651765,"lon":9.5102838},{"lat":47.0652606,"lon":9.5102588},{"lat":47.0652387,"lon":9.5100997}]},{"type":"way","id":5051,"tags":{"building":"yes"},"nodes":[47279,47240,47228,47165,47195,47278,47270,47294,47279],"geometry":[{"lat":47.0640113,"lon":9.4973412},{"lat":47.0639655,"lon":9.4973754},{"lat":47.0639564,"lon":9.4973492},{"lat":47.0638491,"lon":9.4974295},{"lat":47.0638989,"lon":9.497573},{"lat":47.06401,"lon":9.4974899},{"lat":47.0640015,"lon":9.4974656},{"lat":47.0640435,"lon":9.4974342},{"lat":47.0640113,"lon":9.4973412}]},{"type":"way","id":5052,"tags":{"building":"yes"},"nodes":[44202,44178,44172,44134,44159,44193,44186,44214,44202],"geometry":[{"lat":47.0605352,"lon":9.4968825},{"lat":47.0605097,"lon":9.4968971},{"lat":47.060499,"lon":9.4968567},{"lat":47.0604549,"lon":9.4968819},{"lat":47.0604852,"lon":9.496996},{"lat":47.0605238,"lon":9.4969739},{"lat":47.0605176,"lon":9.4969504},{"lat":47.0605485,"lon":9.4969327},{"lat":47.0605352,"lon":9.4968825}]},{"type":"way","id":5054,"tags":{"building":"yes"},"nodes":[49236,49185,49188,49193,49194,49216,49214,49237,49236],"geometry":[{"lat":47.0670013,"lon":9.5075572},{"lat":47.0669154,"lon":9.5075614},{"lat":47.0669188,"lon":9.5077094},{"lat":47.0669384,"lon":9.5077085},{"lat":47.0669396,"lon":9.5077621},{"lat":47.0669731,"lon":9.5077604},{"lat":47.0669719,"lon":9.5077091},{"lat":47.0670048,"lon":9.5077075},{"lat":47.0670013,"lon":9.5075572}]},{"type":"way","id":5055,"tags":{"building":"yes"},"nodes":[50840,50799,50797,50783,50782,50787,50786,50831,50840],"geometry":[{"lat":47.0696458,"lon":9.5103612},{"lat":47.0695476,"lon":9.5103441},{"lat":47.0695431,"lon":9.5103953},{"lat":47.0695141,"lon":9.5103934},{"lat":47.0695108,"lon":9.5105214},{"lat":47.0695289,"lon":9.5105205},{"lat":47.0695263,"lon":9.5105584},{"lat":47.0696303,"lon":9.510567},{"lat":47.0696458,"lon":9.5103612}]},{"type":"way","id":5057,"tags":{"building":"yes"},"nodes":[51073,51039,51036,51016,51009,51030,51023,51056,51073],"geometry":[{"lat":47.0702658,"lon":9.506476},{"lat":47.0701591,"lon":9.5064124},{"lat":47.0701488,"lon":9.5064498},{"lat":47.0700941,"lon":9.5064172},{"lat":47.0700718,"lon":9.5064979},{"lat":47.0701298,"lon":9.5065324},{"lat":47.0701172,"lon":9.5065781},{"lat":47.0702206,"lon":9.5066397},{"lat":47.0702658,"lon":9.506476}]},{"type":"way","id":5058,"tags":{"building":"yes"},"nodes":[50398,50349,50353,50284,50264,50329,50338,50389,50398],"geometry":[{"lat":47.0688393,"lon":9.5037325},{"lat":47.0687557,"lon":9.5037095},{"lat":47.0687598,"lon":9.5036774},{"lat":47.0686838,"lon":9.5036565},{"lat":47.0686584,"lon":9.5038552},{"lat":47.0687392,"lon":9.5038774},{"lat":47.0687458,"lon":9.5038257},{"lat":47.0688246,"lon":9.5038474},{"lat":47.0688393,"lon":9.5037325}]},{"type":"way","id":5059,"tags":{"building":"yes"},"nodes":[44696,44594,44591,44488,44484,44655,44656,44690,44696],"geometry":[{"lat":47.0610876,"lon":9.4920023},{"lat":47.0609817,"lon":9.4919945},{"lat":47.06098,"lon":9.4920436},{"lat":47.0608932,"lon":9.4920372},{"lat":47.0608889,"lon":9.4921622},{"lat":47.0610459,"lon":9.4921738},{"lat":47.0610468,"lon":9.4921486},{"lat":47.0610825,"lon":9.4921512},{"lat":47.0610876,"lon":9.4920023}]},{"type":"way","id":5060,"tags":{"building":"yes"},"nodes":[51513,51459,51397,51440,51456,51465,51493,51499,51513],"geometry":[{"lat":47.0713337,"lon":9.5083254},{"lat":47.0711848,"lon":9.5082396},{"lat":47.0710387,"lon":9.5089196},{"lat":47.0711419,"lon":9.5089678},{"lat":47.0711784,"lon":9.5088015},{"lat":47.0712031,"lon":9.5088149},{"lat":47.0712789,"lon":9.5085052},{"lat":47.0712917,"lon":9.5085078},{"lat":47.0713337,"lon":9.5083254}]},{"type":"way","id":5062,"tags":{"building":"yes"},"nodes":[46774,46721,46731,46680,46688,46800,46824,46782,46774],"geometry":[{"lat":47.0633625,"lon":9.5099546},{"lat":47.0633124,"lon":9.5099708},{"lat":47.0633201,"lon":9.5100596},{"lat":47.0632701,"lon":9.5100717},{"lat":47.0632816,"lon":9.5101807},{"lat":47.0633834,"lon":9.5101565},{"lat":47.0634109,"lon":9.5100192},{"lat":47.0633674,"lon":9.509999},{"lat":47.0633625,"lon":9.5099546}]},{"type":"way","id":5063,"tags":{"building":"yes"},"nodes":[47360,47289,47312,47340,47350,47376,47365,47377,47360],"geometry":[{"lat":47.0641275,"lon":9.5101384},{"lat":47.0640369,"lon":9.5101775},{"lat":47.0640597,"lon":9.5102908},{"lat":47.0640919,"lon":9.5102769},{"lat":47.0641099,"lon":9.5103667},{"lat":47.0641498,"lon":9.5103495},{"lat":47.0641318,"lon":9.5102596},{"lat":47.0641502,"lon":9.5102517},{"lat":47.0641275,"lon":9.5101384}]},{"type":"way","id":5064,"tags":{"building":"yes"},"nodes":[48003,47931,47948,47987,47977,48029,48019,48010,48003],"geometry":[{"lat":47.0650195,"lon":9.5111358},{"lat":47.0649109,"lon":9.5111801},{"lat":47.0649392,"lon":9.5113294},{"lat":47.0649927,"lon":9.5113075},{"lat":47.0649855,"lon":9.5112696},{"lat":47.0650571,"lon":9.5112404},{"lat":47.0650438,"lon":9.5111701},{"lat":47.0650273,"lon":9.5111769},{"lat":47.0650195,"lon":9.5111358}]},{"type":"way","id":5065,"tags":{"building":"yes"},"nodes":[50815,50780,50773,50798,50796,50824,50826,50812,50815],"geometry":[{"lat":47.0695935,"lon":9.5097267},{"lat":47.0695093,"lon":9.5097164},{"lat":47.0695025,"lon":9.5098363},{"lat":47.0695448,"lon":9.5098415},{"lat":47.0695422,"lon":9.509887},{"lat":47.0696132,"lon":9.5098957},{"lat":47.0696162,"lon":9.5098433},{"lat":47.0695871,"lon":9.5098397},{"lat":47.0695935,"lon":9.5097267}]},{"type":"way","id":5066,"tags":{"building":"yes"},"nodes":[45752,45646,45626,45666,45664,45689,45696,45729,45752],"geometry":[{"lat":47.062297,"lon":9.5124433},{"lat":47.0621928,"lon":9.5123936},{"lat":47.0621653,"lon":9.5125177},{"lat":47.0622122,"lon":9.5125402},{"lat":47.0622102,"lon":9.5125493},{"lat":47.0622358,"lon":9.5125616},{"lat":47.062239,"lon":9.5125473},{"lat":47.0622707,"lon":9.5125624},{"lat":47.062297,"lon":9.5124433}]},{"type":"way","id":5067,"tags":{"building":"yes"},"nodes":[51615,51632,51647,51638,51648,51634,51618,51621,51615],"geometry":[{"lat":47.0717199,"lon":9.509931},{"lat":47.0717834,"lon":9.510013},{"lat":47.0718455,"lon":9.5099095},{"lat":47.0718288,"lon":9.5098879},{"lat":47.071849,"lon":9.5098542},{"lat":47.0717921,"lon":9.5097808},{"lat":47.0717359,"lon":9.5098745},{"lat":47.071746,"lon":9.5098875},{"lat":47.0717199,"lon":9.509931}]},{"type":"way","id":5068,"tags":{"building":"yes"},"nodes":[46701,46598,46562,46475,46460,46546,46550,46649,46701],"geometry":[{"lat":47.0632952,"lon":9.4981642},{"lat":47.0632049,"lon":9.4981302},{"lat":47.0631676,"lon":9.4983437},{"lat":47.0630947,"lon":9.4983163},{"lat":47.0630813,"lon":9.4983927},{"lat":47.0631534,"lon":9.4984199},{"lat":47.0631586,"lon":9.4983904},{"lat":47.0632496,"lon":9.4984247},{"lat":47.0632952,"lon":9.4981642}]},{"type":"way","id":5069,"tags":{"building":"yes"},"nodes":[45991,45958,46001,46029,46068,46116,46046,46004,45991],"geometry":[{"lat":47.0625444,"lon":9.4926912},{"lat":47.0625015,"lon":9.4927272},{"lat":47.0625553,"lon":9.4928654},{"lat":47.0625876,"lon":9.4928383},{"lat":47.062623,"lon":9.4929293},{"lat":47.0626835,"lon":9.4928785},{"lat":47.0626067,"lon":9.4926812},{"lat":47.0625568,"lon":9.492723},{"lat":47.0625444,"lon":9.4926912}]},{"type":"way","id":5071,"tags":{"building":"yes"},"nodes":[48644,48612,48606,48544,48534,48601,48597,48633,48644],"geometry":[{"lat":47.0659791,"lon":9.5073583},{"lat":47.0659209,"lon":9.5073437},{"lat":47.0659145,"lon":9.5073987},{"lat":47.0658335,"lon":9.5073784},{"lat":47.0658226,"lon":9.5074713},{"lat":47.065907,"lon":9.5074925},{"lat":47.0659031,"lon":9.5075256},{"lat":47.065958,"lon":9.5075393},{"lat":47.0659791,"lon":9.5073583}]},{"type":"way","id":5072,"tags":{"building":"yes"},"nodes":[44740,44647,44700,44741,44756,44834,44794,44767,44740],"geometry":[{"lat":47.0611325,"lon":9.4964051},{"lat":47.0610374,"lon":9.4964752},{"lat":47.0610905,"lon":9.4966301},{"lat":47.0611368,"lon":9.496596},{"lat":47.0611538,"lon":9.4966458},{"lat":47.0612453,"lon":9.4965784},{"lat":47.0612013,"lon":9.49645},{"lat":47.0611586,"lon":9.4964815},{"lat":47.0611325,"lon":9.4964051}]},{"type":"way","id":5073,"tags":{"building":"yes"},"nodes":[44777,44702,44669,44651,44622,44715,44734,44747,44777],"geometry":[{"lat":47.0611791,"lon":9.5127826},{"lat":47.061092,"lon":9.5127259},{"lat":47.061065,"lon":9.5128151},{"lat":47.0610422,"lon":9.5128003},{"lat":47.0610104,"lon":9.512906},{"lat":47.0611007,"lon":9.5129647},{"lat":47.0611261,"lon":9.5128806},{"lat":47.0611457,"lon":9.5128933},{"lat":47.0611791,"lon":9.5127826}]},{"type":"way","id":5074,"tags":{"building":"yes"},"nodes":[51342,51338,51358,51349,51335,51340,51327,51333,51342],"geometry":[{"lat":47.0708659,"lon":9.5106579},{"lat":47.0708599,"lon":9.5106952},{"lat":47.0709157,"lon":9.5107145},{"lat":47.0708929,"lon":9.5108565},{"lat":47.0708527,"lon":9.5108426},{"lat":47.0708615,"lon":9.5107877},{"lat":47.0708171,"lon":9.5107723},{"lat":47.0708371,"lon":9.5106479},{"lat":47.0708659,"lon":9.5106579}]},{"type":"way","id":5075,"tags":{"building":"yes"},"nodes":[46365,46360,46298,46324,46394,46386,46429,46415,46365],"geometry":[{"lat":47.0629876,"lon":9.4942891},{"lat":47.0629818,"lon":9.4942704},{"lat":47.0629042,"lon":9.4943223},{"lat":47.0629361,"lon":9.4944251},{"lat":47.0630168,"lon":9.4943711},{"lat":47.0630103,"lon":9.49435},{"lat":47.0630568,"lon":9.4943189},{"lat":47.0630373,"lon":9.4942559},{"lat":47.0629876,"lon":9.4942891}]},{"type":"way","id":5076,"tags":{"building":"yes"},"nodes":[43502,43533,43528,43552,43543,43518,43522,43492,43502],"geometry":[{"lat":47.0595637,"lon":9.4994529},{"lat":47.0596081,"lon":9.4994998},{"lat":47.0595988,"lon":9.499519},{"lat":47.0596419,"lon":9.4995645},{"lat":47.0596267,"lon":9.4995956},{"lat":47.0595844,"lon":9.499551},{"lat":47.0595891,"lon":9.4995413},{"lat":47.0595438,"lon":9.4994936},{"lat":47.0595637,"lon":9.4994529}]},{"type":"way","id":5077,"tags":{"building":"yes"},"nodes":[44281,44274,44270,44247,44255,44201,44250,44337,44281],"geometry":[{"lat":47.0606349,"lon":9.4969533},{"lat":47.0606216,"lon":9.4969663},{"lat":47.0606145,"lon":9.4969507},{"lat":47.0605881,"lon":9.4969764},{"lat":47.060596,"lon":9.4969938},{"lat":47.0605341,"lon":9.4970543},{"lat":47.0605912,"lon":9.4971801},{"lat":47.0606928,"lon":9.4970809},{"lat":47.0606349,"lon":9.4969533}]},{"type":"way","id":5078,"tags":{"building":"yes"},"nodes":[46018,45956,45981,45998,46006,46031,46020,46042,46018],"geometry":[{"lat":47.0625717,"lon":9.4986117},{"lat":47.0624986,"lon":9.4986731},{"lat":47.0625359,"lon":9.4987689},{"lat":47.0625524,"lon":9.498755},{"lat":47.062559,"lon":9.498772},{"lat":47.062589,"lon":9.4987468},{"lat":47.0625736,"lon":9.4987071},{"lat":47.0626002,"lon":9.4986848},{"lat":47.0625717,"lon":9.4986117}]},{"type":"way","id":5079,"tags":{"building":"yes"},"nodes":[50504,50450,50456,50446,50439,50445,50440,50480,50504],"geometry":[{"lat":47.0690218,"lon":9.5038672},{"lat":47.0689496,"lon":9.5038258},{"lat":47.068955,"lon":9.5038054},{"lat":47.06894,"lon":9.5037968},{"lat":47.0689218,"lon":9.503865},{"lat":47.0689392,"lon":9.5038749},{"lat":47.0689235,"lon":9.5039341},{"lat":47.0689933,"lon":9.5039741},{"lat":47.0690218,"lon":9.5038672}]},{"type":"way","id":5080,"tags":{"building":"yes"},"nodes":[48954,48959,48966,48970,48963,48967,48915,48895,48954],"geometry":[{"lat":47.0665345,"lon":9.5010341},{"lat":47.0665449,"lon":9.5011292},{"lat":47.0665603,"lon":9.5011256},{"lat":47.0665696,"lon":9.5012108},{"lat":47.0665532,"lon":9.5012148},{"lat":47.0665643,"lon":9.5013159},{"lat":47.0664646,"lon":9.5013395},{"lat":47.0664336,"lon":9.501058},{"lat":47.0665345,"lon":9.5010341}]},{"type":"way","id":5081,"tags":{"building":"yes"},"nodes":[50336,50290,50288,50253,50251,50323,50324,50334,50336],"geometry":[{"lat":47.0687454,"lon":9.5055424},{"lat":47.068689,"lon":9.5055408},{"lat":47.0686884,"lon":9.5055878},{"lat":47.0686451,"lon":9.5055866},{"lat":47.0686437,"lon":9.5056933},{"lat":47.0687323,"lon":9.5056957},{"lat":47.0687337,"lon":9.5055897},{"lat":47.0687448,"lon":9.5055901},{"lat":47.0687454,"lon":9.5055424}]},{"type":"way","id":5083,"tags":{"building":"yes"},"nodes":[51038,51014,51007,51029,51026,51043,51049,51037,51038],"geometry":[{"lat":47.0701564,"lon":9.5098602},{"lat":47.0700849,"lon":9.5098371},{"lat":47.0700647,"lon":9.5099721},{"lat":47.0701289,"lon":9.5099929},{"lat":47.0701268,"lon":9.5100064},{"lat":47.0701817,"lon":9.5100241},{"lat":47.0701982,"lon":9.5099142},{"lat":47.0701506,"lon":9.5098988},{"lat":47.0701564,"lon":9.5098602}]},{"type":"way","id":5084,"tags":{"building":"yes"},"nodes":[47784,47836,47825,47857,47786,47687,47724,47709,47784],"geometry":[{"lat":47.0646728,"lon":9.5044644},{"lat":47.0647371,"lon":9.5045935},{"lat":47.0647186,"lon":9.5046133},{"lat":47.064765,"lon":9.5047065},{"lat":47.0646764,"lon":9.5048016},{"lat":47.0645793,"lon":9.5046065},{"lat":47.0646171,"lon":9.504566},{"lat":47.0646035,"lon":9.5045388},{"lat":47.0646728,"lon":9.5044644}]},{"type":"way","id":5085,"tags":{"building":"yes"},"nodes":[45523,45453,45428,45416,45400,45414,45392,45457,45523],"geometry":[{"lat":47.0620295,"lon":9.512645},{"lat":47.0619541,"lon":9.5125821},{"lat":47.0619293,"lon":9.512646},{"lat":47.0619126,"lon":9.512632},{"lat":47.0618938,"lon":9.5126805},{"lat":47.0619114,"lon":9.5126952},{"lat":47.0618832,"lon":9.512768},{"lat":47.0619577,"lon":9.5128302},{"lat":47.0620295,"lon":9.512645}]},{"type":"way","id":5086,"tags":{"building":"yes"},"nodes":[49077,49062,49057,48913,48949,49107,49082,49098,49077],"geometry":[{"lat":47.0667196,"lon":9.4979971},{"lat":47.0667014,"lon":9.4980103},{"lat":47.0666972,"lon":9.497998},{"lat":47.0664642,"lon":9.4981671},{"lat":47.0665261,"lon":9.4983508},{"lat":47.0667548,"lon":9.4981848},{"lat":47.0667244,"lon":9.4980943},{"lat":47.0667468,"lon":9.498078},{"lat":47.0667196,"lon":9.4979971}]},{"type":"way","id":5088,"tags":{"building":"yes"},"nodes":[43724,43759,43792,43833,43791,43751,43717,43658,43724],"geometry":[{"lat":47.0598678,"lon":9.4966959},{"lat":47.0599182,"lon":9.4967792},{"lat":47.0599557,"lon":9.4967302},{"lat":47.0600185,"lon":9.496834},{"lat":47.0599552,"lon":9.4969166},{"lat":47.0599082,"lon":9.4968391},{"lat":47.0598629,"lon":9.4968982},{"lat":47.0597966,"lon":9.4967886},{"lat":47.0598678,"lon":9.4966959}]},{"type":"way","id":5089,"tags":{"building":"yes"},"nodes":[44903,44821,44823,44770,44776,44871,44868,44911,44903],"geometry":[{"lat":47.0613207,"lon":9.4942874},{"lat":47.0612265,"lon":9.4943028},{"lat":47.0612287,"lon":9.4943328},{"lat":47.0611665,"lon":9.4943429},{"lat":47.0611754,"lon":9.4944603},{"lat":47.0612847,"lon":9.4944426},{"lat":47.0612805,"lon":9.4943872},{"lat":47.0613276,"lon":9.4943795},{"lat":47.0613207,"lon":9.4942874}]},{"type":"way","id":5090,"tags":{"building":"yes"},"nodes":[44590,44524,44494,44476,44487,44451,44482,44617,44590],"geometry":[{"lat":47.0609794,"lon":9.4933996},{"lat":47.0609167,"lon":9.493411},{"lat":47.0608954,"lon":9.493411},{"lat":47.0608844,"lon":9.493448},{"lat":47.0608928,"lon":9.493503},{"lat":47.0608554,"lon":9.4935229},{"lat":47.060887,"lon":9.4936775},{"lat":47.0610078,"lon":9.4936301},{"lat":47.0609794,"lon":9.4933996}]},{"type":"way","id":5091,"tags":{"building":"yes"},"nodes":[48805,48757,48776,48807,48824,48877,48856,48826,48805],"geometry":[{"lat":47.0662717,"lon":9.5072092},{"lat":47.0661663,"lon":9.5072641},{"lat":47.0662013,"lon":9.5074091},{"lat":47.0662734,"lon":9.5073715},{"lat":47.0663047,"lon":9.5075009},{"lat":47.0664055,"lon":9.5074484},{"lat":47.0663724,"lon":9.5073114},{"lat":47.0663048,"lon":9.5073465},{"lat":47.0662717,"lon":9.5072092}]},{"type":"way","id":5092,"tags":{"building":"yes"},"nodes":[50587,50529,50537,50495,50520,50614,50590,50623,50587],"geometry":[{"lat":47.069186,"lon":9.5020979},{"lat":47.0690765,"lon":9.5021717},{"lat":47.0690866,"lon":9.5022041},{"lat":47.0690103,"lon":9.5022555},{"lat":47.0690519,"lon":9.5023885},{"lat":47.0692092,"lon":9.5022826},{"lat":47.0691878,"lon":9.5022143},{"lat":47.0692164,"lon":9.5021951},{"lat":47.069186,"lon":9.5020979}]},{"type":"way","id":5093,"tags":{"building":"yes"},"nodes":[51489,51478,51479,51477,51481,51496,51491,51495,51489],"geometry":[{"lat":47.0712751,"lon":9.506187},{"lat":47.071247,"lon":9.5062051},{"lat":47.071253,"lon":9.506225},{"lat":47.071243,"lon":9.5062314},{"lat":47.0712566,"lon":9.5062766},{"lat":47.0712869,"lon":9.506257},{"lat":47.0712755,"lon":9.506219},{"lat":47.0712832,"lon":9.506214},{"lat":47.0712751,"lon":9.506187}]},{"type":"way","id":5094,"tags":{"building":"yes"},"nodes":[43538,43514,43512,43504,43503,43515,43511,43535,43538],"geometry":[{"lat":47.059621,"lon":9.4979874},{"lat":47.0595773,"lon":9.497982},{"lat":47.0595765,"lon":9.4979958},{"lat":47.0595673,"lon":9.4979946},{"lat":47.0595652,"lon":9.4980313},{"lat":47.0595787,"lon":9.498033},{"lat":47.0595761,"lon":9.4980782},{"lat":47.0596155,"lon":9.498083},{"lat":47.059621,"lon":9.4979874}]},{"type":"way","id":5095,"tags":{"building":"yes"},"nodes":[49519,49455,49454,49474,49473,49506,49508,49515,49519],"geometry":[{"lat":47.0674967,"lon":9.5102559},{"lat":47.0673869,"lon":9.5102472},{"lat":47.067384,"lon":9.5103253},{"lat":47.067428,"lon":9.5103288},{"lat":47.0674258,"lon":9.5103877},{"lat":47.0674769,"lon":9.5103918},{"lat":47.0674789,"lon":9.5103391},{"lat":47.0674936,"lon":9.5103403},{"lat":47.0674967,"lon":9.5102559}]},{"type":"way","id":5096,"tags":{"building":"yes"},"nodes":[44596,44485,44491,44534,44535,44653,44649,44598,44596],"geometry":[{"lat":47.0609823,"lon":9.49435},{"lat":47.0608894,"lon":9.494356},{"lat":47.0608944,"lon":9.4945218},{"lat":47.0609247,"lon":9.4945198},{"lat":47.0609258,"lon":9.4945569},{"lat":47.0610431,"lon":9.4945493},{"lat":47.0610391,"lon":9.4944172},{"lat":47.0609844,"lon":9.4944208},{"lat":47.0609823,"lon":9.49435}]},{"type":"way","id":5097,"tags":{"building":"yes"},"nodes":[51368,51343,51362,51375,51370,51386,51378,51373,51368],"geometry":[{"lat":47.0709446,"lon":9.5047083},{"lat":47.0708731,"lon":9.5047605},{"lat":47.0709264,"lon":9.5049182},{"lat":47.0709629,"lon":9.5048916},{"lat":47.0709492,"lon":9.5048512},{"lat":47.0709948,"lon":9.504818},{"lat":47.0709681,"lon":9.5047391},{"lat":47.0709576,"lon":9.5047467},{"lat":47.0709446,"lon":9.5047083}]},{"type":"way","id":5098,"tags":{"building":"yes"},"nodes":[47050,47039,47028,46974,47048,47068,47080,47095,47050],"geometry":[{"lat":47.0637125,"lon":9.4975877},{"lat":47.0636842,"lon":9.4976131},{"lat":47.0636732,"lon":9.4975877},{"lat":47.0636047,"lon":9.4976333},{"lat":47.0637061,"lon":9.4977754},{"lat":47.0637362,"lon":9.497758},{"lat":47.0637463,"lon":9.4977875},{"lat":47.0637673,"lon":9.4977714},{"lat":47.0637125,"lon":9.4975877}]},{"type":"way","id":5099,"tags":{"building":"yes"},"nodes":[43722,43702,43723,43661,43732,43788,43744,43760,43722],"geometry":[{"lat":47.0598672,"lon":9.493124},{"lat":47.0598489,"lon":9.4931547},{"lat":47.0598673,"lon":9.4931784},{"lat":47.0597994,"lon":9.4932922},{"lat":47.0598844,"lon":9.4934016},{"lat":47.0599531,"lon":9.4932866},{"lat":47.0599017,"lon":9.4932204},{"lat":47.0599193,"lon":9.493191},{"lat":47.0598672,"lon":9.493124}]},{"type":"way","id":5100,"tags":{"building":"yes"},"nodes":[47334,47243,47250,47232,47244,47265,47281,47361,47334],"geometry":[{"lat":47.0640848,"lon":9.5094162},{"lat":47.0639724,"lon":9.5094899},{"lat":47.0639781,"lon":9.5095087},{"lat":47.0639587,"lon":9.5095214},{"lat":47.0639726,"lon":9.5095671},{"lat":47.0639952,"lon":9.5095523},{"lat":47.0640183,"lon":9.5096281},{"lat":47.0641276,"lon":9.5095565},{"lat":47.0640848,"lon":9.5094162}]},{"type":"way","id":5101,"tags":{"building":"yes"},"nodes":[50852,50821,50825,50802,50808,50847,50842,50859,50852],"geometry":[{"lat":47.0696779,"lon":9.5042164},{"lat":47.0696072,"lon":9.5042566},{"lat":47.0696152,"lon":9.5042868},{"lat":47.0695558,"lon":9.5043207},{"lat":47.0695793,"lon":9.5044093},{"lat":47.0696546,"lon":9.5043664},{"lat":47.0696476,"lon":9.5043397},{"lat":47.0697022,"lon":9.5043085},{"lat":47.0696779,"lon":9.5042164}]},{"type":"way","id":5102,"tags":{"building":"yes"},"nodes":[48348,48286,48291,48274,48290,48244,48281,48401,48348],"geometry":[{"lat":47.0655359,"lon":9.4962746},{"lat":47.0654392,"lon":9.4963485},{"lat":47.065443,"lon":9.4963593},{"lat":47.0654209,"lon":9.4963763},{"lat":47.0654428,"lon":9.4964381},{"lat":47.0653797,"lon":9.4964863},{"lat":47.0654297,"lon":9.4966273},{"lat":47.0656117,"lon":9.4964883},{"lat":47.0655359,"lon":9.4962746}]},{"type":"way","id":5105,"tags":{"building":"yes"},"nodes":[51309,51282,51290,51284,51289,51313,51310,51314,51309],"geometry":[{"lat":47.070751,"lon":9.504908},{"lat":47.0706662,"lon":9.5049458},{"lat":47.0706875,"lon":9.5050484},{"lat":47.0706741,"lon":9.5050544},{"lat":47.0706855,"lon":9.5051098},{"lat":47.0707685,"lon":9.5050728},{"lat":47.0707543,"lon":9.5050041},{"lat":47.0707695,"lon":9.5049973},{"lat":47.070751,"lon":9.504908}]},{"type":"way","id":5106,"tags":{"building":"yes"},"nodes":[43530,43485,43549,43586,43593,43611,43563,43557,43530],"geometry":[{"lat":47.0596009,"lon":9.4988989},{"lat":47.0595353,"lon":9.4989892},{"lat":47.0596374,"lon":9.4991493},{"lat":47.0596904,"lon":9.4990764},{"lat":47.0597045,"lon":9.4990984},{"lat":47.0597315,"lon":9.4990613},{"lat":47.0596606,"lon":9.4989502},{"lat":47.0596462,"lon":9.49897},{"lat":47.0596009,"lon":9.4988989}]},{"type":"way","id":5108,"tags":{"building":"yes"},"nodes":[45999,46069,46013,45897,45923,46014,46019,45970,45999],"geometry":[{"lat":47.0625526,"lon":9.4998789},{"lat":47.062624,"lon":9.499929},{"lat":47.0625677,"lon":9.5000962},{"lat":47.0624383,"lon":9.5000904},{"lat":47.0624633,"lon":9.5000146},{"lat":47.0625693,"lon":9.5000204},{"lat":47.0625724,"lon":9.4999709},{"lat":47.062522,"lon":9.4999342},{"lat":47.0625526,"lon":9.4998789}]},{"type":"way","id":5111,"tags":{"building":"yes"},"nodes":[47805,47701,47738,47706,47742,47831,47806,47833,47805],"geometry":[{"lat":47.0647021,"lon":9.508189},{"lat":47.0645975,"lon":9.5082567},{"lat":47.06463,"lon":9.5083646},{"lat":47.064602,"lon":9.5083828},{"lat":47.0646344,"lon":9.5084907},{"lat":47.0647331,"lon":9.5084268},{"lat":47.0647024,"lon":9.5083246},{"lat":47.0647362,"lon":9.5083027},{"lat":47.0647021,"lon":9.508189}]},{"type":"way","id":5112,"tags":{"building":"yes"},"nodes":[44706,44633,44634,44606,44610,44637,44639,44709,44706],"geometry":[{"lat":47.0610953,"lon":9.4998053},{"lat":47.0610238,"lon":9.4998078},{"lat":47.0610241,"lon":9.499825},{"lat":47.0609926,"lon":9.4998261},{"lat":47.0609945,"lon":9.4999402},{"lat":47.0610266,"lon":9.499939},{"lat":47.061027,"lon":9.4999615},{"lat":47.0610978,"lon":9.499959},{"lat":47.0610953,"lon":9.4998053}]},{"type":"way","id":5113,"tags":{"building":"yes"},"nodes":[50567,50506,50526,50550,50565,50591,50579,50586,50567],"geometry":[{"lat":47.0691342,"lon":9.5012913},{"lat":47.0690263,"lon":9.5013795},{"lat":47.0690686,"lon":9.501491},{"lat":47.0691009,"lon":9.5014647},{"lat":47.0691312,"lon":9.5015446},{"lat":47.0691889,"lon":9.5014974},{"lat":47.0691661,"lon":9.5014371},{"lat":47.069184,"lon":9.5014225},{"lat":47.0691342,"lon":9.5012913}]},{"type":"way","id":5114,"tags":{"building":"yes"},"nodes":[49762,49667,49808,49914,49843,49876,49854,49831,49762],"geometry":[{"lat":47.067894,"lon":9.4996563},{"lat":47.0677332,"lon":9.4997738},{"lat":47.0679673,"lon":9.5004643},{"lat":47.0681247,"lon":9.5003492},{"lat":47.0680262,"lon":9.5000585},{"lat":47.0680808,"lon":9.5000186},{"lat":47.0680471,"lon":9.4999191},{"lat":47.0679958,"lon":9.4999566},{"lat":47.067894,"lon":9.4996563}]},{"type":"way","id":5115,"tags":{"building":"yes"},"nodes":[48815,48717,48747,48760,48770,48785,48772,48837,48815],"geometry":[{"lat":47.0662856,"lon":9.5103523},{"lat":47.0660857,"lon":9.5105625},{"lat":47.0661414,"lon":9.5106781},{"lat":47.0661725,"lon":9.5106458},{"lat":47.0661871,"lon":9.5106761},{"lat":47.0662229,"lon":9.5106389},{"lat":47.0661932,"lon":9.5105772},{"lat":47.0663272,"lon":9.5104287},{"lat":47.0662856,"lon":9.5103523}]},{"type":"way","id":5116,"tags":{"building":"yes"},"nodes":[49895,49929,49921,49937,49903,49888,49873,49841,49895],"geometry":[{"lat":47.0681036,"lon":9.5006646},{"lat":47.0681439,"lon":9.5007777},{"lat":47.0681314,"lon":9.5007873},{"lat":47.0681618,"lon":9.5008728},{"lat":47.0681091,"lon":9.5009133},{"lat":47.0680918,"lon":9.5008648},{"lat":47.0680762,"lon":9.5008768},{"lat":47.0680228,"lon":9.5007267},{"lat":47.0681036,"lon":9.5006646}]},{"type":"way","id":5117,"tags":{"building":"yes"},"nodes":[50515,50489,50486,50457,50464,50449,50482,50543,50515],"geometry":[{"lat":47.0690477,"lon":9.4990728},{"lat":47.0690045,"lon":9.4991039},{"lat":47.0689984,"lon":9.4990854},{"lat":47.0689551,"lon":9.4991165},{"lat":47.0689627,"lon":9.4991391},{"lat":47.0689475,"lon":9.49915},{"lat":47.0689952,"lon":9.4992929},{"lat":47.0690968,"lon":9.4992198},{"lat":47.0690477,"lon":9.4990728}]},{"type":"way","id":5119,"tags":{"building":"yes"},"nodes":[51468,51408,51400,51417,51419,51448,51449,51464,51468],"geometry":[{"lat":47.0712127,"lon":9.5092485},{"lat":47.0710643,"lon":9.5092167},{"lat":47.0710486,"lon":9.5093747},{"lat":47.0710921,"lon":9.509384},{"lat":47.0710942,"lon":9.5093635},{"lat":47.0711622,"lon":9.5093781},{"lat":47.0711643,"lon":9.5093561},{"lat":47.0712012,"lon":9.509364},{"lat":47.0712127,"lon":9.5092485}]},{"type":"way","id":5120,"tags":{"building":"yes"},"nodes":[50822,50788,50790,50813,50814,50833,50832,50823,50822],"geometry":[{"lat":47.0696096,"lon":9.5088767},{"lat":47.0695305,"lon":9.5088771},{"lat":47.0695309,"lon":9.5090206},{"lat":47.0695887,"lon":9.5090203},{"lat":47.0695888,"lon":9.5090735},{"lat":47.0696318,"lon":9.5090733},{"lat":47.0696316,"lon":9.5089989},{"lat":47.0696099,"lon":9.508999},{"lat":47.0696096,"lon":9.5088767}]},{"type":"way","id":5121,"tags":{"building":"yes"},"nodes":[50912,50915,50921,50928,50918,50934,50911,50887,50912],"geometry":[{"lat":47.0698383,"lon":9.5047548},{"lat":47.0698525,"lon":9.504801},{"lat":47.0698717,"lon":9.5047882},{"lat":47.0698877,"lon":9.50484},{"lat":47.0698597,"lon":9.5048586},{"lat":47.0699,"lon":9.5049894},{"lat":47.0698382,"lon":9.5050305},{"lat":47.0697676,"lon":9.5048018},{"lat":47.0698383,"lon":9.5047548}]},{"type":"way","id":5122,"tags":{"building":"yes"},"nodes":[50762,50718,50722,50694,50708,50736,50741,50785,50762],"geometry":[{"lat":47.0694703,"lon":9.502281},{"lat":47.0693746,"lon":9.502344},{"lat":47.0693786,"lon":9.5023571},{"lat":47.0693259,"lon":9.5023917},{"lat":47.0693592,"lon":9.5025006},{"lat":47.0694028,"lon":9.5024719},{"lat":47.0694144,"lon":9.5025096},{"lat":47.0695191,"lon":9.5024407},{"lat":47.0694703,"lon":9.502281}]},{"type":"way","id":5123,"tags":{"building":"yes"},"nodes":[47085,47038,47045,47016,47027,47067,47052,47110,47085],"geometry":[{"lat":47.0637532,"lon":9.4945442},{"lat":47.0636833,"lon":9.4945948},{"lat":47.063703,"lon":9.4946534},{"lat":47.0636465,"lon":9.4946944},{"lat":47.0636728,"lon":9.4947726},{"lat":47.0637311,"lon":9.4947304},{"lat":47.0637151,"lon":9.4946828},{"lat":47.0637832,"lon":9.4946335},{"lat":47.0637532,"lon":9.4945442}]},{"type":"way","id":5124,"tags":{"building":"yes"},"nodes":[46831,46761,46768,46744,46764,46787,46806,46851,46831],"geometry":[{"lat":47.0634156,"lon":9.4934256},{"lat":47.0633504,"lon":9.4934749},{"lat":47.0633559,"lon":9.4934904},{"lat":47.063337,"lon":9.4935046},{"lat":47.0633516,"lon":9.4935463},{"lat":47.0633731,"lon":9.49353},{"lat":47.0633873,"lon":9.4935704},{"lat":47.0634498,"lon":9.4935231},{"lat":47.0634156,"lon":9.4934256}]},{"type":"way","id":5125,"tags":{"building":"yes"},"nodes":[50949,50907,50908,50892,50889,50860,50877,50965,50949],"geometry":[{"lat":47.0699289,"lon":9.5043531},{"lat":47.0698268,"lon":9.504418},{"lat":47.0698309,"lon":9.5044319},{"lat":47.0697905,"lon":9.5044576},{"lat":47.0697781,"lon":9.5044155},{"lat":47.0697052,"lon":9.5044618},{"lat":47.0697474,"lon":9.5046052},{"lat":47.0699629,"lon":9.5044682},{"lat":47.0699289,"lon":9.5043531}]},{"type":"way","id":5126,"tags":{"building":"yes"},"nodes":[44780,44682,44736,44810,44824,44861,44826,44802,44780],"geometry":[{"lat":47.0611838,"lon":9.4973533},{"lat":47.0610756,"lon":9.4974638},{"lat":47.0611276,"lon":9.4975734},{"lat":47.0612159,"lon":9.4974831},{"lat":47.0612293,"lon":9.4975113},{"lat":47.0612738,"lon":9.4974658},{"lat":47.0612334,"lon":9.4973806},{"lat":47.0612087,"lon":9.4974058},{"lat":47.0611838,"lon":9.4973533}]},{"type":"way","id":5127,"tags":{"building":"yes"},"nodes":[45878,45778,45837,45798,45853,45953,45903,45929,45878],"geometry":[{"lat":47.0624206,"lon":9.4935768},{"lat":47.0623283,"lon":9.4936786},{"lat":47.0623849,"lon":9.4937892},{"lat":47.0623533,"lon":9.4938241},{"lat":47.0624,"lon":9.4939154},{"lat":47.062497,"lon":9.4938084},{"lat":47.0624471,"lon":9.493711},{"lat":47.0624741,"lon":9.4936813},{"lat":47.0624206,"lon":9.4935768}]},{"type":"way","id":5129,"tags":{"building":"yes"},"nodes":[48808,48732,48727,48750,48742,48759,48755,48789,48808],"geometry":[{"lat":47.066276,"lon":9.5014905},{"lat":47.0661183,"lon":9.5015378},{"lat":47.0661039,"lon":9.501434},{"lat":47.0661495,"lon":9.5014202},{"lat":47.0661364,"lon":9.5013258},{"lat":47.0661686,"lon":9.5013161},{"lat":47.0661614,"lon":9.501264},{"lat":47.0662411,"lon":9.50124},{"lat":47.066276,"lon":9.5014905}]},{"type":"way","id":5130,"tags":{"building":"yes"},"nodes":[47193,47220,47198,47222,47209,47129,47174,47188,47193],"geometry":[{"lat":47.0638968,"lon":9.4917684},{"lat":47.0639474,"lon":9.4918141},{"lat":47.0639045,"lon":9.4919164},{"lat":47.0639503,"lon":9.4919578},{"lat":47.0639255,"lon":9.4920171},{"lat":47.0638035,"lon":9.491907},{"lat":47.0638651,"lon":9.4917599},{"lat":47.0638907,"lon":9.4917829},{"lat":47.0638968,"lon":9.4917684}]},{"type":"way","id":5131,"tags":{"building":"yes"},"nodes":[51067,51044,51048,51042,51047,51052,51058,51086,51067],"geometry":[{"lat":47.070248,"lon":9.5031181},{"lat":47.0701832,"lon":9.5031574},{"lat":47.0701979,"lon":9.5032097},{"lat":47.0701782,"lon":9.5032217},{"lat":47.0701893,"lon":9.5032612},{"lat":47.0702109,"lon":9.503248},{"lat":47.0702234,"lon":9.5032924},{"lat":47.0702863,"lon":9.5032543},{"lat":47.070248,"lon":9.5031181}]},{"type":"way","id":5132,"tags":{"building":"yes"},"nodes":[49425,49382,49411,49381,49393,49438,49433,49444,49425],"geometry":[{"lat":47.0673299,"lon":9.509189},{"lat":47.0672603,"lon":9.5092292},{"lat":47.0672916,"lon":9.5093458},{"lat":47.0672598,"lon":9.5093641},{"lat":47.0672721,"lon":9.5094098},{"lat":47.0673612,"lon":9.5093582},{"lat":47.0673533,"lon":9.509329},{"lat":47.0673655,"lon":9.5093219},{"lat":47.0673299,"lon":9.509189}]},{"type":"way","id":5134,"tags":{"building":"yes"},"nodes":[48595,48545,48555,48508,48529,48572,48568,48621,48595],"geometry":[{"lat":47.0659012,"lon":9.5103596},{"lat":47.0658399,"lon":9.5103937},{"lat":47.0658538,"lon":9.5104477},{"lat":47.0657861,"lon":9.5104853},{"lat":47.0658179,"lon":9.5106085},{"lat":47.0658712,"lon":9.5105789},{"lat":47.0658669,"lon":9.5105618},{"lat":47.0659425,"lon":9.5105198},{"lat":47.0659012,"lon":9.5103596}]},{"type":"way","id":5136,"tags":{"building":"yes"},"nodes":[47162,47093,47117,47155,47171,47214,47199,47180,47162],"geometry":[{"lat":47.0638448,"lon":9.4971194},{"lat":47.0637627,"lon":9.4971789},{"lat":47.0637942,"lon":9.4972725},{"lat":47.0638365,"lon":9.4972419},{"lat":47.0638608,"lon":9.4973141},{"lat":47.0639319,"lon":9.4972625},{"lat":47.0639052,"lon":9.4971834},{"lat":47.0638739,"lon":9.4972061},{"lat":47.0638448,"lon":9.4971194}]},{"type":"way","id":5138,"tags":{"building":"yes"},"nodes":[51960,51950,51944,51942,51938,51940,51949,51952,51960],"geometry":[{"lat":47.0740003,"lon":9.5118882},{"lat":47.0739307,"lon":9.5120346},{"lat":47.0739,"lon":9.5120031},{"lat":47.0738896,"lon":9.5120249},{"lat":47.0738523,"lon":9.5119866},{"lat":47.0738637,"lon":9.5119669},{"lat":47.0739212,"lon":9.5118374},{"lat":47.0739323,"lon":9.5118184},{"lat":47.0740003,"lon":9.5118882}]},{"type":"way","id":5139,"tags":{"building":"yes"},"nodes":[50065,49934,49957,50066,50084,50131,50105,50091,50065],"geometry":[{"lat":47.0683571,"lon":9.5008146},{"lat":47.0681523,"lon":9.500946},{"lat":47.0681999,"lon":9.5011058},{"lat":47.0683572,"lon":9.5010049},{"lat":47.0683933,"lon":9.5011263},{"lat":47.0684766,"lon":9.5010729},{"lat":47.0684401,"lon":9.5009503},{"lat":47.0684043,"lon":9.5009732},{"lat":47.0683571,"lon":9.5008146}]},{"type":"way","id":5140,"tags":{"building":"yes"},"nodes":[48321,48299,48284,48236,48269,48247,48278,48361,48321],"geometry":[{"lat":47.0654921,"lon":9.4979233},{"lat":47.0654529,"lon":9.4979525},{"lat":47.0654329,"lon":9.4978948},{"lat":47.0653698,"lon":9.4979419},{"lat":47.0654133,"lon":9.4980675},{"lat":47.0653849,"lon":9.4980887},{"lat":47.0654257,"lon":9.4982062},{"lat":47.0655564,"lon":9.4981085},{"lat":47.0654921,"lon":9.4979233}]},{"type":"way","id":5141,"tags":{"building":"yes"},"nodes":[47743,47667,47690,47651,47675,47851,47828,47768,47743],"geometry":[{"lat":47.0646346,"lon":9.4938086},{"lat":47.0645606,"lon":9.49386},{"lat":47.0645859,"lon":9.4939384},{"lat":47.064536,"lon":9.4939731},{"lat":47.0645691,"lon":9.4940759},{"lat":47.064755,"lon":9.4939467},{"lat":47.0647226,"lon":9.4938462},{"lat":47.0646606,"lon":9.4938893},{"lat":47.0646346,"lon":9.4938086}]},{"type":"way","id":5142,"tags":{"building":"yes"},"nodes":[51560,51536,51543,51517,51528,51569,51558,51565,51560],"geometry":[{"lat":47.0714428,"lon":9.5061271},{"lat":47.0714062,"lon":9.5061413},{"lat":47.0714148,"lon":9.5061894},{"lat":47.0713498,"lon":9.5062146},{"lat":47.0713725,"lon":9.506341},{"lat":47.0714647,"lon":9.5063054},{"lat":47.071441,"lon":9.5061732},{"lat":47.0714504,"lon":9.5061696},{"lat":47.0714428,"lon":9.5061271}]},{"type":"way","id":5143,"tags":{"building":"yes"},"nodes":[44560,44453,44463,44385,44412,44536,44519,44607,44560],"geometry":[{"lat":47.0609593,"lon":9.5115931},{"lat":47.060858,"lon":9.5116457},{"lat":47.0608672,"lon":9.5116838},{"lat":47.0607604,"lon":9.5117392},{"lat":47.0607983,"lon":9.5118961},{"lat":47.0609262,"lon":9.5118296},{"lat":47.0609134,"lon":9.5117763},{"lat":47.0609934,"lon":9.5117347},{"lat":47.0609593,"lon":9.5115931}]},{"type":"way","id":5144,"tags":{"building":"yes"},"nodes":[43302,43327,43311,43317,43306,43282,43291,43295,43302],"geometry":[{"lat":47.0590924,"lon":9.4936061},{"lat":47.0591645,"lon":9.4936873},{"lat":47.0591257,"lon":9.4937616},{"lat":47.0591353,"lon":9.4937724},{"lat":47.0590999,"lon":9.4938403},{"lat":47.0590085,"lon":9.4937376},{"lat":47.0590466,"lon":9.4936646},{"lat":47.0590562,"lon":9.4936754},{"lat":47.0590924,"lon":9.4936061}]},{"type":"way","id":5145,"tags":{"building":"yes"},"nodes":[44774,44746,44724,44668,44704,44685,44726,44812,44774],"geometry":[{"lat":47.0611719,"lon":9.4952668},{"lat":47.061145,"lon":9.4952887},{"lat":47.0611162,"lon":9.4952124},{"lat":47.0610617,"lon":9.4952568},{"lat":47.0610934,"lon":9.4953407},{"lat":47.0610768,"lon":9.4953542},{"lat":47.0611186,"lon":9.4954647},{"lat":47.0612165,"lon":9.4953849},{"lat":47.0611719,"lon":9.4952668}]},{"type":"way","id":5148,"tags":{"building":"yes"},"nodes":[46084,46070,46052,45996,46048,46100,46085,46105,46084],"geometry":[{"lat":47.0626443,"lon":9.4945907},{"lat":47.0626249,"lon":9.4946182},{"lat":47.062612,"lon":9.4945986},{"lat":47.0625515,"lon":9.494684},{"lat":47.0626086,"lon":9.494771},{"lat":47.0626659,"lon":9.49469},{"lat":47.0626455,"lon":9.494659},{"lat":47.0626681,"lon":9.4946271},{"lat":47.0626443,"lon":9.4945907}]},{"type":"way","id":5149,"tags":{"building":"yes"},"nodes":[51718,51736,51726,51715,51707,51704,51717,51711,51718],"geometry":[{"lat":47.0721943,"lon":9.5100971},{"lat":47.0722843,"lon":9.5101938},{"lat":47.0722257,"lon":9.5103114},{"lat":47.0721707,"lon":9.5102523},{"lat":47.0721543,"lon":9.5102851},{"lat":47.072139,"lon":9.5102686},{"lat":47.0721881,"lon":9.51017},{"lat":47.0721684,"lon":9.5101488},{"lat":47.0721943,"lon":9.5100971}]},{"type":"way","id":5150,"tags":{"building":"yes"},"nodes":[50143,50078,50076,50113,50111,50159,50162,50140,50143],"geometry":[{"lat":47.068487,"lon":9.5102396},{"lat":47.068384,"lon":9.5102316},{"lat":47.0683797,"lon":9.5103524},{"lat":47.0684494,"lon":9.5103578},{"lat":47.0684488,"lon":9.5103769},{"lat":47.0684999,"lon":9.5103809},{"lat":47.0685027,"lon":9.5103018},{"lat":47.0684849,"lon":9.5103005},{"lat":47.068487,"lon":9.5102396}]},{"type":"way","id":5152,"tags":{"building":"yes"},"nodes":[46674,46740,46694,46737,46696,46632,46658,46595,46674],"geometry":[{"lat":47.0632676,"lon":9.4928845},{"lat":47.0633364,"lon":9.4929622},{"lat":47.0632918,"lon":9.4930473},{"lat":47.0633311,"lon":9.4930917},{"lat":47.0632923,"lon":9.4931657},{"lat":47.0632369,"lon":9.4931031},{"lat":47.0632568,"lon":9.4930652},{"lat":47.0632041,"lon":9.4930057},{"lat":47.0632676,"lon":9.4928845}]},{"type":"way","id":5153,"tags":{"building":"yes"},"nodes":[48643,48651,48662,48684,48650,48660,48637,48603,48643],"geometry":[{"lat":47.0659781,"lon":9.4985},{"lat":47.0659909,"lon":9.498535},{"lat":47.0660025,"lon":9.4985259},{"lat":47.0660346,"lon":9.498614},{"lat":47.0659877,"lon":9.4986507},{"lat":47.0659988,"lon":9.4986811},{"lat":47.0659675,"lon":9.4987056},{"lat":47.0659116,"lon":9.4985521},{"lat":47.0659781,"lon":9.4985}]},{"type":"way","id":5154,"tags":{"building":"yes"},"nodes":[51218,51245,51250,51257,51271,51253,51241,51235,51218],"geometry":[{"lat":47.070526,"lon":9.5035441},{"lat":47.0705732,"lon":9.5036557},{"lat":47.0705908,"lon":9.5036397},{"lat":47.0705971,"lon":9.5036545},{"lat":47.0706387,"lon":9.5036165},{"lat":47.0705934,"lon":9.5035095},{"lat":47.0705665,"lon":9.5035341},{"lat":47.0705583,"lon":9.5035147},{"lat":47.070526,"lon":9.5035441}]},{"type":"way","id":5155,"tags":{"building":"yes"},"nodes":[46956,46933,46922,46857,46884,46939,46951,46979,46956],"geometry":[{"lat":47.0635812,"lon":9.4973737},{"lat":47.0635547,"lon":9.4973915},{"lat":47.0635368,"lon":9.4973343},{"lat":47.063452,"lon":9.4973913},{"lat":47.0634881,"lon":9.497507},{"lat":47.0635645,"lon":9.4974557},{"lat":47.0635724,"lon":9.4974812},{"lat":47.0636074,"lon":9.4974577},{"lat":47.0635812,"lon":9.4973737}]},{"type":"way","id":5157,"tags":{"building":"yes"},"nodes":[44929,44960,44972,45009,44919,44883,44908,44874,44929],"geometry":[{"lat":47.0613461,"lon":9.4991713},{"lat":47.0613871,"lon":9.4992596},{"lat":47.0613992,"lon":9.4992475},{"lat":47.0614371,"lon":9.499329},{"lat":47.0613357,"lon":9.4994302},{"lat":47.0612976,"lon":9.499348},{"lat":47.0613266,"lon":9.499319},{"lat":47.061286,"lon":9.4992313},{"lat":47.0613461,"lon":9.4991713}]},{"type":"way","id":5158,"tags":{"building":"yes"},"nodes":[51924,51934,51925,51909,51912,51907,51910,51917,51924],"geometry":[{"lat":47.0737617,"lon":9.5111676},{"lat":47.0738405,"lon":9.5112452},{"lat":47.0737771,"lon":9.5113841},{"lat":47.0736989,"lon":9.5113071},{"lat":47.073706,"lon":9.5112916},{"lat":47.0736771,"lon":9.5112632},{"lat":47.0737011,"lon":9.5112107},{"lat":47.0737293,"lon":9.5112385},{"lat":47.0737617,"lon":9.5111676}]},{"type":"way","id":5159,"tags":{"building":"yes"},"nodes":[45030,44958,44999,45099,45084,45047,45043,45049,45030],"geometry":[{"lat":47.061463,"lon":9.4955247},{"lat":47.0613803,"lon":9.4955882},{"lat":47.0614255,"lon":9.4957305},{"lat":47.0615709,"lon":9.4957599},{"lat":47.061556,"lon":9.4956432},{"lat":47.0614895,"lon":9.4956575},{"lat":47.0614798,"lon":9.4956252},{"lat":47.0614914,"lon":9.4956176},{"lat":47.061463,"lon":9.4955247}]},{"type":"way","id":5161,"tags":{"building":"yes"},"nodes":[49324,49270,49281,49306,49315,49339,49327,49341,49324],"geometry":[{"lat":47.0671631,"lon":9.5106627},{"lat":47.0670561,"lon":9.5107344},{"lat":47.0670878,"lon":9.5108362},{"lat":47.0671257,"lon":9.5108108},{"lat":47.0671387,"lon":9.5108525},{"lat":47.0671846,"lon":9.5108218},{"lat":47.0671649,"lon":9.5107585},{"lat":47.0671881,"lon":9.510743},{"lat":47.0671631,"lon":9.5106627}]},{"type":"way","id":5162,"tags":{"building":"yes"},"nodes":[51745,51732,51728,51737,51735,51750,51752,51744,51745],"geometry":[{"lat":47.0723331,"lon":9.5111932},{"lat":47.0722531,"lon":9.5111711},{"lat":47.0722396,"lon":9.5112762},{"lat":47.0722862,"lon":9.5112891},{"lat":47.0722832,"lon":9.5113119},{"lat":47.0723888,"lon":9.5113412},{"lat":47.0724025,"lon":9.5112347},{"lat":47.0723303,"lon":9.5112147},{"lat":47.0723331,"lon":9.5111932}]},{"type":"way","id":5163,"tags":{"building":"yes"},"nodes":[46582,46515,46522,46463,46480,46461,46478,46622,46582],"geometry":[{"lat":47.0631875,"lon":9.5123517},{"lat":47.0631266,"lon":9.5123786},{"lat":47.0631332,"lon":9.5124108},{"lat":47.0630832,"lon":9.5124329},{"lat":47.0630987,"lon":9.5125088},{"lat":47.0630818,"lon":9.5125163},{"lat":47.0630976,"lon":9.5125935},{"lat":47.0632254,"lon":9.5125372},{"lat":47.0631875,"lon":9.5123517}]},{"type":"way","id":5164,"tags":{"building":"yes"},"nodes":[44406,44360,44370,44300,44332,44416,44411,44445,44406],"geometry":[{"lat":47.0607942,"lon":9.5121503},{"lat":47.0607156,"lon":9.5121937},{"lat":47.0607358,"lon":9.5122896},{"lat":47.0606479,"lon":9.5123444},{"lat":47.0606907,"lon":9.5125043},{"lat":47.0608051,"lon":9.5124495},{"lat":47.0607981,"lon":9.5123901},{"lat":47.0608494,"lon":9.5123524},{"lat":47.0607942,"lon":9.5121503}]},{"type":"way","id":5165,"tags":{"building":"yes"},"nodes":[46858,46788,46817,46854,46870,46926,46908,46878,46858],"geometry":[{"lat":47.0634524,"lon":9.4958071},{"lat":47.0633735,"lon":9.4958512},{"lat":47.0634038,"lon":9.4959677},{"lat":47.0634509,"lon":9.4959414},{"lat":47.0634713,"lon":9.4960203},{"lat":47.0635422,"lon":9.4959807},{"lat":47.0635182,"lon":9.4958881},{"lat":47.0634791,"lon":9.49591},{"lat":47.0634524,"lon":9.4958071}]},{"type":"way","id":5166,"tags":{"building":"yes"},"nodes":[43334,43285,43290,43345,43342,43347,43343,43336,43334],"geometry":[{"lat":47.0591763,"lon":9.4982268},{"lat":47.0590166,"lon":9.4982959},{"lat":47.0590411,"lon":9.498418},{"lat":47.0592003,"lon":9.4983491},{"lat":47.0591959,"lon":9.4983274},{"lat":47.0592158,"lon":9.4983188},{"lat":47.0591983,"lon":9.4982317},{"lat":47.059179,"lon":9.4982401},{"lat":47.0591763,"lon":9.4982268}]},{"type":"way","id":5168,"tags":{"building":"yes"},"nodes":[51303,51285,51283,51261,51254,51277,51273,51295,51303],"geometry":[{"lat":47.0707318,"lon":9.509731},{"lat":47.0706759,"lon":9.509706},{"lat":47.0706663,"lon":9.5097521},{"lat":47.0706089,"lon":9.5097264},{"lat":47.0705939,"lon":9.5097985},{"lat":47.0706523,"lon":9.5098246},{"lat":47.070646,"lon":9.5098547},{"lat":47.070701,"lon":9.5098793},{"lat":47.0707318,"lon":9.509731}]},{"type":"way","id":5169,"tags":{"building":"yes"},"nodes":[44227,44179,44168,44142,44095,44136,44181,44195,44227],"geometry":[{"lat":47.060564,"lon":9.4994305},{"lat":47.06051,"lon":9.4993534},{"lat":47.0604916,"lon":9.4993811},{"lat":47.0604664,"lon":9.4993451},{"lat":47.0603937,"lon":9.4994549},{"lat":47.060457,"lon":9.4995451},{"lat":47.0605133,"lon":9.49946},{"lat":47.0605293,"lon":9.4994829},{"lat":47.060564,"lon":9.4994305}]},{"type":"way","id":5170,"tags":{"building":"yes"},"nodes":[48038,48079,48183,48173,48161,48148,48154,48146,48038],"geometry":[{"lat":47.0650662,"lon":9.4963289},{"lat":47.0651235,"lon":9.4965197},{"lat":47.0652691,"lon":9.4964255},{"lat":47.0652523,"lon":9.4963695},{"lat":47.0652419,"lon":9.4963763},{"lat":47.0652166,"lon":9.4962921},{"lat":47.0652299,"lon":9.4962836},{"lat":47.0652147,"lon":9.4962329},{"lat":47.0650662,"lon":9.4963289}]},{"type":"way","id":5172,"tags":{"building":"yes"},"nodes":[45183,45098,45115,45174,45179,45240,45224,45187,45183],"geometry":[{"lat":47.0616588,"lon":9.4958862},{"lat":47.0615693,"lon":9.4959184},{"lat":47.0615894,"lon":9.4960377},{"lat":47.0616524,"lon":9.4960176},{"lat":47.0616551,"lon":9.4960565},{"lat":47.0617072,"lon":9.4960431},{"lat":47.0616972,"lon":9.495909},{"lat":47.0616624,"lon":9.495909},{"lat":47.0616588,"lon":9.4958862}]},{"type":"way","id":5174,"tags":{"building":"yes"},"nodes":[51134,51103,51090,51083,51063,51092,51119,51114,51134],"geometry":[{"lat":47.0703702,"lon":9.507227},{"lat":47.0703262,"lon":9.5071839},{"lat":47.070294,"lon":9.5072548},{"lat":47.0702828,"lon":9.5072438},{"lat":47.0702328,"lon":9.5073537},{"lat":47.0702985,"lon":9.5074182},{"lat":47.0703511,"lon":9.5073026},{"lat":47.0703405,"lon":9.5072922},{"lat":47.0703702,"lon":9.507227}]},{"type":"way","id":5175,"tags":{"building":"yes"},"nodes":[46092,46039,46025,45945,45964,45944,45955,46114,46092],"geometry":[{"lat":47.0626577,"lon":9.5100461},{"lat":47.0625944,"lon":9.5100816},{"lat":47.062579,"lon":9.5100223},{"lat":47.0624872,"lon":9.5100738},{"lat":47.062516,"lon":9.5101844},{"lat":47.062487,"lon":9.5102007},{"lat":47.0624982,"lon":9.510244},{"lat":47.0626824,"lon":9.5101408},{"lat":47.0626577,"lon":9.5100461}]},{"type":"way","id":5176,"tags":{"building":"yes"},"nodes":[46734,46646,46641,46600,46630,46653,46690,46792,46734],"geometry":[{"lat":47.0633222,"lon":9.50919},{"lat":47.0632474,"lon":9.5092372},{"lat":47.0632436,"lon":9.5092243},{"lat":47.0632075,"lon":9.5092471},{"lat":47.0632331,"lon":9.5093346},{"lat":47.0632523,"lon":9.5093225},{"lat":47.0632851,"lon":9.5094343},{"lat":47.0633768,"lon":9.5093764},{"lat":47.0633222,"lon":9.50919}]},{"type":"way","id":5177,"tags":{"building":"yes"},"nodes":[50900,50871,50870,50851,50850,50881,50880,50898,50900],"geometry":[{"lat":47.0698038,"lon":9.509926},{"lat":47.0697327,"lon":9.5099247},{"lat":47.0697326,"lon":9.5099387},{"lat":47.0696747,"lon":9.5099376},{"lat":47.0696735,"lon":9.5100754},{"lat":47.069756,"lon":9.510077},{"lat":47.0697557,"lon":9.5101033},{"lat":47.0698022,"lon":9.5101041},{"lat":47.0698038,"lon":9.509926}]},{"type":"way","id":5178,"tags":{"building":"yes"},"nodes":[45861,45770,45792,45920,45916,45960,45950,45883,45861],"geometry":[{"lat":47.062408,"lon":9.493161},{"lat":47.0623194,"lon":9.4932015},{"lat":47.0623468,"lon":9.493331},{"lat":47.0624622,"lon":9.4932782},{"lat":47.0624579,"lon":9.493258},{"lat":47.0625036,"lon":9.4932371},{"lat":47.0624953,"lon":9.4931979},{"lat":47.0624228,"lon":9.4932311},{"lat":47.062408,"lon":9.493161}]},{"type":"way","id":5179,"tags":{"building":"yes"},"nodes":[43362,43354,43346,43335,43341,43331,43353,43379,43362],"geometry":[{"lat":47.0592494,"lon":9.493813},{"lat":47.0592329,"lon":9.4938415},{"lat":47.0592073,"lon":9.4938096},{"lat":47.0591784,"lon":9.4938595},{"lat":47.0591956,"lon":9.493881},{"lat":47.0591712,"lon":9.4939231},{"lat":47.0592326,"lon":9.494},{"lat":47.0593025,"lon":9.4938794},{"lat":47.0592494,"lon":9.493813}]},{"type":"way","id":5181,"tags":{"building":"yes"},"nodes":[44660,44618,44576,44483,44554,44612,44628,44705,44660],"geometry":[{"lat":47.0610519,"lon":9.4953383},{"lat":47.0610081,"lon":9.4953715},{"lat":47.0609702,"lon":9.4952635},{"lat":47.0608883,"lon":9.4953255},{"lat":47.060952,"lon":9.4955068},{"lat":47.0610004,"lon":9.4954702},{"lat":47.0610175,"lon":9.4955187},{"lat":47.0610948,"lon":9.4954601},{"lat":47.0610519,"lon":9.4953383}]},{"type":"way","id":5182,"tags":{"building":"yes"},"nodes":[49935,49977,49972,50016,49985,49941,49950,49901,49935],"geometry":[{"lat":47.0681538,"lon":9.5048996},{"lat":47.0682314,"lon":9.5049706},{"lat":47.0682187,"lon":9.5050006},{"lat":47.0682934,"lon":9.5050689},{"lat":47.0682472,"lon":9.5051777},{"lat":47.0681743,"lon":9.505111},{"lat":47.0681877,"lon":9.5050793},{"lat":47.0681083,"lon":9.5050067},{"lat":47.0681538,"lon":9.5048996}]},{"type":"way","id":5183,"tags":{"building":"yes"},"nodes":[51669,51644,51622,51633,51630,51637,51640,51653,51669],"geometry":[{"lat":47.0719678,"lon":9.5079998},{"lat":47.0718418,"lon":9.5079146},{"lat":47.0717473,"lon":9.5082156},{"lat":47.0717911,"lon":9.5082453},{"lat":47.0717678,"lon":9.5083196},{"lat":47.0718078,"lon":9.5083467},{"lat":47.0718305,"lon":9.5082745},{"lat":47.0718726,"lon":9.508303},{"lat":47.0719678,"lon":9.5079998}]},{"type":"way","id":5184,"tags":{"building":"yes"},"nodes":[46300,46348,46290,46274,46231,46202,46248,46241,46300],"geometry":[{"lat":47.0629096,"lon":9.4970379},{"lat":47.062972,"lon":9.4972009},{"lat":47.0628944,"lon":9.4972649},{"lat":47.0628791,"lon":9.4972248},{"lat":47.0628255,"lon":9.497269},{"lat":47.0627881,"lon":9.4971714},{"lat":47.0628475,"lon":9.4971223},{"lat":47.0628379,"lon":9.497097},{"lat":47.0629096,"lon":9.4970379}]},{"type":"way","id":5186,"tags":{"building":"yes"},"nodes":[49283,49248,49258,49268,49277,49326,49319,49291,49283],"geometry":[{"lat":47.0670917,"lon":9.5096768},{"lat":47.0670213,"lon":9.5096989},{"lat":47.0670351,"lon":9.5097942},{"lat":47.0670516,"lon":9.509789},{"lat":47.0670716,"lon":9.5099265},{"lat":47.0671646,"lon":9.5098974},{"lat":47.0671465,"lon":9.5097728},{"lat":47.0671075,"lon":9.509785},{"lat":47.0670917,"lon":9.5096768}]},{"type":"way","id":5189,"tags":{"building":"yes"},"nodes":[48378,48332,48345,48365,48374,48398,48385,48402,48378],"geometry":[{"lat":47.0655835,"lon":9.4988457},{"lat":47.065501,"lon":9.498904},{"lat":47.0655316,"lon":9.4989973},{"lat":47.0655647,"lon":9.4989739},{"lat":47.0655814,"lon":9.4990245},{"lat":47.065609,"lon":9.499005},{"lat":47.0655912,"lon":9.4989508},{"lat":47.0656129,"lon":9.4989354},{"lat":47.0655835,"lon":9.4988457}]},{"type":"way","id":5190,"tags":{"building":"yes"},"nodes":[50269,50090,50102,50230,50259,50330,50306,50287,50269],"geometry":[{"lat":47.0686616,"lon":9.5027729},{"lat":47.0684036,"lon":9.5028908},{"lat":47.068435,"lon":9.5030392},{"lat":47.0686225,"lon":9.5029535},{"lat":47.0686522,"lon":9.5030935},{"lat":47.068742,"lon":9.5030524},{"lat":47.0687067,"lon":9.5028856},{"lat":47.0686873,"lon":9.5028944},{"lat":47.0686616,"lon":9.5027729}]},{"type":"way","id":5192,"tags":{"building":"yes"},"nodes":[51654,51680,51678,51697,51696,51670,51673,51650,51654],"geometry":[{"lat":47.0718828,"lon":9.5110538},{"lat":47.0720285,"lon":9.5111035},{"lat":47.0720121,"lon":9.511207},{"lat":47.0720938,"lon":9.5112349},{"lat":47.0720881,"lon":9.511271},{"lat":47.0719735,"lon":9.5112319},{"lat":47.0719793,"lon":9.5111956},{"lat":47.0718664,"lon":9.5111571},{"lat":47.0718828,"lon":9.5110538}]},{"type":"way","id":5193,"tags":{"building":"yes"},"nodes":[48094,48018,48036,48008,48001,47953,47976,48129,48094],"geometry":[{"lat":47.0651414,"lon":9.4969552},{"lat":47.0650431,"lon":9.4970239},{"lat":47.0650643,"lon":9.497089},{"lat":47.0650261,"lon":9.4971156},{"lat":47.0650161,"lon":9.4970847},{"lat":47.0649449,"lon":9.4971345},{"lat":47.0649826,"lon":9.4972507},{"lat":47.0651902,"lon":9.4971055},{"lat":47.0651414,"lon":9.4969552}]},{"type":"way","id":5194,"tags":{"building":"yes"},"nodes":[49676,49664,49653,49619,49678,49711,49701,49714,49676],"geometry":[{"lat":47.0677555,"lon":9.504608},{"lat":47.0677277,"lon":9.5046459},{"lat":47.067716,"lon":9.5046275},{"lat":47.0676656,"lon":9.5046963},{"lat":47.0677622,"lon":9.5048487},{"lat":47.0678169,"lon":9.504774},{"lat":47.0677951,"lon":9.5047396},{"lat":47.0678186,"lon":9.5047076},{"lat":47.0677555,"lon":9.504608}]},{"type":"way","id":5195,"tags":{"building":"yes"},"nodes":[43734,43663,43726,43715,43758,43795,43786,43817,43734],"geometry":[{"lat":47.0598885,"lon":9.4918017},{"lat":47.0598016,"lon":9.4919625},{"lat":47.0598722,"lon":9.4920528},{"lat":47.0598627,"lon":9.4920644},{"lat":47.0599174,"lon":9.4921303},{"lat":47.0599599,"lon":9.4920423},{"lat":47.0599484,"lon":9.4920289},{"lat":47.0599944,"lon":9.4919433},{"lat":47.0598885,"lon":9.4918017}]},{"type":"way","id":5196,"tags":{"building":"yes"},"nodes":[50992,50972,50967,50925,50917,50966,50980,50988,50992],"geometry":[{"lat":47.0700196,"lon":9.5077667},{"lat":47.0699776,"lon":9.507752},{"lat":47.0699648,"lon":9.5078613},{"lat":47.0698812,"lon":9.5078365},{"lat":47.0698584,"lon":9.5079572},{"lat":47.0699639,"lon":9.5080014},{"lat":47.0699926,"lon":9.5078532},{"lat":47.0700082,"lon":9.5078586},{"lat":47.0700196,"lon":9.5077667}]},{"type":"way","id":5197,"tags":{"building":"yes"},"nodes":[51434,51402,51389,51387,51379,51398,51410,51413,51434],"geometry":[{"lat":47.0711254,"lon":9.5065365},{"lat":47.0710509,"lon":9.5064929},{"lat":47.0710053,"lon":9.5066606},{"lat":47.0709953,"lon":9.5066547},{"lat":47.0709725,"lon":9.5067385},{"lat":47.0710423,"lon":9.5067794},{"lat":47.0710668,"lon":9.5066895},{"lat":47.0710815,"lon":9.5066981},{"lat":47.0711254,"lon":9.5065365}]},{"type":"way","id":5199,"tags":{"building":"yes"},"nodes":[45038,45000,44985,44927,44990,45050,45036,45059,45038],"geometry":[{"lat":47.0614742,"lon":9.4951815},{"lat":47.0614269,"lon":9.4952339},{"lat":47.0614132,"lon":9.4952074},{"lat":47.0613425,"lon":9.4952859},{"lat":47.061418,"lon":9.4954324},{"lat":47.061492,"lon":9.4953503},{"lat":47.0614705,"lon":9.4953084},{"lat":47.0615144,"lon":9.4952596},{"lat":47.0614742,"lon":9.4951815}]},{"type":"way","id":5200,"tags":{"building":"yes"},"nodes":[44965,44899,44914,44928,44941,44900,44916,45019,44965],"geometry":[{"lat":47.0613933,"lon":9.4946181},{"lat":47.0613108,"lon":9.4946636},{"lat":47.0613291,"lon":9.4947352},{"lat":47.0613431,"lon":9.4947275},{"lat":47.0613613,"lon":9.4947987},{"lat":47.0613114,"lon":9.4948261},{"lat":47.0613317,"lon":9.4949057},{"lat":47.0614502,"lon":9.4948405},{"lat":47.0613933,"lon":9.4946181}]},{"type":"way","id":5201,"tags":{"building":"yes"},"nodes":[50551,50498,50477,50435,50447,50438,50452,50570,50551],"geometry":[{"lat":47.0691035,"lon":9.5017898},{"lat":47.0690122,"lon":9.5018521},{"lat":47.0689858,"lon":9.5017688},{"lat":47.0689123,"lon":9.5018189},{"lat":47.0689404,"lon":9.5019077},{"lat":47.0689187,"lon":9.5019226},{"lat":47.0689504,"lon":9.5020228},{"lat":47.069137,"lon":9.5018955},{"lat":47.0691035,"lon":9.5017898}]},{"type":"way","id":5202,"tags":{"building":"yes"},"nodes":[48899,48834,48848,48840,48847,48907,48903,48911,48899],"geometry":[{"lat":47.0664404,"lon":9.5083207},{"lat":47.066323,"lon":9.508365},{"lat":47.0663403,"lon":9.5084641},{"lat":47.0663286,"lon":9.5084685},{"lat":47.0663388,"lon":9.5085269},{"lat":47.0664531,"lon":9.5084839},{"lat":47.0664446,"lon":9.5084352},{"lat":47.0664595,"lon":9.5084295},{"lat":47.0664404,"lon":9.5083207}]},{"type":"way","id":5203,"tags":{"building":"yes"},"nodes":[49348,49301,49302,49288,49292,49305,49307,49359,49348],"geometry":[{"lat":47.0672042,"lon":9.5083134},{"lat":47.0671165,"lon":9.5083338},{"lat":47.0671175,"lon":9.5083437},{"lat":47.0671015,"lon":9.5083475},{"lat":47.0671081,"lon":9.5084089},{"lat":47.06712,"lon":9.5084061},{"lat":47.0671275,"lon":9.5084748},{"lat":47.0672193,"lon":9.5084534},{"lat":47.0672042,"lon":9.5083134}]},{"type":"way","id":5204,"tags":{"building":"yes"},"nodes":[51011,50984,50969,50962,50956,50982,50986,50998,51011],"geometry":[{"lat":47.0700761,"lon":9.507408},{"lat":47.0700021,"lon":9.5073813},{"lat":47.0699707,"lon":9.5075691},{"lat":47.0699561,"lon":9.5075638},{"lat":47.0699464,"lon":9.5076219},{"lat":47.0699949,"lon":9.5076394},{"lat":47.0700068,"lon":9.5075684},{"lat":47.0700469,"lon":9.5075828},{"lat":47.0700761,"lon":9.507408}]},{"type":"way","id":5205,"tags":{"building":"yes"},"nodes":[51221,51194,51200,51181,51196,51203,51214,51247,51221],"geometry":[{"lat":47.0705275,"lon":9.5046774},{"lat":47.0704805,"lon":9.5047251},{"lat":47.0704909,"lon":9.5047471},{"lat":47.0704647,"lon":9.5047736},{"lat":47.0704849,"lon":9.5048165},{"lat":47.0704942,"lon":9.5048071},{"lat":47.0705157,"lon":9.5048528},{"lat":47.0705795,"lon":9.504788},{"lat":47.0705275,"lon":9.5046774}]},{"type":"way","id":5206,"tags":{"building":"yes"},"nodes":[48502,48425,48431,48444,48453,48498,48493,48507,48502],"geometry":[{"lat":47.0657741,"lon":9.5107487},{"lat":47.0656518,"lon":9.5107819},{"lat":47.0656616,"lon":9.5108592},{"lat":47.0656856,"lon":9.5108527},{"lat":47.0656937,"lon":9.5109169},{"lat":47.0657649,"lon":9.5108975},{"lat":47.0657588,"lon":9.5108491},{"lat":47.0657858,"lon":9.5108417},{"lat":47.0657741,"lon":9.5107487}]},{"type":"way","id":5207,"tags":{"building":"yes"},"nodes":[45336,45282,45318,45370,45383,45420,45391,45353,45336],"geometry":[{"lat":47.0618239,"lon":9.4962818},{"lat":47.061755,"lon":9.4963375},{"lat":47.0617991,"lon":9.4964551},{"lat":47.0618616,"lon":9.4964045},{"lat":47.0618724,"lon":9.4964333},{"lat":47.0619186,"lon":9.4963959},{"lat":47.0618807,"lon":9.496295},{"lat":47.0618409,"lon":9.4963272},{"lat":47.0618239,"lon":9.4962818}]},{"type":"way","id":5208,"tags":{"building":"yes"},"nodes":[50845,50839,50829,50800,50819,50854,50845],"geometry":[{"lat":47.069654,"lon":9.5008903},{"lat":47.0696451,"lon":9.5008963},{"lat":47.0696257,"lon":9.5008337},{"lat":47.0695481,"lon":9.5008857},{"lat":47.0695999,"lon":9.5010521},{"lat":47.0696863,"lon":9.5009941},{"lat":47.069654,"lon":9.5008903}]},{"type":"way","id":5209,"tags":{"building":"yes"},"nodes":[48271,48214,48218,48198,48211,48250,48257,48301,48271],"geometry":[{"lat":47.0654144,"lon":9.5080512},{"lat":47.0653318,"lon":9.5080983},{"lat":47.0653357,"lon":9.508113},{"lat":47.0653036,"lon":9.5081312},{"lat":47.0653279,"lon":9.5082232},{"lat":47.0653902,"lon":9.5081878},{"lat":47.065402,"lon":9.5082325},{"lat":47.0654544,"lon":9.5082027},{"lat":47.0654144,"lon":9.5080512}]},{"type":"way","id":5211,"tags":{"building":"yes"},"nodes":[45688,45641,45616,45627,45591,45540,45625,45722,45688],"geometry":[{"lat":47.0622339,"lon":9.4951345},{"lat":47.0621837,"lon":9.4951755},{"lat":47.0621508,"lon":9.4950887},{"lat":47.0621664,"lon":9.495076},{"lat":47.0621133,"lon":9.4949358},{"lat":47.0620453,"lon":9.4949912},{"lat":47.0621642,"lon":9.4953047},{"lat":47.0622667,"lon":9.495221},{"lat":47.0622339,"lon":9.4951345}]},{"type":"way","id":5214,"tags":{"building":"yes"},"nodes":[51161,51107,51096,51120,51110,51145,51158,51154,51161],"geometry":[{"lat":47.070429,"lon":9.4953277},{"lat":47.0703327,"lon":9.4953078},{"lat":47.0703108,"lon":9.4955361},{"lat":47.0703518,"lon":9.4955446},{"lat":47.070336,"lon":9.4957104},{"lat":47.0704013,"lon":9.4957239},{"lat":47.0704235,"lon":9.495492},{"lat":47.0704135,"lon":9.49549},{"lat":47.070429,"lon":9.4953277}]},{"type":"way","id":5215,"tags":{"building":"yes"},"nodes":[47224,47179,47202,47229,47239,47325,47302,47247,47224],"geometry":[{"lat":47.0639522,"lon":9.5111756},{"lat":47.0638734,"lon":9.5111983},{"lat":47.063907,"lon":9.5114032},{"lat":47.0639573,"lon":9.5113785},{"lat":47.0639651,"lon":9.511424},{"lat":47.0640723,"lon":9.5113785},{"lat":47.0640516,"lon":9.5112723},{"lat":47.0639741,"lon":9.5113045},{"lat":47.0639522,"lon":9.5111756}]},{"type":"way","id":5216,"tags":{"building":"yes"},"nodes":[46972,46871,46900,46953,46955,46986,46975,47006,46972],"geometry":[{"lat":47.063603,"lon":9.5089565},{"lat":47.0634713,"lon":9.5090386},{"lat":47.0635094,"lon":9.5091704},{"lat":47.0635759,"lon":9.5091289},{"lat":47.0635811,"lon":9.5091468},{"lat":47.0636138,"lon":9.5091264},{"lat":47.063605,"lon":9.5090963},{"lat":47.0636376,"lon":9.509076},{"lat":47.063603,"lon":9.5089565}]},{"type":"way","id":5217,"tags":{"building":"yes"},"nodes":[48918,48868,48874,48853,48875,48939,48921,48930,48918],"geometry":[{"lat":47.0664732,"lon":9.5094841},{"lat":47.0663904,"lon":9.509556},{"lat":47.0664007,"lon":9.5095816},{"lat":47.0663582,"lon":9.5096184},{"lat":47.0664012,"lon":9.5097254},{"lat":47.0665094,"lon":9.5096316},{"lat":47.0664806,"lon":9.50956},{"lat":47.0664978,"lon":9.5095452},{"lat":47.0664732,"lon":9.5094841}]},{"type":"way","id":5218,"tags":{"building":"yes"},"nodes":[48166,48138,48131,48041,48057,48145,48141,48176,48166],"geometry":[{"lat":47.0652447,"lon":9.5118518},{"lat":47.0651976,"lon":9.5118731},{"lat":47.0651917,"lon":9.5118452},{"lat":47.0650691,"lon":9.5119009},{"lat":47.0650953,"lon":9.5120256},{"lat":47.0652145,"lon":9.5119715},{"lat":47.0652078,"lon":9.5119396},{"lat":47.0652583,"lon":9.5119166},{"lat":47.0652447,"lon":9.5118518}]},{"type":"way","id":5219,"tags":{"building":"yes"},"nodes":[49557,49487,49502,49517,49527,49545,49546,49587,49557],"geometry":[{"lat":47.0675669,"lon":9.500957},{"lat":47.0674446,"lon":9.5010314},{"lat":47.0674721,"lon":9.501129},{"lat":47.0674954,"lon":9.5011148},{"lat":47.0675045,"lon":9.5011473},{"lat":47.0675333,"lon":9.5011298},{"lat":47.0675369,"lon":9.5011426},{"lat":47.0676072,"lon":9.5010999},{"lat":47.0675669,"lon":9.500957}]},{"type":"way","id":5221,"tags":{"building":"yes"},"nodes":[47908,47893,47886,47854,47861,47812,47847,47933,47908],"geometry":[{"lat":47.0648738,"lon":9.4951485},{"lat":47.0648293,"lon":9.495184},{"lat":47.064817,"lon":9.4951507},{"lat":47.0647587,"lon":9.4951973},{"lat":47.0647698,"lon":9.4952272},{"lat":47.0647062,"lon":9.495278},{"lat":47.0647493,"lon":9.4953945},{"lat":47.0649157,"lon":9.4952615},{"lat":47.0648738,"lon":9.4951485}]},{"type":"way","id":5223,"tags":{"building":"yes"},"nodes":[45261,45211,45210,45175,45180,45121,45146,45285,45261],"geometry":[{"lat":47.0617288,"lon":9.4935243},{"lat":47.0616813,"lon":9.4935442},{"lat":47.0616776,"lon":9.4935254},{"lat":47.0616525,"lon":9.4935359},{"lat":47.0616569,"lon":9.4935586},{"lat":47.0615997,"lon":9.4935825},{"lat":47.0616263,"lon":9.4937196},{"lat":47.0617561,"lon":9.4936654},{"lat":47.0617288,"lon":9.4935243}]},{"type":"way","id":5225,"tags":{"building":"yes"},"nodes":[48594,48559,48566,48536,48552,48592,48588,48609,48594],"geometry":[{"lat":47.065898,"lon":9.5106764},{"lat":47.0658575,"lon":9.5106879},{"lat":47.0658632,"lon":9.5107313},{"lat":47.0658264,"lon":9.5107417},{"lat":47.0658438,"lon":9.510874},{"lat":47.0658956,"lon":9.5108594},{"lat":47.0658909,"lon":9.5108237},{"lat":47.0659165,"lon":9.5108165},{"lat":47.065898,"lon":9.5106764}]},{"type":"way","id":5227,"tags":{"building":"yes"},"nodes":[51450,51458,51476,51492,51451,51429,51435,51431,51450],"geometry":[{"lat":47.0711664,"lon":9.5055518},{"lat":47.0711814,"lon":9.5055981},{"lat":47.0712374,"lon":9.5055589},{"lat":47.0712785,"lon":9.505686},{"lat":47.0711676,"lon":9.5057635},{"lat":47.0711203,"lon":9.5056176},{"lat":47.0711326,"lon":9.505609},{"lat":47.0711237,"lon":9.5055816},{"lat":47.0711664,"lon":9.5055518}]},{"type":"way","id":5228,"tags":{"building":"yes"},"nodes":[51777,51757,51763,51751,51759,51767,51778,51779,51784,51777],"geometry":[{"lat":47.0725859,"lon":9.5024459},{"lat":47.0724194,"lon":9.5025469},{"lat":47.0724826,"lon":9.5027718},{"lat":47.0723994,"lon":9.5028223},{"lat":47.0724303,"lon":9.5029321},{"lat":47.0725149,"lon":9.5028808},{"lat":47.0725975,"lon":9.5028307},{"lat":47.0726033,"lon":9.5028514},{"lat":47.0726858,"lon":9.5028013},{"lat":47.0725859,"lon":9.5024459}]},{"type":"way","id":5229,"tags":{"building":"yes"},"nodes":[51198,51133,51125,51105,51111,51135,51155,51151,51189,51198],"geometry":[{"lat":47.0704867,"lon":9.5106346},{"lat":47.0703698,"lon":9.5106118},{"lat":47.0703588,"lon":9.5107076},{"lat":47.0703291,"lon":9.5107209},{"lat":47.0703369,"lon":9.5107474},{"lat":47.0703763,"lon":9.5107303},{"lat":47.0704137,"lon":9.5107389},{"lat":47.0704105,"lon":9.5107768},{"lat":47.0704744,"lon":9.5107872},{"lat":47.0704867,"lon":9.5106346}]},{"type":"way","id":5230,"tags":{"building":"yes"},"nodes":[46044,45946,45930,45918,45869,45919,45899,45951,45971,46044],"geometry":[{"lat":47.0626039,"lon":9.5129168},{"lat":47.0624884,"lon":9.5128345},{"lat":47.0624752,"lon":9.512874},{"lat":47.0624609,"lon":9.5128627},{"lat":47.0624136,"lon":9.513},{"lat":47.062462,"lon":9.5130404},{"lat":47.0624411,"lon":9.5130977},{"lat":47.0624956,"lon":9.5131357},{"lat":47.062522,"lon":9.513126},{"lat":47.0626039,"lon":9.5129168}]},{"type":"way","id":5231,"tags":{"building":"yes"},"nodes":[47921,47897,47890,47882,47840,47855,47802,47821,47915,47921],"geometry":[{"lat":47.0648936,"lon":9.49442},{"lat":47.0648368,"lon":9.4943954},{"lat":47.0648252,"lon":9.4944485},{"lat":47.0648123,"lon":9.4944143},{"lat":47.0647412,"lon":9.4944636},{"lat":47.0647619,"lon":9.4945205},{"lat":47.0646947,"lon":9.4945604},{"lat":47.0647141,"lon":9.4946305},{"lat":47.0648807,"lon":9.4945073},{"lat":47.0648936,"lon":9.49442}]},{"type":"way","id":5232,"tags":{"building":"yes"},"nodes":[49549,49534,49521,49486,49495,49121,49171,49579,49596,49549],"geometry":[{"lat":47.0675429,"lon":9.4984664},{"lat":47.0675145,"lon":9.4984865},{"lat":47.0675009,"lon":9.4984449},{"lat":47.0674431,"lon":9.4984856},{"lat":47.0674545,"lon":9.4985204},{"lat":47.0667779,"lon":9.4989974},{"lat":47.0668746,"lon":9.499273},{"lat":47.0675972,"lon":9.4987555},{"lat":47.067631,"lon":9.4987357},{"lat":47.0675429,"lon":9.4984664}]},{"type":"way","id":5235,"tags":{"building":"yes"},"nodes":[50490,50555,50545,50559,50544,50507,50513,50409,50453,50490],"geometry":[{"lat":47.0690056,"lon":9.5029137},{"lat":47.0691125,"lon":9.5032804},{"lat":47.0690974,"lon":9.5033227},{"lat":47.0691189,"lon":9.5033361},{"lat":47.069097,"lon":9.5034152},{"lat":47.0690266,"lon":9.503369},{"lat":47.0690472,"lon":9.5032932},{"lat":47.0688581,"lon":9.5031477},{"lat":47.0689504,"lon":9.5028714},{"lat":47.0690056,"lon":9.5029137}]},{"type":"way","id":5236,"tags":{"building":"yes"},"nodes":[48226,48111,48130,48156,48185,48221,48246,48300,48248,48226],"geometry":[{"lat":47.065352,"lon":9.4989974},{"lat":47.0651673,"lon":9.4991258},{"lat":47.065191,"lon":9.4991995},{"lat":47.065232,"lon":9.499171},{"lat":47.0652703,"lon":9.4992899},{"lat":47.0653441,"lon":9.4992387},{"lat":47.0653839,"lon":9.4993622},{"lat":47.0654539,"lon":9.4993135},{"lat":47.0653869,"lon":9.4991056},{"lat":47.065352,"lon":9.4989974}]},{"type":"way","id":5238,"tags":{"building":"yes"},"nodes":[51033,51013,51002,50978,50970,51003,51000,51018,51021,51033],"geometry":[{"lat":47.0701362,"lon":9.5085307},{"lat":47.0700836,"lon":9.5084811},{"lat":47.070053,"lon":9.5085569},{"lat":47.0699877,"lon":9.5085354},{"lat":47.0699727,"lon":9.508626},{"lat":47.070053,"lon":9.5086488},{"lat":47.0700494,"lon":9.5086702},{"lat":47.0701005,"lon":9.5086856},{"lat":47.0701129,"lon":9.5085971},{"lat":47.0701362,"lon":9.5085307}]},{"type":"way","id":5240,"tags":{"highway":"living_street"},"nodes":[46477,46943],"geometry":[{"lat":47.0630964,"lon":9.4952505},{"lat":47.0635683,"lon":9.4949026}]},{"type":"way","id":5242,"tags":{"highway":"living_street"},"nodes":[49839,50085],"geometry":[{"lat":47.0680177,"lon":9.5093556},{"lat":47.0683949,"lon":9.5093476}]},{"type":"way","id":5243,"tags":{"highway":"residential"},"nodes":[47571,47322],"geometry":[{"lat":47.0644238,"lon":9.4926363},{"lat":47.0640711,"lon":9.4929294}]},{"type":"way","id":5244,"tags":{"highway":"living_street"},"nodes":[49401,49166],"geometry":[{"lat":47.0672834,"lon":9.5067246},{"lat":47.0668623,"lon":9.5068128}]},{"type":"way","id":5247,"tags":{"highway":"living_street"},"nodes":[46526,46875],"geometry":[{"lat":47.0631349,"lon":9.4922256},{"lat":47.0634769,"lon":9.4914874}]},{"type":"way","id":5248,"tags":{"highway":"residential"},"nodes":[45302,45432],"geometry":[{"lat":47.0617762,"lon":9.4958472},{"lat":47.0619341,"lon":9.4962433}]},{"type":"way","id":5251,"tags":{"highway":"residential"},"nodes":[49842,49738],"geometry":[{"lat":47.0680233,"lon":9.5045663},{"lat":47.0678526,"lon":9.5039079}]},{"type":"way","id":5254,"tags":{"highway":"residential"},"nodes":[45637,45448],"geometry":[{"lat":47.0621803,"lon":9.4915022},{"lat":47.0619452,"lon":9.4920013}]},{"type":"way","id":5256,"tags":{"highway":"residential"},"nodes":[24669,43961,43964,43983,43995,43982,43955],"geometry":[{"lat":47.0602161,"lon":9.4968265},{"lat":47.0601936,"lon":9.4964989},{"lat":47.0602001,"lon":9.4963643},{"lat":47.0602208,"lon":9.4962846},{"lat":47.0602298,"lon":9.4961765},{"lat":47.0602195,"lon":9.4960741},{"lat":47.0601859,"lon":9.4960627}]},{"type":"way","id":5257,"tags":{"building":"yes"},"nodes":[48638,48586,48584,48551,48563,48540,48547,48571,48578,48686,48677,48648,48638],"geometry":[{"lat":47.0659694,"lon":9.5114646},{"lat":47.0658895,"lon":9.5114931},{"lat":47.0658859,"lon":9.5114712},{"lat":47.0658434,"lon":9.5114864},{"lat":47.0658598,"lon":9.511586},{"lat":47.0658308,"lon":9.5115963},{"lat":47.0658411,"lon":9.5116589},{"lat":47.065871,"lon":9.5116482},{"lat":47.0658775,"lon":9.5116874},{"lat":47.0660367,"lon":9.5116308},{"lat":47.0660202,"lon":9.5115304},{"lat":47.0659825,"lon":9.5115438},{"lat":47.0659694,"lon":9.5114646}]},{"type":"way","id":5258,"tags":{"landuse":"vineyard"},"nodes":[46808,46837,46814,46679,46607,46364,46174,46148,46099,45990,45816,45709,45874,45833,45671,45631,45587,45576,45656,45757,45852,45969,46078,46170,46337,46516,8704,46805,46808],"geometry":[{"lat":47.0633893,"lon":9.4988744},{"lat":47.0634239,"lon":9.4989351},{"lat":47.063399,"lon":9.4991412},{"lat":47.0632701,"lon":9.4992061},{"lat":47.0632115,"lon":9.4993585},{"lat":47.0629875,"lon":9.499542},{"lat":47.0627568,"lon":9.4996958},{"lat":47.062727,"lon":9.4996902},{"lat":47.0626654,"lon":9.4999174},{"lat":47.0625433,"lon":9.4998384},{"lat":47.0623684,"lon":9.5000882},{"lat":47.0622491,"lon":9.4998539},{"lat":47.0624184,"lon":9.4996986},{"lat":47.0623828,"lon":9.4994178},{"lat":47.0622184,"lon":9.4994361},{"lat":47.0621732,"lon":9.4992075},{"lat":47.0621107,"lon":9.4991553},{"lat":47.0620972,"lon":9.4989648},{"lat":47.0622008,"lon":9.4988599},{"lat":47.0623011,"lon":9.4990419},{"lat":47.0623995,"lon":9.4989374},{"lat":47.062522,"lon":9.4988281},{"lat":47.0626374,"lon":9.4987133},{"lat":47.0627488,"lon":9.4986448},{"lat":47.0629533,"lon":9.4986474},{"lat":47.0631271,"lon":9.498707},{"lat":47.0631355,"lon":9.4985906},{"lat":47.0633859,"lon":9.4988374},{"lat":47.0633893,"lon":9.4988744}]},{"type":"way","id":5259,"tags":{"landuse":"vineyard"},"nodes":[46198,46088,46041,45871,46026,46198],"geometry":[{"lat":47.0627826,"lon":9.5107234},{"lat":47.0626506,"lon":9.5106329},{"lat":47.0625967,"lon":9.5106539},{"lat":47.0624152,"lon":9.5113952},{"lat":47.0625813,"lon":9.5114937},{"lat":47.0627826,"lon":9.5107234}]},{"type":"way","id":5260,"tags":{"building":"yes"},"nodes":[48619,48565,48575,48527,48541,48657,48641,48630,48619],"geometry":[{"lat":47.0659407,"lon":9.5111474},{"lat":47.0658621,"lon":9.5111808},{"lat":47.065875,"lon":9.5112467},{"lat":47.065813,"lon":9.511273},{"lat":47.0658316,"lon":9.5113673},{"lat":47.0659972,"lon":9.511297},{"lat":47.0659768,"lon":9.5111932},{"lat":47.0659518,"lon":9.5112038},{"lat":47.0659407,"lon":9.5111474}]},{"type":"way","id":5261,"tags":{"landuse":"vineyard"},"nodes":[47494,47388,47458,47678,47661,47589,47570,47530,47494],"geometry":[{"lat":47.0643169,"lon":9.5099691},{"lat":47.0641683,"lon":9.5100374},{"lat":47.0642742,"lon":9.5108757},{"lat":47.0645701,"lon":9.5107543},{"lat":47.0645507,"lon":9.5105514},{"lat":47.0644499,"lon":9.5105722},{"lat":47.0644228,"lon":9.510339},{"lat":47.064366,"lon":9.5103655},{"lat":47.0643169,"lon":9.5099691}]},{"type":"way","id":5262,"tags":{"building":"yes"},"nodes":[48739,48694,48695,48678,48685,48701,48707,48752,48739],"geometry":[{"lat":47.0661309,"lon":9.5112024},{"lat":47.0660472,"lon":9.511237},{"lat":47.0660502,"lon":9.5112528},{"lat":47.0660231,"lon":9.511264},{"lat":47.0660348,"lon":9.5113251},{"lat":47.0660636,"lon":9.5113132},{"lat":47.0660713,"lon":9.5113537},{"lat":47.0661534,"lon":9.5113198},{"lat":47.0661309,"lon":9.5112024}]},{"type":"way","id":5263,"tags":{"amenity":"parking"},"nodes":[49139,49118,49204,49234,49139],"geometry":[{"lat":47.066809,"lon":9.4974115},{"lat":47.0667692,"lon":9.4974414},{"lat":47.066956,"lon":9.4979763},{"lat":47.0669957,"lon":9.4979463},{"lat":47.066809,"lon":9.4974115}]},{"type":"way","id":5264,"tags":{"amenity":"parking"},"nodes":[49133,49074,49026,49084,49133],"geometry":[{"lat":47.0667903,"lon":9.4976674},{"lat":47.0667163,"lon":9.4977229},{"lat":47.0666529,"lon":9.4975411},{"lat":47.0667269,"lon":9.4974855},{"lat":47.0667903,"lon":9.4976674}]},{"type":"way","id":5265,"tags":{"amenity":"parking","parking":"surface"},"nodes":[47324,53468,47054,47047,47324],"geometry":[{"lat":47.0640722,"lon":9.5024629},{"lat":47.0641391,"lon":9.5026648},{"lat":47.0637552,"lon":9.5029094},{"lat":47.0636969,"lon":9.502709},{"lat":47.0640722,"lon":9.5024629}]},{"type":"way","id":5266,"tags":{"amenity":"parking"},"nodes":[49040,49034,48850,48823,49033,49040],"geometry":[{"lat":47.066668,"lon":9.4977512},{"lat":47.0666596,"lon":9.4977826},{"lat":47.0663419,"lon":9.498009},{"lat":47.066302,"lon":9.4979762},{"lat":47.0666559,"lon":9.4977212},{"lat":47.066668,"lon":9.4977512}]},{"type":"way","id":5267,"tags":{"amenity":"parking","parking":"surface"},"nodes":[48835,48878,8665,48626,48704,48835],"geometry":[{"lat":47.0663091,"lon":9.5017767},{"lat":47.0664258,"lon":9.5025703},{"lat":47.066077,"lon":9.5027064},{"lat":47.0659458,"lon":9.5022226},{"lat":47.0660774,"lon":9.5018643},{"lat":47.0663091,"lon":9.5017767}]},{"type":"way","id":5268,"tags":{"amenity":"parking","parking":"surface"},"nodes":[49148,49211,49006,48964,48946,49148],"geometry":[{"lat":47.0668318,"lon":9.5026261},{"lat":47.0669691,"lon":9.5032932},{"lat":47.066792,"lon":9.5033828},{"lat":47.0665673,"lon":9.5030067},{"lat":47.0665356,"lon":9.5027535},{"lat":47.0668318,"lon":9.5026261}]},{"type":"way","id":5269,"tags":{"amenity":"parking"},"nodes":[49128,49136,49144,49180,49141,49096,49128],"geometry":[{"lat":47.0667841,"lon":9.4977887},{"lat":47.0667954,"lon":9.4978203},{"lat":47.0668293,"lon":9.4977942},{"lat":47.0668953,"lon":9.4979789},{"lat":47.0668226,"lon":9.498035},{"lat":47.0667452,"lon":9.4978187},{"lat":47.0667841,"lon":9.4977887}]},{"type":"way","id":5270,"tags":{"amenity":"parking"},"nodes":[49045,49053,49072,49068,48855,48858,49045],"geometry":[{"lat":47.0666779,"lon":9.4978261},{"lat":47.0666935,"lon":9.4978318},{"lat":47.066716,"lon":9.4978967},{"lat":47.0667116,"lon":9.497939},{"lat":47.0663714,"lon":9.498179},{"lat":47.0663764,"lon":9.4980374},{"lat":47.0666779,"lon":9.4978261}]},{"type":"way","id":5451,"tags":{"highway":"footway"},"nodes":[53491,53490,53489,53487,53484,25205,8667,53473,53471,53470],"geometry":[{"lat":47.0659402,"lon":9.5027407},{"lat":47.0658918,"lon":9.5025347},{"lat":47.065832,"lon":9.5022752},{"lat":47.0656197,"lon":9.5024022},{"lat":47.0655499,"lon":9.502444},{"lat":47.0653626,"lon":9.5025561},{"lat":47.0651703,"lon":9.5026692},{"lat":47.0651056,"lon":9.502705},{"lat":47.0650348,"lon":9.5027021},{"lat":47.0646943,"lon":9.502354}]},{"type":"way","id":5452,"tags":{"highway":"footway"},"nodes":[53473,53474,53476,53477,53478,53480,53486,53490,53493,53494,53491,53488,53482,53479,53478],"geometry":[{"lat":47.0651056,"lon":9.502705},{"lat":47.0651538,"lon":9.5028704},{"lat":47.0651846,"lon":9.502899},{"lat":47.0652144,"lon":9.5029045},{"lat":47.0652563,"lon":9.5028851},{"lat":47.0654603,"lon":9.5027726},{"lat":47.0656135,"lon":9.5026881},{"lat":47.0658918,"lon":9.5025347},{"lat":47.0659968,"lon":9.5024768},{"lat":47.0660523,"lon":9.502688},{"lat":47.0659402,"lon":9.5027407},{"lat":47.0656722,"lon":9.5029005},{"lat":47.0655195,"lon":9.5029915},{"lat":47.0653198,"lon":9.5031105},{"lat":47.0652563,"lon":9.5028851}]},{"type":"way","id":5454,"tags":{"highway":"service","oneway":"yes","service":"parking_aisle"},"nodes":[53505,53504],"geometry":[{"lat":47.0666621,"lon":9.5029541},{"lat":47.0665151,"lon":9.503006}]},{"type":"way","id":5455,"tags":{"highway":"footway"},"nodes":[53488,53486,53484],"geometry":[{"lat":47.0656722,"lon":9.5029005},{"lat":47.0656135,"lon":9.5026881},{"lat":47.0655499,"lon":9.502444}]},{"type":"way","id":5456,"tags":{"highway":"footway"},"nodes":[53480,53482,25229],"geometry":[{"lat":47.0654603,"lon":9.5027726},{"lat":47.0655195,"lon":9.5029915},{"lat":47.065537,"lon":9.5030486}]},{"type":"way","id":5457,"tags":{"highway":"footway"},"nodes":[53487,53485,8636],"geometry":[{"lat":47.0656197,"lon":9.5024022},{"lat":47.0655522,"lon":9.5021711},{"lat":47.0655814,"lon":9.5020667}]},{"type":"way","id":5459,"tags":{"highway":"service","service":"parking_aisle"},"nodes":[53503,53502,53500,53496,53495,53492,53499,53501,53502],"geometry":[{"lat":47.0664685,"lon":9.5025187},{"lat":47.0663389,"lon":9.5025446},{"lat":47.0662154,"lon":9.5018459},{"lat":47.0661029,"lon":9.5018888},{"lat":47.0660954,"lon":9.5020976},{"lat":47.0659942,"lon":9.5021548},{"lat":47.0661505,"lon":9.5026606},{"lat":47.0662955,"lon":9.5026019},{"lat":47.0663389,"lon":9.5025446}]},{"type":"way","id":5738,"tags":{"highway":"residential","name":"Mariahilf"},"nodes":[8551,8542,9135,8543,8544,16741,24637,24625,8545,24656,24620,8546,25063,8549],"geometry":[{"lat":47.0595455,"lon":9.4865713},{"lat":47.0596875,"lon":9.4881528},{"lat":47.0597144,"lon":9.488306},{"lat":47.0597607,"lon":9.4884472},{"lat":47.0599115,"lon":9.4887578},{"lat":47.0602179,"lon":9.4893985},{"lat":47.0605937,"lon":9.4901893},{"lat":47.0607419,"lon":9.4904905},{"lat":47.0607917,"lon":9.4906259},{"lat":47.0608284,"lon":9.4907747},{"lat":47.0608459,"lon":9.4909155},{"lat":47.0608486,"lon":9.4910842},{"lat":47.0608184,"lon":9.4921244},{"lat":47.0607734,"lon":9.4936745}]},{"type":"way","id":5739,"tags":{"highway":"residential","motor_vehicle":"no","name":"Unterm Stein"},"nodes":[9137,16740,24615,24672,24695,9138,8549],"geometry":[{"lat":47.0587213,"lon":9.4911538},{"lat":47.0592149,"lon":9.4917561},{"lat":47.0596366,"lon":9.4922733},{"lat":47.0599988,"lon":9.4927257},{"lat":47.0600992,"lon":9.4928508},{"lat":47.0601979,"lon":9.4929738},{"lat":47.0607734,"lon":9.4936745}]},{"type":"way","id":5740,"tags":{"highway":"service"},"nodes":[56012,13800],"geometry":[{"lat":47.0598538,"lon":9.4997658},{"lat":47.0603118,"lon":9.4993585}]},{"type":"way","id":5741,"tags":{"highway":"track"},"nodes":[25299,25337,25327,25228,25307,25343,25409,25304,25334,25367],"geometry":[{"lat":47.0621872,"lon":9.5074473},{"lat":47.0615074,"lon":9.5076988},{"lat":47.0608971,"lon":9.5079268},{"lat":47.0603782,"lon":9.508077},{"lat":47.0601845,"lon":9.5074064},{"lat":47.0600219,"lon":9.506878},{"lat":47.0596437,"lon":9.505655},{"lat":47.0592087,"lon":9.5041982},{"lat":47.0586825,"lon":9.5024253},{"lat":47.0584687,"lon":9.5017261}]},{"type":"way","id":5742,"tags":{"highway":"track"},"nodes":[25299,25269,25394,25312,25284,25356],"geometry":[{"lat":47.0621872,"lon":9.5074473},{"lat":47.061522,"lon":9.5055959},{"lat":47.0608642,"lon":9.5037881},{"lat":47.060327,"lon":9.5023207},{"lat":47.0601151,"lon":9.5017202},{"lat":47.0601057,"lon":9.5016108}]},{"type":"way","id":5743,"tags":{"name":"Binnenkanal","waterway":"canal","width":"3"},"nodes":[25342,9762,24621,9763,8791,9741,9742,9743,9744,9745,25287,9746,9747,9748,9749,9750,25654,9751,9752,25663,9753,30461,9754,9755,30510,9756,30520,9757,9758,9759,9760,9761,2142,1528,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,29275,1365,1366,29361,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,15572,1401,1402,15574,1403,1404,1405,1406,1407,1408,1409,59744,1410,57417,1411,1412,57490,1413,57531,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,37970,1437,1438,1439,1440,1441,1442,38084,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,65527,648],"geometry":[{"lat":47.0664094,"lon":9.5055148},{"lat":47.0702211,"lon":9.5060169},{"lat":47.070498,"lon":9.5060756},{"lat":47.0707877,"lon":9.5061788},{"lat":47.0710777,"lon":9.5063308},{"lat":47.0713215,"lon":9.5065225},{"lat":47.0716722,"lon":9.5068486},{"lat":47.0728357,"lon":9.507994},{"lat":47.0738936,"lon":9.5089257},{"lat":47.0742326,"lon":9.5092433},{"lat":47.0753954,"lon":9.5104167},{"lat":47.0765357,"lon":9.5116981},{"lat":47.0776368,"lon":9.5127859},{"lat":47.0779291,"lon":9.5130868},{"lat":47.0795712,"lon":9.5141014},{"lat":47.0804402,"lon":9.5146592},{"lat":47.0807503,"lon":9.514795},{"lat":47.0820182,"lon":9.5156291},{"lat":47.084435,"lon":9.5170761},{"lat":47.0857874,"lon":9.5179342},{"lat":47.0876958,"lon":9.5191996},{"lat":47.088405,"lon":9.5196862},{"lat":47.0892417,"lon":9.5202554},{"lat":47.0909832,"lon":9.5213969},{"lat":47.0916744,"lon":9.521819},{"lat":47.0927338,"lon":9.522466},{"lat":47.0932507,"lon":9.5227126},{"lat":47.0937042,"lon":9.5228515},{"lat":47.0942276,"lon":9.5229051},{"lat":47.0952664,"lon":9.5228818},{"lat":47.0977789,"lon":9.5227616},{"lat":47.099374,"lon":9.5227015},{"lat":47.1022617,"lon":9.5225486},{"lat":47.1054935,"lon":9.5224072},{"lat":47.1063756,"lon":9.5223643},{"lat":47.1077251,"lon":9.5223042},{"lat":47.1093432,"lon":9.5222269},{"lat":47.1100676,"lon":9.5222098},{"lat":47.1112009,"lon":9.5221325},{"lat":47.1121472,"lon":9.5220982},{"lat":47.1126145,"lon":9.5220381},{"lat":47.1142675,"lon":9.5220038},{"lat":47.1147173,"lon":9.521978},{"lat":47.1161483,"lon":9.5218836},{"lat":47.1170537,"lon":9.5218664},{"lat":47.1178831,"lon":9.5218064},{"lat":47.1188526,"lon":9.5217291},{"lat":47.119752,"lon":9.5216604},{"lat":47.1204821,"lon":9.5216433},{"lat":47.1209669,"lon":9.5215574},{"lat":47.1217845,"lon":9.5213515},{"lat":47.1227598,"lon":9.5210768},{"lat":47.12436,"lon":9.5204159},{"lat":47.1255222,"lon":9.5199696},{"lat":47.126766,"lon":9.5194546},{"lat":47.1278113,"lon":9.5190426},{"lat":47.1297501,"lon":9.518253},{"lat":47.1317705,"lon":9.5174204},{"lat":47.1329712,"lon":9.5169111},{"lat":47.1335163,"lon":9.5166908},{"lat":47.1337207,"lon":9.5166308},{"lat":47.13382,"lon":9.5165879},{"lat":47.1339367,"lon":9.5165192},{"lat":47.1340477,"lon":9.5164677},{"lat":47.1341586,"lon":9.5164334},{"lat":47.134252,"lon":9.5164076},{"lat":47.134363,"lon":9.5163647},{"lat":47.1344506,"lon":9.5163389},{"lat":47.134509,"lon":9.5162531},{"lat":47.1346141,"lon":9.5162274},{"lat":47.1346958,"lon":9.5162359},{"lat":47.1350286,"lon":9.51609},{"lat":47.135122,"lon":9.5160042},{"lat":47.1352096,"lon":9.5160042},{"lat":47.1354724,"lon":9.515884},{"lat":47.13563,"lon":9.5158583},{"lat":47.1358986,"lon":9.515721},{"lat":47.1362489,"lon":9.5155836},{"lat":47.1365117,"lon":9.5154806},{"lat":47.1370488,"lon":9.5152146},{"lat":47.1374575,"lon":9.515},{"lat":47.1388354,"lon":9.5144335},{"lat":47.1398162,"lon":9.5139271},{"lat":47.1422099,"lon":9.5127512},{"lat":47.1432685,"lon":9.5122261},{"lat":47.1436635,"lon":9.5120302},{"lat":47.1452281,"lon":9.5112749},{"lat":47.1455771,"lon":9.5110965},{"lat":47.1461854,"lon":9.5107857},{"lat":47.146454,"lon":9.5105625},{"lat":47.1480243,"lon":9.5086914},{"lat":47.1497054,"lon":9.5066658},{"lat":47.1503008,"lon":9.5059363},{"lat":47.1513865,"lon":9.5046316},{"lat":47.1523029,"lon":9.5035502},{"lat":47.1530208,"lon":9.5027605},{"lat":47.1534341,"lon":9.5022336},{"lat":47.154696,"lon":9.5009152},{"lat":47.1552038,"lon":9.5004345},{"lat":47.1560793,"lon":9.4995419},{"lat":47.1571707,"lon":9.4985892},{"lat":47.1578944,"lon":9.4979025},{"lat":47.1587231,"lon":9.4972416},{"lat":47.159902,"lon":9.4963747},{"lat":47.1611276,"lon":9.4955851},{"lat":47.1619096,"lon":9.4951988},{"lat":47.1627266,"lon":9.4949328},{"lat":47.1634619,"lon":9.4947954},{"lat":47.1642323,"lon":9.4946324},{"lat":47.1663097,"lon":9.4942375},{"lat":47.1682528,"lon":9.4938685},{"lat":47.1690289,"lon":9.4937226},{"lat":47.1705869,"lon":9.4934393},{"lat":47.173691,"lon":9.4928471},{"lat":47.1749862,"lon":9.4925982},{"lat":47.176649,"lon":9.4926754},{"lat":47.1773666,"lon":9.4928471},{"lat":47.1781076,"lon":9.4930617},{"lat":47.1806337,"lon":9.4937311},{"lat":47.1815962,"lon":9.4940487},{"lat":47.1830371,"lon":9.4948641},{"lat":47.1841338,"lon":9.4954907},{"lat":47.1843602,"lon":9.4955881},{"lat":47.1852713,"lon":9.4959799},{"lat":47.1886371,"lon":9.49707},{"lat":47.1904664,"lon":9.497716},{"lat":47.193449,"lon":9.4987694},{"lat":47.1970941,"lon":9.4997135},{"lat":47.2008557,"lon":9.5006148},{"lat":47.2032174,"lon":9.5011727},{"lat":47.2057248,"lon":9.5017735},{"lat":47.2078823,"lon":9.502031},{"lat":47.20934,"lon":9.5021168},{"lat":47.2104835,"lon":9.5019249},{"lat":47.2109526,"lon":9.5018462},{"lat":47.2113683,"lon":9.501779},{"lat":47.2118241,"lon":9.5017751},{"lat":47.2121634,"lon":9.5018108},{"lat":47.2125785,"lon":9.5019243},{"lat":47.2130008,"lon":9.5021241},{"lat":47.2134042,"lon":9.5023124},{"lat":47.2137359,"lon":9.5024433},{"lat":47.2145581,"lon":9.5028034},{"lat":47.2154326,"lon":9.5029751},{"lat":47.2163946,"lon":9.5030609},{"lat":47.2181435,"lon":9.5032326},{"lat":47.219018,"lon":9.5032326},{"lat":47.2193386,"lon":9.5033184},{"lat":47.219805,"lon":9.5034472},{"lat":47.2201547,"lon":9.5036618},{"lat":47.2206794,"lon":9.5039622},{"lat":47.221204,"lon":9.5042626},{"lat":47.2228654,"lon":9.5054213},{"lat":47.2241186,"lon":9.5062796},{"lat":47.225401,"lon":9.5072237},{"lat":47.2267999,"lon":9.5085112},{"lat":47.2291897,"lon":9.510614},{"lat":47.2364748,"lon":9.5168797},{"lat":47.2394928,"lon":9.5195367},{"lat":47.241114,"lon":9.5209164},{"lat":47.2417077,"lon":9.5213405},{"lat":47.2422684,"lon":9.5216999},{"lat":47.2428578,"lon":9.5220588},{"lat":47.2439036,"lon":9.5225991},{"lat":47.2459294,"lon":9.5236815},{"lat":47.2468676,"lon":9.5241693},{"lat":47.2501972,"lon":9.5259777},{"lat":47.2524693,"lon":9.5272223},{"lat":47.2533141,"lon":9.5276943},{"lat":47.2557676,"lon":9.5288584},{"lat":47.2572583,"lon":9.5295836},{"lat":47.2581903,"lon":9.5301405},{"lat":47.2587027,"lon":9.5304838},{"lat":47.2600704,"lon":9.5311273},{"lat":47.260392,"lon":9.5311705},{"lat":47.2605959,"lon":9.5309559},{"lat":47.2607997,"lon":9.5309559},{"lat":47.2610327,"lon":9.5312563},{"lat":47.2615861,"lon":9.5316855},{"lat":47.2623142,"lon":9.5319859},{"lat":47.2626637,"lon":9.5323292},{"lat":47.2632462,"lon":9.5323292},{"lat":47.2637413,"lon":9.5319},{"lat":47.2642514,"lon":9.5310217},{"lat":47.2646025,"lon":9.5304171}]},{"type":"way","id":5744,"tags":{"highway":"residential","name":"Gamslafina","oneway":"no"},"nodes":[13729,13730],"geometry":[{"lat":47.0658941,"lon":9.5097766},{"lat":47.0657173,"lon":9.5090382}]},{"type":"way","id":5745,"tags":{"highway":"secondary","name":"Neue Churer Strasse","ref":"414"},"nodes":[25162,637,638,24793,24747,639,24819,24776,640,24754,24846,24826,10030,13671,862,25166,863,24840,25351,24995,864,25305,13707,524],"geometry":[{"lat":47.0546568,"lon":9.5112773},{"lat":47.0553103,"lon":9.5115172},{"lat":47.0565752,"lon":9.5119213},{"lat":47.0568223,"lon":9.5119725},{"lat":47.0571401,"lon":9.5120154},{"lat":47.0575134,"lon":9.5120249},{"lat":47.0578801,"lon":9.5120165},{"lat":47.0581932,"lon":9.5119815},{"lat":47.0584454,"lon":9.5119259},{"lat":47.0587409,"lon":9.511829},{"lat":47.0589891,"lon":9.5117254},{"lat":47.0592777,"lon":9.5115766},{"lat":47.0595684,"lon":9.511407},{"lat":47.0602901,"lon":9.5109237},{"lat":47.0607824,"lon":9.51057},{"lat":47.0610698,"lon":9.5103812},{"lat":47.0625634,"lon":9.5093999},{"lat":47.0627228,"lon":9.5093139},{"lat":47.0628231,"lon":9.5092475},{"lat":47.0633307,"lon":9.5089111},{"lat":47.0644048,"lon":9.5081998},{"lat":47.0645847,"lon":9.5080839},{"lat":47.0647562,"lon":9.5079734},{"lat":47.0652024,"lon":9.507682}]},{"type":"way","id":5746,"tags":{"highway":"footway"},"nodes":[56016,41076,41074,41077,41075],"geometry":[{"lat":47.0674403,"lon":9.5015215},{"lat":47.0674744,"lon":9.5016016},{"lat":47.0678442,"lon":9.5021662},{"lat":47.0680613,"lon":9.5025621},{"lat":47.0682031,"lon":9.5028355}]},{"type":"way","id":5747,"tags":{"highway":"residential","name":"Schliessa","oneway":"no"},"nodes":[56020,56022,56018,56023,56025,56019,56024,56021],"geometry":[{"lat":47.0676529,"lon":9.4983878},{"lat":47.0680044,"lon":9.4981349},{"lat":47.0681213,"lon":9.498092},{"lat":47.068231,"lon":9.4981671},{"lat":47.0684867,"lon":9.498843},{"lat":47.0687279,"lon":9.499476},{"lat":47.0689398,"lon":9.5000876},{"lat":47.0692251,"lon":9.5008506}]},{"type":"way","id":6005,"tags":{"highway":"footway"},"nodes":[58239,58240,25362],"geometry":[{"lat":47.0631372,"lon":9.5016731},{"lat":47.0631939,"lon":9.5018384},{"lat":47.0632259,"lon":9.5019427}]},{"type":"way","id":7117,"tags":{"access":"yes","highway":"track","motorcar":"no","motorcycle":"no","mtb:scale":"0","surface":"gravel","tracktype":"grade2","width":"2"},"nodes":[65662,17792,17790,17791,17788,17789,17786,17787,17784,17785,17794,17793,17796,17795,17764,17763,17765,17762,17759,17758,17761,17760,17756,17755,17757,17775,17771,17772,17773,17774,17767,17768,17769,17770,17766,17780,17781,17782,17776,17777,17778,17779,17783,17797,17798,17799,17800,17801,17802,17803,17804,17805,17806,17807,17808,17809,17810,17811,17812,17820,17822,17821,17824,17823,17826,17825,17828,17827,17829,17830,17832,17831,17834,17833,17835,17836,17837,17838,17841,17842,17839,17840,17845,17846,17843,17844,17815,17816,17813,17814,17819,17818,17817,17847,17851,17850,17849,17848,17855,17854,17853,17852,17864,17863,17862,17861,17857,17858,17859,17860,17856,17865,17866,17867,17870,17871,17872,17873,17868,17869,17874,17875,17880,17879,17882,17881,17877,17876,17878,18077,18071,18079,18081,18080,18078,17901,17903,17902,17904,17905,17899,17900,17908,17909,17906,17907,17911,17912,17910,17898,17896,17897,17894,17895,17920,17919,17918,17917,17916,17915,17914,17913,17921,17889,17888,17887,17886,17885,17884,17883,17891,17890,17892,17985,17987,17986,17988,17980,17977,17976,17979,17978,17982,17981,17984,17983,17989,17990,17991,17992,17993,17994,17995,17893,17922,17923,17924,17925,17926,17927,17928,17929,17930,17933,17932,18976,17931,17936,17935,17934,17943,17942,17941,17940,17939,18106,18105,18104,18103,18107,18116,18114,18115,18117,18118,18123,18124,18121,18122,18119,18120,18112,18113,18110,18111,18109,18108,18102,18101,18098,18097,18100,18099,18096,17937,17938,18061,18058,18057,18060,18059,18062,18063,18055,18056,18051,18052,18053,18054,18050,18040,18041,18979,18049,18047,18048,18042,18043,18046,18045,18044,18001,18000,17999,17998,17997,17996,18027,18026,18025,18024,18023,18022,18021,18010,18011,18008,18009,18006,18007,18004,18005,18002,18003,17966,17967,17964,17965,17962,17963,17944,17945,17958,17959,17956,17957,17952,17953,17950,17951,17948,17949,17946,17947,17954,17955,17961,17960,17975,17974,17973,17972,17971,17970,17969,17968,18016,18015,18014,18013,18012,18020,18017,18018,18019,18033,18029,18030,18031,18032,18028,18037,18038,18039,18034,18035,18036,18064,18067,18066,18069,18068,18065,18070],"geometry":[{"lat":47.0518972,"lon":9.5192576},{"lat":47.0519333,"lon":9.5192013},{"lat":47.0519486,"lon":9.5191784},{"lat":47.0520172,"lon":9.5189695},{"lat":47.0520248,"lon":9.5189218},{"lat":47.0520439,"lon":9.5188036},{"lat":47.0520477,"lon":9.5187865},{"lat":47.0520477,"lon":9.5187006},{"lat":47.0520439,"lon":9.5186663},{"lat":47.0520401,"lon":9.5186262},{"lat":47.0519486,"lon":9.5185747},{"lat":47.0519333,"lon":9.5185719},{"lat":47.0518074,"lon":9.518526},{"lat":47.0517197,"lon":9.5184831},{"lat":47.0515861,"lon":9.518425},{"lat":47.0515366,"lon":9.5183773},{"lat":47.0514602,"lon":9.518301},{"lat":47.0513649,"lon":9.5182095},{"lat":47.0513267,"lon":9.5180798},{"lat":47.0513649,"lon":9.5179729},{"lat":47.0513726,"lon":9.5179672},{"lat":47.0513878,"lon":9.5179644},{"lat":47.0514755,"lon":9.5179949},{"lat":47.0515022,"lon":9.5179911},{"lat":47.0516281,"lon":9.5180073},{"lat":47.0517159,"lon":9.5180111},{"lat":47.0517769,"lon":9.5180263},{"lat":47.0518341,"lon":9.5180168},{"lat":47.0519523,"lon":9.5179787},{"lat":47.0520325,"lon":9.5179463},{"lat":47.0520706,"lon":9.5179291},{"lat":47.0521202,"lon":9.5179167},{"lat":47.0522423,"lon":9.5178909},{"lat":47.0523377,"lon":9.5179023},{"lat":47.0523719,"lon":9.5179234},{"lat":47.0524216,"lon":9.5179186},{"lat":47.0525131,"lon":9.5178986},{"lat":47.0526008,"lon":9.5178241},{"lat":47.0526542,"lon":9.5177641},{"lat":47.0527459,"lon":9.5177402},{"lat":47.0528221,"lon":9.5178184},{"lat":47.0529022,"lon":9.5178576},{"lat":47.0529823,"lon":9.5178633},{"lat":47.0530701,"lon":9.5178489},{"lat":47.0531655,"lon":9.5178318},{"lat":47.0532722,"lon":9.5177078},{"lat":47.053379,"lon":9.5175753},{"lat":47.0534706,"lon":9.5174742},{"lat":47.0535698,"lon":9.5173703},{"lat":47.0536384,"lon":9.5173292},{"lat":47.0536804,"lon":9.5173149},{"lat":47.0537987,"lon":9.5173035},{"lat":47.0539055,"lon":9.517293},{"lat":47.0539894,"lon":9.517272},{"lat":47.0540733,"lon":9.5172224},{"lat":47.0541649,"lon":9.517169},{"lat":47.0542373,"lon":9.5171614},{"lat":47.0543442,"lon":9.517169},{"lat":47.0544128,"lon":9.5171719},{"lat":47.0545349,"lon":9.5171862},{"lat":47.054615,"lon":9.5171957},{"lat":47.0546952,"lon":9.5172119},{"lat":47.0547257,"lon":9.5172224},{"lat":47.0548477,"lon":9.5172901},{"lat":47.0548897,"lon":9.5173092},{"lat":47.0548858,"lon":9.5173483},{"lat":47.0549546,"lon":9.517374},{"lat":47.0550346,"lon":9.5173921},{"lat":47.0550499,"lon":9.5173979},{"lat":47.0551644,"lon":9.5173874},{"lat":47.0551949,"lon":9.5173797},{"lat":47.0553054,"lon":9.5174217},{"lat":47.0554008,"lon":9.5174589},{"lat":47.0555153,"lon":9.51752},{"lat":47.0556297,"lon":9.5175677},{"lat":47.0557823,"lon":9.5175724},{"lat":47.0559044,"lon":9.517539},{"lat":47.0559425,"lon":9.5175161},{"lat":47.0560303,"lon":9.5174389},{"lat":47.0561562,"lon":9.5173579},{"lat":47.0562134,"lon":9.5173244},{"lat":47.0563202,"lon":9.5172758},{"lat":47.0563736,"lon":9.5172539},{"lat":47.0564918,"lon":9.5172062},{"lat":47.0566216,"lon":9.5170841},{"lat":47.0567055,"lon":9.5169764},{"lat":47.0567703,"lon":9.5168686},{"lat":47.0568046,"lon":9.5167923},{"lat":47.0568695,"lon":9.5167207},{"lat":47.0569534,"lon":9.5166225},{"lat":47.0570069,"lon":9.5165682},{"lat":47.0570679,"lon":9.5165138},{"lat":47.0571327,"lon":9.5164375},{"lat":47.057209,"lon":9.5163612},{"lat":47.0572815,"lon":9.516285},{"lat":47.0573235,"lon":9.516243},{"lat":47.0574226,"lon":9.5161934},{"lat":47.0574684,"lon":9.51618},{"lat":47.057518,"lon":9.5161514},{"lat":47.0576324,"lon":9.5160837},{"lat":47.0577164,"lon":9.5159846},{"lat":47.0578003,"lon":9.5159092},{"lat":47.0578804,"lon":9.5158949},{"lat":47.0579529,"lon":9.5159302},{"lat":47.0580215,"lon":9.516017},{"lat":47.0580902,"lon":9.5160799},{"lat":47.0581665,"lon":9.5161228},{"lat":47.0582619,"lon":9.5161667},{"lat":47.0583267,"lon":9.51618},{"lat":47.0584031,"lon":9.5162039},{"lat":47.0585022,"lon":9.5162439},{"lat":47.0586052,"lon":9.5162783},{"lat":47.0587044,"lon":9.5162783},{"lat":47.0587693,"lon":9.5162458},{"lat":47.0588379,"lon":9.5162353},{"lat":47.0589333,"lon":9.5162182},{"lat":47.0589599,"lon":9.5162239},{"lat":47.0590782,"lon":9.5162268},{"lat":47.0591774,"lon":9.5162983},{"lat":47.059246,"lon":9.5163364},{"lat":47.0592728,"lon":9.5163508},{"lat":47.0593414,"lon":9.5163822},{"lat":47.0593987,"lon":9.5164061},{"lat":47.0595093,"lon":9.5164432},{"lat":47.0595894,"lon":9.5164928},{"lat":47.0596618,"lon":9.5165462},{"lat":47.0597267,"lon":9.5165978},{"lat":47.0598297,"lon":9.5166712},{"lat":47.0599213,"lon":9.5167446},{"lat":47.0599713,"lon":9.5167944},{"lat":47.0600357,"lon":9.5168819},{"lat":47.060112,"lon":9.5169973},{"lat":47.0601158,"lon":9.517088},{"lat":47.0600624,"lon":9.5171089},{"lat":47.0599747,"lon":9.5170927},{"lat":47.0598869,"lon":9.5170631},{"lat":47.0597954,"lon":9.5170927},{"lat":47.0597649,"lon":9.5171137},{"lat":47.0596847,"lon":9.5172186},{"lat":47.0596313,"lon":9.5173273},{"lat":47.0595551,"lon":9.5174951},{"lat":47.0595474,"lon":9.5175114},{"lat":47.0594826,"lon":9.5176067},{"lat":47.0594635,"lon":9.5176315},{"lat":47.0594329,"lon":9.5176888},{"lat":47.0593834,"lon":9.5177402},{"lat":47.05933,"lon":9.5177888},{"lat":47.059288,"lon":9.5178489},{"lat":47.0592614,"lon":9.5178909},{"lat":47.0592117,"lon":9.5179882},{"lat":47.0591889,"lon":9.5180311},{"lat":47.0591507,"lon":9.5180864},{"lat":47.0591087,"lon":9.5181722},{"lat":47.0590667,"lon":9.5182524},{"lat":47.0590325,"lon":9.5183363},{"lat":47.0590096,"lon":9.5183926},{"lat":47.0589599,"lon":9.5185013},{"lat":47.0588837,"lon":9.5186234},{"lat":47.0588303,"lon":9.5186948},{"lat":47.0587616,"lon":9.5187817},{"lat":47.0586929,"lon":9.5188656},{"lat":47.0586281,"lon":9.5189438},{"lat":47.0585976,"lon":9.5189839},{"lat":47.0585441,"lon":9.5190573},{"lat":47.0584984,"lon":9.5191192},{"lat":47.058445,"lon":9.5191775},{"lat":47.0584031,"lon":9.519247},{"lat":47.0583496,"lon":9.5193157},{"lat":47.0583191,"lon":9.5193662},{"lat":47.0582657,"lon":9.5194397},{"lat":47.0582085,"lon":9.5195112},{"lat":47.0581779,"lon":9.5195532},{"lat":47.0581093,"lon":9.5196161},{"lat":47.058052,"lon":9.5196581},{"lat":47.0580139,"lon":9.5196943},{"lat":47.0579452,"lon":9.5197506},{"lat":47.0578995,"lon":9.5197925},{"lat":47.0578079,"lon":9.519867},{"lat":47.0577659,"lon":9.5199127},{"lat":47.0577583,"lon":9.5199728},{"lat":47.0577927,"lon":9.5199919},{"lat":47.0578651,"lon":9.519927},{"lat":47.0579452,"lon":9.5198784},{"lat":47.0580406,"lon":9.5198402},{"lat":47.0580979,"lon":9.5198202},{"lat":47.0581131,"lon":9.5198212},{"lat":47.0581894,"lon":9.5198002},{"lat":47.0582313,"lon":9.5197858},{"lat":47.0582619,"lon":9.5197744},{"lat":47.0583191,"lon":9.5197459},{"lat":47.0583687,"lon":9.5197191},{"lat":47.0583992,"lon":9.5197001},{"lat":47.0584526,"lon":9.5196657},{"lat":47.0585365,"lon":9.5195951},{"lat":47.0586129,"lon":9.5195475},{"lat":47.058651,"lon":9.5195351},{"lat":47.058731,"lon":9.5195074},{"lat":47.0587807,"lon":9.5194941},{"lat":47.0588837,"lon":9.5194884},{"lat":47.0589562,"lon":9.5194988},{"lat":47.0590439,"lon":9.5195284},{"lat":47.0590744,"lon":9.5195313},{"lat":47.0591736,"lon":9.5195284},{"lat":47.0592575,"lon":9.5195102},{"lat":47.0593224,"lon":9.5194902},{"lat":47.0593523,"lon":9.5194658},{"lat":47.0594101,"lon":9.5194187},{"lat":47.0594864,"lon":9.5193462},{"lat":47.0595207,"lon":9.5193138},{"lat":47.0595588,"lon":9.5192947},{"lat":47.0596504,"lon":9.5192623},{"lat":47.0597076,"lon":9.5192289},{"lat":47.0597687,"lon":9.5192004},{"lat":47.0598374,"lon":9.5191517},{"lat":47.0598755,"lon":9.5191288},{"lat":47.059948,"lon":9.5190658},{"lat":47.0600243,"lon":9.5190516},{"lat":47.0601349,"lon":9.5190887},{"lat":47.0602226,"lon":9.5191098},{"lat":47.0602493,"lon":9.5191107},{"lat":47.060318,"lon":9.5190859},{"lat":47.0603256,"lon":9.5190811},{"lat":47.0603829,"lon":9.5190544},{"lat":47.0604591,"lon":9.5190468},{"lat":47.0605545,"lon":9.5190486},{"lat":47.0606575,"lon":9.5190506},{"lat":47.0607605,"lon":9.5190316},{"lat":47.0608139,"lon":9.519064},{"lat":47.0608062,"lon":9.5191736},{"lat":47.0607681,"lon":9.5191898},{"lat":47.0606652,"lon":9.5192165},{"lat":47.0605964,"lon":9.5192357},{"lat":47.0605469,"lon":9.5192566},{"lat":47.060543,"lon":9.5192604},{"lat":47.0605125,"lon":9.5192738},{"lat":47.0604591,"lon":9.51931},{"lat":47.0603752,"lon":9.5193786},{"lat":47.0602607,"lon":9.5194244},{"lat":47.0601959,"lon":9.5194521},{"lat":47.0601387,"lon":9.5194769},{"lat":47.0600814,"lon":9.5195008},{"lat":47.0600357,"lon":9.5195093},{"lat":47.0600319,"lon":9.5195112},{"lat":47.0599785,"lon":9.5195751},{"lat":47.0599136,"lon":9.5196419},{"lat":47.059906,"lon":9.5196524},{"lat":47.0598374,"lon":9.5197067},{"lat":47.059784,"lon":9.5197792},{"lat":47.0597496,"lon":9.5198221},{"lat":47.0597076,"lon":9.5198707},{"lat":47.0596618,"lon":9.5199156},{"lat":47.0596237,"lon":9.5199623},{"lat":47.0595971,"lon":9.5200005},{"lat":47.0595322,"lon":9.520052},{"lat":47.0594902,"lon":9.5200892},{"lat":47.0594444,"lon":9.5201245},{"lat":47.0593872,"lon":9.5201692},{"lat":47.0593376,"lon":9.5202036},{"lat":47.0593224,"lon":9.5202169},{"lat":47.0592651,"lon":9.5202474},{"lat":47.0592003,"lon":9.5202827},{"lat":47.0591278,"lon":9.5203114},{"lat":47.0591218,"lon":9.5203144},{"lat":47.0590553,"lon":9.5203476},{"lat":47.0590096,"lon":9.5203867},{"lat":47.0589599,"lon":9.5204258},{"lat":47.0588989,"lon":9.5204754},{"lat":47.0588227,"lon":9.5205288},{"lat":47.0587044,"lon":9.5206327},{"lat":47.0586357,"lon":9.5206861},{"lat":47.0585785,"lon":9.5207319},{"lat":47.058548,"lon":9.5207643},{"lat":47.0584984,"lon":9.5208111},{"lat":47.0584412,"lon":9.5208597},{"lat":47.0583725,"lon":9.5209074},{"lat":47.0583114,"lon":9.520956},{"lat":47.0582504,"lon":9.5210209},{"lat":47.0582085,"lon":9.5210628},{"lat":47.0581398,"lon":9.5211258},{"lat":47.0580788,"lon":9.5212021},{"lat":47.0580254,"lon":9.5212564},{"lat":47.0579796,"lon":9.5212956},{"lat":47.0579452,"lon":9.5213222},{"lat":47.0578918,"lon":9.5213604},{"lat":47.0578308,"lon":9.5214166},{"lat":47.0577393,"lon":9.5215063},{"lat":47.0576629,"lon":9.521554},{"lat":47.0576095,"lon":9.5215941},{"lat":47.0574913,"lon":9.5216408},{"lat":47.0574455,"lon":9.5216503},{"lat":47.0574265,"lon":9.5216494},{"lat":47.0573655,"lon":9.5216484},{"lat":47.0573158,"lon":9.5216351},{"lat":47.0572128,"lon":9.5216083},{"lat":47.0570832,"lon":9.5215826},{"lat":47.0570564,"lon":9.5215788},{"lat":47.0569191,"lon":9.5215654},{"lat":47.0568009,"lon":9.5215607},{"lat":47.0567017,"lon":9.5215893},{"lat":47.0565262,"lon":9.5216341},{"lat":47.0564537,"lon":9.5216589},{"lat":47.0564194,"lon":9.5216742},{"lat":47.0563355,"lon":9.521718},{"lat":47.0562935,"lon":9.5217276},{"lat":47.0562554,"lon":9.5217514},{"lat":47.0561867,"lon":9.5218124},{"lat":47.0561447,"lon":9.5218734},{"lat":47.0561142,"lon":9.5219174},{"lat":47.0560761,"lon":9.5219469},{"lat":47.0560188,"lon":9.5219841},{"lat":47.0559158,"lon":9.5220452},{"lat":47.0559311,"lon":9.5221091},{"lat":47.0560112,"lon":9.5220604},{"lat":47.0560951,"lon":9.5220117},{"lat":47.0562172,"lon":9.5219488},{"lat":47.0563278,"lon":9.5219211},{"lat":47.0563469,"lon":9.5219107},{"lat":47.0564194,"lon":9.5219097},{"lat":47.0565682,"lon":9.5219298},{"lat":47.0566558,"lon":9.5219317},{"lat":47.0567589,"lon":9.5219317},{"lat":47.0568657,"lon":9.5219393},{"lat":47.0569763,"lon":9.5219775},{"lat":47.0570564,"lon":9.5220222},{"lat":47.0571098,"lon":9.5220594},{"lat":47.0571785,"lon":9.5221091},{"lat":47.0572548,"lon":9.5221624},{"lat":47.0573006,"lon":9.5222091},{"lat":47.0573578,"lon":9.5222444},{"lat":47.0574494,"lon":9.5222779},{"lat":47.0575218,"lon":9.5222826},{"lat":47.0575753,"lon":9.5222607},{"lat":47.0576629,"lon":9.5222444},{"lat":47.0577469,"lon":9.5222178},{"lat":47.0578308,"lon":9.5221892},{"lat":47.0578995,"lon":9.5221653},{"lat":47.0579491,"lon":9.5221529},{"lat":47.058033,"lon":9.5221176},{"lat":47.0580826,"lon":9.5220966},{"lat":47.0581665,"lon":9.5220557},{"lat":47.0581932,"lon":9.522048},{"lat":47.0582504,"lon":9.5220308},{"lat":47.0582924,"lon":9.5220184},{"lat":47.0583611,"lon":9.5220003},{"lat":47.0584526,"lon":9.5219688},{"lat":47.0584831,"lon":9.5219603},{"lat":47.0585327,"lon":9.521945},{"lat":47.058609,"lon":9.5219259},{"lat":47.0586586,"lon":9.5219059},{"lat":47.0587196,"lon":9.521864},{"lat":47.0587654,"lon":9.5218439},{"lat":47.0588532,"lon":9.5218182},{"lat":47.0588951,"lon":9.5218086},{"lat":47.0589294,"lon":9.5217542}]},{"type":"relation","id":45,"tags":{"admin_level":"8","bfs:BEZIRKSNR":"0","bfs:GEMFLAECHE":"1972","bfs:GEMNAME":"Balzers (LI)","bfs:KANTONSNR":"0","bfs:OBJECTID":"250150;249960;250144","bfs:OBJECTORIG":"BFS","bfs:OBJECTVAL":"7003","bfs:SEENR":"0","bfs:YEAROFCHAN":"2000","boundary":"administrative","name":"Balzers","source":"GG25 swisstopo 2010","source:url":"http://wiki.openstreetmap.org/wiki/DE:Grenzen_der_Schweiz","type":"multipolygon","wikipedia":"de:Balzers"},"members":[{"type":"way","ref":2525,"role":"outer","geometry":[{"lat":47.0517524,"lon":9.4757865},{"lat":47.051899,"lon":9.4764733},{"lat":47.0519466,"lon":9.4766963},{"lat":47.0521202,"lon":9.4768199},{"lat":47.0534591,"lon":9.4762706},{"lat":47.0546023,"lon":9.4768917},{"lat":47.0556553,"lon":9.4787954},{"lat":47.0553968,"lon":9.4797818},{"lat":47.055386,"lon":9.4800873},{"lat":47.0560746,"lon":9.4810537},{"lat":47.0561191,"lon":9.4822741},{"lat":47.0546803,"lon":9.481792},{"lat":47.0534339,"lon":9.4816713},{"lat":47.0525407,"lon":9.4818879},{"lat":47.0517712,"lon":9.4827217},{"lat":47.0492595,"lon":9.4843747},{"lat":47.0490919,"lon":9.4857484},{"lat":47.0527123,"lon":9.4883199},{"lat":47.0542556,"lon":9.4900752},{"lat":47.0549475,"lon":9.4903461},{"lat":47.0556421,"lon":9.4907689},{"lat":47.0562517,"lon":9.4913076},{"lat":47.05643,"lon":9.4924132},{"lat":47.0565165,"lon":9.4933243},{"lat":47.0541601,"lon":9.4973872},{"lat":47.0541548,"lon":9.4995322},{"lat":47.0548116,"lon":9.499336},{"lat":47.0559417,"lon":9.4997041},{"lat":47.0571275,"lon":9.4999962},{"lat":47.0568067,"lon":9.5006481},{"lat":47.056682,"lon":9.5015249},{"lat":47.0562259,"lon":9.5027639},{"lat":47.0568181,"lon":9.5120732},{"lat":47.0573392,"lon":9.5141386},{"lat":47.0585266,"lon":9.5153665},{"lat":47.0600894,"lon":9.5165385},{"lat":47.0630449,"lon":9.5305992}]},{"type":"way","ref":1761,"role":"outer","geometry":[{"lat":47.0517524,"lon":9.4757865},{"lat":47.0518315,"lon":9.4757514},{"lat":47.0597862,"lon":9.4724195},{"lat":47.0615162,"lon":9.4717767},{"lat":47.0627139,"lon":9.4717079},{"lat":47.0633104,"lon":9.4716736},{"lat":47.0642006,"lon":9.4718614},{"lat":47.0650283,"lon":9.4723774},{"lat":47.0657468,"lon":9.4731659},{"lat":47.0663892,"lon":9.4740884}]},{"type":"way","ref":1776,"role":"outer","geometry":[{"lat":47.0851435,"lon":9.5127623},{"lat":47.0851421,"lon":9.5127602},{"lat":47.073844,"lon":9.4922746},{"lat":47.0733144,"lon":9.4910979},{"lat":47.0719233,"lon":9.487619},{"lat":47.0683611,"lon":9.4784723},{"lat":47.066967,"lon":9.4750928},{"lat":47.0663892,"lon":9.4740884}]},{"type":"way","ref":1794,"role":"outer","geometry":[{"lat":47.0651482,"lon":9.5397528},{"lat":47.0654859,"lon":9.5397911},{"lat":47.0659684,"lon":9.5394808},{"lat":47.0662999,"lon":9.5395596},{"lat":47.0666561,"lon":9.5387835},{"lat":47.0668001,"lon":9.5382887},{"lat":47.0670357,"lon":9.5377053},{"lat":47.0673343,"lon":9.5371244},{"lat":47.0674175,"lon":9.5365087},{"lat":47.0676873,"lon":9.5365192},{"lat":47.0678707,"lon":9.5363289},{"lat":47.0680303,"lon":9.5359664},{"lat":47.0684679,"lon":9.5356542},{"lat":47.068854,"lon":9.5352084},{"lat":47.0692515,"lon":9.5346313},{"lat":47.0692611,"lon":9.5341049},{"lat":47.0700242,"lon":9.5342006},{"lat":47.0703874,"lon":9.5340173},{"lat":47.0707483,"lon":9.5339655},{"lat":47.0709497,"lon":9.5337758},{"lat":47.0715641,"lon":9.5336418},{"lat":47.0718044,"lon":9.5337829},{"lat":47.0721636,"lon":9.5338233},{"lat":47.0723495,"lon":9.5335013},{"lat":47.072718,"lon":9.5330284},{"lat":47.0731114,"lon":9.532675},{"lat":47.0734015,"lon":9.5325546},{"lat":47.0743635,"lon":9.5330927},{"lat":47.0747849,"lon":9.5331751},{"lat":47.0757656,"lon":9.5336744},{"lat":47.0760205,"lon":9.5335131},{"lat":47.0761152,"lon":9.5332534},{"lat":47.0762717,"lon":9.5330619},{"lat":47.0768466,"lon":9.5326234},{"lat":47.0772049,"lon":9.5262886},{"lat":47.0779859,"lon":9.525397},{"lat":47.0785398,"lon":9.5246283},{"lat":47.0790709,"lon":9.5241221},{"lat":47.0793089,"lon":9.5243948},{"lat":47.0796991,"lon":9.5252003},{"lat":47.0798388,"lon":9.5249423},{"lat":47.0809663,"lon":9.5238007},{"lat":47.0821281,"lon":9.5227526},{"lat":47.0826274,"lon":9.5225085},{"lat":47.0832315,"lon":9.5214518},{"lat":47.0836062,"lon":9.5206365},{"lat":47.0843331,"lon":9.5192552},{"lat":47.0845698,"lon":9.5186057},{"lat":47.08303,"lon":9.5171563},{"lat":47.0822689,"lon":9.5163599},{"lat":47.0821383,"lon":9.5162324},{"lat":47.0839992,"lon":9.5138411},{"lat":47.0851435,"lon":9.5127623}]},{"type":"way","ref":2523,"role":"outer","geometry":[{"lat":47.0630449,"lon":9.5305992},{"lat":47.0630069,"lon":9.5307865},{"lat":47.0630788,"lon":9.5313523},{"lat":47.0629483,"lon":9.5322106},{"lat":47.063267,"lon":9.533109},{"lat":47.0635734,"lon":9.5335797},{"lat":47.0638178,"lon":9.5341191},{"lat":47.0638779,"lon":9.5345349},{"lat":47.0642219,"lon":9.5352354},{"lat":47.0642145,"lon":9.536209},{"lat":47.0642744,"lon":9.5365071},{"lat":47.0646046,"lon":9.537458},{"lat":47.0647667,"lon":9.5385937},{"lat":47.0650047,"lon":9.5395114},{"lat":47.0651482,"lon":9.5397528}]},{"type":"way","ref":1746,"role":"outer","geometry":[{"lat":47.1560628,"lon":9.5845054},{"lat":47.1563451,"lon":9.5848069},{"lat":47.1565944,"lon":9.5849489},{"lat":47.1571344,"lon":9.5849441},{"lat":47.1571756,"lon":9.5851437},{"lat":47.1572626,"lon":9.5853055},{"lat":47.1575945,"lon":9.5853584},{"lat":47.1583698,"lon":9.586247},{"lat":47.1585184,"lon":9.5864772},{"lat":47.1585361,"lon":9.5869792},{"lat":47.1586847,"lon":9.5872094},{"lat":47.1590407,"lon":9.5874216},{"lat":47.1591748,"lon":9.5874666},{"lat":47.1595516,"lon":9.5880094},{"lat":47.1597727,"lon":9.5882162},{"lat":47.1600068,"lon":9.5886873},{"lat":47.1602124,"lon":9.5887615},{"lat":47.1605271,"lon":9.5887742},{"lat":47.1607094,"lon":9.5886496},{"lat":47.1608936,"lon":9.5884195},{"lat":47.1609386,"lon":9.5884213},{"lat":47.1611295,"lon":9.5887984},{"lat":47.161666,"lon":9.5889783},{"lat":47.162107,"lon":9.5894578},{"lat":47.1621937,"lon":9.5896327},{"lat":47.1624,"lon":9.5896674},{"lat":47.16248,"lon":9.5901984},{"lat":47.1628058,"lon":9.5905809},{"lat":47.1631618,"lon":9.5907931},{"lat":47.1638781,"lon":9.5909802},{"lat":47.1643547,"lon":9.5909994},{"lat":47.1644871,"lon":9.5911367},{"lat":47.164615,"lon":9.5915112}]},{"type":"way","ref":1752,"role":"outer","geometry":[{"lat":47.164615,"lon":9.5915112},{"lat":47.1643324,"lon":9.5921859},{"lat":47.1629415,"lon":9.5967871},{"lat":47.1615287,"lon":9.597746},{"lat":47.1605334,"lon":9.5989986},{"lat":47.1590433,"lon":9.6007194},{"lat":47.1587249,"lon":9.6009044},{"lat":47.1581874,"lon":9.6007772},{"lat":47.1575573,"lon":9.6007913},{"lat":47.1569978,"lon":9.6003993},{"lat":47.1568012,"lon":9.6003254},{"lat":47.1565482,"lon":9.6003811},{"lat":47.1564341,"lon":9.6007063},{"lat":47.1561329,"lon":9.6009316},{"lat":47.1558378,"lon":9.6013154},{"lat":47.1556505,"lon":9.6017036},{"lat":47.1555994,"lon":9.6020313},{"lat":47.1552372,"lon":9.6021485},{"lat":47.1544181,"lon":9.6026431},{"lat":47.1540967,"lon":9.6029862},{"lat":47.1537543,"lon":9.6030119},{"lat":47.1533504,"lon":9.602956},{"lat":47.1530145,"lon":9.6031139},{"lat":47.1526499,"lon":9.603363},{"lat":47.1523539,"lon":9.6033114},{"lat":47.1520242,"lon":9.6031398},{"lat":47.1516425,"lon":9.6028605},{"lat":47.1511208,"lon":9.6033275},{"lat":47.1497848,"lon":9.6049881},{"lat":47.1492988,"lon":9.6054697},{"lat":47.1490436,"lon":9.6061188},{"lat":47.1483132,"lon":9.6076324},{"lat":47.148058,"lon":9.6082815},{"lat":47.1477494,"lon":9.6089021},{"lat":47.1474955,"lon":9.610435},{"lat":47.1473474,"lon":9.611128},{"lat":47.1474661,"lon":9.6119901},{"lat":47.1475268,"lon":9.6135358},{"lat":47.1475875,"lon":9.6141317},{"lat":47.1478436,"lon":9.6148676},{"lat":47.1487107,"lon":9.6165911},{"lat":47.149455,"lon":9.6176766},{"lat":47.1496865,"lon":9.6182796},{"lat":47.1498109,"lon":9.6188387},{"lat":47.1501988,"lon":9.6187885},{"lat":47.1504408,"lon":9.6188379},{"lat":47.1507013,"lon":9.6193366},{"lat":47.1514086,"lon":9.6199986},{"lat":47.1516259,"lon":9.6204031},{"lat":47.1516392,"lon":9.6205943}]},{"type":"way","ref":1818,"role":"outer","geometry":[{"lat":47.1516392,"lon":9.6205943},{"lat":47.1515479,"lon":9.6211914},{"lat":47.1512202,"lon":9.6218639},{"lat":47.1505084,"lon":9.6214392},{"lat":47.1502387,"lon":9.6214282},{"lat":47.1500089,"lon":9.6216826},{"lat":47.1495523,"lon":9.6220333},{"lat":47.1487738,"lon":9.6227533},{"lat":47.1483839,"lon":9.6229089},{"lat":47.148005,"lon":9.6229593},{"lat":47.1476578,"lon":9.6232353},{"lat":47.1473239,"lon":9.6232877},{"lat":47.1470966,"lon":9.6234103},{"lat":47.1470164,"lon":9.6238422},{"lat":47.146698,"lon":9.6240271},{"lat":47.1464265,"lon":9.6241083},{"lat":47.1461972,"lon":9.6243363},{"lat":47.1460086,"lon":9.6247903},{"lat":47.1458981,"lon":9.6258673},{"lat":47.1427438,"lon":9.6237601},{"lat":47.1425253,"lon":9.6234214},{"lat":47.1418964,"lon":9.6233694},{"lat":47.1416791,"lon":9.6229649},{"lat":47.1413535,"lon":9.6225823},{"lat":47.141083,"lon":9.6226108},{"lat":47.1407795,"lon":9.6229545},{"lat":47.1386609,"lon":9.6245824},{"lat":47.1384723,"lon":9.6250363},{"lat":47.138027,"lon":9.6247939},{"lat":47.1376798,"lon":9.6250698},{"lat":47.1356031,"lon":9.6244971},{"lat":47.1349775,"lon":9.6242737},{"lat":47.134724,"lon":9.6243557},{"lat":47.1342669,"lon":9.6247326},{"lat":47.1337729,"lon":9.624686},{"lat":47.1335001,"lon":9.6248331},{"lat":47.1326485,"lon":9.6246665},{"lat":47.1321444,"lon":9.6251469},{"lat":47.1317755,"lon":9.6256197},{"lat":47.131427,"lon":9.6264362},{"lat":47.1310627,"lon":9.627608},{"lat":47.1308094,"lon":9.6281514},{"lat":47.1306663,"lon":9.6285807},{"lat":47.1306205,"lon":9.6295677},{"lat":47.1304596,"lon":9.629983},{"lat":47.1299705,"lon":9.6306223},{"lat":47.1294609,"lon":9.6313925},{"lat":47.1291156,"lon":9.6320376},{"lat":47.1286707,"lon":9.6327182},{"lat":47.1280149,"lon":9.6340757},{"lat":47.1282124,"lon":9.6345716},{"lat":47.1281316,"lon":9.6350298},{"lat":47.1269687,"lon":9.6337295},{"lat":47.1264972,"lon":9.6334465},{"lat":47.1250686,"lon":9.6328606},{"lat":47.1247133,"lon":9.6326219},{"lat":47.1244086,"lon":9.632082},{"lat":47.1236203,"lon":9.6309555},{"lat":47.1231183,"lon":9.6303812},{"lat":47.1216018,"lon":9.6282758},{"lat":47.1213353,"lon":9.6280935},{"lat":47.1207904,"lon":9.627412},{"lat":47.1205911,"lon":9.6270084},{"lat":47.1199992,"lon":9.6264305},{"lat":47.1198282,"lon":9.6259622},{"lat":47.1194735,"lon":9.625684},{"lat":47.1193624,"lon":9.6253763},{"lat":47.1190103,"lon":9.6249664},{"lat":47.118028,"lon":9.6245704},{"lat":47.1176191,"lon":9.6247778}]},{"type":"way","ref":1759,"role":"outer","geometry":[{"lat":47.1280135,"lon":9.6104751},{"lat":47.1277775,"lon":9.6110588},{"lat":47.1276863,"lon":9.611121},{"lat":47.1274653,"lon":9.6109143},{"lat":47.1273082,"lon":9.6111321},{"lat":47.1270814,"lon":9.6112283},{"lat":47.1266431,"lon":9.6115665},{"lat":47.1259642,"lon":9.6117763},{"lat":47.1253731,"lon":9.6121082},{"lat":47.1247262,"lon":9.6120556},{"lat":47.1244307,"lon":9.6119777},{"lat":47.1242317,"lon":9.6120355},{"lat":47.1239762,"lon":9.6122229},{"lat":47.1238196,"lon":9.6124143},{"lat":47.123656,"lon":9.6124999},{"lat":47.1232963,"lon":9.6124853},{"lat":47.1228035,"lon":9.612373},{"lat":47.1223298,"lon":9.6126834},{"lat":47.1214015,"lon":9.6141881},{"lat":47.120893,"lon":9.6158548},{"lat":47.1202626,"lon":9.6173057},{"lat":47.1197566,"lon":9.6188406},{"lat":47.1182668,"lon":9.6228928},{"lat":47.1176191,"lon":9.6247778}]},{"type":"way","ref":1771,"role":"outer","geometry":[{"lat":47.1280135,"lon":9.6104751},{"lat":47.1281537,"lon":9.6104111},{"lat":47.1283584,"lon":9.6103177},{"lat":47.1284638,"lon":9.6104538},{"lat":47.1286923,"lon":9.6102653},{"lat":47.1288734,"lon":9.6102067},{"lat":47.1291424,"lon":9.6102572},{"lat":47.1297138,"lon":9.6100167},{"lat":47.1299893,"lon":9.6097246},{"lat":47.1305355,"lon":9.6093908},{"lat":47.13097,"lon":9.6087755},{"lat":47.131223,"lon":9.6087198},{"lat":47.1322738,"lon":9.6088284},{"lat":47.1324104,"lon":9.6087416},{"lat":47.1331604,"lon":9.6085742},{"lat":47.1334284,"lon":9.6086774},{"lat":47.1339409,"lon":9.6086982},{"lat":47.1341894,"lon":9.6088797},{"lat":47.1343443,"lon":9.6087805},{"lat":47.1348645,"lon":9.6088675},{"lat":47.1351368,"lon":9.6087467},{"lat":47.1353376,"lon":9.6085966},{"lat":47.1356874,"lon":9.6081756},{"lat":47.1360034,"lon":9.6081225},{"lat":47.1362953,"lon":9.6079101},{"lat":47.136577,"lon":9.6072886},{"lat":47.1369916,"lon":9.6067779},{"lat":47.1370852,"lon":9.6065839},{"lat":47.1373137,"lon":9.6063954},{"lat":47.1379006,"lon":9.6062873},{"lat":47.1379948,"lon":9.6060669},{"lat":47.1379825,"lon":9.6057631},{"lat":47.1381833,"lon":9.605613},{"lat":47.1382769,"lon":9.605419},{"lat":47.1382639,"lon":9.6051547},{"lat":47.1386335,"lon":9.6046422},{"lat":47.1390261,"lon":9.6038668},{"lat":47.1395612,"lon":9.6031632},{"lat":47.1399283,"lon":9.6027824},{"lat":47.1400701,"lon":9.6024189},{"lat":47.1403466,"lon":9.602074}]},{"type":"way","ref":1807,"role":"outer","geometry":[{"lat":47.1464412,"lon":9.5817455},{"lat":47.1465715,"lon":9.5829641},{"lat":47.1464771,"lon":9.5831977},{"lat":47.1463201,"lon":9.5834157},{"lat":47.1462445,"lon":9.5836105},{"lat":47.1463422,"lon":9.5846431},{"lat":47.1464255,"lon":9.5850026},{"lat":47.1463748,"lon":9.5853039},{"lat":47.145883,"lon":9.5861019},{"lat":47.1457413,"lon":9.5864655},{"lat":47.1454395,"lon":9.5881679},{"lat":47.1453242,"lon":9.5885589},{"lat":47.1452669,"lon":9.5892161},{"lat":47.1447485,"lon":9.5904745},{"lat":47.1443962,"lon":9.5910275},{"lat":47.1442829,"lon":9.591313},{"lat":47.1440998,"lon":9.5914771},{"lat":47.1440225,"lon":9.5917642},{"lat":47.143816,"lon":9.5922175},{"lat":47.1436681,"lon":9.5929105},{"lat":47.1434845,"lon":9.5931009},{"lat":47.1433454,"lon":9.5933195},{"lat":47.1432007,"lon":9.5938412},{"lat":47.1431606,"lon":9.5945386},{"lat":47.1430898,"lon":9.5949578},{"lat":47.1430799,"lon":9.5954849},{"lat":47.1431162,"lon":9.5959479},{"lat":47.1431987,"lon":9.5963469},{"lat":47.1431057,"lon":9.5974642},{"lat":47.1429622,"lon":9.59792},{"lat":47.1429215,"lon":9.5979748},{"lat":47.1423437,"lon":9.5987522},{"lat":47.1421336,"lon":9.5989152},{"lat":47.1420665,"lon":9.5991367},{"lat":47.1415294,"lon":9.5999458},{"lat":47.1413391,"lon":9.600492},{"lat":47.1411993,"lon":9.6007501},{"lat":47.1410432,"lon":9.6009153},{"lat":47.1410125,"lon":9.6011118},{"lat":47.1408722,"lon":9.6013963},{"lat":47.1405044,"lon":9.6018166},{"lat":47.1403466,"lon":9.602074}]},{"type":"way","ref":1740,"role":"outer","geometry":[{"lat":47.1560628,"lon":9.5845054},{"lat":47.1557729,"lon":9.5841244},{"lat":47.1555769,"lon":9.5840242},{"lat":47.1550794,"lon":9.5841626},{"lat":47.154719,"lon":9.5841877},{"lat":47.1544055,"lon":9.5841092},{"lat":47.1538015,"lon":9.5836892},{"lat":47.1536261,"lon":9.5834447},{"lat":47.1535865,"lon":9.583153},{"lat":47.1532379,"lon":9.5825454},{"lat":47.1529232,"lon":9.5825328},{"lat":47.1525999,"lon":9.5829815},{"lat":47.1523722,"lon":9.5831307},{"lat":47.1521024,"lon":9.5831199},{"lat":47.1514617,"lon":9.582738},{"lat":47.1511932,"lon":9.5826613},{"lat":47.1507112,"lon":9.5829322},{"lat":47.1504677,"lon":9.582962},{"lat":47.1502179,"lon":9.5828465},{"lat":47.1499801,"lon":9.5825731},{"lat":47.1496858,"lon":9.5824295},{"lat":47.1487704,"lon":9.5823004},{"lat":47.1483789,"lon":9.5825485},{"lat":47.1481961,"lon":9.5826995},{"lat":47.1480425,"lon":9.5827329},{"lat":47.1477334,"lon":9.5824172},{"lat":47.1473579,"lon":9.5818086},{"lat":47.1470918,"lon":9.5816001},{"lat":47.1465336,"lon":9.5816173},{"lat":47.1464412,"lon":9.5817455}]},{"type":"way","ref":1813,"role":"outer","geometry":[{"lat":47.0887059,"lon":9.5785133},{"lat":47.0876927,"lon":9.5763912},{"lat":47.0871254,"lon":9.5754464},{"lat":47.0870465,"lon":9.5748504},{"lat":47.0869615,"lon":9.5745835},{"lat":47.087286,"lon":9.5740695},{"lat":47.0876134,"lon":9.5733975},{"lat":47.0874392,"lon":9.5730875},{"lat":47.0874232,"lon":9.572494},{"lat":47.0875917,"lon":9.572145}]},{"type":"way","ref":1763,"role":"outer","geometry":[{"lat":47.0875917,"lon":9.572145},{"lat":47.0872838,"lon":9.5717639},{"lat":47.0868674,"lon":9.5709305},{"lat":47.0868562,"lon":9.5705612},{"lat":47.0867724,"lon":9.5702285},{"lat":47.086573,"lon":9.5698253},{"lat":47.0864328,"lon":9.5691347},{"lat":47.0862615,"lon":9.5686668},{"lat":47.0857894,"lon":9.5684109},{"lat":47.0855903,"lon":9.5684688},{"lat":47.0855527,"lon":9.5680721},{"lat":47.0856111,"lon":9.5673499},{"lat":47.085553,"lon":9.5665966},{"lat":47.0852721,"lon":9.5662166},{"lat":47.0851164,"lon":9.5658811},{"lat":47.0848705,"lon":9.5660426},{"lat":47.0846595,"lon":9.5662581},{"lat":47.0841409,"lon":9.5665669},{"lat":47.0838687,"lon":9.5666878},{"lat":47.0835732,"lon":9.5666102},{"lat":47.0827195,"lon":9.5665499},{"lat":47.0822674,"lon":9.5666637},{"lat":47.0817275,"lon":9.5666686},{"lat":47.0809931,"lon":9.5664814},{"lat":47.0807715,"lon":9.5663013},{"lat":47.0801567,"lon":9.5654865},{"lat":47.0799319,"lon":9.5654776},{"lat":47.0793752,"lon":9.5649286},{"lat":47.0791127,"lon":9.564523},{"lat":47.0780232,"lon":9.5650462},{"lat":47.0777319,"lon":9.5652322},{"lat":47.077639,"lon":9.5653866},{"lat":47.0774789,"lon":9.565288},{"lat":47.0774371,"lon":9.5651151},{"lat":47.0771899,"lon":9.5653424},{"lat":47.0769753,"lon":9.5657554},{"lat":47.0767264,"lon":9.5660748},{"lat":47.0763252,"lon":9.5668492},{"lat":47.0758646,"lon":9.5674236},{"lat":47.0754519,"lon":9.5678419},{"lat":47.0752917,"lon":9.5682307},{"lat":47.0751478,"lon":9.5687123},{"lat":47.0749828,"lon":9.5688769},{"lat":47.0743448,"lon":9.5693126},{"lat":47.0735691,"lon":9.5699008},{"lat":47.0733529,"lon":9.57088},{"lat":47.0733019,"lon":9.5712072},{"lat":47.0732595,"lon":9.5720353},{"lat":47.0733403,"lon":9.5725259},{"lat":47.0726203,"lon":9.5739855},{"lat":47.0723371,"lon":9.5746986},{"lat":47.0720109,"lon":9.5753046},{"lat":47.0718213,"lon":9.5758239},{"lat":47.0717857,"lon":9.5762834},{"lat":47.0720318,"lon":9.5765962},{"lat":47.0725554,"lon":9.5774732},{"lat":47.0731001,"lon":9.5781798},{"lat":47.0732301,"lon":9.5784484},{"lat":47.0733352,"lon":9.5790848},{"lat":47.0736114,"lon":9.5797149},{"lat":47.0737382,"lon":9.5801546},{"lat":47.0746503,"lon":9.5809418},{"lat":47.0748444,"lon":9.5811471},{"lat":47.0759518,"lon":9.5859332},{"lat":47.0769336,"lon":9.5849188},{"lat":47.0777102,"lon":9.5842913},{"lat":47.0788734,"lon":9.5836793},{"lat":47.0788592,"lon":9.5829938},{"lat":47.0788073,"lon":9.5823989},{"lat":47.0793517,"lon":9.5821573},{"lat":47.0812997,"lon":9.5814448},{"lat":47.0833844,"lon":9.5806324},{"lat":47.0842465,"lon":9.5802453},{"lat":47.0847172,"lon":9.5800929},{"lat":47.0857739,"lon":9.5789231},{"lat":47.0862578,"lon":9.5785472},{"lat":47.0865887,"lon":9.5786527},{"lat":47.0868111,"lon":9.5787933},{"lat":47.0870813,"lon":9.5787777},{"lat":47.0874675,"lon":9.5788195},{"lat":47.0877066,"lon":9.5790267},{"lat":47.0887059,"lon":9.5785133}]}]},{"type":"relation","id":50,"tags":{"admin_level":"6","boundary":"administrative","name":"Wahlkreis Oberland","type":"multipolygon"},"members":[{"type":"way","ref":2528,"role":"outer","geometry":[{"lat":47.0617744,"lon":9.603472},{"lat":47.0616625,"lon":9.6039595},{"lat":47.061546,"lon":9.6043277},{"lat":47.0614806,"lon":9.6047508},{"lat":47.0614002,"lon":9.6049137},{"lat":47.0612144,"lon":9.6050968},{"lat":47.0609985,"lon":9.6059867},{"lat":47.0607574,"lon":9.6066922},{"lat":47.0607725,"lon":9.6070544}]},{"type":"way","ref":2524,"role":"outer","geometry":[{"lat":47.0548518,"lon":9.588064},{"lat":47.0549278,"lon":9.588245},{"lat":47.0553103,"lon":9.5888523},{"lat":47.0557267,"lon":9.5891711},{"lat":47.0561932,"lon":9.590196},{"lat":47.0567987,"lon":9.5910319},{"lat":47.0569684,"lon":9.5914545},{"lat":47.057157,"lon":9.5916895},{"lat":47.057223,"lon":9.5926126},{"lat":47.0572225,"lon":9.5935599},{"lat":47.0572705,"lon":9.5937902},{"lat":47.0576411,"lon":9.5945191},{"lat":47.0579714,"lon":9.595382},{"lat":47.0581933,"lon":9.5956963},{"lat":47.0585051,"lon":9.5965464},{"lat":47.0587003,"lon":9.5974267},{"lat":47.05892,"lon":9.5978917},{"lat":47.0588742,"lon":9.5982979},{"lat":47.0589706,"lon":9.5997619},{"lat":47.0595396,"lon":9.6004413},{"lat":47.0598674,"lon":9.600952},{"lat":47.060411,"lon":9.6010458},{"lat":47.0609444,"lon":9.6015494},{"lat":47.0611786,"lon":9.6021796},{"lat":47.0614676,"lon":9.6026198},{"lat":47.0615748,"lon":9.6030101},{"lat":47.0617744,"lon":9.603472}]},{"type":"way","ref":2527,"role":"outer","geometry":[{"lat":47.0548518,"lon":9.588064},{"lat":47.0548086,"lon":9.5878171},{"lat":47.0547574,"lon":9.5870304},{"lat":47.0540138,"lon":9.5845576},{"lat":47.0537897,"lon":9.5836777},{"lat":47.053688,"lon":9.5834085},{"lat":47.0528248,"lon":9.5821757},{"lat":47.052704,"lon":9.5821595},{"lat":47.052716,"lon":9.5819948},{"lat":47.0527925,"lon":9.581804},{"lat":47.0527392,"lon":9.581578},{"lat":47.0527375,"lon":9.581161},{"lat":47.0528953,"lon":9.5801039},{"lat":47.0528226,"lon":9.5793365},{"lat":47.0530899,"lon":9.5788717},{"lat":47.0531766,"lon":9.57848},{"lat":47.0530809,"lon":9.5780749},{"lat":47.053258,"lon":9.5773605},{"lat":47.0532235,"lon":9.5768581},{"lat":47.053272,"lon":9.576013},{"lat":47.0530838,"lon":9.5755884},{"lat":47.0529651,"lon":9.5751763},{"lat":47.0526494,"lon":9.5736221},{"lat":47.0527638,"lon":9.5729162},{"lat":47.0521059,"lon":9.5720922},{"lat":47.0520824,"lon":9.5719941},{"lat":47.0520931,"lon":9.5716864},{"lat":47.0521967,"lon":9.5711374},{"lat":47.0521736,"lon":9.5705947},{"lat":47.0519456,"lon":9.5704016},{"lat":47.0518468,"lon":9.5694113},{"lat":47.0518132,"lon":9.5685645},{"lat":47.0514011,"lon":9.5671362},{"lat":47.0512096,"lon":9.5661089},{"lat":47.0508925,"lon":9.5652803},{"lat":47.0508387,"lon":9.5645747},{"lat":47.0504459,"lon":9.5640823},{"lat":47.0504044,"lon":9.5638776},{"lat":47.0498548,"lon":9.5631754},{"lat":47.0496197,"lon":9.5627645},{"lat":47.0494524,"lon":9.5623705},{"lat":47.0493681,"lon":9.5614519},{"lat":47.0492882,"lon":9.5611418},{"lat":47.0491835,"lon":9.5609217},{"lat":47.0489185,"lon":9.5605745},{"lat":47.0485724,"lon":9.5597869},{"lat":47.0484291,"lon":9.5589416},{"lat":47.0485165,"lon":9.5569197}]},{"type":"way","ref":2526,"role":"outer","geometry":[{"lat":47.0651482,"lon":9.5397528},{"lat":47.0649794,"lon":9.5399533},{"lat":47.0644884,"lon":9.5407951},{"lat":47.06431,"lon":9.5414676},{"lat":47.0640869,"lon":9.5418828},{"lat":47.0636781,"lon":9.5432038},{"lat":47.063114,"lon":9.5440309},{"lat":47.0629304,"lon":9.5442291},{"lat":47.0627318,"lon":9.544266},{"lat":47.06238,"lon":9.5446973},{"lat":47.0622942,"lon":9.5450653},{"lat":47.0620784,"lon":9.5456143},{"lat":47.0616574,"lon":9.5469985},{"lat":47.0615858,"lon":9.5475932},{"lat":47.061323,"lon":9.5480926},{"lat":47.0612431,"lon":9.5483903},{"lat":47.0610121,"lon":9.5488898},{"lat":47.0605617,"lon":9.5492358},{"lat":47.0599275,"lon":9.5499492},{"lat":47.0595056,"lon":9.5502572},{"lat":47.0593288,"lon":9.5504773},{"lat":47.0590927,"lon":9.5509369},{"lat":47.058843,"lon":9.5516187},{"lat":47.0585389,"lon":9.5517752},{"lat":47.0583828,"lon":9.5520811},{"lat":47.0578508,"lon":9.552465},{"lat":47.0573952,"lon":9.5530553},{"lat":47.0569836,"lon":9.5532726},{"lat":47.0547882,"lon":9.5533777},{"lat":47.0531722,"lon":9.5535632},{"lat":47.0530919,"lon":9.553492},{"lat":47.0523278,"lon":9.5536971},{"lat":47.0519761,"lon":9.5538993},{"lat":47.051648,"lon":9.5539391},{"lat":47.0515041,"lon":9.5541453},{"lat":47.0510172,"lon":9.5543879},{"lat":47.050507,"lon":9.5543856},{"lat":47.050261,"lon":9.5545504},{"lat":47.050308,"lon":9.5551631},{"lat":47.0501154,"lon":9.5555241},{"lat":47.0499962,"lon":9.5556486},{"lat":47.0497282,"lon":9.5557714},{"lat":47.0485165,"lon":9.5569197}]},{"type":"way","ref":2523,"role":"outer","geometry":[{"lat":47.0630449,"lon":9.5305992},{"lat":47.0630069,"lon":9.5307865},{"lat":47.0630788,"lon":9.5313523},{"lat":47.0629483,"lon":9.5322106},{"lat":47.063267,"lon":9.533109},{"lat":47.0635734,"lon":9.5335797},{"lat":47.0638178,"lon":9.5341191},{"lat":47.0638779,"lon":9.5345349},{"lat":47.0642219,"lon":9.5352354},{"lat":47.0642145,"lon":9.536209},{"lat":47.0642744,"lon":9.5365071},{"lat":47.0646046,"lon":9.537458},{"lat":47.0647667,"lon":9.5385937},{"lat":47.0650047,"lon":9.5395114},{"lat":47.0651482,"lon":9.5397528}]},{"type":"way","ref":2525,"role":"outer","geometry":[{"lat":47.0517524,"lon":9.4757865},{"lat":47.051899,"lon":9.4764733},{"lat":47.0519466,"lon":9.4766963},{"lat":47.0521202,"lon":9.4768199},{"lat":47.0534591,"lon":9.4762706},{"lat":47.0546023,"lon":9.4768917},{"lat":47.0556553,"lon":9.4787954},{"lat":47.0553968,"lon":9.4797818},{"lat":47.055386,"lon":9.4800873},{"lat":47.0560746,"lon":9.4810537},{"lat":47.0561191,"lon":9.4822741},{"lat":47.0546803,"lon":9.481792},{"lat":47.0534339,"lon":9.4816713},{"lat":47.0525407,"lon":9.4818879},{"lat":47.0517712,"lon":9.4827217},{"lat":47.0492595,"lon":9.4843747},{"lat":47.0490919,"lon":9.4857484},{"lat":47.0527123,"lon":9.4883199},{"lat":47.0542556,"lon":9.4900752},{"lat":47.0549475,"lon":9.4903461},{"lat":47.0556421,"lon":9.4907689},{"lat":47.0562517,"lon":9.4913076},{"lat":47.05643,"lon":9.4924132},{"lat":47.0565165,"lon":9.4933243},{"lat":47.0541601,"lon":9.4973872},{"lat":47.0541548,"lon":9.4995322},{"lat":47.0548116,"lon":9.499336},{"lat":47.0559417,"lon":9.4997041},{"lat":47.0571275,"lon":9.4999962},{"lat":47.0568067,"lon":9.5006481},{"lat":47.056682,"lon":9.5015249},{"lat":47.0562259,"lon":9.5027639},{"lat":47.0568181,"lon":9.5120732},{"lat":47.0573392,"lon":9.5141386},{"lat":47.0585266,"lon":9.5153665},{"lat":47.0600894,"lon":9.5165385},{"lat":47.0630449,"lon":9.5305992}]},{"type":"way","ref":1761,"role":"outer","geometry":[{"lat":47.0517524,"lon":9.4757865},{"lat":47.0518315,"lon":9.4757514},{"lat":47.0597862,"lon":9.4724195},{"lat":47.0615162,"lon":9.4717767},{"lat":47.0627139,"lon":9.4717079},{"lat":47.0633104,"lon":9.4716736},{"lat":47.0642006,"lon":9.4718614},{"lat":47.0650283,"lon":9.4723774},{"lat":47.0657468,"lon":9.4731659},{"lat":47.0663892,"lon":9.4740884}]},{"type":"way","ref":1776,"role":"outer","geometry":[{"lat":47.0851435,"lon":9.5127623},{"lat":47.0851421,"lon":9.5127602},{"lat":47.073844,"lon":9.4922746},{"lat":47.0733144,"lon":9.4910979},{"lat":47.0719233,"lon":9.487619},{"lat":47.0683611,"lon":9.4784723},{"lat":47.066967,"lon":9.4750928},{"lat":47.0663892,"lon":9.4740884}]},{"type":"way","ref":1756,"role":"outer","geometry":[{"lat":47.1150869,"lon":9.5164145},{"lat":47.1072705,"lon":9.5184438},{"lat":47.1055048,"lon":9.5188549},{"lat":47.1019263,"lon":9.5194486},{"lat":47.1001327,"lon":9.5196148},{"lat":47.0983373,"lon":9.5195806},{"lat":47.0965561,"lon":9.5193111},{"lat":47.0947891,"lon":9.5187523},{"lat":47.0878537,"lon":9.5156005},{"lat":47.0870694,"lon":9.5150879},{"lat":47.0863455,"lon":9.5144143},{"lat":47.0856362,"lon":9.5135292},{"lat":47.0851435,"lon":9.5127623}]},{"type":"way","ref":1810,"role":"outer","geometry":[{"lat":47.1219427,"lon":9.5145259},{"lat":47.1214443,"lon":9.5146535},{"lat":47.1150869,"lon":9.5164145}]},{"type":"way","ref":1758,"role":"outer","geometry":[{"lat":47.1468825,"lon":9.5026522},{"lat":47.1439003,"lon":9.5058302},{"lat":47.1423838,"lon":9.5072011},{"lat":47.1407276,"lon":9.5081841},{"lat":47.1324563,"lon":9.5116654},{"lat":47.1303024,"lon":9.5123851},{"lat":47.1219427,"lon":9.5145259}]},{"type":"way","ref":1801,"role":"outer","geometry":[{"lat":47.1569405,"lon":9.4950763},{"lat":47.1563504,"lon":9.4954629},{"lat":47.1497721,"lon":9.4997225},{"lat":47.1482714,"lon":9.501172},{"lat":47.1468825,"lon":9.5026522}]},{"type":"way","ref":1734,"role":"outer","geometry":[{"lat":47.1901944,"lon":9.4878765},{"lat":47.1862729,"lon":9.4868652},{"lat":47.1823578,"lon":9.485929},{"lat":47.1814434,"lon":9.4858412},{"lat":47.180525,"lon":9.4859776},{"lat":47.1688996,"lon":9.4893306},{"lat":47.1644987,"lon":9.4906624},{"lat":47.1629726,"lon":9.4912992},{"lat":47.159639,"lon":9.4933084},{"lat":47.1569405,"lon":9.4950763}]},{"type":"way","ref":1803,"role":"outer","geometry":[{"lat":47.1901944,"lon":9.4878765},{"lat":47.1898812,"lon":9.4901003},{"lat":47.1883799,"lon":9.4910326},{"lat":47.1878142,"lon":9.4914728},{"lat":47.1868278,"lon":9.4922929},{"lat":47.1869826,"lon":9.4926948},{"lat":47.1874192,"lon":9.4934375},{"lat":47.1888311,"lon":9.4959996},{"lat":47.1891202,"lon":9.4964331},{"lat":47.1895604,"lon":9.496978},{"lat":47.1899548,"lon":9.4975607},{"lat":47.1910157,"lon":9.498618},{"lat":47.1915888,"lon":9.4992736},{"lat":47.1924823,"lon":9.5006281},{"lat":47.1938291,"lon":9.5022905},{"lat":47.1942267,"lon":9.5027018},{"lat":47.1941032,"lon":9.5030667},{"lat":47.1940393,"lon":9.5041202}]},{"type":"way","ref":1811,"role":"outer","geometry":[{"lat":47.1938842,"lon":9.5077443},{"lat":47.1936899,"lon":9.5075388},{"lat":47.1937169,"lon":9.5070382},{"lat":47.1939753,"lon":9.5051738},{"lat":47.1940393,"lon":9.5041202}]},{"type":"way","ref":1808,"role":"outer","geometry":[{"lat":47.1931367,"lon":9.5157675},{"lat":47.1932086,"lon":9.5142787},{"lat":47.1934409,"lon":9.5123737},{"lat":47.1935501,"lon":9.5103055},{"lat":47.1936061,"lon":9.5081956},{"lat":47.1938842,"lon":9.5077443}]},{"type":"way","ref":1757,"role":"outer","geometry":[{"lat":47.1931367,"lon":9.5157675},{"lat":47.1930213,"lon":9.5171755},{"lat":47.1926992,"lon":9.5225486},{"lat":47.1925027,"lon":9.524455}]},{"type":"way","ref":1804,"role":"outer","geometry":[{"lat":47.1919334,"lon":9.5310327},{"lat":47.1919922,"lon":9.5302694},{"lat":47.1921809,"lon":9.5287984},{"lat":47.1925027,"lon":9.524455}]},{"type":"way","ref":1767,"role":"outer","geometry":[{"lat":47.1919334,"lon":9.5310327},{"lat":47.1918111,"lon":9.5318199}]},{"type":"way","ref":1791,"role":"outer","geometry":[{"lat":47.1918111,"lon":9.5318199},{"lat":47.1910203,"lon":9.5342309},{"lat":47.190684,"lon":9.5354057},{"lat":47.1916264,"lon":9.5355351},{"lat":47.1914476,"lon":9.5379437},{"lat":47.1913954,"lon":9.539816}]},{"type":"way","ref":1780,"role":"outer","geometry":[{"lat":47.1913954,"lon":9.539816},{"lat":47.1914677,"lon":9.5407824},{"lat":47.1915531,"lon":9.5434918},{"lat":47.1918509,"lon":9.5444275},{"lat":47.1925882,"lon":9.545935},{"lat":47.1929124,"lon":9.5464098},{"lat":47.19311,"lon":9.5469192},{"lat":47.1929818,"lon":9.5475345},{"lat":47.1926824,"lon":9.5481563},{"lat":47.1923688,"lon":9.549068},{"lat":47.1920002,"lon":9.5495418},{"lat":47.1909373,"lon":9.5500939},{"lat":47.1907735,"lon":9.550193},{"lat":47.190635,"lon":9.5503855},{"lat":47.1904078,"lon":9.5505085},{"lat":47.1901769,"lon":9.5508294},{"lat":47.1900348,"lon":9.5512198}]},{"type":"way","ref":1748,"role":"outer","geometry":[{"lat":47.1875578,"lon":9.5577214},{"lat":47.1878428,"lon":9.5569012},{"lat":47.1883446,"lon":9.5565251},{"lat":47.1888408,"lon":9.5564523},{"lat":47.1893631,"lon":9.555945},{"lat":47.1895706,"lon":9.5559137},{"lat":47.1897665,"lon":9.556027},{"lat":47.1899769,"lon":9.5558374},{"lat":47.1902277,"lon":9.5554117},{"lat":47.1904772,"lon":9.5540752},{"lat":47.1908343,"lon":9.5517794},{"lat":47.1909298,"lon":9.5514795},{"lat":47.1906445,"lon":9.5513363},{"lat":47.1900348,"lon":9.5512198}]},{"type":"way","ref":1784,"role":"outer","geometry":[{"lat":47.1871201,"lon":9.5604758},{"lat":47.187184,"lon":9.5594489},{"lat":47.1873862,"lon":9.5582426},{"lat":47.1875578,"lon":9.5577214}]},{"type":"way","ref":1799,"role":"outer","geometry":[{"lat":47.1871201,"lon":9.5604758},{"lat":47.1875322,"lon":9.5615481},{"lat":47.188223,"lon":9.5631199},{"lat":47.1888549,"lon":9.563013},{"lat":47.1906118,"lon":9.5628848},{"lat":47.1913547,"lon":9.5640759},{"lat":47.1912171,"lon":9.5651924}]},{"type":"way","ref":1781,"role":"outer","geometry":[{"lat":47.1878312,"lon":9.5731092},{"lat":47.1875229,"lon":9.571777},{"lat":47.1893541,"lon":9.5686162},{"lat":47.1888354,"lon":9.5674736},{"lat":47.1888136,"lon":9.5662188},{"lat":47.1888793,"lon":9.5650995},{"lat":47.1889981,"lon":9.5649986},{"lat":47.1891335,"lon":9.5649776},{"lat":47.1897612,"lon":9.5650949},{"lat":47.1900944,"lon":9.5650818},{"lat":47.1907658,"lon":9.5652669},{"lat":47.1912171,"lon":9.5651924}]},{"type":"way","ref":1806,"role":"outer","geometry":[{"lat":47.1878312,"lon":9.5731092},{"lat":47.1872263,"lon":9.5732171},{"lat":47.1859332,"lon":9.5735614},{"lat":47.185079,"lon":9.5735273},{"lat":47.1844508,"lon":9.5734362},{"lat":47.1837315,"lon":9.5734075},{"lat":47.1834401,"lon":9.5735939},{"lat":47.1816562,"lon":9.5737206},{"lat":47.1800205,"lon":9.5736157},{"lat":47.1794822,"lon":9.5735282},{"lat":47.178716,"lon":9.5736032},{"lat":47.1781822,"lon":9.5742417},{"lat":47.1776088,"lon":9.573625},{"lat":47.1773692,"lon":9.5734439},{"lat":47.1771425,"lon":9.5735404},{"lat":47.1769838,"lon":9.5733625},{"lat":47.1765131,"lon":9.5735153},{"lat":47.1761583,"lon":9.5732372},{"lat":47.1755955,"lon":9.5730168},{"lat":47.1750363,"lon":9.5716352},{"lat":47.1748876,"lon":9.571405},{"lat":47.1746721,"lon":9.5708949},{"lat":47.1745037,"lon":9.570268},{"lat":47.1737049,"lon":9.5682172},{"lat":47.173358,"lon":9.5675173},{"lat":47.1726995,"lon":9.5666333}]},{"type":"way","ref":1815,"role":"outer","geometry":[{"lat":47.1726995,"lon":9.5666333},{"lat":47.1722375,"lon":9.5663115},{"lat":47.1718366,"lon":9.5660976},{"lat":47.171499,"lon":9.5658599},{"lat":47.1711037,"lon":9.5653427},{"lat":47.170771,"lon":9.5653295},{"lat":47.1702904,"lon":9.5645583}]},{"type":"way","ref":1775,"role":"outer","geometry":[{"lat":47.1702904,"lon":9.5645583},{"lat":47.1702058,"lon":9.565241},{"lat":47.1698679,"lon":9.5664811},{"lat":47.1697658,"lon":9.5671368},{"lat":47.1698362,"lon":9.5681951},{"lat":47.1697173,"lon":9.5687842},{"lat":47.1697685,"lon":9.5694196},{"lat":47.1698756,"lon":9.5699516},{"lat":47.169735,"lon":9.5712259},{"lat":47.1696133,"lon":9.5729364},{"lat":47.1697163,"lon":9.5746558},{"lat":47.1699694,"lon":9.5755631},{"lat":47.1705563,"lon":9.5769061},{"lat":47.1709389,"lon":9.5781089},{"lat":47.1711566,"lon":9.5794635},{"lat":47.1694817,"lon":9.5824313},{"lat":47.1684088,"lon":9.584473},{"lat":47.1656628,"lon":9.5893764},{"lat":47.1647335,"lon":9.5909487},{"lat":47.164615,"lon":9.5915112}]},{"type":"way","ref":1752,"role":"outer","geometry":[{"lat":47.164615,"lon":9.5915112},{"lat":47.1643324,"lon":9.5921859},{"lat":47.1629415,"lon":9.5967871},{"lat":47.1615287,"lon":9.597746},{"lat":47.1605334,"lon":9.5989986},{"lat":47.1590433,"lon":9.6007194},{"lat":47.1587249,"lon":9.6009044},{"lat":47.1581874,"lon":9.6007772},{"lat":47.1575573,"lon":9.6007913},{"lat":47.1569978,"lon":9.6003993},{"lat":47.1568012,"lon":9.6003254},{"lat":47.1565482,"lon":9.6003811},{"lat":47.1564341,"lon":9.6007063},{"lat":47.1561329,"lon":9.6009316},{"lat":47.1558378,"lon":9.6013154},{"lat":47.1556505,"lon":9.6017036},{"lat":47.1555994,"lon":9.6020313},{"lat":47.1552372,"lon":9.6021485},{"lat":47.1544181,"lon":9.6026431},{"lat":47.1540967,"lon":9.6029862},{"lat":47.1537543,"lon":9.6030119},{"lat":47.1533504,"lon":9.602956},{"lat":47.1530145,"lon":9.6031139},{"lat":47.1526499,"lon":9.603363},{"lat":47.1523539,"lon":9.6033114},{"lat":47.1520242,"lon":9.6031398},{"lat":47.1516425,"lon":9.6028605},{"lat":47.1511208,"lon":9.6033275},{"lat":47.1497848,"lon":9.6049881},{"lat":47.1492988,"lon":9.6054697},{"lat":47.1490436,"lon":9.6061188},{"lat":47.1483132,"lon":9.6076324},{"lat":47.148058,"lon":9.6082815},{"lat":47.1477494,"lon":9.6089021},{"lat":47.1474955,"lon":9.610435},{"lat":47.1473474,"lon":9.611128},{"lat":47.1474661,"lon":9.6119901},{"lat":47.1475268,"lon":9.6135358},{"lat":47.1475875,"lon":9.6141317},{"lat":47.1478436,"lon":9.6148676},{"lat":47.1487107,"lon":9.6165911},{"lat":47.149455,"lon":9.6176766},{"lat":47.1496865,"lon":9.6182796},{"lat":47.1498109,"lon":9.6188387},{"lat":47.1501988,"lon":9.6187885},{"lat":47.1504408,"lon":9.6188379},{"lat":47.1507013,"lon":9.6193366},{"lat":47.1514086,"lon":9.6199986},{"lat":47.1516259,"lon":9.6204031},{"lat":47.1516392,"lon":9.6205943}]},{"type":"way","ref":1818,"role":"outer","geometry":[{"lat":47.1516392,"lon":9.6205943},{"lat":47.1515479,"lon":9.6211914},{"lat":47.1512202,"lon":9.6218639},{"lat":47.1505084,"lon":9.6214392},{"lat":47.1502387,"lon":9.6214282},{"lat":47.1500089,"lon":9.6216826},{"lat":47.1495523,"lon":9.6220333},{"lat":47.1487738,"lon":9.6227533},{"lat":47.1483839,"lon":9.6229089},{"lat":47.148005,"lon":9.6229593},{"lat":47.1476578,"lon":9.6232353},{"lat":47.1473239,"lon":9.6232877},{"lat":47.1470966,"lon":9.6234103},{"lat":47.1470164,"lon":9.6238422},{"lat":47.146698,"lon":9.6240271},{"lat":47.1464265,"lon":9.6241083},{"lat":47.1461972,"lon":9.6243363},{"lat":47.1460086,"lon":9.6247903},{"lat":47.1458981,"lon":9.6258673},{"lat":47.1427438,"lon":9.6237601},{"lat":47.1425253,"lon":9.6234214},{"lat":47.1418964,"lon":9.6233694},{"lat":47.1416791,"lon":9.6229649},{"lat":47.1413535,"lon":9.6225823},{"lat":47.141083,"lon":9.6226108},{"lat":47.1407795,"lon":9.6229545},{"lat":47.1386609,"lon":9.6245824},{"lat":47.1384723,"lon":9.6250363},{"lat":47.138027,"lon":9.6247939},{"lat":47.1376798,"lon":9.6250698},{"lat":47.1356031,"lon":9.6244971},{"lat":47.1349775,"lon":9.6242737},{"lat":47.134724,"lon":9.6243557},{"lat":47.1342669,"lon":9.6247326},{"lat":47.1337729,"lon":9.624686},{"lat":47.1335001,"lon":9.6248331},{"lat":47.1326485,"lon":9.6246665},{"lat":47.1321444,"lon":9.6251469},{"lat":47.1317755,"lon":9.6256197},{"lat":47.131427,"lon":9.6264362},{"lat":47.1310627,"lon":9.627608},{"lat":47.1308094,"lon":9.6281514},{"lat":47.1306663,"lon":9.6285807},{"lat":47.1306205,"lon":9.6295677},{"lat":47.1304596,"lon":9.629983},{"lat":47.1299705,"lon":9.6306223},{"lat":47.1294609,"lon":9.6313925},{"lat":47.1291156,"lon":9.6320376},{"lat":47.1286707,"lon":9.6327182},{"lat":47.1280149,"lon":9.6340757},{"lat":47.1282124,"lon":9.6345716},{"lat":47.1281316,"lon":9.6350298},{"lat":47.1269687,"lon":9.6337295},{"lat":47.1264972,"lon":9.6334465},{"lat":47.1250686,"lon":9.6328606},{"lat":47.1247133,"lon":9.6326219},{"lat":47.1244086,"lon":9.632082},{"lat":47.1236203,"lon":9.6309555},{"lat":47.1231183,"lon":9.6303812},{"lat":47.1216018,"lon":9.6282758},{"lat":47.1213353,"lon":9.6280935},{"lat":47.1207904,"lon":9.627412},{"lat":47.1205911,"lon":9.6270084},{"lat":47.1199992,"lon":9.6264305},{"lat":47.1198282,"lon":9.6259622},{"lat":47.1194735,"lon":9.625684},{"lat":47.1193624,"lon":9.6253763},{"lat":47.1190103,"lon":9.6249664},{"lat":47.118028,"lon":9.6245704},{"lat":47.1176191,"lon":9.6247778}]},{"type":"way","ref":1764,"role":"outer","geometry":[{"lat":47.1176191,"lon":9.6247778},{"lat":47.1170641,"lon":9.6246233},{"lat":47.1160931,"lon":9.6245836},{"lat":47.1156415,"lon":9.6246707},{"lat":47.1146794,"lon":9.6246314},{"lat":47.1141629,"lon":9.6243467},{"lat":47.1139419,"lon":9.6241399},{"lat":47.1133432,"lon":9.6239178},{"lat":47.1130515,"lon":9.6236422},{"lat":47.112873,"lon":9.6235691},{"lat":47.1125645,"lon":9.6232269},{"lat":47.112348,"lon":9.6227831},{"lat":47.1110955,"lon":9.6214535},{"lat":47.1107576,"lon":9.6212421},{"lat":47.1106572,"lon":9.6208426}]},{"type":"way","ref":1738,"role":"outer","geometry":[{"lat":47.1106572,"lon":9.6208426},{"lat":47.1103155,"lon":9.6208286},{"lat":47.1090687,"lon":9.6215686},{"lat":47.1084725,"lon":9.6221638},{"lat":47.1081932,"lon":9.6226532},{"lat":47.1076099,"lon":9.6249358},{"lat":47.1076154,"lon":9.625595},{"lat":47.1075461,"lon":9.6259217},{"lat":47.1075965,"lon":9.6265828},{"lat":47.1076022,"lon":9.6277033},{"lat":47.1075584,"lon":9.6285845},{"lat":47.1065287,"lon":9.6283183},{"lat":47.1054959,"lon":9.6282102},{"lat":47.1050682,"lon":9.6294052},{"lat":47.1047672,"lon":9.6300914},{"lat":47.1042133,"lon":9.6308199},{"lat":47.1034525,"lon":9.6315531},{"lat":47.102837,"lon":9.6322132},{"lat":47.1026484,"lon":9.6326667},{"lat":47.1024622,"lon":9.6329885},{"lat":47.1016409,"lon":9.6335874},{"lat":47.1013841,"lon":9.6338405},{"lat":47.1011308,"lon":9.6343836},{"lat":47.1004989,"lon":9.6344894},{"lat":47.0997014,"lon":9.6347862},{"lat":47.0987342,"lon":9.6350101},{"lat":47.096762,"lon":9.6355617},{"lat":47.0955277,"lon":9.6356428},{"lat":47.0948726,"lon":9.6355501},{"lat":47.0934335,"lon":9.6355174},{"lat":47.0919966,"lon":9.6353662},{"lat":47.0906307,"lon":9.6352707},{"lat":47.0862806,"lon":9.6331161},{"lat":47.0854514,"lon":9.6331875},{"lat":47.0845485,"lon":9.6333482},{"lat":47.0834395,"lon":9.6334608},{"lat":47.0832505,"lon":9.632992},{"lat":47.083008,"lon":9.6292012},{"lat":47.0826391,"lon":9.6258928},{"lat":47.0825788,"lon":9.6233873},{"lat":47.0819607,"lon":9.6227693},{"lat":47.0803048,"lon":9.620884},{"lat":47.0800201,"lon":9.6207143},{"lat":47.0797691,"lon":9.6206645},{"lat":47.0795461,"lon":9.6205632},{"lat":47.0781689,"lon":9.6186894},{"lat":47.0784729,"lon":9.6178455},{"lat":47.0785753,"lon":9.6171911},{"lat":47.0786352,"lon":9.6164032},{"lat":47.0788638,"lon":9.6152664},{"lat":47.0788762,"lon":9.6146083},{"lat":47.0786794,"lon":9.6140734},{"lat":47.0786439,"lon":9.6135714},{"lat":47.0788337,"lon":9.6130522},{"lat":47.0790198,"lon":9.6127305},{"lat":47.079257,"lon":9.6120815},{"lat":47.0794024,"lon":9.6115341}]},{"type":"way","ref":1772,"role":"outer","geometry":[{"lat":47.0794024,"lon":9.6115341},{"lat":47.0790222,"lon":9.6116504},{"lat":47.0786838,"lon":9.6114655},{"lat":47.0784415,"lon":9.6114293},{"lat":47.0781418,"lon":9.6115752},{"lat":47.0774525,"lon":9.6113892},{"lat":47.0770658,"lon":9.6113735},{"lat":47.0767494,"lon":9.6114529},{"lat":47.076391,"lon":9.6113725},{"lat":47.0755005,"lon":9.6108754},{"lat":47.0752627,"lon":9.6106023},{"lat":47.0750397,"lon":9.610501},{"lat":47.0748094,"lon":9.6107815},{"lat":47.0745772,"lon":9.6111672},{"lat":47.0742562,"lon":9.6114835},{"lat":47.0737118,"lon":9.6117248},{"lat":47.0735887,"lon":9.6120491},{"lat":47.0732527,"lon":9.6122067},{"lat":47.0729967,"lon":9.6124202},{"lat":47.0726621,"lon":9.612512},{"lat":47.0717961,"lon":9.6130959},{"lat":47.0710249,"lon":9.6134334},{"lat":47.0694958,"lon":9.6133977},{"lat":47.0685814,"lon":9.6127416},{"lat":47.0683579,"lon":9.6126667},{"lat":47.0678179,"lon":9.6126711},{"lat":47.0676293,"lon":9.6121762},{"lat":47.0669417,"lon":9.6114239},{"lat":47.0667026,"lon":9.6112167},{"lat":47.066313,"lon":9.6113589},{"lat":47.0659976,"lon":9.6113857},{"lat":47.0657568,"lon":9.6112705},{"lat":47.0654401,"lon":9.611363},{"lat":47.064802,"lon":9.6117981},{"lat":47.0646216,"lon":9.6118171},{"lat":47.064446,"lon":9.6115861},{"lat":47.0642904,"lon":9.6112506},{"lat":47.0641156,"lon":9.6109801},{"lat":47.0636255,"lon":9.6107232},{"lat":47.0632289,"lon":9.6102857},{"lat":47.063036,"lon":9.6100146},{"lat":47.0628799,"lon":9.6097054},{"lat":47.0620824,"lon":9.6090541},{"lat":47.0618183,"lon":9.6087406},{"lat":47.061061,"lon":9.6073931},{"lat":47.0607725,"lon":9.6070544}]}]},{"type":"relation","id":77,"tags":{"landuse":"forest","type":"multipolygon"},"members":[{"type":"way","ref":385,"role":"outer","geometry":[{"lat":47.0815448,"lon":9.5296923},{"lat":47.0804329,"lon":9.5350777},{"lat":47.0782119,"lon":9.5337044},{"lat":47.0769259,"lon":9.5381676},{"lat":47.07564,"lon":9.5412575},{"lat":47.0734187,"lon":9.545034},{"lat":47.0718988,"lon":9.5443474},{"lat":47.0715481,"lon":9.5371376},{"lat":47.0699112,"lon":9.5319878},{"lat":47.069096,"lon":9.5304379},{"lat":47.0690636,"lon":9.5298836},{"lat":47.069042,"lon":9.5292977},{"lat":47.0687616,"lon":9.5288226},{"lat":47.0683085,"lon":9.5283316},{"lat":47.0678568,"lon":9.5276308},{"lat":47.0675365,"lon":9.5269925},{"lat":47.0673534,"lon":9.5268245},{"lat":47.0671932,"lon":9.5269365},{"lat":47.066972,"lon":9.5270261},{"lat":47.0667737,"lon":9.5269477},{"lat":47.066583,"lon":9.5268581},{"lat":47.066583,"lon":9.5269589},{"lat":47.0666517,"lon":9.5274628},{"lat":47.0669262,"lon":9.5278324},{"lat":47.0672771,"lon":9.5283923},{"lat":47.0674297,"lon":9.528941},{"lat":47.0673458,"lon":9.5290082},{"lat":47.0669491,"lon":9.5286946},{"lat":47.0665525,"lon":9.5283587},{"lat":47.0663084,"lon":9.5279331},{"lat":47.0661559,"lon":9.527642},{"lat":47.0661787,"lon":9.5274964},{"lat":47.0662626,"lon":9.5273284},{"lat":47.0661711,"lon":9.5271381},{"lat":47.0659499,"lon":9.5268805},{"lat":47.0658965,"lon":9.5269925},{"lat":47.0660186,"lon":9.5274516},{"lat":47.0660872,"lon":9.5277988},{"lat":47.0663008,"lon":9.5281235},{"lat":47.0665906,"lon":9.5285714},{"lat":47.0668729,"lon":9.528829},{"lat":47.0668042,"lon":9.5289074},{"lat":47.0664838,"lon":9.5287506},{"lat":47.0661711,"lon":9.5283139},{"lat":47.0656448,"lon":9.5277204},{"lat":47.0654846,"lon":9.5278772},{"lat":47.0652024,"lon":9.5283923},{"lat":47.0647676,"lon":9.5296689},{"lat":47.0645693,"lon":9.5298928},{"lat":47.0643252,"lon":9.5297473},{"lat":47.0643557,"lon":9.5300384},{"lat":47.0644777,"lon":9.5306207},{"lat":47.0647447,"lon":9.5313822},{"lat":47.0647371,"lon":9.5318525},{"lat":47.064821,"lon":9.5325244},{"lat":47.0650041,"lon":9.5331739},{"lat":47.0650838,"lon":9.5337364},{"lat":47.0652025,"lon":9.5345203},{"lat":47.0651485,"lon":9.5350034},{"lat":47.0650514,"lon":9.5353993},{"lat":47.0646092,"lon":9.5355022},{"lat":47.0644042,"lon":9.5352409},{"lat":47.0642208,"lon":9.5350192},{"lat":47.063908,"lon":9.5342353},{"lat":47.0638324,"lon":9.5340056},{"lat":47.0632985,"lon":9.5330317},{"lat":47.0630126,"lon":9.5321052},{"lat":47.0630881,"lon":9.5316618},{"lat":47.0631151,"lon":9.5307195},{"lat":47.0629317,"lon":9.5298089},{"lat":47.0626242,"lon":9.5293021},{"lat":47.0620093,"lon":9.5289141},{"lat":47.0613754,"lon":9.5287262},{"lat":47.0611327,"lon":9.5288778},{"lat":47.0610259,"lon":9.5293369},{"lat":47.0607665,"lon":9.530076},{"lat":47.0605682,"lon":9.5303},{"lat":47.0604843,"lon":9.5306359},{"lat":47.0603622,"lon":9.5309383},{"lat":47.0602402,"lon":9.5311063},{"lat":47.0602173,"lon":9.531655},{"lat":47.0603317,"lon":9.5320581},{"lat":47.0603317,"lon":9.5323829},{"lat":47.0603241,"lon":9.5324948},{"lat":47.0605529,"lon":9.5326292},{"lat":47.060675,"lon":9.5328644},{"lat":47.0606063,"lon":9.5332899},{"lat":47.0607208,"lon":9.5336483},{"lat":47.0607971,"lon":9.5339954},{"lat":47.0610412,"lon":9.5343985},{"lat":47.0613082,"lon":9.5343761},{"lat":47.0614607,"lon":9.5340178},{"lat":47.0614607,"lon":9.5336483},{"lat":47.0612624,"lon":9.5334243},{"lat":47.0610869,"lon":9.5330995},{"lat":47.0611403,"lon":9.5329204},{"lat":47.0612929,"lon":9.5328756},{"lat":47.0616209,"lon":9.532842},{"lat":47.0619413,"lon":9.5331331},{"lat":47.0625592,"lon":9.5337266},{"lat":47.0630932,"lon":9.5345217},{"lat":47.0633068,"lon":9.5349249},{"lat":47.0635738,"lon":9.5353056},{"lat":47.0641007,"lon":9.5355422},{"lat":47.0641465,"lon":9.5359117},{"lat":47.0640931,"lon":9.5363709},{"lat":47.0641846,"lon":9.5367852},{"lat":47.0643143,"lon":9.5371883},{"lat":47.0642228,"lon":9.5374011},{"lat":47.0640168,"lon":9.5374347},{"lat":47.0638795,"lon":9.5376811},{"lat":47.0638719,"lon":9.538241},{"lat":47.0637803,"lon":9.5386217},{"lat":47.0635286,"lon":9.5387113},{"lat":47.0633989,"lon":9.5386665},{"lat":47.0630938,"lon":9.5383754},{"lat":47.0627048,"lon":9.5380506},{"lat":47.0625448,"lon":9.5378243},{"lat":47.0621174,"lon":9.5375019},{"lat":47.0620487,"lon":9.5375019},{"lat":47.0621403,"lon":9.5377259},{"lat":47.0627734,"lon":9.5384873},{"lat":47.0629031,"lon":9.5388121},{"lat":47.0634371,"lon":9.5397975},{"lat":47.0634294,"lon":9.5399319},{"lat":47.0632235,"lon":9.5400439},{"lat":47.0628497,"lon":9.5398647},{"lat":47.0625217,"lon":9.5396856},{"lat":47.0624683,"lon":9.5398871},{"lat":47.0624225,"lon":9.5402903},{"lat":47.0621937,"lon":9.5404918},{"lat":47.0614919,"lon":9.540559},{"lat":47.060668,"lon":9.540615},{"lat":47.0605688,"lon":9.540503},{"lat":47.0603628,"lon":9.5399991},{"lat":47.0601416,"lon":9.5396408},{"lat":47.059989,"lon":9.5395848},{"lat":47.0598594,"lon":9.5396296},{"lat":47.059806,"lon":9.5398199},{"lat":47.0599204,"lon":9.5400327},{"lat":47.0600043,"lon":9.5403127},{"lat":47.0600119,"lon":9.5404246},{"lat":47.0596213,"lon":9.5402275},{"lat":47.0592262,"lon":9.5399767},{"lat":47.0587532,"lon":9.5398759},{"lat":47.0587532,"lon":9.5399207},{"lat":47.0589522,"lon":9.5400498},{"lat":47.0595015,"lon":9.5403745},{"lat":47.0598905,"lon":9.5407889},{"lat":47.0602872,"lon":9.5410464},{"lat":47.060394,"lon":9.5412256},{"lat":47.0603406,"lon":9.5414944},{"lat":47.0605161,"lon":9.5418079},{"lat":47.0608975,"lon":9.5422782},{"lat":47.0614544,"lon":9.5429837},{"lat":47.0614086,"lon":9.5433085},{"lat":47.0612332,"lon":9.5433533},{"lat":47.0609509,"lon":9.5432973},{"lat":47.0606915,"lon":9.5429949},{"lat":47.0602338,"lon":9.5425134},{"lat":47.0598982,"lon":9.5421886},{"lat":47.0597685,"lon":9.5419759},{"lat":47.0596159,"lon":9.5416063},{"lat":47.0594328,"lon":9.541304},{"lat":47.05912,"lon":9.541192},{"lat":47.0587386,"lon":9.5410464},{"lat":47.0586623,"lon":9.541136},{"lat":47.0586699,"lon":9.5412592},{"lat":47.0589522,"lon":9.5415951},{"lat":47.0592192,"lon":9.5419759},{"lat":47.0594328,"lon":9.5425582},{"lat":47.0596159,"lon":9.5428829},{"lat":47.0596998,"lon":9.5432525},{"lat":47.0595549,"lon":9.5434652},{"lat":47.0594176,"lon":9.5434876},{"lat":47.0591887,"lon":9.5431741},{"lat":47.0590132,"lon":9.5429501},{"lat":47.0588378,"lon":9.5421103},{"lat":47.0586776,"lon":9.5419871},{"lat":47.0583343,"lon":9.5417631},{"lat":47.0582046,"lon":9.5415727},{"lat":47.0580215,"lon":9.5412256},{"lat":47.0577621,"lon":9.5410128},{"lat":47.0576248,"lon":9.541136},{"lat":47.0575561,"lon":9.5415279},{"lat":47.057846,"lon":9.5419871},{"lat":47.0579757,"lon":9.5423342},{"lat":47.0580215,"lon":9.5426142},{"lat":47.0579299,"lon":9.5426926},{"lat":47.0576553,"lon":9.5424014},{"lat":47.0573196,"lon":9.5421103},{"lat":47.0571442,"lon":9.5418079},{"lat":47.0570755,"lon":9.5413936},{"lat":47.0570908,"lon":9.540968},{"lat":47.0571823,"lon":9.5408113},{"lat":47.0572433,"lon":9.5407105},{"lat":47.0571747,"lon":9.5405761},{"lat":47.0569992,"lon":9.5404977},{"lat":47.0568085,"lon":9.5408449},{"lat":47.0567703,"lon":9.5412592},{"lat":47.0568237,"lon":9.5418975},{"lat":47.056778,"lon":9.5426478},{"lat":47.0568695,"lon":9.5431293},{"lat":47.0566705,"lon":9.5432018},{"lat":47.0564569,"lon":9.5432018},{"lat":47.0561822,"lon":9.543437},{"lat":47.0561212,"lon":9.5436945},{"lat":47.0561441,"lon":9.5438961},{"lat":47.0564645,"lon":9.5441089},{"lat":47.0563958,"lon":9.544512},{"lat":47.0562814,"lon":9.5445456},{"lat":47.056022,"lon":9.5443776},{"lat":47.054776,"lon":9.5468451},{"lat":47.0546182,"lon":9.5472619},{"lat":47.0546393,"lon":9.5481574},{"lat":47.0546393,"lon":9.5490683},{"lat":47.0543973,"lon":9.5498248},{"lat":47.0544289,"lon":9.550535},{"lat":47.0541975,"lon":9.5514305},{"lat":47.0538714,"lon":9.55194},{"lat":47.0536926,"lon":9.5522024},{"lat":47.0535453,"lon":9.5521098},{"lat":47.0535769,"lon":9.5513379},{"lat":47.0536295,"lon":9.5499483},{"lat":47.0535453,"lon":9.5494697},{"lat":47.0511502,"lon":9.549979},{"lat":47.0506946,"lon":9.5509056},{"lat":47.0506105,"lon":9.550782},{"lat":47.0508103,"lon":9.5496859},{"lat":47.050926,"lon":9.5486514},{"lat":47.0509576,"lon":9.5475398},{"lat":47.0516939,"lon":9.5473546},{"lat":47.0520306,"lon":9.5473546},{"lat":47.0527248,"lon":9.5465363},{"lat":47.0526302,"lon":9.5459496},{"lat":47.0525565,"lon":9.5449924},{"lat":47.0525565,"lon":9.544591},{"lat":47.0522094,"lon":9.5448225},{"lat":47.0517886,"lon":9.5456717},{"lat":47.0514099,"lon":9.5459033},{"lat":47.0504529,"lon":9.5457273},{"lat":47.0504529,"lon":9.5454106},{"lat":47.0500537,"lon":9.5451889},{"lat":47.0498918,"lon":9.5452998},{"lat":47.0494818,"lon":9.5453631},{"lat":47.0491581,"lon":9.5450147},{"lat":47.0493307,"lon":9.5449513},{"lat":47.0494602,"lon":9.544698},{"lat":47.0495573,"lon":9.5443337},{"lat":47.0496436,"lon":9.5436686},{"lat":47.0496328,"lon":9.5431301},{"lat":47.0497407,"lon":9.5425283},{"lat":47.0498918,"lon":9.5422116},{"lat":47.0500537,"lon":9.5417206},{"lat":47.0500429,"lon":9.5408813},{"lat":47.0499134,"lon":9.5406279},{"lat":47.0498055,"lon":9.5404062},{"lat":47.0495141,"lon":9.5403587},{"lat":47.0493523,"lon":9.5403904},{"lat":47.049266,"lon":9.5400895},{"lat":47.0493036,"lon":9.5399295},{"lat":47.049466,"lon":9.5399233},{"lat":47.0496129,"lon":9.5400017},{"lat":47.049653,"lon":9.5399103},{"lat":47.0496129,"lon":9.5397339},{"lat":47.049426,"lon":9.5395902},{"lat":47.0492552,"lon":9.5394402},{"lat":47.0493961,"lon":9.5391074},{"lat":47.0493204,"lon":9.538807},{"lat":47.0491424,"lon":9.538807},{"lat":47.0490579,"lon":9.5387221},{"lat":47.0490935,"lon":9.5386241},{"lat":47.0492658,"lon":9.5383689},{"lat":47.0493058,"lon":9.5381272},{"lat":47.0493103,"lon":9.5380031},{"lat":47.0493859,"lon":9.5379705},{"lat":47.0495862,"lon":9.537977},{"lat":47.0497731,"lon":9.5378464},{"lat":47.0497598,"lon":9.537657},{"lat":47.0495595,"lon":9.5375459},{"lat":47.049555,"lon":9.5372978},{"lat":47.049782,"lon":9.5371214},{"lat":47.0498977,"lon":9.5369908},{"lat":47.0498755,"lon":9.5368732},{"lat":47.0496886,"lon":9.5368144},{"lat":47.0494838,"lon":9.5364226},{"lat":47.0492124,"lon":9.5359654},{"lat":47.048981,"lon":9.5358609},{"lat":47.0488964,"lon":9.5357433},{"lat":47.0487807,"lon":9.5354298},{"lat":47.0487407,"lon":9.5354037},{"lat":47.0487896,"lon":9.5357564},{"lat":47.0487674,"lon":9.5360633},{"lat":47.0486339,"lon":9.5361091},{"lat":47.0484736,"lon":9.5361025},{"lat":47.048398,"lon":9.5360699},{"lat":47.0483579,"lon":9.5361874},{"lat":47.0483935,"lon":9.5363964},{"lat":47.0484113,"lon":9.5365401},{"lat":47.0486072,"lon":9.536625},{"lat":47.0487896,"lon":9.5370038},{"lat":47.0488875,"lon":9.5374414},{"lat":47.0489365,"lon":9.5376047},{"lat":47.0489276,"lon":9.5378725},{"lat":47.048892,"lon":9.5379313},{"lat":47.0487908,"lon":9.5378273},{"lat":47.0485683,"lon":9.5375334},{"lat":47.048466,"lon":9.5373766},{"lat":47.0483948,"lon":9.5373766},{"lat":47.0483725,"lon":9.5376183},{"lat":47.0485149,"lon":9.5380689},{"lat":47.0485639,"lon":9.5382192},{"lat":47.0484526,"lon":9.5384608},{"lat":47.048466,"lon":9.5387547},{"lat":47.0483147,"lon":9.5388396},{"lat":47.0480655,"lon":9.5388331},{"lat":47.0478874,"lon":9.5387482},{"lat":47.0478207,"lon":9.5387482},{"lat":47.0480877,"lon":9.5392772},{"lat":47.0482301,"lon":9.5397279},{"lat":47.0481723,"lon":9.539852},{"lat":47.047834,"lon":9.5399173},{"lat":47.0477005,"lon":9.5398389},{"lat":47.0475581,"lon":9.5397801},{"lat":47.0477984,"lon":9.5403288},{"lat":47.0477762,"lon":9.5404398},{"lat":47.0476427,"lon":9.5404986},{"lat":47.0472866,"lon":9.5402504},{"lat":47.0464455,"lon":9.5396365},{"lat":47.0449228,"lon":9.538002},{"lat":47.0429931,"lon":9.531625},{"lat":47.0427832,"lon":9.5306445},{"lat":47.0425691,"lon":9.5298837},{"lat":47.0421302,"lon":9.5292505},{"lat":47.0417879,"lon":9.5285081},{"lat":47.0412151,"lon":9.5279841},{"lat":47.0409919,"lon":9.527602},{"lat":47.040672,"lon":9.5272745},{"lat":47.0399875,"lon":9.5272636},{"lat":47.0397048,"lon":9.5270016},{"lat":47.0393774,"lon":9.5270234},{"lat":47.0392063,"lon":9.5267286},{"lat":47.0393811,"lon":9.5261532},{"lat":47.0396115,"lon":9.5240669},{"lat":47.0411732,"lon":9.5209512},{"lat":47.0418428,"lon":9.5206323},{"lat":47.0437379,"lon":9.5198169},{"lat":47.0450129,"lon":9.5186153},{"lat":47.0453814,"lon":9.518581},{"lat":47.0456034,"lon":9.5189595},{"lat":47.0461417,"lon":9.519877},{"lat":47.0466622,"lon":9.5208984},{"lat":47.0484635,"lon":9.5210786},{"lat":47.0496683,"lon":9.5204006},{"lat":47.049177,"lon":9.5174909},{"lat":47.0498496,"lon":9.5140319},{"lat":47.04968,"lon":9.5137144},{"lat":47.0507326,"lon":9.5107618},{"lat":47.0513525,"lon":9.5113969},{"lat":47.050905,"lon":9.5123386},{"lat":47.0506649,"lon":9.5141453},{"lat":47.0512181,"lon":9.5147615},{"lat":47.0517502,"lon":9.5134826},{"lat":47.0528165,"lon":9.5132078},{"lat":47.0541537,"lon":9.5123067},{"lat":47.0548043,"lon":9.5121457},{"lat":47.0547597,"lon":9.5114252},{"lat":47.0549308,"lon":9.5114798},{"lat":47.0549531,"lon":9.5118946},{"lat":47.0553027,"lon":9.5122767},{"lat":47.0558802,"lon":9.5123498},{"lat":47.0563532,"lon":9.5123946},{"lat":47.0569101,"lon":9.5125626},{"lat":47.0570322,"lon":9.5124842},{"lat":47.0576348,"lon":9.5126186},{"lat":47.0579476,"lon":9.5127081},{"lat":47.0583367,"lon":9.5126969},{"lat":47.0584588,"lon":9.5127081},{"lat":47.0587639,"lon":9.5126969},{"lat":47.0590614,"lon":9.5129545},{"lat":47.0590004,"lon":9.5131001},{"lat":47.0591148,"lon":9.513324},{"lat":47.0595044,"lon":9.5134483},{"lat":47.0599277,"lon":9.5133975},{"lat":47.0603107,"lon":9.5136113},{"lat":47.0605966,"lon":9.5137142},{"lat":47.0607854,"lon":9.5135558},{"lat":47.0607692,"lon":9.5134371},{"lat":47.0605696,"lon":9.5132233},{"lat":47.0604132,"lon":9.5131282},{"lat":47.0602244,"lon":9.5127165},{"lat":47.0600625,"lon":9.5121464},{"lat":47.059987,"lon":9.5113783},{"lat":47.0602675,"lon":9.511212},{"lat":47.0604509,"lon":9.5122572},{"lat":47.060548,"lon":9.5126135},{"lat":47.060753,"lon":9.5129936},{"lat":47.0610928,"lon":9.5132391},{"lat":47.0614596,"lon":9.5133895},{"lat":47.0614381,"lon":9.5140072},{"lat":47.0617941,"lon":9.5140943},{"lat":47.0621717,"lon":9.5141101},{"lat":47.0626949,"lon":9.5136746},{"lat":47.0629969,"lon":9.5136429},{"lat":47.0630994,"lon":9.5142685},{"lat":47.0672954,"lon":9.5132681},{"lat":47.0673412,"lon":9.5137608},{"lat":47.0677683,"lon":9.5145447},{"lat":47.0680276,"lon":9.5148582},{"lat":47.0683938,"lon":9.5148582},{"lat":47.0686531,"lon":9.5136152},{"lat":47.0689963,"lon":9.5132793},{"lat":47.0693853,"lon":9.5134472},{"lat":47.069698,"lon":9.5139288},{"lat":47.070026,"lon":9.5143095},{"lat":47.0700946,"lon":9.5146678},{"lat":47.0703845,"lon":9.5149478},{"lat":47.0707124,"lon":9.5149478},{"lat":47.0709641,"lon":9.514959},{"lat":47.0712082,"lon":9.5151718},{"lat":47.0715667,"lon":9.5157765},{"lat":47.0719099,"lon":9.5160228},{"lat":47.072337,"lon":9.5159556},{"lat":47.0727565,"lon":9.5158213},{"lat":47.0731683,"lon":9.5154517},{"lat":47.07342,"lon":9.5149702},{"lat":47.0742513,"lon":9.514735},{"lat":47.0744419,"lon":9.5154741},{"lat":47.0752504,"lon":9.5151158},{"lat":47.0754334,"lon":9.5155749},{"lat":47.0759291,"lon":9.5154405},{"lat":47.0761076,"lon":9.5163666},{"lat":47.0758757,"lon":9.5165156},{"lat":47.0759367,"lon":9.5167619},{"lat":47.0749385,"lon":9.5168816},{"lat":47.0745411,"lon":9.5172882},{"lat":47.0744648,"lon":9.5175122},{"lat":47.0744496,"lon":9.5180273},{"lat":47.0741826,"lon":9.5191247},{"lat":47.0742665,"lon":9.5197295},{"lat":47.0742437,"lon":9.5207933},{"lat":47.0743504,"lon":9.5208605},{"lat":47.0750978,"lon":9.5204237},{"lat":47.0755554,"lon":9.520379},{"lat":47.0759444,"lon":9.520379},{"lat":47.0764782,"lon":9.5201774},{"lat":47.0765545,"lon":9.5205021},{"lat":47.076809,"lon":9.5206581},{"lat":47.0770035,"lon":9.5206565},{"lat":47.0772302,"lon":9.5209567},{"lat":47.0776243,"lon":9.5213279},{"lat":47.0783751,"lon":9.5227253},{"lat":47.0790108,"lon":9.5239699},{"lat":47.0794978,"lon":9.524778},{"lat":47.0796469,"lon":9.5247959},{"lat":47.0800254,"lon":9.5251355},{"lat":47.0801673,"lon":9.525591},{"lat":47.0805037,"lon":9.5260619},{"lat":47.0807929,"lon":9.5261931},{"lat":47.0808665,"lon":9.5261082},{"lat":47.0808139,"lon":9.5255524},{"lat":47.0807403,"lon":9.5250969},{"lat":47.0804985,"lon":9.5244716},{"lat":47.0804196,"lon":9.5242246},{"lat":47.0809453,"lon":9.5237769},{"lat":47.0812765,"lon":9.5234372},{"lat":47.0815551,"lon":9.5233446},{"lat":47.0816655,"lon":9.5242478},{"lat":47.0815919,"lon":9.5247804},{"lat":47.0815761,"lon":9.5254752},{"lat":47.0817128,"lon":9.525977},{"lat":47.0820428,"lon":9.5272799},{"lat":47.0815448,"lon":9.5296923}]}]},{"type":"relation","id":100,"tags":{"name":"Rätikon","name:de":"Rätikon","name:en":"Rätikon","name:fr":"Rätikon","name:it":"Catena del Rätikon","note":"http://forum.openstreetmap.org/viewtopic.php?id=16094","place":"region","ref:aveo":"25","region:type":"mountain_area","type":"multipolygon","wikipedia":"de:Rätikon","wikipedia:de":"Rätikon","wikipedia:en":"Rätikon","wikipedia:fr":"Rätikon","wikipedia:it":"Catena_del_Rätikon"},"members":[{"type":"way","ref":609,"role":"outer","geometry":[{"lat":47.2705781,"lon":9.5307265},{"lat":47.2711286,"lon":9.5310309},{"lat":47.2720148,"lon":9.531769},{"lat":47.2729437,"lon":9.5328617},{"lat":47.2766333,"lon":9.5404137},{"lat":47.2783397,"lon":9.5434359}]},{"type":"way","ref":3452,"role":"outer","geometry":[{"lat":46.9688169,"lon":9.5496806},{"lat":46.9694364,"lon":9.5497877},{"lat":46.9707629,"lon":9.5501686},{"lat":46.9714836,"lon":9.5499924},{"lat":46.9724613,"lon":9.5495056},{"lat":46.9735819,"lon":9.5487894},{"lat":46.9742051,"lon":9.5482337},{"lat":46.9749307,"lon":9.5474719},{"lat":46.9765687,"lon":9.5455732},{"lat":46.9774954,"lon":9.5445482},{"lat":46.9976232,"lon":9.5215774},{"lat":47.0005389,"lon":9.5186316},{"lat":47.0080547,"lon":9.5115612},{"lat":47.0091449,"lon":9.5106838},{"lat":47.0102219,"lon":9.510213},{"lat":47.0114265,"lon":9.5098439},{"lat":47.0151058,"lon":9.5083283},{"lat":47.0155588,"lon":9.5083585},{"lat":47.0166998,"lon":9.5079772},{"lat":47.0187255,"lon":9.5062708},{"lat":47.0198721,"lon":9.5047949},{"lat":47.0216001,"lon":9.5031362},{"lat":47.0320615,"lon":9.4931315},{"lat":47.0335751,"lon":9.4916804},{"lat":47.0377877,"lon":9.4876505},{"lat":47.038372,"lon":9.487088},{"lat":47.040302,"lon":9.4852299},{"lat":47.0440851,"lon":9.4814701},{"lat":47.0474809,"lon":9.4784374},{"lat":47.049055,"lon":9.4772452},{"lat":47.0517524,"lon":9.4757865},{"lat":47.0518315,"lon":9.4757514},{"lat":47.0597862,"lon":9.4724195},{"lat":47.0615162,"lon":9.4717767},{"lat":47.0627139,"lon":9.4717079},{"lat":47.0633104,"lon":9.4716736},{"lat":47.0642006,"lon":9.4718614},{"lat":47.0650283,"lon":9.4723774},{"lat":47.0657468,"lon":9.4731659},{"lat":47.0663892,"lon":9.4740884},{"lat":47.066967,"lon":9.4750928},{"lat":47.0683611,"lon":9.4784723},{"lat":47.0719233,"lon":9.487619},{"lat":47.0733144,"lon":9.4910979},{"lat":47.073844,"lon":9.4922746},{"lat":47.0851421,"lon":9.5127602},{"lat":47.0851435,"lon":9.5127623},{"lat":47.0856362,"lon":9.5135292},{"lat":47.0863455,"lon":9.5144143},{"lat":47.0870694,"lon":9.5150879},{"lat":47.0878537,"lon":9.5156005},{"lat":47.0947891,"lon":9.5187523},{"lat":47.0965561,"lon":9.5193111},{"lat":47.0983373,"lon":9.5195806},{"lat":47.1001327,"lon":9.5196148},{"lat":47.1019263,"lon":9.5194486},{"lat":47.1055048,"lon":9.5188549},{"lat":47.1072705,"lon":9.5184438},{"lat":47.1150869,"lon":9.5164145},{"lat":47.1214443,"lon":9.5146535},{"lat":47.1219427,"lon":9.5145259},{"lat":47.1303024,"lon":9.5123851},{"lat":47.1324563,"lon":9.5116654},{"lat":47.1407276,"lon":9.5081841},{"lat":47.1423838,"lon":9.5072011},{"lat":47.1439003,"lon":9.5058302},{"lat":47.1468825,"lon":9.5026522},{"lat":47.1482714,"lon":9.501172},{"lat":47.1497721,"lon":9.4997225},{"lat":47.1563504,"lon":9.4954629},{"lat":47.1569405,"lon":9.4950763},{"lat":47.159639,"lon":9.4933084},{"lat":47.1629726,"lon":9.4912992},{"lat":47.1644987,"lon":9.4906624},{"lat":47.1688996,"lon":9.4893306},{"lat":47.180525,"lon":9.4859776},{"lat":47.1814434,"lon":9.4858412},{"lat":47.1823578,"lon":9.485929},{"lat":47.1862729,"lon":9.4868652},{"lat":47.1901944,"lon":9.4878765},{"lat":47.1947493,"lon":9.489177},{"lat":47.1964945,"lon":9.4897548},{"lat":47.1979422,"lon":9.4905005},{"lat":47.1981947,"lon":9.4906306},{"lat":47.2053502,"lon":9.4956519},{"lat":47.2067135,"lon":9.4965658},{"lat":47.2113569,"lon":9.4996332},{"lat":47.2121491,"lon":9.4998592},{"lat":47.218357,"lon":9.5011948},{"lat":47.2201756,"lon":9.5016427},{"lat":47.2235074,"lon":9.5035029},{"lat":47.2251254,"lon":9.5046405},{"lat":47.2297807,"lon":9.5086063},{"lat":47.2318006,"lon":9.5103331},{"lat":47.2406452,"lon":9.5180129},{"lat":47.2422078,"lon":9.5192271},{"lat":47.2439624,"lon":9.5204517},{"lat":47.2462495,"lon":9.5216266},{"lat":47.2523266,"lon":9.5247488},{"lat":47.2618521,"lon":9.5298329},{"lat":47.2624922,"lon":9.5301131},{"lat":47.263364,"lon":9.5302636},{"lat":47.2687865,"lon":9.5303346},{"lat":47.2694757,"lon":9.5303761},{"lat":47.2696813,"lon":9.5303885},{"lat":47.2705781,"lon":9.5307265}]}]}]} \ No newline at end of file diff --git a/scripts/cli.ts b/scripts/cli.ts new file mode 100644 index 0000000..6a25d3f --- /dev/null +++ b/scripts/cli.ts @@ -0,0 +1,39 @@ +// Генерация мира из файла Overpass JSON без браузера. +// npx tsx scripts/cli.ts input.json south west north east [out.json] +import { readFileSync, writeFileSync } from 'node:fs'; +import { generateWorldSync } from '../src/gen/generate'; + +const [inp, s, w, n, e, out] = process.argv.slice(2); +if (!inp || !e) { + console.error('usage: tsx scripts/cli.ts input.json south west north east [out.json]'); + process.exit(1); +} +const els = JSON.parse(readFileSync(inp, 'utf8')).elements; +const t0 = Date.now(); +const world = generateWorldSync(els, [+s, +w, +n, +e], inp, 1); +const dt = Date.now() - t0; + +const kinds: Record = {}; +const roomKinds: Record = {}; +let floors = 0, rooms = 0, props = 0, doors = 0, windows = 0, noEntrance = 0, units = 0, beds = 0; +for (const b of world.buildings) { + kinds[b.kind] = (kinds[b.kind] ?? 0) + 1; + floors += b.floors.length; + units += b.units.length; + beds += b.beds; + for (const f of b.floors) { + rooms += f.rooms.length; + props += f.props.length; + doors += f.doors.length; + windows += f.windows.length; + for (const r of f.rooms) roomKinds[r.kind] = (roomKinds[r.kind] ?? 0) + 1; + } + if (b.floors[0] && !b.floors[0].doors.some((d) => d.rooms[1] === 'outside')) noEntrance++; +} +console.log(`${dt} ms; buildings ${world.buildings.length}, areas ${world.areas.length}, roads ${world.roads.length}, street props ${world.props.length}`); +console.log('kinds', kinds); +console.log(`floors ${floors}, rooms ${rooms}, doors ${doors}, windows ${windows}, furniture ${props}, units ${units}, beds ${beds}, no entrance ${noEntrance}`); +console.log('rooms', roomKinds); +const json = JSON.stringify(world); +console.log(`world json ${(json.length / 1e6).toFixed(1)} MB`); +if (out) writeFileSync(out, json); diff --git a/src/gen/catalog.ts b/src/gen/catalog.ts new file mode 100644 index 0000000..aa9754d --- /dev/null +++ b/src/gen/catalog.ts @@ -0,0 +1,199 @@ +// Каталог мебели: каждый предмет — набор простых фигур. +// Локальные оси предмета: x — вдоль ширины, y — в глубину; y < 0 — «спинка» (к стене), y > 0 — лицевая сторона. + +import type { Shape } from '../types'; + +export interface Def { + kind: string; + w: number; + d: number; + shapes: Shape[]; + /** Высокий предмет: не ставим перед окнами, закрывает обзор. */ + tall?: boolean; + blocksMove?: boolean; + /** Сколько свободного места нужно перед предметом (м). */ + front?: number; + tags?: string[]; +} + +const R = (x: number, y: number, w: number, h: number, s: Shape['s'] = 'base', r?: number): Shape => ({ t: 'rect', x, y, w, h, s, r }); +const O = (x: number, y: number, r: number, s: Shape['s'] = 'base'): Shape => ({ t: 'circle', x, y, r, s }); +const Ln = (x1: number, y1: number, x2: number, y2: number, s: Shape['s'] = 'line'): Shape => ({ t: 'line', x1, y1, x2, y2, s }); + +export function bed(double: boolean): Def { + const w = double ? 1.6 : 0.9, d = 2.0; + const shapes: Shape[] = [R(0, 0, w, d, 'wood', 0.05), R(0, 0.05, w - 0.1, d - 0.15, 'soft', 0.06)]; + if (double) shapes.push(R(-0.38, -d / 2 + 0.3, 0.62, 0.34, 'base', 0.08), R(0.38, -d / 2 + 0.3, 0.62, 0.34, 'base', 0.08)); + else shapes.push(R(0, -d / 2 + 0.3, 0.66, 0.34, 'base', 0.08)); + shapes.push(R(0, 0.32, w - 0.08, d * 0.58, 'fabric', 0.05)); + return { kind: double ? 'bed_double' : 'bed_single', w, d, shapes, front: 0.5, tags: [`sleep:${double ? 2 : 1}`] }; +} + +export function bedWithNightstands(): Def { + const b = bed(true); + const w = 1.6 + 2 * 0.5; + const shapes = [...b.shapes]; + for (const sx of [-1, 1]) shapes.push(R(sx * (0.8 + 0.25), -0.78, 0.44, 0.4, 'wood', 0.03), O(sx * (0.8 + 0.25), -0.78, 0.1, 'accent')); + return { ...b, kind: 'bed_double', w, shapes }; +} + +export const hospitalBed = (): Def => ({ + kind: 'hospital_bed', w: 1.0, d: 2.1, front: 0.6, tags: ['sleep:1'], + shapes: [R(0, 0, 1.0, 2.1, 'metal', 0.06), R(0, 0.05, 0.86, 1.9, 'soft', 0.05), R(0, -0.75, 0.6, 0.3, 'base', 0.08), Ln(-0.47, -0.5, -0.47, 0.6, 'dark'), Ln(0.47, -0.5, 0.47, 0.6, 'dark')], +}); + +export const nightstand = (): Def => ({ kind: 'nightstand', w: 0.45, d: 0.4, shapes: [R(0, 0, 0.45, 0.4, 'wood', 0.03), O(0, 0, 0.1, 'accent')] }); + +export const wardrobe = (w = 1.2): Def => ({ + kind: 'wardrobe', w, d: 0.6, tall: true, front: 0.6, tags: ['storage'], + shapes: [R(0, 0, w, 0.6, 'wood', 0.02), Ln(0, -0.28, 0, 0.28), Ln(-w / 2 + 0.05, 0.27, w / 2 - 0.05, 0.27)], +}); + +export const desk = (w = 1.2): Def => ({ + kind: 'desk', w, d: 1.15, front: 0.2, tags: ['work', 'sit:1'], + shapes: [R(0, -0.27, w, 0.6, 'wood', 0.03), R(-w / 2 + 0.25, -0.35, 0.36, 0.25, 'dark', 0.02), O(0, 0.25, 0.24, 'dark')], +}); + +export const sofa = (w = 2.0): Def => ({ + kind: 'sofa', w, d: 0.9, front: 0.4, tags: [`sit:${Math.round(w / 0.65)}`], + shapes: [R(0, 0, w, 0.9, 'fabric', 0.12), R(0, -0.33, w - 0.1, 0.22, 'soft', 0.08), R(-w / 2 + 0.1, 0.05, 0.18, 0.78, 'soft', 0.06), R(w / 2 - 0.1, 0.05, 0.18, 0.78, 'soft', 0.06), Ln(-w / 6, -0.2, -w / 6, 0.4), Ln(w / 6, -0.2, w / 6, 0.4)], +}); + +export function sofaSet(): Def { + const s = sofa(2.1); + const shapes = s.shapes.map((sh) => shift(sh, 0, -0.55)); + shapes.push(R(0, 0.6, 1.05, 0.55, 'wood', 0.06), R(0, 0.3, 2.4, 1.5, 'accent', 0.1)); + // ковёр под набором — первым, чтобы был снизу + shapes.unshift(shapes.pop()!); + return { kind: 'sofa_set', w: 2.4, d: 2.0, shapes, front: 0.3, tags: s.tags }; +} + +export const armchair = (): Def => ({ + kind: 'armchair', w: 0.85, d: 0.85, tags: ['sit:1'], + shapes: [R(0, 0, 0.85, 0.85, 'fabric', 0.15), R(0, -0.3, 0.75, 0.2, 'soft', 0.08), R(0, 0.08, 0.5, 0.5, 'soft', 0.1)], +}); + +export const tvStand = (): Def => ({ kind: 'tv', w: 1.6, d: 0.45, front: 1.2, shapes: [R(0, 0, 1.6, 0.45, 'wood', 0.03), R(0, -0.08, 1.2, 0.07, 'dark')] }); +export const bookshelf = (w = 1.0): Def => ({ kind: 'bookshelf', w, d: 0.35, tall: true, front: 0.5, shapes: [R(0, 0, w, 0.35, 'wood', 0.02), Ln(-w / 2 + 0.05, 0, w / 2 - 0.05, 0)] }); +export const plant = (): Def => ({ kind: 'plant', w: 0.5, d: 0.5, blocksMove: true, shapes: [O(0, 0, 0.22, 'base'), O(0, 0, 0.26, 'green')] }); + +export function diningTable(seats: 4 | 6): Def { + const tw = seats === 4 ? 1.2 : 1.8, th = 0.85; + const shapes: Shape[] = []; + const n = seats / 2; + for (let i = 0; i < n; i++) { + const x = -tw / 2 + (tw / n) * (i + 0.5); + shapes.push(R(x, -th / 2 - 0.3, 0.42, 0.42, 'wood', 0.06), R(x, th / 2 + 0.3, 0.42, 0.42, 'wood', 0.06)); + } + shapes.push(R(0, 0, tw, th, 'wood', 0.04)); + return { kind: 'dining_table', w: tw + 0.2, d: th + 1.2, shapes, tags: [`sit:${seats}`] }; +} + +export function kitchenLine(L: number): Def { + const shapes: Shape[] = [R(0, 0, L, 0.62, 'base', 0.02)]; + // плита, мойка, разделочные зоны + const stoveX = -L / 2 + Math.min(L * 0.3, 0.9); + shapes.push(R(stoveX, 0, 0.6, 0.56, 'dark', 0.03)); + for (const [dx, dy] of [[-0.14, -0.13], [0.14, -0.13], [-0.14, 0.13], [0.14, 0.13]]) shapes.push(O(stoveX + dx, dy, 0.09, 'metal')); + const sinkX = L / 2 - Math.min(L * 0.3, 0.75); + shapes.push(R(sinkX, 0.02, 0.6, 0.44, 'metal', 0.06), O(sinkX + 0.12, 0.02, 0.05, 'dark')); + return { kind: 'kitchen', w: L, d: 0.62, front: 0.9, shapes, tags: ['cook'] }; +} + +export const fridge = (): Def => ({ kind: 'fridge', w: 0.62, d: 0.66, tall: true, front: 0.7, shapes: [R(0, 0, 0.62, 0.66, 'base', 0.04), Ln(-0.25, 0.3, 0.25, 0.3, 'dark')], tags: ['food'] }); +export const toilet = (): Def => ({ kind: 'toilet', w: 0.45, d: 0.72, front: 0.5, shapes: [R(0, -0.26, 0.45, 0.2, 'base', 0.04), O(0, 0.08, 0.2, 'base'), O(0, 0.1, 0.12, 'water')] }); +export const basin = (): Def => ({ kind: 'basin', w: 0.55, d: 0.45, front: 0.5, shapes: [R(0, 0, 0.55, 0.45, 'base', 0.08), O(0, 0.03, 0.14, 'water')] }); +export const bathtub = (): Def => ({ kind: 'bathtub', w: 1.7, d: 0.76, shapes: [R(0, 0, 1.7, 0.76, 'base', 0.12), R(0.05, 0, 1.45, 0.56, 'water', 0.2), O(-0.6, 0, 0.04, 'dark')] }); +export const shower = (): Def => ({ kind: 'shower', w: 0.9, d: 0.9, shapes: [R(0, 0, 0.9, 0.9, 'base', 0.02), R(0, 0, 0.8, 0.8, 'water', 0.02), O(0, 0, 0.04, 'dark'), Ln(-0.45, 0.45, 0.45, 0.45, 'glass')] }); +export const washer = (): Def => ({ kind: 'washer', w: 0.6, d: 0.6, front: 0.5, shapes: [R(0, 0, 0.6, 0.6, 'base', 0.04), O(0, 0.04, 0.2, 'dark'), O(0, 0.04, 0.14, 'glass')] }); +export const coatRack = (): Def => ({ kind: 'coat_rack', w: 0.9, d: 0.35, shapes: [R(0, 0, 0.9, 0.35, 'wood', 0.03), O(-0.25, 0.02, 0.09, 'fabric'), O(0.05, 0.02, 0.09, 'fabric'), O(0.3, 0.02, 0.09, 'accent')] }); +export const shoeCabinet = (): Def => ({ kind: 'shoe_cabinet', w: 0.8, d: 0.35, shapes: [R(0, 0, 0.8, 0.35, 'wood', 0.02)] }); +export const shelf = (w = 1.2): Def => ({ kind: 'shelf', w, d: 0.5, tall: true, front: 0.7, tags: ['storage'], shapes: [R(0, 0, w, 0.5, 'metal', 0.02), Ln(-w / 2, 0, w / 2, 0, 'dark'), R(-w / 4, 0, w / 3, 0.36, 'wood', 0.02), R(w / 4, 0, w / 4, 0.3, 'accent', 0.02)] }); +export const crate = (): Def => ({ kind: 'crate', w: 0.8, d: 0.8, shapes: [R(0, 0, 0.8, 0.8, 'wood', 0.03), Ln(-0.36, -0.36, 0.36, 0.36), Ln(-0.36, 0.36, 0.36, -0.36)], tags: ['container'] }); +export const boiler = (): Def => ({ kind: 'boiler', w: 0.6, d: 0.6, tall: true, shapes: [O(0, 0, 0.29, 'metal'), O(0, 0, 0.1, 'dark')] }); + +export function gondola(L: number): Def { + const shapes: Shape[] = [R(0, 0, L, 1.0, 'base', 0.03), Ln(-L / 2 + 0.05, 0, L / 2 - 0.05, 0, 'dark')]; + for (let x = -L / 2 + 0.5; x < L / 2 - 0.2; x += 0.9) shapes.push(R(x + 0.2, -0.25, 0.6, 0.3, 'accent', 0.02), R(x + 0.25, 0.25, 0.5, 0.3, 'fabric', 0.02)); + return { kind: 'gondola', w: L, d: 1.0, tall: true, front: 1.2, tags: ['goods'], shapes }; +} + +export function wallShelf(L: number): Def { + const shapes: Shape[] = [R(0, 0, L, 0.5, 'base', 0.02)]; + for (let x = -L / 2 + 0.45; x < L / 2 - 0.2; x += 0.9) shapes.push(R(x, 0.02, 0.7, 0.32, 'accent', 0.02)); + return { kind: 'wall_shelf', w: L, d: 0.5, tall: true, front: 1.0, tags: ['goods'], shapes }; +} + +export const fridgeDisplay = (L = 2.4): Def => ({ kind: 'fridge_display', w: L, d: 0.85, tall: true, front: 1.2, tags: ['goods'], shapes: [R(0, 0, L, 0.85, 'metal', 0.03), R(0, 0.15, L - 0.1, 0.45, 'glass', 0.02)] }); +export const checkout = (): Def => ({ kind: 'checkout', w: 0.9, d: 2.0, front: 0, tags: ['work', 'trade'], shapes: [R(0, 0, 0.9, 2.0, 'base', 0.04), R(0, 0.35, 0.5, 1.0, 'dark', 0.03), R(0.15, -0.6, 0.35, 0.3, 'metal', 0.02)] }); +export const counter = (L = 1.8): Def => ({ kind: 'counter', w: L, d: 0.65, front: 1.0, tags: ['work', 'trade'], shapes: [R(0, 0, L, 0.65, 'wood', 0.04), R(-L / 2 + 0.35, 0, 0.35, 0.3, 'dark', 0.02)] }); +export const clothesRack = (): Def => ({ kind: 'rack', w: 1.4, d: 0.6, front: 0.8, tags: ['goods'], shapes: [Ln(-0.7, 0, 0.7, 0, 'metal'), O(-0.45, 0, 0.17, 'fabric'), O(-0.15, 0, 0.17, 'accent'), O(0.15, 0, 0.17, 'fabric'), O(0.45, 0, 0.17, 'soft')] }); + +export function cafeTable(): Def { + return { + kind: 'cafe_table', w: 1.5, d: 1.5, tags: ['sit:4'], + shapes: [O(0, -0.55, 0.2, 'wood'), O(0, 0.55, 0.2, 'wood'), O(-0.55, 0, 0.2, 'wood'), O(0.55, 0, 0.2, 'wood'), O(0, 0, 0.38, 'base')], + }; +} + +export const proStove = (): Def => ({ kind: 'pro_stove', w: 1.2, d: 0.8, front: 1.0, tags: ['cook'], shapes: [R(0, 0, 1.2, 0.8, 'metal', 0.03), O(-0.3, -0.15, 0.13, 'dark'), O(0.3, -0.15, 0.13, 'dark'), O(-0.3, 0.18, 0.13, 'dark'), O(0.3, 0.18, 0.13, 'dark')] }); +export const prepTable = (L = 1.6): Def => ({ kind: 'prep_table', w: L, d: 0.7, front: 0.9, tags: ['cook'], shapes: [R(0, 0, L, 0.7, 'metal', 0.02), Ln(-L / 2 + 0.05, 0.3, L / 2 - 0.05, 0.3, 'dark')] }); +export const machine = (): Def => ({ kind: 'machine', w: 2.4, d: 1.4, front: 0.8, tags: ['work'], shapes: [R(0, 0, 2.4, 1.4, 'metal', 0.05), R(-0.4, 0, 1.1, 0.8, 'dark', 0.04), O(0.75, 0, 0.3, 'accent'), Ln(-1.2, 0.55, 1.2, 0.55, 'accent')] }); +export const workbench = (L = 2.0): Def => ({ kind: 'workbench', w: L, d: 0.75, front: 0.8, tags: ['work'], shapes: [R(0, 0, L, 0.75, 'wood', 0.02), R(-L / 2 + 0.3, 0, 0.3, 0.3, 'metal'), R(L / 4, -0.15, 0.6, 0.25, 'accent', 0.02)] }); + +export function palletRack(L: number): Def { + const shapes: Shape[] = [R(0, 0, L, 1.1, 'base', 0.01)]; + for (let x = -L / 2 + 0.7; x < L / 2 - 0.3; x += 1.4) shapes.push(R(x, 0, 1.15, 0.95, 'wood', 0.02), Ln(x - 0.5, -0.4, x + 0.5, 0.4, 'dark')); + for (let x = -L / 2; x <= L / 2 + 1e-6; x += 2.8) shapes.push(R(Math.min(x, L / 2 - 0.05), 0, 0.1, 1.1, 'accent')); + return { kind: 'pallet_rack', w: L, d: 1.1, tall: true, front: 1.5, tags: ['storage'], shapes }; +} + +export const pallet = (): Def => ({ kind: 'pallet', w: 1.2, d: 1.0, tags: ['container'], shapes: [R(0, 0, 1.2, 1.0, 'wood', 0.02), R(0, 0, 1.0, 0.8, 'accent', 0.03)] }); + +export function studentDesk(): Def { + return { + kind: 'student_desk', w: 1.3, d: 1.05, tags: ['sit:2'], + shapes: [R(0, -0.2, 1.3, 0.55, 'wood', 0.03), R(-0.32, 0.3, 0.4, 0.38, 'dark', 0.06), R(0.32, 0.3, 0.4, 0.38, 'dark', 0.06)], + }; +} + +export const teacherDesk = (): Def => ({ kind: 'teacher_desk', w: 1.5, d: 1.2, tags: ['work', 'sit:1'], shapes: [R(0, 0.2, 1.5, 0.7, 'wood', 0.03), O(0, -0.35, 0.24, 'dark')] }); +export const board = (L = 3.0): Def => ({ kind: 'board', w: L, d: 0.12, blocksMove: false, front: 1.5, shapes: [R(0, 0, L, 0.1, 'dark')] }); +export const pew = (L: number): Def => ({ kind: 'pew', w: L, d: 0.55, tags: [`sit:${Math.floor(L / 0.55)}`], shapes: [R(0, 0.06, L, 0.42, 'wood', 0.04), R(0, -0.2, L, 0.1, 'dark')] }); +export const altar = (): Def => ({ kind: 'altar', w: 2.0, d: 0.9, front: 1.5, shapes: [R(0, 0, 2.0, 0.9, 'base', 0.03), R(0, 0, 2.1, 0.3, 'accent'), O(-0.7, 0, 0.06, 'accent'), O(0.7, 0, 0.06, 'accent')] }); + +export function officeCluster(): Def { + const shapes: Shape[] = []; + for (const sx of [-0.7, 0.7]) { + shapes.push(R(sx, -0.35, 1.38, 0.7, 'wood', 0.02), R(sx, 0.35, 1.38, 0.7, 'wood', 0.02)); + shapes.push(R(sx - 0.3, -0.5, 0.4, 0.18, 'dark'), R(sx - 0.3, 0.5, 0.4, 0.18, 'dark')); + shapes.push(O(sx, -1.0, 0.24, 'dark'), O(sx, 1.0, 0.24, 'dark')); + } + return { kind: 'desk_cluster', w: 2.8, d: 2.6, tags: ['work', 'sit:4'], shapes }; +} + +export function meetingTable(L: number): Def { + const shapes: Shape[] = []; + const n = Math.max(2, Math.floor((L - 0.4) / 0.7)); + for (let i = 0; i < n; i++) { + const x = -L / 2 + 0.2 + ((L - 0.4) / n) * (i + 0.5); + shapes.push(O(x, -0.85, 0.23, 'dark'), O(x, 0.85, 0.23, 'dark')); + } + shapes.push(R(0, 0, L, 1.1, 'wood', 0.2)); + return { kind: 'meeting_table', w: L + 0.2, d: 2.2, tags: [`sit:${n * 2}`, 'work'], shapes }; +} + +export const filing = (): Def => ({ kind: 'filing_cabinet', w: 0.5, d: 0.6, tall: true, front: 0.6, shapes: [R(0, 0, 0.5, 0.6, 'metal', 0.02), Ln(-0.2, 0.0, 0.2, 0.0, 'dark')] }); +export const mailboxes = (): Def => ({ kind: 'mailboxes', w: 1.2, d: 0.3, shapes: [R(0, 0, 1.2, 0.3, 'metal', 0.02), Ln(-0.3, -0.14, -0.3, 0.14, 'dark'), Ln(0, -0.14, 0, 0.14, 'dark'), Ln(0.3, -0.14, 0.3, 0.14, 'dark')] }); + +export function carDef(): Def { + return { + kind: 'car', w: 1.8, d: 4.4, tags: ['vehicle'], + shapes: [R(0, 0, 1.8, 4.4, 'car', 0.45), R(0, -0.75, 1.5, 0.55, 'glass', 0.15), R(0, 1.25, 1.45, 0.4, 'glass', 0.12), R(0, 0.25, 1.5, 1.4, 'dark', 0.2)], + }; +} + +export function shift(s: Shape, dx: number, dy: number): Shape { + if (s.t === 'line') return { ...s, x1: s.x1 + dx, x2: s.x2 + dx, y1: s.y1 + dy, y2: s.y2 + dy }; + return { ...s, x: s.x + dx, y: s.y + dy }; +} diff --git a/src/gen/city.ts b/src/gen/city.ts new file mode 100644 index 0000000..b2dd7f4 --- /dev/null +++ b/src/gen/city.ts @@ -0,0 +1,412 @@ +// Уровень города: зоны, дороги, контуры зданий, уличные объекты. +// Интерьеры генерируются отдельно (interior.ts) — в воркерах. + +import type { OsmElement, BBox } from '../osm/overpass'; +import type { Area, AreaKind, Building, Prop, Ring, Road, RoadKind, Vec, World } from '../types'; +import { Projector } from './project'; +import { + bboxOf, centroid, cleanRing, dist, distToSegment, minAreaRectAngle, + pointInRing, pointInRings, ringArea, rotate, signedArea, +} from '../util/geom'; +import { Rng, hashString } from '../util/rng'; +import { SpatialGrid } from '../util/spatial'; +import { classify, clampLevels, defaultLevels, parseLevels } from './classify'; +import { carShapes, CAR_COLORS, treeProp } from './props'; + +export interface InteriorJob { + building: Building; + /** Ближайшие к зданию участки дорог: [a, b, вес]. Вход ставится к дороге. */ + roadSegs: [Vec, Vec, number][]; +} + +const LANDUSE: Record = { + residential: 'residential', commercial: 'commercial', retail: 'retail', industrial: 'industrial', + farmland: 'farmland', farm: 'farmland', farmyard: 'farmyard', grass: 'grass', village_green: 'grass', + recreation_ground: 'grass', meadow: 'meadow', forest: 'forest', orchard: 'orchard', vineyard: 'vineyard', + cemetery: 'cemetery', construction: 'construction', brownfield: 'construction', greenfield: 'meadow', + railway: 'railway', allotments: 'garden', basin: 'water', reservoir: 'water', plant_nursery: 'garden', + flowerbed: 'garden', garages: 'industrial', religious: 'grass', education: 'school', +}; +const NATURAL: Record = { + water: 'water', wood: 'forest', scrub: 'scrub', heath: 'scrub', grassland: 'meadow', wetland: 'wetland', + beach: 'beach', sand: 'sand', bare_rock: 'sand', scree: 'sand', +}; +const LEISURE: Record = { + park: 'park', garden: 'garden', pitch: 'pitch', track: 'pitch', playground: 'playground', + golf_course: 'grass', swimming_pool: 'water', dog_park: 'grass', common: 'grass', +}; +const AMENITY_AREA: Record = { + parking: 'parking', school: 'school', kindergarten: 'school', college: 'school', university: 'school', + hospital: 'hospital', grave_yard: 'cemetery', marketplace: 'pedestrian', fuel: 'pedestrian', +}; + +const AREA_TIER: Record = { + residential: 0, commercial: 0, industrial: 0, retail: 0, farmland: 0, railway: 0, school: 0, hospital: 0, construction: 0, + farmyard: 1, forest: 1, meadow: 1, grass: 1, park: 1, scrub: 1, orchard: 1, vineyard: 1, cemetery: 1, garden: 1, + wetland: 1, beach: 1, sand: 1, + pitch: 2, playground: 2, parking: 2, pedestrian: 2, water: 3, +}; + +const ROAD_WIDTH: Record = { + motorway: 11, trunk: 10, primary: 9, secondary: 8, tertiary: 7, residential: 6, unclassified: 5.5, + living_street: 5, service: 3.6, pedestrian: 5, track: 3, footway: 1.8, cycleway: 2, path: 1.2, steps: 2, + bridleway: 1.5, road: 5, +}; +const SIDEWALK: Record = { primary: 2.2, secondary: 2, tertiary: 1.8, residential: 1.5, living_street: 0, trunk: 0 }; + +function areaKindOf(t: Record): AreaKind | null { + if (t.building) return null; + if (t.landuse && LANDUSE[t.landuse]) return LANDUSE[t.landuse]; + if (t.natural && NATURAL[t.natural]) return NATURAL[t.natural]; + if (t.waterway === 'riverbank' || t.waterway === 'dock') return 'water'; + if (t.leisure && LEISURE[t.leisure]) return LEISURE[t.leisure]; + if (t.amenity && AMENITY_AREA[t.amenity]) return AMENITY_AREA[t.amenity]; + if (t.place === 'square' || t['area:highway'] || (t.highway === 'pedestrian' && t.area === 'yes')) return 'pedestrian'; + return null; +} + +/** Сборка колец мультиполигона из кусков путей. */ +function assembleRings(parts: Vec[][]): Vec[][] { + const pool = parts.filter((p) => p.length >= 2).map((p) => p.slice()); + const rings: Vec[][] = []; + const same = (a: Vec, b: Vec) => Math.abs(a[0] - b[0]) < 1e-6 && Math.abs(a[1] - b[1]) < 1e-6; + while (pool.length) { + let cur = pool.shift()!; + let grew = true; + while (!same(cur[0], cur[cur.length - 1]) && grew) { + grew = false; + for (let i = 0; i < pool.length; i++) { + const p = pool[i]; + const end = cur[cur.length - 1]; + if (same(end, p[0])) cur = cur.concat(p.slice(1)); + else if (same(end, p[p.length - 1])) cur = cur.concat(p.slice(0, -1).reverse()); + else if (same(cur[0], p[p.length - 1])) cur = p.slice(0, -1).concat(cur); + else if (same(cur[0], p[0])) cur = p.slice(1).reverse().concat(cur); + else continue; + pool.splice(i, 1); + grew = true; + break; + } + } + if (cur.length >= 4) rings.push(cur); + } + return rings; +} + +interface Poly { + outer: Ring; + holes: Ring[]; +} + +function polysOfElement(el: OsmElement, proj: Projector): Poly[] { + if (el.type === 'way' && el.geometry) { + const g = el.geometry; + if (g.length < 4) return []; + const a = g[0], b = g[g.length - 1]; + if (a.lat !== b.lat || a.lon !== b.lon) return []; + return [{ outer: g.map((p) => proj.toXY(p.lat, p.lon)), holes: [] }]; + } + if (el.type === 'relation' && el.members) { + const outers = assembleRings(el.members.filter((m) => m.role !== 'inner' && m.geometry).map((m) => m.geometry!.map((p) => proj.toXY(p.lat, p.lon)))); + const inners = assembleRings(el.members.filter((m) => m.role === 'inner' && m.geometry).map((m) => m.geometry!.map((p) => proj.toXY(p.lat, p.lon)))); + return outers.map((o) => ({ outer: o, holes: inners.filter((h) => pointInRing(h[0], o)) })); + } + return []; +} + +/** Ориентируем кольца единообразно: внешнее — по часовой (в осях y-вниз), дыры — против. */ +function orient(r: Ring, outer: boolean): Ring { + const a = signedArea(r); + return (a > 0) === outer ? r : r.slice().reverse(); +} + +export function buildCity(elements: OsmElement[], bbox: BBox, name: string, seed: number): { world: World; jobs: InteriorJob[] } { + const lat0 = (bbox[0] + bbox[2]) / 2, lon0 = (bbox[1] + bbox[3]) / 2; + const proj = new Projector(lat0, lon0); + const p0 = proj.toXY(bbox[2], bbox[1]); + const p1 = proj.toXY(bbox[0], bbox[3]); + const bounds = { minX: p0[0], minY: p0[1], maxX: p1[0], maxY: p1[1] }; + const inBounds = (p: Vec, m = 0) => p[0] >= bounds.minX - m && p[0] <= bounds.maxX + m && p[1] >= bounds.minY - m && p[1] <= bounds.maxY + m; + const rng = new Rng(seed); + + const areas: Area[] = []; + const roads: Road[] = []; + const props: Prop[] = []; + const pois: { p: Vec; tags: Record }[] = []; + const buildingEls: { el: OsmElement; poly: Poly }[] = []; + + for (const el of elements) { + const t = el.tags ?? {}; + if (el.type === 'node') { + if (el.lat == null || el.lon == null) continue; + const p = proj.toXY(el.lat, el.lon); + if (!inBounds(p, 5)) continue; + if (t.natural === 'tree') props.push(treeProp(`t${el.id}`, p, rng, t)); + else if (t.highway === 'street_lamp') props.push({ id: `l${el.id}`, kind: 'lamp', pos: p, rot: 0, w: 0.4, d: 0.4, shapes: [{ t: 'circle', x: 0, y: 0, r: 0.22, s: 'metal' }], blocksMove: true, blocksSight: false }); + else if (t.amenity === 'bench') props.push({ id: `b${el.id}`, kind: 'bench', pos: p, rot: rng.range(0, Math.PI), w: 1.8, d: 0.6, shapes: [{ t: 'rect', x: 0, y: 0, w: 1.8, h: 0.55, s: 'wood' }, { t: 'rect', x: 0, y: -0.22, w: 1.8, h: 0.12, s: 'dark' }], blocksMove: true, blocksSight: false, tags: ['sit'] }); + else if (t.amenity === 'fountain') props.push({ id: `f${el.id}`, kind: 'fountain', pos: p, rot: 0, w: 4, d: 4, shapes: [{ t: 'circle', x: 0, y: 0, r: 2, s: 'base' }, { t: 'circle', x: 0, y: 0, r: 1.7, s: 'water' }], blocksMove: true, blocksSight: false }); + if (t.shop || t.amenity || t.office || t.craft || t.tourism || t.healthcare) pois.push({ p, tags: t }); + continue; + } + if (t.building && t.building !== 'no' && t.building !== 'roof' && !t['building:part']) { + for (const poly of polysOfElement(el, proj)) buildingEls.push({ el, poly }); + continue; + } + // Дороги, рельсы, водотоки + const hw = t.highway, rw = t.railway, ww = t.waterway; + const isLinear = el.type === 'way' && el.geometry && (hw || rw || ww) && !(t.area === 'yes') && !(ww === 'riverbank'); + if (isLinear && ROAD_WIDTH[hw] !== undefined || (isLinear && (rw || ww))) { + const pts = el.geometry!.map((g) => proj.toXY(g.lat, g.lon)); + let kind: RoadKind | null = null; + let width = 0, sidewalk = 0; + if (hw && ROAD_WIDTH[hw] !== undefined) { + kind = (['motorway', 'trunk', 'primary', 'secondary', 'tertiary', 'residential', 'unclassified', 'service', 'living_street', 'pedestrian', 'track', 'footway', 'cycleway', 'path', 'steps'] as const).find((k) => hw.startsWith(k)) ?? (hw === 'bridleway' ? 'path' : 'unclassified'); + width = ROAD_WIDTH[hw.replace('_link', '')] ?? 5; + if (hw.endsWith('_link')) width *= 0.75; + if (hw === 'service' && (t.service === 'parking_aisle')) width = 5; + if (hw === 'service' && (t.service === 'driveway')) width = 3; + const lanes = parseInt(t.lanes); + if (isFinite(lanes) && lanes > 0 && ROAD_WIDTH[hw] >= 5) width = Math.max(width * 0.6, lanes * 3.2); + const w = parseFloat(t.width); + if (isFinite(w) && w > 0.5 && w < 60) width = w; + sidewalk = SIDEWALK[hw] ?? 0; + if (t.sidewalk === 'no' || t.sidewalk === 'none' || t.sidewalk === 'separate') sidewalk = 0; + else if (t.sidewalk && sidewalk === 0 && width >= 5) sidewalk = 1.5; + } else if (rw) { + if (rw === 'platform') continue; + kind = rw === 'tram' ? 'tram' : 'rail'; + width = 1.6; + } else if (ww) { + kind = ww === 'river' ? 'river' : ww === 'canal' ? 'canal' : ww === 'stream' ? 'stream' : 'ditch'; + width = { river: 14, canal: 8, stream: 2.5, ditch: 1.2 }[kind as 'river']; + const w = parseFloat(t.width); + if (isFinite(w) && w > 0.3 && w < 300) width = w; + if (t.tunnel === 'culvert') continue; + } + if (!kind) continue; + roads.push({ + id: `r${el.id}`, osmId: `way/${el.id}`, kind, pts, width, sidewalk, + lanes: parseInt(t.lanes) || 0, oneway: t.oneway === 'yes', + layer: parseInt(t.layer) || 0, bridge: !!t.bridge && t.bridge !== 'no', tunnel: !!t.tunnel && t.tunnel !== 'no', + name: t.name, + }); + continue; + } + const ak = areaKindOf(t); + if (ak) { + for (const poly of polysOfElement(el, proj)) { + const bb = bboxOf(poly.outer); + if (bb[2] < bounds.minX || bb[0] > bounds.maxX || bb[3] < bounds.minY || bb[1] > bounds.maxY) continue; + areas.push({ id: `a${el.type[0]}${el.id}_${areas.length}`, osmId: `${el.type}/${el.id}`, kind: ak, rings: [orient(cleanRing(poly.outer, 0.01), true), ...poly.holes.map((h) => orient(h, false))], name: t.name }); + } + } + if (t.natural === 'tree_row' && el.type === 'way' && el.geometry) { + const pts = el.geometry.map((g) => proj.toXY(g.lat, g.lon)); + let acc = 0; + for (let i = 1; i < pts.length; i++) { + const L = dist(pts[i - 1], pts[i]); + for (let s = acc; s < L; s += 8) { + const q: Vec = [pts[i - 1][0] + ((pts[i][0] - pts[i - 1][0]) * s) / L, pts[i - 1][1] + ((pts[i][1] - pts[i - 1][1]) * s) / L]; + if (inBounds(q)) props.push(treeProp(`tr${el.id}_${props.length}`, q, rng, {})); + } + acc = (acc - L) % 8; + if (acc < 0) acc += 8; + } + } + } + + // Порядок отрисовки зон: крупные подложки → зелень → площадки → вода + areas.sort((a, b) => AREA_TIER[a.kind] - AREA_TIER[b.kind] || ringArea(b.rings[0]) - ringArea(a.rings[0])); + + // ---- Индексы для запросов + const landGrid = new SpatialGrid(100); + for (const a of areas) if (AREA_TIER[a.kind] <= 1) landGrid.insert(a, bboxOf(a.rings[0])); + type Seg = { a: Vec; b: Vec; road: Road }; + const segGrid = new SpatialGrid(40); + for (const r of roads) { + if (r.tunnel) continue; + for (let i = 1; i < r.pts.length; i++) { + const a = r.pts[i - 1], b = r.pts[i]; + const m = r.width / 2 + r.sidewalk + 1; + segGrid.insert({ a, b, road: r }, [Math.min(a[0], b[0]) - m, Math.min(a[1], b[1]) - m, Math.max(a[0], b[0]) + m, Math.max(a[1], b[1]) + m]); + } + } + const poiGrid = new SpatialGrid<{ p: Vec; tags: Record }>(30); + for (const p of pois) poiGrid.insert(p, [p.p[0], p.p[1], p.p[0], p.p[1]]); + + // ---- Здания + const buildings: Building[] = []; + const bGrid = new SpatialGrid(40); + for (const { el, poly } of buildingEls) { + let outer = cleanRing(poly.outer, 0.08); + if (outer.length < 3) continue; + const area = ringArea(outer) - poly.holes.reduce((s, h) => s + ringArea(h), 0); + if (area < 6 || area > 40000) continue; + const c = centroid(outer); + if (!inBounds(c)) continue; + outer = orient(outer, true); + const t = el.tags ?? {}; + const id = `b${el.type[0]}${el.id}`; + const b: Building = { + id: buildings.some((x) => x.id === id) ? `${id}_${buildings.length}` : id, + osmId: `${el.type}/${el.id}`, + kind: 'house', footprint: outer, holes: poly.holes.map((h) => orient(cleanRing(h, 0.08), false)).filter((h) => h.length >= 3), + area, levels: 1, levelsSource: 'estimate', frame: { origin: [0, 0], angle: minAreaRectAngle(outer) }, + floors: [], units: [], beds: 0, seed: hashString(`${el.type}/${el.id}`) ^ seed, + name: t.name, + address: t['addr:street'] ? `${t['addr:street']} ${t['addr:housenumber'] ?? ''}`.trim() : t['addr:housenumber'], + }; + (b as any)._tags = t; + buildings.push(b); + bGrid.insert(b, bboxOf(outer)); + } + + for (const b of buildings) { + const t = (b as any)._tags as Record; + const brng = new Rng(b.seed); + const bb = bboxOf(b.footprint); + const inside = poiGrid.query(bb).filter((p) => pointInRing(p.p, b.footprint)).map((p) => p.tags); + const c = centroid(b.footprint); + let landuse: string | undefined; + for (const a of landGrid.query([c[0], c[1], c[0], c[1]])) { + if (AREA_TIER[a.kind] === 0 && pointInRings(c, a.rings)) landuse = a.kind; + if (a.kind === 'farmyard' && pointInRings(c, a.rings)) landuse = 'farmyard'; + } + const near = bGrid.query([bb[0] - 15, bb[1] - 15, bb[2] + 15, bb[3] + 15]); + const nearBigger = near.some((o) => o !== b && o.area > b.area * 2.5 && o.area > 60); + const cls = classify({ tags: t, pois: inside, area: b.area, landuse, nearBigger }, brng); + b.kind = cls.kind; + b.use = cls.use; + if (!b.name) b.name = inside.find((p) => p.name)?.name; + const lv = parseLevels(t); + if (lv) { + b.levels = lv.levels; + b.levelsSource = lv.source; + } + } + // Этажность без тегов: медиана соседей с тегами, иначе по виду + const tagged = buildings.filter((b) => b.levelsSource !== 'estimate'); + const tGrid = new SpatialGrid(100); + for (const b of tagged) tGrid.insert(b, bboxOf(b.footprint)); + for (const b of buildings) { + if (b.levelsSource !== 'estimate') continue; + const brng = new Rng(b.seed ^ 0x51ed); + const c = centroid(b.footprint); + const ns = tGrid.query([c[0] - 120, c[1] - 120, c[0] + 120, c[1] + 120]) + .filter((o) => o.kind === b.kind || (o.kind === 'apartments' && b.kind === 'mixed') || (o.kind === 'mixed' && b.kind === 'apartments')) + .map((o) => o.levels).sort((x, y) => x - y); + b.levels = ns.length >= 3 ? clampLevels(b.kind, ns[ns.length >> 1]) : defaultLevels(b.kind, b.area, brng); + if (b.area < 45) b.levels = Math.min(b.levels, 1); + } + for (const b of buildings) delete (b as any)._tags; + + // ---- Уличные объекты: деревья в лесах/парках, машины на парковках + const blockedByBuilding = (p: Vec, m: number) => + bGrid.query([p[0] - m, p[1] - m, p[0] + m, p[1] + m]).some((b) => pointInRing(p, b.footprint) || distToRing(p, b.footprint) < m); + const nearRoad = (p: Vec, m: number) => + segGrid.query([p[0] - m, p[1] - m, p[0] + m, p[1] + m]).some((s) => distToSegment(p, s.a, s.b) < s.road.width / 2 + s.road.sidewalk + m); + + let treeBudget = 40000; + for (const a of areas) { + const spacing = a.kind === 'forest' ? 6 : a.kind === 'park' ? 14 : a.kind === 'orchard' ? 7 : a.kind === 'cemetery' ? 16 : a.kind === 'scrub' ? 8 : 0; + if (!spacing) continue; + const bb = bboxOf(a.rings[0]); + const x0 = Math.max(bb[0], bounds.minX), x1 = Math.min(bb[2], bounds.maxX); + const y0 = Math.max(bb[1], bounds.minY), y1 = Math.min(bb[3], bounds.maxY); + const ar = new Rng(hashString(a.id) ^ seed); + for (let y = y0; y < y1 && treeBudget > 0; y += spacing) + for (let x = x0; x < x1 && treeBudget > 0; x += spacing) { + const p: Vec = [x + ar.range(0, spacing * 0.8), y + ar.range(0, spacing * 0.8)]; + if (a.kind === 'park' && ar.chance(0.35)) continue; + if (!pointInRings(p, a.rings)) continue; + if (blockedByBuilding(p, 2) || nearRoad(p, 1.5)) continue; + props.push(treeProp(`ta${a.id}_${treeBudget}`, p, ar, a.kind === 'scrub' ? { scrub: '1' } : a.kind === 'orchard' ? { orchard: '1' } : {})); + treeBudget--; + } + } + // Парковки: ряды мест 2.5×5 м с проездами 6 м + for (const a of areas) { + if (a.kind !== 'parking') continue; + const outer = a.rings[0]; + if (ringArea(outer) < 60) continue; + const ang = minAreaRectAngle(outer); + const local = outer.map((p) => rotate(p, -ang)); + const lb = bboxOf(local); + const pr = new Rng(hashString(a.id) ^ seed); + const fill = pr.range(0.45, 0.85); + // полоса: ряд машин 5 м, проезд 6 м, ряд 5 м, ... + let y = lb[1] + 0.5; + let row = 0; + while (y + 5 <= lb[3]) { + for (let x = lb[0] + 0.3; x + 2.5 <= lb[2]; x += 2.5) { + const corners: Vec[] = [[x, y], [x + 2.5, y], [x + 2.5, y + 5], [x, y + 5]].map((q) => rotate(q as Vec, ang)); + if (!corners.every((q) => pointInRings(q, a.rings))) continue; + const cc = rotate([x + 1.25, y + 2.5], ang); + if (!inBounds(cc) || blockedByBuilding(cc, 2)) continue; + // разметка места рисуем всегда, машину — с вероятностью + props.push({ id: `ps${a.id}_${props.length}`, kind: 'parking_spot', pos: cc, rot: ang, w: 2.5, d: 5, shapes: [{ t: 'line', x1: -1.25, y1: -2.5, x2: -1.25, y2: 2.5, s: 'line' }, { t: 'line', x1: 1.25, y1: -2.5, x2: 1.25, y2: 2.5, s: 'line' }], blocksMove: false, blocksSight: false }); + if (pr.chance(fill)) { + const flip = row % 2 === 1 ? Math.PI : 0; + props.push({ id: `c${a.id}_${props.length}`, kind: 'car', pos: cc, rot: ang + flip + pr.range(-0.04, 0.04), w: 1.8, d: 4.4, shapes: carShapes(), blocksMove: true, blocksSight: false, color: pr.pick(CAR_COLORS), tags: ['vehicle'] }); + } + } + y += row % 2 === 0 ? 5 + 6 : 5 + 0.0; + row++; + } + } + // Машины вдоль жилых улиц (параллельная парковка) + for (const r of roads) { + if (!['residential', 'tertiary', 'living_street', 'unclassified'].includes(r.kind) || r.tunnel || r.bridge) continue; + const rr = new Rng(hashString(r.id) ^ seed); + if (!rr.chance(0.6)) continue; + for (let i = 1; i < r.pts.length; i++) { + const a = r.pts[i - 1], b = r.pts[i]; + const L = dist(a, b); + if (L < 12) continue; + const dir: Vec = [(b[0] - a[0]) / L, (b[1] - a[1]) / L]; + const nrm: Vec = [-dir[1], dir[0]]; + for (const side of [1, -1]) { + for (let s = 6; s < L - 6; s += 6) { + if (!rr.chance(0.28)) continue; + const off = r.width / 2 - 1.1; + const p: Vec = [a[0] + dir[0] * s + nrm[0] * off * side, a[1] + dir[1] * s + nrm[1] * off * side]; + if (!inBounds(p) || blockedByBuilding(p, 1.5)) continue; + props.push({ id: `cs${r.id}_${props.length}`, kind: 'car', pos: p, rot: Math.atan2(dir[1], dir[0]) + (side > 0 ? Math.PI / 2 : -Math.PI / 2) + rr.range(-0.03, 0.03), w: 1.8, d: 4.4, shapes: carShapes(), blocksMove: true, blocksSight: false, color: rr.pick(CAR_COLORS), tags: ['vehicle'] }); + } + } + } + } + + // ---- Задания на интерьеры: здание + ближайшие дороги + const jobs: InteriorJob[] = buildings.map((b) => { + const bb = bboxOf(b.footprint); + const segs = segGrid.query([bb[0] - 40, bb[1] - 40, bb[2] + 40, bb[3] + 40]) + .filter((s) => !['rail', 'tram', 'river', 'stream', 'canal', 'ditch'].includes(s.road.kind)) + .map((s): [Vec, Vec, number] => [s.a, s.b, s.road.kind === 'footway' || s.road.kind === 'path' || s.road.kind === 'cycleway' ? 0.6 : s.road.kind === 'service' ? 0.8 : 1]); + return { building: b, roadSegs: segs.slice(0, 200) }; + }); + + const world: World = { + version: 1, + id: `w${Date.now().toString(36)}`, + name, + createdAt: new Date().toISOString(), + seed, + origin: { lat: lat0, lon: lon0 }, + bbox, + bounds, + areas, + roads: roads.filter((r) => r.pts.some((p) => inBounds(p, 200))), + buildings, + props: props.filter((p) => inBounds(p.pos, 2)), + models: {}, + attribution: '© OpenStreetMap contributors (ODbL)', + }; + return { world, jobs }; +} + +function distToRing(p: Vec, r: Ring): number { + let d = Infinity; + for (let i = 0; i < r.length; i++) d = Math.min(d, distToSegment(p, r[i], r[(i + 1) % r.length])); + return d; +} diff --git a/src/gen/classify.ts b/src/gen/classify.ts new file mode 100644 index 0000000..79e9ad5 --- /dev/null +++ b/src/gen/classify.ts @@ -0,0 +1,126 @@ +import type { BuildingKind } from '../types'; +import { Rng } from '../util/rng'; + +export interface ClassifyInput { + tags: Record; + /** Теги POI-точек внутри контура. */ + pois: Record[]; + area: number; + landuse?: string; + /** Есть ли рядом здание побольше (для гаражей/сараев во дворах). */ + nearBigger: boolean; +} + +const BUILDING_TAG: Record = { + house: 'house', detached: 'house', semidetached_house: 'house', terrace: 'house', bungalow: 'house', + residential: 'apartments', apartments: 'apartments', dormitory: 'apartments', + hut: 'shed', cabin: 'house', static_caravan: 'shed', + commercial: 'office', office: 'office', retail: 'retail', supermarket: 'retail', kiosk: 'retail', shop: 'retail', + industrial: 'industrial', manufacture: 'industrial', factory: 'industrial', warehouse: 'warehouse', storage_tank: 'shed', + hangar: 'warehouse', service: 'shed', transformer_tower: 'shed', hotel: 'hotel', + school: 'school', kindergarten: 'school', college: 'school', university: 'school', + hospital: 'hospital', clinic: 'hospital', + church: 'church', chapel: 'church', cathedral: 'church', mosque: 'church', synagogue: 'church', temple: 'church', religious: 'church', + civic: 'civic', public: 'civic', government: 'civic', townhall: 'civic', fire_station: 'civic', train_station: 'civic', + sports_hall: 'warehouse', sports_centre: 'warehouse', stadium: 'civic', + garage: 'garage', garages: 'garage', carport: 'garage', parking: 'garage', + shed: 'shed', barn: 'farm', farm_auxiliary: 'farm', stable: 'farm', cowshed: 'farm', greenhouse: 'farm', farm: 'house', + restaurant: 'restaurant', +}; + +const AMENITY_KIND: Record = { + restaurant: 'restaurant', cafe: 'restaurant', fast_food: 'restaurant', bar: 'restaurant', pub: 'restaurant', biergarten: 'restaurant', ice_cream: 'restaurant', + bank: 'office', pharmacy: 'retail', post_office: 'office', townhall: 'civic', police: 'civic', fire_station: 'civic', library: 'civic', + courthouse: 'civic', community_centre: 'civic', theatre: 'civic', cinema: 'civic', arts_centre: 'civic', + school: 'school', kindergarten: 'school', college: 'school', university: 'school', + hospital: 'hospital', clinic: 'hospital', doctors: 'office', dentist: 'office', veterinary: 'office', + place_of_worship: 'church', fuel: 'retail', car_wash: 'garage', marketplace: 'retail', +}; + +const NON_HOME_AMENITY = new Set(Object.keys(AMENITY_KIND)); + +/** Подтип для ключевого POI внутри здания: 'supermarket', 'bakery', 'restaurant', 'bank'… */ +export function useOf(t: Record): string | undefined { + if (t.shop) return t.shop; + if (t.amenity && NON_HOME_AMENITY.has(t.amenity)) return t.amenity; + if (t.office) return 'office'; + if (t.craft) return 'workshop'; + if (t.tourism === 'hotel' || t.tourism === 'hostel' || t.tourism === 'guest_house') return 'hotel'; + if (t.healthcare) return 'clinic'; + return undefined; +} + +export function classify(inp: ClassifyInput, rng: Rng): { kind: BuildingKind; use?: string } { + const t = inp.tags; + const b = t.building; + let kind: BuildingKind | undefined = BUILDING_TAG[b]; + // Сами теги здания (магазин, амнити на контуре) + const own = useOf(t); + const poiUses = inp.pois.map(useOf).filter(Boolean) as string[]; + const use = own ?? poiUses[0]; + + const commercialPoi = (u?: string): BuildingKind | undefined => { + if (!u) return undefined; + if (u === 'hotel') return 'hotel'; + if (u === 'office') return 'office'; + if (u === 'workshop') return 'industrial'; + if (u === 'clinic') return 'office'; + if (AMENITY_KIND[u]) return AMENITY_KIND[u]; + return 'retail'; // shop=* + }; + + if (!kind || b === 'yes' || b === 'commercial' || b === 'retail') { + const ck = commercialPoi(use); + if (ck) kind = ck; + } + if (t.amenity && AMENITY_KIND[t.amenity]) kind = AMENITY_KIND[t.amenity]; + if (t.tourism === 'hotel') kind = 'hotel'; + + if (!kind) { + const a = inp.area; + const lu = inp.landuse; + if (a < 20) kind = 'shed'; + else if (a < 45 && inp.nearBigger) kind = rng.chance(0.6) ? 'garage' : 'shed'; + else if (lu === 'industrial') kind = a > 1500 ? 'warehouse' : a < 60 ? 'shed' : 'industrial'; + else if (lu === 'commercial') kind = a > 2500 ? 'retail' : 'office'; + else if (lu === 'retail') kind = 'retail'; + else if (lu === 'farmyard' || lu === 'farmland' || lu === 'meadow') kind = a > 150 ? 'farm' : a < 60 ? 'shed' : 'house'; + else if (a < 280) kind = 'house'; + else if (a < 2500) kind = 'apartments'; + else kind = 'warehouse'; + } + // магазин на первом этаже многоэтажного жилого дома + if ((kind === 'retail' || kind === 'restaurant') && (b === 'apartments' || b === 'residential')) kind = 'mixed'; + return { kind, use }; +} + +export function parseLevels(t: Record): { levels: number; source: 'osm' | 'height' } | null { + const lv = parseFloat(t['building:levels']); + if (isFinite(lv) && lv >= 1) return { levels: Math.min(60, Math.round(lv)), source: 'osm' }; + const h = parseFloat(t.height ?? t['building:height']); + if (isFinite(h) && h > 2) return { levels: Math.max(1, Math.min(60, Math.round(h / 3.2))), source: 'height' }; + return null; +} + +/** Этажность по умолчанию по виду и площади. */ +export function defaultLevels(kind: BuildingKind, area: number, rng: Rng): number { + switch (kind) { + case 'house': return area < 70 ? 1 : area < 110 ? rng.pick([1, 2, 2]) : 2; + case 'apartments': return area < 400 ? rng.pick([3, 3, 4]) : rng.pick([4, 5, 5, 6]); + case 'mixed': return rng.pick([3, 4, 4, 5]); + case 'office': return area < 300 ? 2 : rng.pick([3, 4, 5]); + case 'hotel': return rng.pick([3, 4, 5]); + case 'hospital': return rng.pick([3, 4]); + case 'school': return area < 600 ? 2 : rng.pick([2, 3]); + case 'civic': return 2; + case 'retail': return area > 1500 ? 1 : area < 200 ? 1 : rng.pick([1, 2]); + case 'restaurant': return 1; + default: return 1; + } +} + +/** Разумные пределы этажности для вида (если берём по соседям). */ +export function clampLevels(kind: BuildingKind, n: number): number { + const max: Partial> = { house: 3, shed: 1, garage: 1, farm: 2, warehouse: 2, industrial: 3, church: 1, restaurant: 3 }; + return Math.max(1, Math.min(max[kind] ?? 30, n)); +} diff --git a/src/gen/finalize.ts b/src/gen/finalize.ts new file mode 100644 index 0000000..50af618 --- /dev/null +++ b/src/gen/finalize.ts @@ -0,0 +1,77 @@ +// Финальная упаковка мира: общие модели предметов и округление координат до сантиметра. + +import type { Building, Prop, Shape, World } from '../types'; + +const r2 = (v: number) => Math.round(v * 100) / 100; +const r3 = (v: number) => Math.round(v * 1000) / 1000; + +export class ModelLibrary { + private index = new Map(); + /** Модели, добавленные с последнего takeNew() — чтобы воркер отдавал только новые. */ + private fresh: Record = {}; + constructor(public models: Record, private prefix = '') { + for (const [id, shapes] of Object.entries(models)) this.index.set(JSON.stringify(shapes), id); + } + intern(p: Prop) { + if (!p.shapes) return; + const shapes = p.shapes.map(roundShape); + const key = JSON.stringify(shapes); + let id = this.index.get(key); + if (!id) { + id = `${p.kind}#${this.prefix}${this.index.size}`; + this.index.set(key, id); + this.models[id] = shapes; + this.fresh[id] = shapes; + } + p.model = id; + delete p.shapes; + } + takeNew(): Record { + const f = this.fresh; + this.fresh = {}; + return f; + } +} + +function roundShape(s: Shape): Shape { + if (s.t === 'line') return { ...s, x1: r2(s.x1), y1: r2(s.y1), x2: r2(s.x2), y2: r2(s.y2) }; + if (s.t === 'circle') return { ...s, x: r2(s.x), y: r2(s.y), r: r2(s.r) }; + return { ...s, x: r2(s.x), y: r2(s.y), w: r2(s.w), h: r2(s.h), ...(s.r !== undefined ? { r: r2(s.r) } : {}) }; +} + +function roundProp(p: Prop) { + p.pos = [r2(p.pos[0]), r2(p.pos[1])]; + p.rot = r3(p.rot); + p.w = r2(p.w); + p.d = r2(p.d); + if (!p.tags?.length) delete p.tags; + if (!p.roomId) delete p.roomId; + if (!p.color) delete p.color; +} + +const rv = (v: [number, number]): [number, number] => [r2(v[0]), r2(v[1])]; + +export function finalizeBuilding(b: Building, lib: ModelLibrary) { + b.footprint = b.footprint.map(rv); + b.holes = b.holes.map((h) => h.map(rv)); + b.area = Math.round(b.area); + for (const f of b.floors) { + for (const r of f.rooms) { + r.rings = r.rings.map((rr) => rr.map(rv)); + r.labelPos = rv(r.labelPos); + } + for (const w of f.walls) { w.a = rv(w.a); w.b = rv(w.b); } + for (const d of f.doors) { d.a = rv(d.a); d.b = rv(d.b); d.swingTo = rv(d.swingTo); } + for (const w of f.windows) { w.a = rv(w.a); w.b = rv(w.b); } + for (const s of f.stairs) { s.rings = s.rings.map((rr) => rr.map(rv)); s.from = rv(s.from); s.to = rv(s.to); } + for (const p of f.props) { roundProp(p); lib.intern(p); } + } +} + +export function finalizeWorld(w: World, buildings = true) { + const lib = new ModelLibrary(w.models); + for (const a of w.areas) a.rings = a.rings.map((r) => r.map(rv)); + for (const r of w.roads) r.pts = r.pts.map(rv); + for (const p of w.props) { roundProp(p); lib.intern(p); } + if (buildings) for (const b of w.buildings) finalizeBuilding(b, lib); +} diff --git a/src/gen/furnish.ts b/src/gen/furnish.ts new file mode 100644 index 0000000..088dbf7 --- /dev/null +++ b/src/gen/furnish.ts @@ -0,0 +1,476 @@ +// Расстановка мебели по правилам для каждого типа комнаты. +// Работает в сетке здания: предмет занимает клетки, «спинкой» встаёт к стене, +// не перекрывает двери (зона открывания) и высокими предметами не закрывает окна. + +import type { Building, Prop, Vec } from '../types'; +import type { DoorL, FloorG, Grid, WindowL } from './interior'; +import { C } from './interior'; +import * as K from './catalog'; +import type { Def } from './catalog'; +import { Rng } from '../util/rng'; +import { distToSegment } from '../util/geom'; +import { CAR_COLORS } from './props'; + +export interface PropL { + prop: Prop; + pos: Vec; + rot: number; + room: number; +} + +interface Ctx { + g: Grid; + F: FloorG; + doors: DoorL[]; + windows: WindowL[]; + building: Building; + rng: Rng; +} + +type Dir = 'N' | 'E' | 'S' | 'W'; +const ROT: Record = { N: 0, S: Math.PI, W: -Math.PI / 2, E: Math.PI / 2 }; + +export function furnishFloor(ctx: Ctx): PropL[] { + const { g, F, rng } = ctx; + const n = g.gw * g.gh; + const occ = new Uint8Array(n); // 0 свободно, 1 занято, 2 держать свободным + const win = new Uint8Array(n); + const out: PropL[] = []; + const cellsOf = new Map(); + for (let i = 0; i < n; i++) { + const r = F.labels[i]; + if (r < 0 || !g.mask[i]) continue; + if (!cellsOf.has(r)) cellsOf.set(r, []); + cellsOf.get(r)!.push(i); + } + const cc = (i: number): Vec => [((i % g.gw) + 0.5) * C, (((i / g.gw) | 0) + 0.5) * C]; + // зоны дверей и окон + const around = (a: Vec, b: Vec, r: number, fn: (i: number, p: Vec) => void) => { + const x0 = Math.max(0, Math.floor((Math.min(a[0], b[0]) - r) / C)), x1 = Math.min(g.gw - 1, Math.floor((Math.max(a[0], b[0]) + r) / C)); + const y0 = Math.max(0, Math.floor((Math.min(a[1], b[1]) - r) / C)), y1 = Math.min(g.gh - 1, Math.floor((Math.max(a[1], b[1]) + r) / C)); + for (let y = y0; y <= y1; y++) for (let x = x0; x <= x1; x++) { const i = y * g.gw + x; if (F.labels[i] >= 0) fn(i, cc(i)); } + }; + for (const d of ctx.doors) { + const m: Vec = [(d.a[0] + d.b[0]) / 2, (d.a[1] + d.b[1]) / 2]; + const half = Math.hypot(d.b[0] - d.a[0], d.b[1] - d.a[1]) / 2; + around(d.a, d.b, half + 0.7, (i, p) => { + if (distToSegment(p, d.a, d.b) < 0.95 || Math.hypot(p[0] - m[0], p[1] - m[1]) < half + 0.6) occ[i] = 2; + }); + } + for (const w of ctx.windows) around(w.a, w.b, 0.6, (i, p) => { if (distToSegment(p, w.a, w.b) < 0.6) win[i] = 1; }); + // лестницы — вне мебели + for (const s of F.stairs) for (let y = s.block.y0; y < s.block.y1; y++) for (let x = s.block.x0; x < s.block.x1; x++) occ[y * g.gw + x] = 1; + + const lab = (x: number, y: number) => (x < 0 || y < 0 || x >= g.gw || y >= g.gh ? -1 : F.labels[y * g.gw + x]); + const free = (x: number, y: number, room: number, tall?: boolean) => { + if (x < 0 || y < 0 || x >= g.gw || y >= g.gh) return false; + const i = y * g.gw + x; + return F.labels[i] === room && g.mask[i] === 1 && occ[i] === 0 && !(tall && win[i]); + }; + + const emit = (def: Def, pos: Vec, rot: number, room: number, cells: number[], frontCells: number[], color?: string) => { + for (const i of cells) occ[i] = 1; + for (const i of frontCells) if (occ[i] === 0) occ[i] = 2; + out.push({ + pos, rot, room, + prop: { + id: '', kind: def.kind, pos: [0, 0], rot: 0, w: def.w, d: def.d, shapes: def.shapes, + blocksMove: def.blocksMove ?? true, blocksSight: !!def.tall, tags: def.tags, color, + }, + }); + return true; + }; + + /** Поставить предмет спинкой к стене. */ + const atWall = (room: number, def: Def, opt: { corner?: boolean; window?: boolean; tries?: number } = {}): boolean => { + const cells = cellsOf.get(room); + if (!cells) return false; + const A = Math.max(1, Math.ceil(def.w / C - 1e-6)), D = Math.max(1, Math.ceil(def.d / C - 1e-6)); + const FD = Math.ceil((def.front ?? 0) / C - 1e-6); + let best: { s: number; dir: Dir; x0: number; y0: number; x1: number; y1: number } | null = null; + for (const i of cells) { + const cx = i % g.gw, cy = (i / g.gw) | 0; + for (const dir of ['N', 'E', 'S', 'W'] as Dir[]) { + let x0: number, y0: number, x1: number, y1: number; + if (dir === 'N') { x0 = cx; y0 = cy; x1 = cx + A; y1 = cy + D; } + else if (dir === 'S') { x0 = cx; y0 = cy - D + 1; x1 = cx + A; y1 = cy + 1; } + else if (dir === 'W') { x0 = cx; y0 = cy; x1 = cx + D; y1 = cy + A; } + else { x0 = cx - D + 1; y0 = cy; x1 = cx + 1; y1 = cy + A; } + let ok = true; + for (let y = y0; y < y1 && ok; y++) for (let x = x0; x < x1 && ok; x++) if (!free(x, y, room, def.tall)) ok = false; + if (!ok) continue; + // сзади должна быть стена по всей длине + let wallOk = true; + if (dir === 'N') for (let x = x0; x < x1; x++) wallOk &&= lab(x, y0 - 1) !== room; + if (dir === 'S') for (let x = x0; x < x1; x++) wallOk &&= lab(x, y1) !== room; + if (dir === 'W') for (let y = y0; y < y1; y++) wallOk &&= lab(x0 - 1, y) !== room; + if (dir === 'E') for (let y = y0; y < y1; y++) wallOk &&= lab(x1, y) !== room; + if (!wallOk) continue; + // перед предметом — проход + let frontOk = true; + for (let k = 1; k <= FD && frontOk; k++) { + if (dir === 'N') for (let x = x0; x < x1; x++) frontOk &&= lab(x, y1 - 1 + k) === room && occ[(y1 - 1 + k) * g.gw + x] !== 1; + if (dir === 'S') for (let x = x0; x < x1; x++) frontOk &&= lab(x, y0 - k) === room && occ[(y0 - k) * g.gw + x] !== 1; + if (dir === 'W') for (let y = y0; y < y1; y++) frontOk &&= lab(x1 - 1 + k, y) === room && occ[y * g.gw + x1 - 1 + k] !== 1; + if (dir === 'E') for (let y = y0; y < y1; y++) frontOk &&= lab(x0 - k, y) === room && occ[y * g.gw + x0 - k] !== 1; + } + if (!frontOk) continue; + let s = rng.next(); + if (opt.corner) { + const sideA = dir === 'N' || dir === 'S' ? lab(x0 - 1, dir === 'N' ? y0 : y1 - 1) !== room : lab(dir === 'W' ? x0 : x1 - 1, y0 - 1) !== room; + const sideB = dir === 'N' || dir === 'S' ? lab(x1, dir === 'N' ? y0 : y1 - 1) !== room : lab(dir === 'W' ? x0 : x1 - 1, y1) !== room; + s += (sideA ? 2 : 0) + (sideB ? 2 : 0); + } + if (opt.window) { + let wn = 0; + for (let y = y0; y < y1; y++) for (let x = x0; x < x1; x++) wn += win[y * g.gw + x]; + s += wn ? 3 : 0; + } + if (!best || s > best.s) best = { s, dir, x0, y0, x1, y1 }; + } + } + if (!best) return false; + const { dir, x0, y0, x1, y1 } = best; + const inset = 0.07 + def.d / 2; + let pos: Vec; + if (dir === 'N') pos = [((x0 + x1) / 2) * C, y0 * C + inset]; + else if (dir === 'S') pos = [((x0 + x1) / 2) * C, y1 * C - inset]; + else if (dir === 'W') pos = [x0 * C + inset, ((y0 + y1) / 2) * C]; + else pos = [x1 * C - inset, ((y0 + y1) / 2) * C]; + const used: number[] = []; + for (let y = y0; y < y1; y++) for (let x = x0; x < x1; x++) used.push(y * g.gw + x); + const front: number[] = []; + for (let k = 1; k <= FD; k++) { + if (dir === 'N') for (let x = x0; x < x1; x++) front.push((y1 - 1 + k) * g.gw + x); + if (dir === 'S') for (let x = x0; x < x1; x++) front.push((y0 - k) * g.gw + x); + if (dir === 'W') for (let y = y0; y < y1; y++) front.push(y * g.gw + x1 - 1 + k); + if (dir === 'E') for (let y = y0; y < y1; y++) front.push(y * g.gw + x0 - k); + } + return emit(def, pos, ROT[dir], room, used, front.filter((i) => i >= 0 && i < n)); + }; + + /** Поставить предмет отдельно (стол, кластер), с отступом margin клеток, ближе к центру комнаты. */ + const inMiddle = (room: number, def: Def, margin = 1, center?: Vec, color?: string): boolean => { + const cells = cellsOf.get(room); + if (!cells) return false; + const c = center ?? roomPole(room); + let best: { s: number; x0: number; y0: number; x1: number; y1: number; rot: boolean } | null = null; + for (const rotd of [false, true]) { + const A = Math.max(1, Math.ceil((rotd ? def.d : def.w) / C - 1e-6)), D = Math.max(1, Math.ceil((rotd ? def.w : def.d) / C - 1e-6)); + for (const i of cells) { + const x0 = i % g.gw, y0 = (i / g.gw) | 0; + let ok = true; + for (let y = y0 - margin; y < y0 + D + margin && ok; y++) + for (let x = x0 - margin; x < x0 + A + margin && ok; x++) { + const inner = x >= x0 && x < x0 + A && y >= y0 && y < y0 + D; + if (inner) ok = free(x, y, room); + else ok = lab(x, y) === room && occ[y * g.gw + x] !== 1; + } + if (!ok) continue; + const s = -Math.hypot((x0 + A / 2) * C - c[0], (y0 + D / 2) * C - c[1]) + rng.next() * 0.3; + if (!best || s > best.s) best = { s, x0, y0, x1: x0 + A, y1: y0 + D, rot: rotd }; + } + } + if (!best) return false; + const used: number[] = []; + for (let y = best.y0; y < best.y1; y++) for (let x = best.x0; x < best.x1; x++) used.push(y * g.gw + x); + return emit(def, [((best.x0 + best.x1) / 2) * C, ((best.y0 + best.y1) / 2) * C], best.rot ? Math.PI / 2 : rng.chance(0.5) ? 0 : Math.PI, room, used, [], color); + }; + + /** Сетка одинаковых предметов (столики, парты, станки). */ + const lattice = (room: number, make: () => Def, gapX: number, gapY: number, margin: number, alongLong = true, max = 400, faceRot?: number): number => { + const cells = cellsOf.get(room); + if (!cells) return 0; + const bb = roomBox(room); + const longX = bb[2] - bb[0] >= bb[3] - bb[1]; + const def0 = make(); + const rotd = alongLong ? !longX : longX; + const A = Math.ceil((rotd ? def0.d : def0.w) / C - 1e-6), D = Math.ceil((rotd ? def0.w : def0.d) / C - 1e-6); + const sx = A + Math.round(gapX / C), sy = D + Math.round(gapY / C); + let placed = 0; + for (let y = bb[1] + margin; y + D <= bb[3] - margin && placed < max; y += sy) + for (let x = bb[0] + margin; x + A <= bb[2] - margin && placed < max; x += sx) { + let ok = true; + for (let yy = y - 1; yy < y + D + 1 && ok; yy++) + for (let xx = x - 1; xx < x + A + 1 && ok; xx++) { + const inner = xx >= x && xx < x + A && yy >= y && yy < y + D; + ok = inner ? free(xx, yy, room) : lab(xx, yy) === room && occ[yy * g.gw + xx] !== 1; + } + if (!ok) continue; + const used: number[] = []; + for (let yy = y; yy < y + D; yy++) for (let xx = x; xx < x + A; xx++) used.push(yy * g.gw + xx); + emit(make(), [(x + A / 2) * C, (y + D / 2) * C], faceRot ?? (rotd ? Math.PI / 2 : 0), room, used, []); + placed++; + } + return placed; + }; + + /** Ряды стеллажей вдоль длинной стороны комнаты с проходами. */ + const rows = (room: number, make: (L: number) => Def, depth: number, aisle: number, margin: number, maxLen = 12) => { + const bb = roomBox(room); + const longX = bb[2] - bb[0] >= bb[3] - bb[1]; + const D = Math.ceil(depth / C), step = D + Math.round(aisle / C); + const [a0, a1, b0, b1] = longX ? [bb[1], bb[3], bb[0], bb[2]] : [bb[0], bb[2], bb[1], bb[3]]; + for (let a = a0 + margin; a + D <= a1 - margin; a += step) { + let runStart = -1; + const flush = (end: number) => { + let s = runStart; + while (end - s >= 4) { + const len = Math.min(end - s, Math.round(maxLen / C)); + const L = len * C - 0.1; + const used: number[] = []; + for (let k = s; k < s + len; k++) for (let dd = a; dd < a + D; dd++) used.push(longX ? dd * g.gw + k : k * g.gw + dd); + const pos: Vec = longX ? [((s + s + len) / 2) * C, (a + D / 2) * C] : [(a + D / 2) * C, ((s + s + len) / 2) * C]; + emit(make(L), pos, longX ? 0 : Math.PI / 2, room, used, []); + s += len + 3; + } + runStart = -1; + }; + for (let k = b0 + margin; k <= b1 - margin; k++) { + let ok = k < b1 - margin; + for (let dd = a - 1; dd < a + D + 1 && ok; dd++) { + const x = longX ? k : dd, y = longX ? dd : k; + const inner = dd >= a && dd < a + D; + ok = inner ? free(x, y, room, true) : lab(x, y) === room && occ[y * g.gw + x] !== 1; + } + if (ok && runStart < 0) runStart = k; + if (!ok && runStart >= 0) flush(k); + } + } + }; + + const roomBox = (room: number): [number, number, number, number] => { + let x0 = Infinity, y0 = Infinity, x1 = -Infinity, y1 = -Infinity; + for (const i of cellsOf.get(room) ?? []) { + const x = i % g.gw, y = (i / g.gw) | 0; + x0 = Math.min(x0, x); y0 = Math.min(y0, y); x1 = Math.max(x1, x + 1); y1 = Math.max(y1, y + 1); + } + return [x0, y0, x1, y1]; + }; + const roomPole = (room: number): Vec => { + const bb = roomBox(room); + return [((bb[0] + bb[2]) / 2) * C, ((bb[1] + bb[3]) / 2) * C]; + }; + const areaOf = (room: number) => (cellsOf.get(room)?.length ?? 0) * C * C; + const shortSide = (room: number) => { const bb = roomBox(room); return Math.min(bb[2] - bb[0], bb[3] - bb[1]) * C; }; + + const use = ctx.building.use ?? ''; + for (const [room, cells] of cellsOf) { + const R = F.rooms[room]; + if (R.dead || !cells.length) continue; + const a = areaOf(room); + switch (R.kind) { + case 'bedroom': { + if (a >= 10 && shortSide(room) >= 2.8) { + if (!atWall(room, K.bedWithNightstands())) atWall(room, K.bed(true)); + } else if (!atWall(room, K.bed(a >= 9), { corner: true })) atWall(room, K.bed(false), { corner: true }); + atWall(room, K.wardrobe(a > 12 ? 1.8 : 1.2), { corner: true }); + if (a > 11) atWall(room, K.desk(1.2), { window: true }); + if (a > 14 && rng.chance(0.5)) atWall(room, K.armchair(), { corner: true }); + if (rng.chance(0.3)) atWall(room, K.plant(), { corner: true }); + break; + } + case 'living': { + const studio = a < 30 && !F.rooms.some((r) => r.unit === R.unit && r.kind === 'bedroom' && !r.dead); + if (studio) { + atWall(room, K.bed(true), { corner: true }); + if (!F.rooms.some((r) => r.unit === R.unit && r.kind === 'kitchen' && !r.dead)) atWall(room, K.kitchenLine(1.8)); + } + if (!atWall(room, K.sofaSet())) atWall(room, K.sofa(1.8)); + atWall(room, K.tvStand()); + if (a > 16) atWall(room, K.armchair(), { corner: true }); + atWall(room, K.bookshelf(rng.pick([0.8, 1.0, 1.6]))); + if (a > 20 && !studio) inMiddle(room, K.diningTable(a > 26 ? 6 : 4), 1); + atWall(room, K.plant(), { corner: true }); + if (rng.chance(0.5)) atWall(room, K.plant(), { corner: true }); + break; + } + case 'kitchen': { + let placed = false; + for (const L of [3.6, 3.0, 2.4, 1.8, 1.2]) if (atWall(room, K.kitchenLine(L))) { placed = true; break; } + if (!placed) inMiddle(room, K.kitchenLine(1.2), 0); + atWall(room, K.fridge(), { corner: true }); + if (a >= 8) inMiddle(room, K.diningTable(4), 1); + break; + } + case 'bath': { + if (a >= 4.2 && shortSide(room) >= 1.7) { if (!atWall(room, K.bathtub(), { corner: true })) atWall(room, K.shower(), { corner: true }); } + else atWall(room, K.shower(), { corner: true }); + atWall(room, K.toilet()); + atWall(room, K.basin()); + if (a > 6) atWall(room, K.washer()); + break; + } + case 'wc': { + const n = ctx.building.kind === 'house' || a < 5 ? 1 : Math.min(4, Math.floor(a / 2.5)); + for (let k = 0; k < n; k++) atWall(room, K.toilet(), { corner: k === 0 }); + atWall(room, K.basin()); + if (n > 1) atWall(room, K.basin()); + break; + } + case 'hall': { + atWall(room, K.coatRack()); + if (a > 5) atWall(room, K.shoeCabinet()); + if (a > 9) atWall(room, K.plant(), { corner: true }); + if (ctx.building.kind === 'civic' && a > 20) { atWall(room, K.counter(2.4)); atWall(room, K.sofa(2.0)); } + break; + } + case 'landing': + if (F.level === 0) atWall(room, K.mailboxes()); + break; + case 'lobby': { + atWall(room, K.mailboxes()); + atWall(room, K.plant(), { corner: true }); + break; + } + case 'corridor': { + if (rng.chance(0.4)) atWall(room, K.plant(), { corner: true }); + break; + } + case 'utility': { + atWall(room, K.washer()); + atWall(room, K.boiler(), { corner: true }); + atWall(room, K.shelf(1.0)); + break; + } + case 'storage': + case 'backroom': { + for (let k = 0; k < 8; k++) if (!atWall(room, K.shelf(rng.pick([1.0, 1.2, 1.8])))) break; + for (let k = 0; k < (a > 15 ? 3 : 1); k++) inMiddle(room, K.crate(), 1); + break; + } + case 'sales': { + if (['clothes', 'shoes', 'boutique', 'fashion'].includes(use)) { + lattice(room, K.clothesRack, 1.0, 1.2, 2); + atWall(room, K.counter(1.6)); + for (let k = 0; k < 6; k++) if (!atWall(room, K.wallShelf(2.0))) break; + } else if (['bakery', 'cafe', 'butcher', 'pastry', 'deli', 'confectionery'].includes(use) || a < 25) { + if (!atWall(room, K.counter(Math.min(3.0, Math.max(1.2, shortSide(room) - 1))))) inMiddle(room, K.counter(1.2), 1); + for (let k = 0; k < 3; k++) if (!atWall(room, K.wallShelf(1.6))) break; + } else { + // супермаркет / обычный магазин: кассы у входа, стеллажи рядами, холодильники у стен + const ent = ctx.doors.find((d) => d.r2 === -1 && d.r1 === room); + const nCheck = a > 400 ? 4 : a > 120 ? 2 : 1; + for (let k = 0; k < nCheck; k++) inMiddle(room, K.checkout(), 1, ent ? [(ent.a[0] + ent.b[0]) / 2, (ent.a[1] + ent.b[1]) / 2] : undefined); + if (use === 'supermarket' || a > 150) for (let k = 0; k < 4; k++) if (!atWall(room, K.fridgeDisplay(2.4))) break; + for (let k = 0; k < 10; k++) if (!atWall(room, K.wallShelf(rng.pick([1.8, 2.4])))) break; + rows(room, K.gondola, 1.0, 1.6, 2, 10); + } + if (a > 20) atWall(room, K.plant(), { corner: true }); + break; + } + case 'dining': { + atWall(room, K.counter(Math.min(3.0, Math.max(1.4, shortSide(room) * 0.6)))); + if (lattice(room, a > 30 && rng.chance(0.5) ? K.cafeTable : () => K.diningTable(4), 0.8, 0.9, 1) === 0) inMiddle(room, K.cafeTable(), 1); + atWall(room, K.plant(), { corner: true }); + break; + } + case 'prokitchen': { + for (const L of [2.4, 1.8, 1.2]) if (atWall(room, K.prepTable(L))) break; + atWall(room, K.proStove()); + atWall(room, K.fridge(), { corner: true }); + atWall(room, K.fridge(), { corner: true }); + if (a > 14) inMiddle(room, K.prepTable(1.6), 1); + atWall(room, K.shelf(1.2)); + break; + } + case 'office': { + atWall(room, K.desk(1.4), { window: true }); + if (a > 12) atWall(room, K.desk(1.4), { window: true }); + atWall(room, K.filing(), { corner: true }); + atWall(room, K.bookshelf(1.0)); + if (rng.chance(0.6)) atWall(room, K.plant(), { corner: true }); + break; + } + case 'openoffice': { + lattice(room, K.officeCluster, 1.4, 1.2, 2); + for (let k = 0; k < 3; k++) atWall(room, K.filing(), { corner: true }); + atWall(room, K.plant(), { corner: true }); + atWall(room, K.plant(), { corner: true }); + break; + } + case 'meeting': { + const bb = roomBox(room); + const L = Math.max(1.6, Math.min(6, (Math.max(bb[2] - bb[0], bb[3] - bb[1]) * C) - 2.2)); + if (!inMiddle(room, K.meetingTable(L), 1)) inMiddle(room, K.meetingTable(1.6), 1); + atWall(room, K.board(2.0)); + break; + } + case 'staff': { + inMiddle(room, K.diningTable(4), 1); + atWall(room, K.kitchenLine(1.8)); + atWall(room, K.sofa(1.8)); + break; + } + case 'classroom': { + atWall(room, K.board(3.0)); + inMiddle(room, K.teacherDesk(), 1); + lattice(room, K.studentDesk, 0.7, 0.5, 2); + atWall(room, K.bookshelf(1.6)); + break; + } + case 'ward': { + for (let k = 0; k < Math.max(1, Math.min(4, Math.floor(a / 8))); k++) if (!atWall(room, K.hospitalBed())) break; + atWall(room, K.nightstand()); + atWall(room, K.armchair(), { corner: true }); + break; + } + case 'guestroom': { + if (!atWall(room, K.bedWithNightstands())) if (!atWall(room, K.bed(true))) atWall(room, K.bed(false)); + atWall(room, K.desk(1.2), { window: true }); + atWall(room, K.wardrobe(1.0), { corner: true }); + atWall(room, K.armchair(), { corner: true }); + break; + } + case 'workshop': { + for (let k = 0; k < 3; k++) atWall(room, K.workbench(rng.pick([1.6, 2.0]))); + for (let k = 0; k < 4; k++) atWall(room, K.shelf(1.2)); + inMiddle(room, K.machine(), 1); + break; + } + case 'hall_ind': { + const kindB = ctx.building.kind; + if (kindB === 'warehouse' && !['sports_hall', 'sports_centre'].includes(use)) { + rows(room, K.palletRack, 1.1, 3.2, 3, 16); + lattice(room, K.pallet, 2.0, 2.0, 2, true, 6); + } else if (kindB === 'farm') { + lattice(room, K.pallet, 2.5, 2.5, 2, true, 8); + for (let k = 0; k < 4; k++) atWall(room, K.shelf(1.8)); + } else if (['sports_hall', 'sports_centre'].includes(use)) { + atWall(room, K.bookshelf(2.0)); + } else { + lattice(room, K.machine, 2.4, 2.6, 3, true, 40); + for (let k = 0; k < 4; k++) atWall(room, K.workbench(2.0)); + for (let k = 0; k < 6; k++) atWall(room, K.shelf(1.8)); + } + break; + } + case 'nave': { + // алтарь у дальней от входа стены, скамьи рядами поперёк + const ent = ctx.doors.find((d) => d.r2 === -1); + const bb = roomBox(room); + const longX = bb[2] - bb[0] >= bb[3] - bb[1]; + const cMid: Vec = [((bb[0] + bb[2]) / 2) * C, ((bb[1] + bb[3]) / 2) * C]; + let far: Vec = cMid; + if (ent) { + const em: Vec = [(ent.a[0] + ent.b[0]) / 2, (ent.a[1] + ent.b[1]) / 2]; + far = longX ? [em[0] < cMid[0] ? (bb[2] - 3) * C : (bb[0] + 3) * C, cMid[1]] : [cMid[0], em[1] < cMid[1] ? (bb[3] - 3) * C : (bb[1] + 3) * C]; + } + inMiddle(room, K.altar(), 1, far); + const width = (longX ? bb[3] - bb[1] : bb[2] - bb[0]) * C; + const L = Math.max(1.5, Math.min(5, (width - 2.4) / 2)); + lattice(room, () => K.pew(L), 1.6, 0.5, 2, false, 60, longX ? Math.PI / 2 : 0); + break; + } + case 'garage': { + if (a > 14 && shortSide(room) >= 2.6) inMiddle(room, K.carDef(), 0, undefined, rng.pick(CAR_COLORS)); + atWall(room, K.workbench(1.6)); + atWall(room, K.shelf(1.2)); + break; + } + default: + break; + } + } + return out; +} diff --git a/src/gen/generate.ts b/src/gen/generate.ts new file mode 100644 index 0000000..acb3337 --- /dev/null +++ b/src/gen/generate.ts @@ -0,0 +1,36 @@ +import type { OsmElement, BBox } from '../osm/overpass'; +import type { World } from '../types'; +import { buildCity, type InteriorJob } from './city'; +import { generateInterior, type InteriorResult } from './interior'; +import { finalizeWorld } from './finalize'; + +export type Progress = (stage: string, done: number, total: number) => void; + +/** Применить результат генерации интерьера к зданию. */ +export function applyInterior(world: World, buildingId: string, r: InteriorResult) { + const b = world.buildings.find((x) => x.id === buildingId); + if (!b) return; + b.floors = r.floors; + b.units = r.units; + b.beds = r.beds; +} + +/** Синхронная генерация целиком (для CLI и тестов; в браузере интерьеры считаются в воркерах). */ +export function generateWorldSync(elements: OsmElement[], bbox: BBox, name: string, seed: number, progress?: Progress): World { + const { world, jobs } = buildCity(elements, bbox, name, seed); + jobs.forEach((job, i) => { + progress?.('interiors', i, jobs.length); + try { + const r = generateInterior(job); + job.building.floors = r.floors; + job.building.units = r.units; + job.building.beds = r.beds; + } catch (e) { + console.warn('interior failed', job.building.id, e); + } + }); + finalizeWorld(world); + return world; +} + +export type { InteriorJob }; diff --git a/src/gen/interior.ts b/src/gen/interior.ts new file mode 100644 index 0000000..a21136a --- /dev/null +++ b/src/gen/interior.ts @@ -0,0 +1,1446 @@ +// Генерация интерьеров: этажи, комнаты, двери, окна, лестницы, мебель. +// +// Каждое здание раскладывается в собственной повёрнутой сетке с шагом 0.5 м, +// выровненной по прямоугольнику минимальной площади вокруг контура. Комнаты — +// это наборы клеток; стены — границы между клетками разных комнат; внешние стены — +// точный контур здания из OSM. Двери соединяют комнаты в граф (будущая навигация). + +import type { + Building, BuildingKind, Door, Floor, Prop, Ring, Room, RoomKind, Stairs, Unit, Vec, Wall, Window, +} from '../types'; +import type { InteriorJob } from './city'; +import { bboxOf, centroid, closestOnSegment, dist, pointInRings, rotate } from '../util/geom'; +import { Rng } from '../util/rng'; +import { furnishFloor } from './furnish'; + +export const C = 0.5; // шаг сетки, м +const WALL_INT = 0.12; +const WALL_EXT = 0.3; + +export interface Grid { + gw: number; + gh: number; + ox: number; + oy: number; + angle: number; + mask: Uint8Array; + touch: Uint8Array; + /** Внешний контур и дворы в локальных координатах сетки (м). */ + rings: Ring[]; + roadQ: Vec | null; +} + +export interface RoomG { + kind: RoomKind; + unit: number; // -1 — общая зона + dead?: boolean; +} + +export interface UnitG { + kind: Unit['kind']; + hub: number; +} + +interface Block { + x0: number; + y0: number; + x1: number; + y1: number; + lift: boolean; +} + +export interface FloorG { + level: number; + labels: Int32Array; + rooms: RoomG[]; + units: UnitG[]; + stairs: { block: Block; room: number }[]; + /** Комнаты, которым нужен вход с улицы. */ + entries: number[]; +} + +export interface DoorL { + a: Vec; + b: Vec; + r1: number; + r2: number; // -1 — улица + kind: Door['kind']; + swingTo: Vec; +} + +export interface WindowL { + a: Vec; + b: Vec; + room: number; +} + +interface Item { + kind: RoomKind; + w: number; +} + +const LEAF = new Set(['bath', 'wc', 'storage', 'bedroom', 'backroom', 'utility', 'guestroom', 'office', 'meeting', 'classroom', 'ward', 'staff', 'prokitchen', 'void', 'lift', 'garage']); +const NO_WINDOW = new Set(['storage', 'utility', 'void', 'lift', 'backroom', 'garage']); +const ENTRY_PREF: RoomKind[] = ['lobby', 'landing', 'corridor', 'hall', 'sales', 'dining', 'hall_ind', 'workshop', 'nave', 'garage', 'openoffice', 'living', 'kitchen', 'classroom', 'office', 'storage']; + +const ci = (g: Grid, x: number, y: number) => y * g.gw + x; +const inG = (g: Grid, x: number, y: number) => x >= 0 && y >= 0 && x < g.gw && y < g.gh; + +// ------------------------------------------------------------------ сетка + +function makeGrid(b: Building, roadSegs: InteriorJob['roadSegs']): Grid { + const angle = b.frame.angle; + const rot = (p: Vec) => rotate(p, -angle); + const outer = b.footprint.map(rot); + const holes = b.holes.map((h) => h.map(rot)); + const bb = bboxOf(outer); + const ox = bb[0] - C, oy = bb[1] - C; + const gw = Math.ceil((bb[2] - bb[0]) / C) + 2; + const gh = Math.ceil((bb[3] - bb[1]) / C) + 2; + const rings = [outer, ...holes].map((r) => r.map((p): Vec => [p[0] - ox, p[1] - oy])); + const mask = new Uint8Array(gw * gh); + const touch = new Uint8Array(gw * gh); + const corner = new Uint8Array((gw + 1) * (gh + 1)); + for (let y = 0; y <= gh; y++) for (let x = 0; x <= gw; x++) corner[y * (gw + 1) + x] = pointInRings([x * C, y * C], rings) ? 1 : 0; + for (let y = 0; y < gh; y++) + for (let x = 0; x < gw; x++) { + const i = y * gw + x; + const inside = pointInRings([(x + 0.5) * C, (y + 0.5) * C], rings); + mask[i] = inside ? 1 : 0; + const c4 = corner[y * (gw + 1) + x] | corner[y * (gw + 1) + x + 1] | corner[(y + 1) * (gw + 1) + x] | corner[(y + 1) * (gw + 1) + x + 1]; + touch[i] = inside || c4 ? 1 : 0; + } + for (const r of rings) + for (const p of r) { + const x = Math.floor(p[0] / C), y = Math.floor(p[1] / C); + if (inG({ gw, gh } as Grid, x, y)) touch[y * gw + x] = 1; + } + // ближайшая дорога (с весом: магистрали важнее тропинок) + let roadQ: Vec | null = null; + const cW = centroid(b.footprint); + let best = Infinity; + for (const [a, c, w] of roadSegs) { + const q = closestOnSegment(cW, a, c); + const d = dist(q, cW) / w; + if (d < best) { + best = d; + const r = rot(q); + roadQ = [r[0] - ox, r[1] - oy]; + } + } + return { gw, gh, ox, oy, angle, mask, touch, rings, roadQ }; +} + +export const toWorld = (g: Grid, q: Vec): Vec => rotate([q[0] + g.ox, q[1] + g.oy], g.angle); + +function maskBox(g: Grid): Block { + let x0 = g.gw, y0 = g.gh, x1 = 0, y1 = 0; + for (let y = 0; y < g.gh; y++) + for (let x = 0; x < g.gw; x++) + if (g.mask[ci(g, x, y)]) { + x0 = Math.min(x0, x); y0 = Math.min(y0, y); x1 = Math.max(x1, x + 1); y1 = Math.max(y1, y + 1); + } + return { x0, y0, x1, y1, lift: false }; +} + +function blockFits(g: Grid, x0: number, y0: number, w: number, h: number, extra?: (i: number) => boolean): boolean { + if (x0 < 0 || y0 < 0 || x0 + w > g.gw || y0 + h > g.gh) return false; + for (let y = y0; y < y0 + h; y++) + for (let x = x0; x < x0 + w; x++) { + const i = ci(g, x, y); + if (!g.mask[i] || (extra && !extra(i))) return false; + } + return true; +} + +// ------------------------------------------------------------------ схема здания + +type Prog = 'flats' | 'offices' | 'classes' | 'hotel' | 'wards'; + +interface Section { + x0: number; + x1: number; + stairs: number; +} + +interface Scheme { + corridor: { y0: number; y1: number; double: boolean; unitsAbove: boolean } | null; + /** Секционный жилой дом: подъезды, у каждого своя лестница и 1–4 квартиры на площадке. */ + sections: Section[] | null; + stairs: Block[]; + box: Block; +} + +function nearestBlock(g: Grid, rect: Block, c: Vec, sizes: [number, number][], taken: Block[]): Block | null { + const free = (i: number) => { + const x = i % g.gw, y = (i / g.gw) | 0; + return !taken.some((k) => x >= k.x0 && x < k.x1 && y >= k.y0 && y < k.y1); + }; + for (const [w, h] of sizes) { + let best: Block | null = null, bs = Infinity; + for (let y = rect.y0; y <= rect.y1 - h; y++) + for (let x = rect.x0; x <= rect.x1 - w; x++) { + const s = Math.hypot(x + w / 2 - c[0], y + h / 2 - c[1]); + if (s >= bs || !blockFits(g, x, y, w, h, free)) continue; + bs = s; + best = { x0: x, y0: y, x1: x + w, y1: y + h, lift: false }; + } + if (best) return best; + } + return null; +} + +function makeSections(g: Grid, b: Building, box: Block): { sections: Section[]; stairs: Block[] } | null { + const depthM = (box.y1 - box.y0) * C; + const lenM = (box.x1 - box.x0) * C; + if (depthM < 6) return null; + const secLen = Math.max(12, Math.min(26, 260 / depthM)); + const n = Math.max(1, Math.round(lenM / secLen)); + const cols = columns(g, box, (i) => g.mask[i] === 1, n); + const stairs: Block[] = []; + const sections: Section[] = []; + for (const col of cols) { + let sx = 0, sy = 0, cnt = 0; + for (let y = col.y0; y < col.y1; y++) for (let x = col.x0; x < col.x1; x++) if (g.mask[ci(g, x, y)]) { sx += x + 0.5; sy += y + 0.5; cnt++; } + if (!cnt) continue; + const st = nearestBlock(g, col, [sx / cnt, sy / cnt], [[5, 5], [5, 4], [4, 5], [5, 3], [3, 5]], stairs); + if (!st) return null; + stairs.push(st); + sections.push({ x0: col.x0, x1: col.x1, stairs: stairs.length - 1 }); + if (b.levels >= 5) { + const cands: Block[] = [ + { x0: st.x1, y0: st.y0, x1: st.x1 + 4, y1: st.y0 + 4, lift: true }, + { x0: st.x0 - 4, y0: st.y0, x1: st.x0, y1: st.y0 + 4, lift: true }, + { x0: st.x0, y0: st.y1, x1: st.x0 + 4, y1: st.y1 + 4, lift: true }, + { x0: st.x0, y0: st.y0 - 4, x1: st.x0 + 4, y1: st.y0, lift: true }, + ]; + const lift = cands.find((k) => k.x0 >= col.x0 && k.x1 <= col.x1 && blockFits(g, k.x0, k.y0, 4, 4)); + if (lift) stairs.push(lift); + } + } + return sections.length ? { sections, stairs } : null; +} + +function makeScheme(g: Grid, b: Building, rng: Rng, wantCorridor: boolean, wantSections = false): Scheme { + const box = maskBox(g); + const depthM = (box.y1 - box.y0) * C; + const lenM = (box.x1 - box.x0) * C; + const multi = b.levels > 1; + let corridor: Scheme['corridor'] = null; + const stairs: Block[] = []; + const free = (blocks: Block[]) => (i: number) => { + const x = i % g.gw, y = (i / g.gw) | 0; + return !blocks.some((k) => x >= k.x0 && x < k.x1 && y >= k.y0 && y < k.y1); + }; + if (wantSections && multi) { + const sec = makeSections(g, b, box); + if (sec) return { corridor: null, sections: sec.sections, stairs: sec.stairs, box }; + } + // коридор только в достаточно «прямоугольных» зданиях — иначе крылья остаются без выхода + let maskCount = 0; + for (let i = 0; i < g.mask.length; i++) maskCount += g.mask[i]; + const fill = maskCount / ((box.x1 - box.x0) * (box.y1 - box.y0)); + + if (wantCorridor && depthM >= 6.5 && lenM >= 9 && fill >= 0.78) { + const cw = 3; // 1.5 м + let cy0: number; + const double = depthM >= 10; + if (double) cy0 = Math.round((box.y0 + box.y1) / 2 - cw / 2); + else cy0 = rng.chance(0.5) ? box.y0 : box.y1 - cw; + const unitsAbove = !double && cy0 !== box.y0; + corridor = { y0: cy0, y1: cy0 + cw, double, unitsAbove }; + if (multi) { + // лестница 2.5×2.5 м вплотную к коридору; в длинных зданиях — две + const sw = 5, sh = 5; + const sideAbove = double ? true : unitsAbove; + const sy = sideAbove ? cy0 - sh : cy0 + cw; + const targets = lenM > 55 ? [0.25, 0.75] : [0.5]; + for (const t of targets) { + const tx = Math.round(box.x0 + (box.x1 - box.x0) * t - sw / 2); + let placed = false; + for (let d = 0; d < box.x1 - box.x0 && !placed; d++) + for (const s of [1, -1]) { + const x = tx + d * s; + if (blockFits(g, x, sy, sw, sh, free(stairs))) { + stairs.push({ x0: x, y0: sy, x1: x + sw, y1: sy + sh, lift: false }); + if (b.levels >= 5) { + for (const lx of [x + sw, x - 4]) { + if (blockFits(g, lx, sideAbove ? sy + 1 : sy, 4, 4, free(stairs))) { + const ly = sideAbove ? sy + 1 : sy; + stairs.push({ x0: lx, y0: ly, x1: lx + 4, y1: ly + 4, lift: true }); + break; + } + } + } + placed = true; + break; + } + } + } + if (!stairs.length) corridor = null; // некуда поставить лестницу — без коридора + } + } + if (!corridor && multi) { + // лестница 1×2.5 м (марш вдоль длинной оси) ближе к центру + const c: Vec = [(box.x0 + box.x1) / 2, (box.y0 + box.y1) / 2]; + let best: Block | null = null, bs = Infinity; + for (const [w, h] of [[5, 2], [2, 5], [4, 2], [2, 4]]) { + for (let y = box.y0; y <= box.y1 - h; y++) + for (let x = box.x0; x <= box.x1 - w; x++) { + if (!blockFits(g, x, y, w, h)) continue; + const s = Math.hypot(x + w / 2 - c[0], y + h / 2 - c[1]) + rng.next() * 0.5; + if (s < bs) { bs = s; best = { x0: x, y0: y, x1: x + w, y1: y + h, lift: false }; } + } + if (best) break; + } + if (best) stairs.push(best); + } + return { corridor, sections: null, stairs, box }; +} + +// ------------------------------------------------------------------ программы помещений + +/** Программа в м²: «гибкие» комнаты (гостиная, спальни) растягиваются под площадь, + * подсобные — фиксированы; если комнаты выходят слишком большими, добавляются ещё. */ +type Spec = [RoomKind, number, boolean?]; // вид, базовая площадь, гибкая +function fitProgram(base: Spec[], extras: Spec[], area: number, hubKind: RoomKind): { items: Item[]; hub: number } { + const list = base.slice(); + const k = () => { + const fixed = list.filter((s) => !s[2]).reduce((a, s) => a + s[1], 0); + const flex = list.filter((s) => s[2]).reduce((a, s) => a + s[1], 0); + return flex ? (area - fixed) / flex : 1; + }; + for (const e of extras) { + if (k() <= 1.35) break; + list.push(e); + } + // мало места — убираем лишнее с конца (но не обязательное ядро) + while (k() < 0.55 && list.length > 3) { + const idx = list.map((s, i) => [s, i] as const).reverse().find(([s]) => s[0] !== hubKind && s[0] !== 'living' && s[0] !== 'kitchen' && s[0] !== 'bath')?.[1]; + if (idx === undefined) break; + list.splice(idx, 1); + } + const kk = Math.max(0.5, k()); + const items = list.map(([kind, a, flex]) => ({ kind, w: flex ? a * kk : Math.min(a, area * 0.3) })); + return { items, hub: Math.max(0, items.findIndex((i) => i.kind === hubKind)) }; +} + +function houseItems(level: number, levels: number, area: number): { items: Item[]; hub: number } { + if (levels === 1) { + if (area < 45) return fitProgram([['living', 18, true], ['kitchen', 7], ['hall', 4], ['bath', 4]], [], area, 'hall'); + return fitProgram( + [['living', 20, true], ['kitchen', 10], ['hall', 6], ['bath', 5.5], ['bedroom', 13, true]], + [['bedroom', 12, true], ['wc', 2], ['bedroom', 12, true], ['office', 10, true], ['utility', 5], ['bedroom', 12, true], ['storage', 4]], + area, 'hall'); + } + if (level === 0) + return fitProgram( + [['living', 22, true], ['kitchen', 11], ['hall', 7], ['wc', 2.5]], + [['utility', 5], ['office', 11, true], ['bedroom', 13, true], ['storage', 4], ['dining', 14, true], ['bath', 5]], + area, 'hall'); + return fitProgram( + [['bedroom', 14, true], ['hall', 6], ['bath', 6], ['bedroom', 12, true]], + [['bedroom', 12, true], ['bedroom', 12, true], ['bath', 5], ['office', 10, true], ['bedroom', 12, true], ['storage', 3]], + area, 'hall'); +} + +function flatItems(area: number): { items: Item[]; hub: number } { + if (area < 36) return fitProgram([['living', 18, true], ['hall', 4], ['bath', 4]], [], area, 'hall'); + return fitProgram( + [['living', 17, true], ['kitchen', 9], ['hall', 5], ['bath', 4.5], ['bedroom', 12, true]], + [['bedroom', 11, true], ['wc', 1.8], ['bedroom', 11, true], ['storage', 2.5]], + area, 'hall'); +} + +function commercialItems(kind: BuildingKind, use: string | undefined, area: number): { items: Item[]; hub: number } { + switch (kind) { + case 'retail': + if (area > 600) return { items: [{ kind: 'sales', w: 0.82 }, { kind: 'backroom', w: 0.12 }, { kind: 'office', w: 0.03 }, { kind: 'wc', w: 0.03 }], hub: 0 }; + if (area < 35) return { items: [{ kind: 'sales', w: 1 }], hub: 0 }; + return { items: [{ kind: 'sales', w: 0.72 }, { kind: 'backroom', w: 0.18 }, { kind: 'wc', w: 0.05 }, { kind: 'office', w: 0.05 }], hub: 0 }; + case 'restaurant': + if (area < 40) return { items: [{ kind: 'dining', w: 0.7 }, { kind: 'prokitchen', w: 0.3 }], hub: 0 }; + return { items: [{ kind: 'dining', w: 0.58 }, { kind: 'prokitchen', w: 0.24 }, { kind: 'wc', w: 0.08 }, { kind: 'storage', w: 0.1 }], hub: 0 }; + case 'industrial': + if (area < 160) return { items: [{ kind: 'workshop', w: 0.8 }, { kind: 'wc', w: 0.08 }, { kind: 'storage', w: 0.12 }], hub: 0 }; + return { items: [{ kind: 'hall_ind', w: 0.78 }, { kind: 'office', w: 0.1 }, { kind: 'wc', w: 0.04 }, { kind: 'storage', w: 0.08 }], hub: 0 }; + case 'warehouse': + if (use === 'sports_hall' || use === 'sports_centre') return { items: [{ kind: 'hall_ind', w: 0.85 }, { kind: 'wc', w: 0.08 }, { kind: 'storage', w: 0.07 }], hub: 0 }; + return { items: [{ kind: 'hall_ind', w: 0.9 }, { kind: 'office', w: 0.07 }, { kind: 'wc', w: 0.03 }], hub: 0 }; + case 'farm': + return { items: [{ kind: 'hall_ind', w: 0.85 }, { kind: 'storage', w: 0.15 }], hub: 0 }; + case 'church': + if (area < 60) return { items: [{ kind: 'nave', w: 1 }], hub: 0 }; + return { items: [{ kind: 'nave', w: 0.86 }, { kind: 'utility', w: 0.14 }], hub: 0 }; + case 'shed': + return { items: [{ kind: 'storage', w: 1 }], hub: 0 }; + case 'civic': + return { items: [{ kind: 'hall', w: 0.25 }, { kind: 'office', w: 0.2 }, { kind: 'meeting', w: 0.3 }, { kind: 'wc', w: 0.07 }, { kind: 'office', w: 0.18 }], hub: 0 }; + default: + return { items: [{ kind: 'office', w: 0.45 }, { kind: 'hall', w: 0.15 }, { kind: 'office', w: 0.3 }, { kind: 'wc', w: 0.1 }], hub: 1 }; + } +} + +// ------------------------------------------------------------------ деление области + +function newRoom(F: FloorG, kind: RoomKind, unit: number): number { + F.rooms.push({ kind, unit }); + return F.rooms.length - 1; +} + +/** + * Рекурсивное деление прямоугольника на комнаты пропорционально весам. + * Группа с «хабом» (прихожая/коридор/торговый зал) всегда уходит к точке-аттрактору + * (лестница, коридор или дорога) — так хаб оказывается там, где нужен вход. + */ +function splitRegion(g: Grid, F: FloorG, rect: Block, avail: (i: number) => boolean, items: Item[], hub: number, attractor: Vec, unit: number, rng: Rng, out: number[] = []): number[] { + // плотный bbox доступных клеток + let x0 = rect.x1, y0 = rect.y1, x1 = rect.x0, y1 = rect.y0, count = 0; + for (let y = rect.y0; y < rect.y1; y++) + for (let x = rect.x0; x < rect.x1; x++) + if (avail(ci(g, x, y))) { + count++; + if (x < x0) x0 = x; + if (y < y0) y0 = y; + if (x + 1 > x1) x1 = x + 1; + if (y + 1 > y1) y1 = y + 1; + } + if (!count) return out; + const assignAll = (kind: RoomKind) => { + const r = newRoom(F, kind, unit); + for (let y = y0; y < y1; y++) for (let x = x0; x < x1; x++) if (avail(ci(g, x, y))) F.labels[ci(g, x, y)] = r; + out.push(r); + return out; + }; + if (items.length === 1) return assignAll(items[0].kind); + + const total = items.reduce((s, it) => s + it.w, 0); + let k = 1, bestD = Infinity, acc = 0; + for (let i = 1; i < items.length; i++) { + acc += items[i - 1].w; + const d = Math.abs(acc - total / 2) + rng.next() * 0.02 * total; + if (d < bestD) { bestD = d; k = i; } + } + const A = items.slice(0, k), B = items.slice(k); + const fracA = A.reduce((s, it) => s + it.w, 0) / total; + const minCells = 4; // 2 м — минимальная ширина комнаты + const W = x1 - x0, H = y1 - y0; + let axes: ('x' | 'y')[] = W > H * 1.1 ? ['x', 'y'] : H > W * 1.1 ? ['y', 'x'] : rng.chance(0.5) ? ['x', 'y'] : ['y', 'x']; + axes = axes.filter((a) => (a === 'x' ? W : H) >= minCells * 2); + if (!axes.length) { + // слишком мало места — оставляем самое важное помещение + const keep = items[hub] ?? items.reduce((m, it) => (it.w > m.w ? it : m), items[0]); + return assignAll(keep.kind); + } + const axis = axes[0]; + const lo = axis === 'x' ? x0 : y0, hi = axis === 'x' ? x1 : y1; + const per = new Array(hi - lo).fill(0); + for (let y = y0; y < y1; y++) for (let x = x0; x < x1; x++) if (avail(ci(g, x, y))) per[(axis === 'x' ? x : y) - lo]++; + // доля A должна уйти на сторону аттрактора, если в A хаб + const hubInA = hub < k; + const attrLow = (axis === 'x' ? attractor[0] : attractor[1]) < (lo + hi) / 2; + const lowGetsA = hubInA === attrLow; + const lowFrac = lowGetsA ? fracA : 1 - fracA; + let cut = lo + minCells, cum = 0, bestC = Infinity; + for (let c = lo; c < hi; c++) { + if (c - lo >= minCells && hi - c >= minCells) { + const d = Math.abs(cum / count - lowFrac); + if (d < bestC) { bestC = d; cut = c; } + } + cum += per[c - lo]; + } + const lowRect: Block = axis === 'x' ? { x0, y0, x1: cut, y1, lift: false } : { x0, y0, x1, y1: cut, lift: false }; + const highRect: Block = axis === 'x' ? { x0: cut, y0, x1, y1, lift: false } : { x0, y0: cut, x1, y1, lift: false }; + const lowItems = lowGetsA ? A : B, highItems = lowGetsA ? B : A; + const hubOf = (grp: Item[], isA: boolean) => (isA === hubInA ? (isA ? hub : hub - k) : 0); + splitRegion(g, F, lowRect, avail, lowItems, hubOf(lowItems, lowGetsA), attractor, unit, rng, out); + splitRegion(g, F, highRect, avail, highItems, hubOf(highItems, !lowGetsA), attractor, unit, rng, out); + return out; +} + +/** Делит полосу [x0,x1)×[y0,y1) на n колонок с равным числом доступных клеток. */ +function columns(g: Grid, rect: Block, avail: (i: number) => boolean, n: number): Block[] { + const per: number[] = []; + let total = 0; + for (let x = rect.x0; x < rect.x1; x++) { + let c = 0; + for (let y = rect.y0; y < rect.y1; y++) if (avail(ci(g, x, y))) c++; + per.push(c); + total += c; + } + const cols: Block[] = []; + let start = rect.x0, acc = 0, k = 1; + for (let x = rect.x0; x < rect.x1; x++) { + acc += per[x - rect.x0]; + if (k < n && acc >= (total * k) / n && x + 1 - start >= 4) { + cols.push({ x0: start, y0: rect.y0, x1: x + 1, y1: rect.y1, lift: false }); + start = x + 1; + k++; + } + } + cols.push({ x0: start, y0: rect.y0, x1: rect.x1, y1: rect.y1, lift: false }); + return cols.filter((c) => c.x1 > c.x0); +} + +// ------------------------------------------------------------------ оценка планировки + +const MIN_AREA: Partial> = { + bedroom: 7.5, living: 12, kitchen: 5, bath: 3, wc: 1.2, hall: 2.5, office: 6, utility: 2.5, sales: 12, + dining: 10, prokitchen: 5, backroom: 4, storage: 2, meeting: 8, guestroom: 10, +}; + +/** Чем больше, тем лучше: пропорции комнат, площади, хаб у лестницы и у фасада к дороге. */ +function scorePlain(g: Grid, F: FloorG, before: number, hub: number, ground: boolean, roadCell: Vec): number { + const n = F.rooms.length; + const cnt = new Array(n).fill(0); + const bb = Array.from({ length: n }, () => [Infinity, Infinity, -Infinity, -Infinity]); + const touch = new Array(n).fill(0); // касание хаба + let hubStairs = false, hubFront = false; + const stairRooms = new Set(F.stairs.map((s) => s.room)); + const box = maskBox(g); + const cx = (box.x0 + box.x1) / 2, cy = (box.y0 + box.y1) / 2; + const rdx = roadCell[0] - cx, rdy = roadCell[1] - cy; + for (let y = 0; y < g.gh; y++) + for (let x = 0; x < g.gw; x++) { + const i = y * g.gw + x; + const r = F.labels[i]; + if (r < before || !g.mask[i]) continue; + cnt[r]++; + const b = bb[r]; + if (x < b[0]) b[0] = x; + if (y < b[1]) b[1] = y; + if (x + 1 > b[2]) b[2] = x + 1; + if (y + 1 > b[3]) b[3] = y + 1; + if (r === hub) { + for (const j of neighbors4(g, i)) { + const o = F.labels[j]; + if (stairRooms.has(o)) hubStairs = true; + if (o >= before && o !== hub) touch[o] = 1; + if (!g.mask[j] && (x - cx) * rdx + (y - cy) * rdy > 0) hubFront = true; + } + } + } + let s = 0; + for (let r = before; r < n; r++) { + const k = F.rooms[r].kind; + const area = cnt[r] * C * C; + if (!cnt[r]) { s -= 8; continue; } + const w = bb[r][2] - bb[r][0], h = bb[r][3] - bb[r][1]; + const asp = Math.max(w, h) / Math.max(1, Math.min(w, h)); + if (k !== 'hall' && k !== 'corridor' && asp > 2.2) s -= (asp - 2.2) * 3; + const fillRatio = cnt[r] / (w * h); + s -= (1 - fillRatio) * 4; // рваные, Г-образные куски хуже + const min = MIN_AREA[k]; + if (min && area < min) s -= (min - area) * 1.2; + if (r !== hub && ['bath', 'wc', 'bedroom', 'kitchen', 'living', 'office', 'utility'].includes(k) && touch[r]) s += 2; + } + if (stairRooms.size && hub >= 0) s += hubStairs ? 15 : 0; + if (ground && hub >= 0) s += hubFront ? 8 : 0; + return s; +} + +// ------------------------------------------------------------------ раскладка этажа + +function layoutFloor(g: Grid, b: Building, S: Scheme, level: number, rng: Rng): FloorG { + const F: FloorG = { level, labels: new Int32Array(g.gw * g.gh).fill(-1), rooms: [], units: [], stairs: [], entries: [] }; + const box = S.box; + // лестницы — на всех этажах в одном месте + for (const s of S.stairs) { + const r = newRoom(F, s.lift ? 'lift' : 'stairs', -1); + for (let y = s.y0; y < s.y1; y++) for (let x = s.x0; x < s.x1; x++) F.labels[ci(g, x, y)] = r; + F.stairs.push({ block: s, room: r }); + } + const freeCell = (i: number) => g.mask[i] === 1 && F.labels[i] === -1; + const stairC: Vec | null = S.stairs.length ? [(S.stairs[0].x0 + S.stairs[0].x1) / 2, (S.stairs[0].y0 + S.stairs[0].y1) / 2] : null; + const roadC: Vec = g.roadQ ?? [(box.x0 + box.x1) / 2 / 1, box.y1] as Vec; + const roadCell: Vec = [roadC[0] / C, roadC[1] / C]; + const area = (() => { let n = 0; for (let i = 0; i < g.mask.length; i++) if (g.mask[i]) n++; return n * C * C; })(); + const kind = b.kind; + const ground = level === 0; + + const corridorProg = (): Prog | null => { + switch (kind) { + case 'apartments': return 'flats'; + case 'mixed': return ground ? null : 'flats'; + case 'office': case 'civic': return 'offices'; + case 'hotel': return 'hotel'; + case 'hospital': return 'wards'; + case 'school': return 'classes'; + case 'retail': case 'restaurant': return ground ? null : area < 450 ? 'flats' : 'offices'; + case 'industrial': case 'warehouse': return ground ? null : 'offices'; + default: return null; + } + }; + const prog = corridorProg(); + + const plain = (items: Item[], hub: number, attractor: Vec, unitKind: Unit['kind'] | null) => { + let unit = -1; + if (unitKind) { + F.units.push({ kind: unitKind, hub: -1 }); + unit = F.units.length - 1; + } + const before = F.rooms.length; + const hubKind = items[hub]?.kind; + // несколько попыток деления — берём лучшую по качеству планировки + const tries = items.length >= 3 ? 8 : 1; + const saved = F.labels.slice(); + let best: { score: number; labels: Int32Array; rooms: RoomG[] } | null = null; + for (let t = 0; t < tries; t++) { + F.labels.set(saved); + F.rooms.length = before; + splitRegion(g, F, box, freeCell, items, hub, attractor, unit, t === 0 ? rng : new Rng(rng.int(0, 1e9))); + const hr = F.rooms.findIndex((r, i) => i >= before && r.kind === hubKind); + const score = scorePlain(g, F, before, hr, ground, roadCell); + if (!best || score > best.score) best = { score, labels: F.labels.slice(), rooms: F.rooms.slice(before).map((r) => ({ ...r })) }; + } + F.labels.set(best!.labels); + F.rooms.length = before; + F.rooms.push(...best!.rooms); + const hubRoom = F.rooms.findIndex((r, i) => i >= before && r.kind === hubKind); + if (unit >= 0) F.units[unit].hub = hubRoom; + return hubRoom; + }; + + if (kind === 'garage' && area > 45 && level === 0) { + // ряд гаражных боксов, у каждого свои ворота + const n = Math.max(1, Math.round((box.x1 - box.x0) * C / 3.2)); + for (const col of columns(g, box, freeCell, n)) { + F.units.push({ kind: 'service', hub: -1 }); + const u = F.units.length - 1; + const r = splitRegion(g, F, col, freeCell, [{ kind: 'garage', w: 1 }], 0, roadCell, u, rng)[0]; + if (r !== undefined) { F.units[u].hub = r; F.entries.push(r); } + } + return F; + } + + if (S.sections && (kind === 'apartments' || kind === 'mixed')) { + layoutSections(g, F, S, b, rng, roadCell); + return F; + } + + if (S.corridor && prog) { + layoutCorridor(g, F, S, prog, b, rng); + return F; + } + + if (S.corridor && kind === 'mixed' && ground) { + // первый этаж жилого дома с магазинами: вестибюль у лестницы + 1–2 магазина + const cor = S.corridor; + const sx = S.stairs.length ? (S.stairs[0].x0 + S.stairs[0].x1) / 2 : (box.x0 + box.x1) / 2; + const toLow = sx - box.x0 < box.x1 - sx; + const lobby = newRoom(F, 'lobby', -1); + for (let y = cor.y0; y < cor.y1; y++) + for (let x = box.x0; x < box.x1; x++) { + const inSpan = toLow ? x <= sx + 2 : x >= sx - 2; + if (inSpan && freeCell(ci(g, x, y))) F.labels[ci(g, x, y)] = lobby; + } + F.entries.push(lobby); + const nShops = area > 260 ? 2 : 1; + const cols = columns(g, box, freeCell, nShops); + for (const col of cols) { + F.units.push({ kind: 'shop', hub: -1 }); + const u = F.units.length - 1; + const { items, hub } = commercialItems('retail', b.use, area / nShops); + const made = splitRegion(g, F, col, freeCell, items, hub, roadCell, u, rng); + const h = made.find((r) => F.rooms[r].kind === 'sales') ?? made[0]; + if (h !== undefined) { F.units[u].hub = h; F.entries.push(h); } + } + return F; + } + + // Простая раскладка без коридора + const attractor: Vec = stairC && (!ground || ['house', 'apartments', 'mixed'].includes(kind)) ? stairC : roadCell; + let res: { items: Item[]; hub: number }; + let unitKind: Unit['kind'] | null = null; + if (kind === 'house' || ((kind === 'apartments' || kind === 'mixed' || prog === 'flats') && !(kind === 'mixed' && ground))) { + res = kind === 'house' ? houseItems(level, b.levels, area) : flatItems(area); + unitKind = 'home'; + } else if (prog) { + // этаж без коридора у офиса/школы и т.п. + res = commercialItems('office', b.use, area); + unitKind = 'office'; + } else if (kind === 'mixed' && ground) { + res = commercialItems('retail', b.use, area); + unitKind = 'shop'; + } else if (!ground && (kind === 'retail' || kind === 'restaurant')) { + res = flatItems(area); + unitKind = 'home'; + } else { + res = commercialItems(kind, b.use, area); + unitKind = kind === 'church' || kind === 'shed' || kind === 'farm' ? 'service' : kind === 'garage' ? 'service' : kind === 'retail' || kind === 'restaurant' ? 'shop' : 'office'; + } + if (kind === 'garage') res = { items: [{ kind: 'garage', w: 1 }], hub: 0 }; + // без лестницы на верхних этажах прихожая не нужна у квартиры-студии — ок + const hubRoom = plain(res.items, res.hub, attractor, unitKind); + if (ground && hubRoom >= 0) F.entries.push(hubRoom); + return F; +} + +function layoutSections(g: Grid, F: FloorG, S: Scheme, b: Building, rng: Rng, roadCell: Vec) { + const box = S.box; + const ground = F.level === 0; + const freeCell = (i: number) => g.mask[i] === 1 && F.labels[i] === -1; + for (const sec of S.sections!) { + const st = S.stairs[sec.stairs]; + const col: Block = { x0: sec.x0, y0: box.y0, x1: sec.x1, y1: box.y1, lift: false }; + const landing = newRoom(F, 'landing', -1); + // площадка вокруг лестницы (до 1 м) + for (let y = col.y0; y < col.y1; y++) + for (let x = col.x0; x < col.x1; x++) { + const dx = Math.max(st.x0 - x, 0, x - (st.x1 - 1)), dy = Math.max(st.y0 - y, 0, y - (st.y1 - 1)); + if (Math.max(dx, dy) <= 2 && freeCell(ci(g, x, y))) F.labels[ci(g, x, y)] = landing; + } + const cx = (st.x0 + st.x1) / 2, cy = (st.y0 + st.y1) / 2; + if (ground) { + // проход от площадки к фасаду со стороны дороги + const dir = roadCell[1] > cy ? 1 : -1; + const mx = Math.floor(cx); + for (let y = dir > 0 ? st.y1 + 2 : st.y0 - 3; y >= box.y0 - 1 && y <= box.y1; y += dir) { + let any = false; + for (let x = mx - 1; x <= mx + 1; x++) { + if (x < 0 || y < 0 || x >= g.gw || y >= g.gh) continue; + const i = ci(g, x, y); + if (g.mask[i]) any = true; + if (freeCell(i)) F.labels[i] = landing; + } + if (!any) break; + } + F.entries.push(landing); + } + let free = 0; + for (let y = col.y0; y < col.y1; y++) for (let x = col.x0; x < col.x1; x++) if (freeCell(ci(g, x, y))) free++; + const area = free * C * C; + const k = area < 100 ? 1 : area < 190 ? 2 : area < 290 ? 3 : 4; + const rx = Math.round(cx), ry = Math.round(cy); + const L: Block = { ...col, x1: rx }, R: Block = { ...col, x0: rx }; + const quads = (r: Block): Block[] => [{ ...r, y1: ry }, { ...r, y0: ry }]; + const cnt = (r: Block) => { let n = 0; for (let y = r.y0; y < r.y1; y++) for (let x = r.x0; x < r.x1; x++) if (freeCell(ci(g, x, y))) n++; return n; }; + let rects: Block[] = k === 1 ? [col] : k === 2 ? [L, R] : k === 3 ? (cnt(L) >= cnt(R) ? [...quads(L), R] : [L, ...quads(R)]) : [...quads(L), ...quads(R)]; + // слишком маленькие части отдаём соседям + rects = rects.filter((r) => cnt(r) * C * C >= 22 || rects.length === 1); + for (const r of rects) { + const a = cnt(r) * C * C; + if (!a) continue; + if (b.kind === 'mixed' && ground) { + F.units.push({ kind: 'shop', hub: -1 }); + const u = F.units.length - 1; + const { items, hub } = commercialItems('retail', b.use, a); + const made = splitRegion(g, F, r, freeCell, items, hub, roadCell, u, rng); + const h = made.find((m) => F.rooms[m].kind === 'sales') ?? made[0]; + if (h !== undefined) { F.units[u].hub = h; F.entries.push(h); } + } else { + F.units.push({ kind: 'home', hub: -1 }); + const u = F.units.length - 1; + const { items, hub } = flatItems(a); + const made = splitRegion(g, F, r, freeCell, items, hub, [cx, cy], u, rng); + F.units[u].hub = made.find((m) => F.rooms[m].kind === items[hub].kind) ?? made[0]; + } + } + } +} + +function layoutCorridor(g: Grid, F: FloorG, S: Scheme, prog: Prog, b: Building, rng: Rng) { + const cor = S.corridor!; + const box = S.box; + const corridor = newRoom(F, 'corridor', -1); + const freeCell = (i: number) => g.mask[i] === 1 && F.labels[i] === -1; + for (let y = cor.y0; y < cor.y1; y++) for (let x = box.x0; x < box.x1; x++) if (freeCell(ci(g, x, y))) F.labels[ci(g, x, y)] = corridor; + if (F.level === 0) F.entries.push(corridor); + const sides: Block[] = []; + if (cor.double || cor.unitsAbove) sides.push({ x0: box.x0, y0: box.y0, x1: box.x1, y1: cor.y0, lift: false }); + if (cor.double || !cor.unitsAbove) sides.push({ x0: box.x0, y0: cor.y1, x1: box.x1, y1: box.y1, lift: false }); + const corY = (cor.y0 + cor.y1) / 2; + const unitArea = 52 + (b.seed % 25); // м², своя «типовая» квартира у каждого дома + const stairX = S.stairs.length ? (S.stairs[0].x0 + S.stairs[0].x1) / 2 : (box.x0 + box.x1) / 2; + sides.forEach((side, si) => { + const depthM = Math.max(1, side.y1 - side.y0) * C; + const lenCells = side.x1 - side.x0; + let colW: number; + switch (prog) { + case 'flats': colW = unitArea / depthM / C; break; + case 'offices': colW = rng.range(3.6, 4.6) / C; break; + case 'classes': colW = 7.5 / C; break; + case 'hotel': colW = 3.8 / C; break; + case 'wards': colW = 4.6 / C; break; + } + let n = Math.max(1, Math.round(lenCells / colW)); + const open = prog === 'offices' && rng.chance(0.35) && si === 0; + if (open) n = Math.max(1, Math.round(lenCells / 30)); + const cols = columns(g, side, freeCell, n); + // особые колонки: санузел и комната персонала ближе к лестнице + const order = cols.map((c, i) => ({ i, d: Math.abs((c.x0 + c.x1) / 2 - stairX) })).sort((a, b2) => a.d - b2.d).map((o) => o.i); + const special = new Map(); + if (prog !== 'flats' && prog !== 'hotel' && cols.length >= 3) { + special.set(order[0], 'wc'); + if (cols.length >= 5) special.set(order[1], prog === 'offices' ? 'meeting' : 'staff'); + } + cols.forEach((col, k) => { + const attractor: Vec = [(col.x0 + col.x1) / 2, corY]; + let cnt = 0; + for (let y = col.y0; y < col.y1; y++) for (let x = col.x0; x < col.x1; x++) if (freeCell(ci(g, x, y))) cnt++; + const a = cnt * C * C; + if (!cnt) return; + const sp = special.get(k); + if (prog === 'flats') { + F.units.push({ kind: 'home', hub: -1 }); + const u = F.units.length - 1; + const { items, hub } = flatItems(a); + const made = splitRegion(g, F, col, freeCell, items, hub, attractor, u, rng); + F.units[u].hub = made.find((r) => F.rooms[r].kind === items[hub].kind) ?? made[0]; + } else if (prog === 'hotel') { + F.units.push({ kind: 'home', hub: -1 }); + const u = F.units.length - 1; + const made = splitRegion(g, F, col, freeCell, a > 14 ? [{ kind: 'guestroom', w: 0.78 }, { kind: 'bath', w: 0.22 }] : [{ kind: 'guestroom', w: 1 }], 0, attractor, u, rng); + F.units[u].hub = made.find((r) => F.rooms[r].kind === 'guestroom') ?? made[0]; + } else { + const kindR: RoomKind = sp ?? (open ? 'openoffice' : prog === 'offices' ? (a > 45 ? 'openoffice' : 'office') : prog === 'classes' ? 'classroom' : 'ward'); + splitRegion(g, F, col, freeCell, [{ kind: kindR, w: 1 }], 0, attractor, -1, rng); + } + }); + }); +} + +// ------------------------------------------------------------------ чистка разметки + +function neighbors4(g: Grid, i: number): number[] { + const x = i % g.gw, y = (i / g.gw) | 0; + const out: number[] = []; + if (x > 0) out.push(i - 1); + if (x < g.gw - 1) out.push(i + 1); + if (y > 0) out.push(i - g.gw); + if (y < g.gh - 1) out.push(i + g.gw); + return out; +} + +/** Заполнить неразмеченные клетки маски по соседям (BFS). */ +function fillUnlabeled(g: Grid, F: FloorG, allow: Uint8Array) { + let frontier: number[] = []; + for (let i = 0; i < allow.length; i++) if (allow[i] && F.labels[i] >= 0 && F.rooms[F.labels[i]].kind !== 'stairs' && F.rooms[F.labels[i]].kind !== 'lift') frontier.push(i); + while (frontier.length) { + const next: number[] = []; + for (const i of frontier) + for (const j of neighbors4(g, i)) + if (allow[j] && F.labels[j] === -1) { + F.labels[j] = F.labels[i]; + next.push(j); + } + frontier = next; + } +} + +/** Слить комнату в соседа с самой длинной общей границей. */ +function mergeRoom(g: Grid, F: FloorG, r: number, cells?: number[]) { + const contact = new Map(); + let list = cells; + if (!list) { + list = []; + for (let i = 0; i < F.labels.length; i++) if (F.labels[i] === r) list.push(i); + } + const set = new Set(list); + for (const i of list) + for (const j of neighbors4(g, i)) { + const o = F.labels[j]; + if (o >= 0 && o !== r && !set.has(j) && !F.rooms[o].dead && F.rooms[o].kind !== 'stairs' && F.rooms[o].kind !== 'lift') { + let w = 1; + if (F.rooms[o].unit === F.rooms[r].unit) w = 3; + else if (F.rooms[r].unit >= 0 && F.rooms[o].unit >= 0) w = 0.2; + contact.set(o, (contact.get(o) ?? 0) + w); + } + } + let best = -1, bw = 0; + for (const [o, w] of contact) if (w > bw) { bw = w; best = o; } + if (best < 0) return false; + for (const i of list) F.labels[i] = best; + if (!cells) F.rooms[r].dead = true; + return true; +} + +function cleanup(g: Grid, F: FloorG) { + // разорванные комнаты: оставить крупнейший кусок, остальные — соседям + for (let pass = 0; pass < 2; pass++) { + const seen = new Uint8Array(F.labels.length); + const comps = new Map(); + for (let i = 0; i < F.labels.length; i++) { + const r = F.labels[i]; + if (r < 0 || seen[i] || !g.mask[i]) continue; + const comp: number[] = []; + const st = [i]; + seen[i] = 1; + while (st.length) { + const k = st.pop()!; + comp.push(k); + for (const j of neighbors4(g, k)) if (!seen[j] && F.labels[j] === r && g.mask[j]) { seen[j] = 1; st.push(j); } + } + if (!comps.has(r)) comps.set(r, []); + comps.get(r)!.push(comp); + } + for (const [r, cs] of comps) { + if (F.rooms[r].kind === 'stairs' || F.rooms[r].kind === 'lift') continue; + cs.sort((a, b) => b.length - a.length); + for (let k = 1; k < cs.length; k++) mergeRoom(g, F, r, cs[k]); + // крошечные комнаты (< 1.5 м²) и слишком узкие + const n = cs[0].length; + if (n < 6 && F.rooms[r].kind !== 'corridor') mergeRoom(g, F, r); + } + } +} + +// ------------------------------------------------------------------ границы и двери + +interface Run { + r1: number; + r2: number; + /** 'h' — горизонтальная граница на линии y=line; 'v' — вертикальная на x=line (в клетках). */ + o: 'h' | 'v'; + line: number; + s: number; + e: number; +} + +/** Отрезки границ между комнатами. onlyMask — только там, где обе клетки внутри контура (для дверей). */ +function boundaryRuns(g: Grid, F: FloorG, onlyMask: boolean, anyPair = false): Run[] { + const runs: Run[] = []; + const ok = (i: number) => F.labels[i] >= 0 && (!onlyMask || g.mask[i] === 1); + // горизонтальные границы: между (x,y-1) и (x,y) + for (let y = 1; y < g.gh; y++) { + let cur: Run | null = null; + for (let x = 0; x <= g.gw; x++) { + let pair: [number, number] | null = null; + if (x < g.gw) { + const a = ci(g, x, y - 1), b = ci(g, x, y); + if (ok(a) && ok(b) && F.labels[a] !== F.labels[b]) pair = [F.labels[a], F.labels[b]]; + } + const same = cur && pair && (anyPair || (cur.r1 === pair[0] && cur.r2 === pair[1])); + if (cur && !same) { runs.push(cur); cur = null; } + if (pair && !cur) cur = { r1: pair[0], r2: pair[1], o: 'h', line: y, s: x, e: x + 1 }; + else if (pair && cur) cur.e = x + 1; + } + } + for (let x = 1; x < g.gw; x++) { + let cur: Run | null = null; + for (let y = 0; y <= g.gh; y++) { + let pair: [number, number] | null = null; + if (y < g.gh) { + const a = ci(g, x - 1, y), b = ci(g, x, y); + if (ok(a) && ok(b) && F.labels[a] !== F.labels[b]) pair = [F.labels[a], F.labels[b]]; + } + const same = cur && pair && (anyPair || (cur.r1 === pair[0] && cur.r2 === pair[1])); + if (cur && !same) { runs.push(cur); cur = null; } + if (pair && !cur) cur = { r1: pair[0], r2: pair[1], o: 'v', line: x, s: y, e: y + 1 }; + else if (pair && cur) cur.e = y + 1; + } + } + return runs; +} + +const PREF: Partial>>> = { + landing: { stairs: 6, lift: 6, hall: 6, living: 3, sales: 2 }, + corridor: { stairs: 6, lift: 6, lobby: 5, hall: 5, guestroom: 4, office: 4, openoffice: 4, classroom: 4, ward: 4, wc: 3, meeting: 3, staff: 3, living: 4 }, + lobby: { stairs: 6, lift: 6, corridor: 5 }, + hall: { stairs: 6, living: 4, kitchen: 3, bath: 4, wc: 4, bedroom: 4, utility: 3, office: 3, storage: 2, meeting: 3 }, + living: { kitchen: 4, hall: 4, stairs: 3, bedroom: 2, bath: 1, dining: 3 }, + kitchen: { utility: 2, storage: 2, living: 3 }, + bedroom: { bath: 1.5 }, + sales: { backroom: 4, office: 2, wc: 1.5, storage: 3 }, + backroom: { office: 3, wc: 3, storage: 2 }, + dining: { prokitchen: 5, wc: 4, storage: 1 }, + prokitchen: { storage: 4 }, + hall_ind: { office: 4, wc: 3, storage: 4, workshop: 3 }, + workshop: { wc: 3, storage: 4 }, + nave: { utility: 4 }, + openoffice: { meeting: 3, wc: 2, office: 2 }, + guestroom: { bath: 5 }, + stairs: { hall: 5, corridor: 5, lobby: 5, living: 3 }, +}; + +function pref(a: RoomKind, b: RoomKind): number { + return PREF[a]?.[b] ?? (PREF[b]?.[a] ?? 0) * 0.8 + 0.5; +} + +/** Соединяет комнаты дверями: «дерево» от входов/лестниц, санузлы и спальни — тупики. */ +function connect(g: Grid, F: FloorG, rng: Rng): { pairs: [number, number][]; unreached: number[] } { + const runs = boundaryRuns(g, F, true).filter((r) => r.e - r.s >= 2); + const alive = F.rooms.map((r, i) => (!r.dead ? i : -1)).filter((i) => i >= 0); + const present = new Set(); + for (let i = 0; i < F.labels.length; i++) if (F.labels[i] >= 0 && g.mask[i]) present.add(F.labels[i]); + const connected = new Set(); + for (const e of F.entries) if (present.has(e)) connected.add(e); + if (F.level > 0 || !connected.size) for (const s of F.stairs) connected.add(s.room); + if (!connected.size && alive.length) connected.add(alive[0]); + const pairs: [number, number][] = []; + const longest = new Map(); + for (const r of runs) { + const k = r.r1 < r.r2 ? `${r.r1},${r.r2}` : `${r.r2},${r.r1}`; + longest.set(k, Math.max(longest.get(k) ?? 0, r.e - r.s)); + } + const edges = [...longest.entries()].map(([k, l]) => { + const [a, b] = k.split(',').map(Number); + return { a, b, l }; + }); + const isHub = (r: number) => { + const u = F.rooms[r].unit; + return u < 0 || F.units[u]?.hub === r; + }; + const allowed = (u: number, v: number, stage: number) => { + const ru = F.rooms[u], rv = F.rooms[v]; + if (ru.dead || rv.dead) return false; + if (rv.kind === 'lift' && !['corridor', 'lobby', 'landing'].includes(ru.kind) && stage < 2) return false; + if (ru.kind === 'lift') return false; + if (ru.unit >= 0 && rv.unit >= 0 && ru.unit !== rv.unit) return false; + if ((ru.unit >= 0) !== (rv.unit >= 0) && stage < 2) { + // в квартиру/магазин — только через её хаб + const inner = ru.unit >= 0 ? u : v; + if (!isHub(inner)) return false; + } + if (stage < 1 && LEAF.has(ru.kind)) return false; + if (stage < 1 && ru.kind === 'stairs' && F.level === 0 && F.entries.length) return false; + return true; + }; + for (let stage = 0; stage < 3; stage++) { + for (;;) { + let best: { u: number; v: number; s: number } | null = null; + for (const e of edges) { + for (const [u, v] of [[e.a, e.b], [e.b, e.a]]) { + if (!connected.has(u) || connected.has(v) || !allowed(u, v, stage)) continue; + const s = pref(F.rooms[u].kind, F.rooms[v].kind) + Math.min(e.l, 8) * 0.05 + rng.next() * 0.1; + if (!best || s > best.s) best = { u, v, s }; + } + } + if (!best) break; + connected.add(best.v); + pairs.push([best.u, best.v]); + } + } + const unreached = [...present].filter((r) => !connected.has(r) && !F.rooms[r].dead); + // лишний проход гостиная–кухня (часто арка) + for (const e of edges) { + const ka = F.rooms[e.a].kind, kb = F.rooms[e.b].kind; + if (((ka === 'living' && kb === 'kitchen') || (kb === 'living' && ka === 'kitchen')) && F.rooms[e.a].unit === F.rooms[e.b].unit && !pairs.some(([p, q]) => (p === e.a && q === e.b) || (p === e.b && q === e.a)) && rng.chance(0.6)) pairs.push([e.a, e.b]); + } + return { pairs, unreached }; +} + +function placeDoor(g: Grid, F: FloorG, run: Run, u: number, v: number, kind: Door['kind'], width: number, rng: Rng): DoorL { + const L = (run.e - run.s) * C; + const w = Math.min(width, L - 0.2); + let start: number; + if (L >= w + 0.6) start = rng.chance(0.5) ? run.s * C + 0.2 : run.e * C - 0.2 - w; + else start = (run.s * C + run.e * C) / 2 - w / 2; + const line = run.line * C; + const a: Vec = run.o === 'h' ? [start, line] : [line, start]; + const b: Vec = run.o === 'h' ? [start + w, line] : [line, start + w]; + // полотно открывается в комнату v + const mid: Vec = [(a[0] + b[0]) / 2, (a[1] + b[1]) / 2]; + const probe = (dx: number, dy: number) => { + const x = Math.floor((mid[0] + dx) / C), y = Math.floor((mid[1] + dy) / C); + return inG(g, x, y) ? F.labels[ci(g, x, y)] : -1; + }; + const off = C / 2; + const side = run.o === 'h' ? (probe(0, off) === v ? 1 : -1) : probe(off, 0) === v ? 1 : -1; + const swingTo: Vec = run.o === 'h' ? [mid[0], mid[1] + side * off] : [mid[0] + side * off, mid[1]]; + return { a, b, r1: u, r2: v, kind, swingTo }; +} + +// ------------------------------------------------------------------ вход и окна + +function labelAt(g: Grid, F: FloorG, p: Vec): number { + const x = Math.floor(p[0] / C), y = Math.floor(p[1] / C); + if (!inG(g, x, y)) return -1; + return F.labels[ci(g, x, y)]; +} + +interface EdgeOpen { + ring: number; + edge: number; + t0: number; + t1: number; +} + +function inwardNormal(g: Grid, a: Vec, b: Vec): Vec { + const L = dist(a, b); + const n: Vec = [-(b[1] - a[1]) / L, (b[0] - a[0]) / L]; + const m: Vec = [(a[0] + b[0]) / 2 + n[0] * 0.2, (a[1] + b[1]) / 2 + n[1] * 0.2]; + return pointInRings(m, g.rings) ? n : [-n[0], -n[1]]; +} + +function findEntrance(g: Grid, F: FloorG, room: number, width: number, roadSegsQ: [Vec, Vec, number][], taken: EdgeOpen[]): { door: DoorL; open: EdgeOpen } | null { + let best: { door: DoorL; open: EdgeOpen; s: number } | null = null; + const r = g.rings[0]; + for (let e = 0; e < r.length; e++) { + const a = r[e], b = r[(e + 1) % r.length]; + const L = dist(a, b); + if (L < width + 1.0) continue; + const n = inwardNormal(g, a, b); + for (let s = 0.5 + width / 2; s <= L - 0.5 - width / 2; s += 0.25) { + const t = s / L; + const p: Vec = [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t]; + const t0 = (s - width / 2) / L, t1 = (s + width / 2) / L; + if (taken.some((o) => o.ring === 0 && o.edge === e && o.t0 - 0.6 / L < t1 && o.t1 + 0.6 / L > t0)) continue; + const pa: Vec = [a[0] + (b[0] - a[0]) * t0 + n[0] * 0.4, a[1] + (b[1] - a[1]) * t0 + n[1] * 0.4]; + const pb: Vec = [a[0] + (b[0] - a[0]) * t1 + n[0] * 0.4, a[1] + (b[1] - a[1]) * t1 + n[1] * 0.4]; + const pc: Vec = [p[0] + n[0] * 0.4, p[1] + n[1] * 0.4]; + if (labelAt(g, F, pa) !== room || labelAt(g, F, pb) !== room || labelAt(g, F, pc) !== room) continue; + let score = 0; + if (roadSegsQ.length) { + score = Infinity; + for (const [ra, rb, w] of roadSegsQ) score = Math.min(score, dist(p, closestOnSegment(p, ra, rb)) / w); + // фасад должен смотреть на дорогу + const toRoad = sub2(closestRoad(p, roadSegsQ), p); + const tl = Math.hypot(toRoad[0], toRoad[1]) || 1; + score += (1 + (n[0] * toRoad[0] + n[1] * toRoad[1]) / tl) * 6; + } + if (!best || score < best.s) { + const da: Vec = [a[0] + (b[0] - a[0]) * t0, a[1] + (b[1] - a[1]) * t0]; + const db: Vec = [a[0] + (b[0] - a[0]) * t1, a[1] + (b[1] - a[1]) * t1]; + best = { s: score, open: { ring: 0, edge: e, t0, t1 }, door: { a: da, b: db, r1: room, r2: -1, kind: 'entrance', swingTo: [p[0] + n[0] * 0.5, p[1] + n[1] * 0.5] } }; + } + } + } + return best; +} + +const sub2 = (a: Vec, b: Vec): Vec => [a[0] - b[0], a[1] - b[1]]; +function closestRoad(p: Vec, segs: [Vec, Vec, number][]): Vec { + let best: Vec = p, bd = Infinity; + for (const [a, b] of segs) { + const q = closestOnSegment(p, a, b); + const d = dist(p, q); + if (d < bd) { bd = d; best = q; } + } + return best; +} + +function windowSpec(kind: BuildingKind, room: RoomKind, ground: boolean): { w: number; step: number } | null { + if (NO_WINDOW.has(room)) return null; + if (room === 'bath' || room === 'wc') return { w: 0.6, step: 99 }; + if (room === 'stairs') return { w: 0.9, step: 99 }; + if (room === 'corridor' || room === 'lobby' || room === 'landing') return { w: 1.2, step: 6 }; + if (room === 'sales' && ground) return { w: 2.4, step: 3 }; + if (room === 'dining') return { w: 1.8, step: 2.6 }; + if (room === 'hall_ind' || room === 'workshop') return { w: 2.0, step: 6 }; + if (room === 'nave') return { w: 1.0, step: 3.5 }; + if (room === 'prokitchen') return { w: 1.0, step: 4 }; + if (kind === 'office' || room === 'openoffice' || room === 'office' || room === 'meeting') return { w: 1.6, step: 2.2 }; + if (kind === 'apartments' || kind === 'mixed' || kind === 'hotel') return { w: 1.4, step: 2.8 }; + if (room === 'classroom') return { w: 1.8, step: 2.6 }; + return { w: 1.2, step: 3.2 }; +} + +function placeWindows(g: Grid, F: FloorG, b: Building, taken: EdgeOpen[]): { wins: WindowL[]; opens: EdgeOpen[] } { + const wins: WindowL[] = []; + const opens: EdgeOpen[] = []; + g.rings.forEach((r, ri) => { + for (let e = 0; e < r.length; e++) { + const a = r[e], bb = r[(e + 1) % r.length]; + const L = dist(a, bb); + if (L < 1.6) continue; + const n = inwardNormal(g, a, bb); + const at = (s: number, depth = 0.45): Vec => [a[0] + ((bb[0] - a[0]) * s) / L + n[0] * depth, a[1] + ((bb[1] - a[1]) * s) / L + n[1] * depth]; + // вдоль стены: смотрим, какая комната за ней, и ставим окна с шагом + let s = 0.7; + const usedRooms = new Map(); + while (s < L - 0.7) { + const room = labelAt(g, F, at(s)); + if (room < 0) { s += 0.25; continue; } + const spec = windowSpec(b.kind, F.rooms[room].kind, F.level === 0); + if (!spec) { s += 0.25; continue; } + const w = spec.w; + const s0 = s, s1 = s + w; + if (s1 > L - 0.7) break; + const ok = [s0 + 0.05, (s0 + s1) / 2, s1 - 0.05].every((q) => labelAt(g, F, at(q)) === room && labelAt(g, F, at(q, 0.9)) === room); + const t0 = s0 / L, t1 = s1 / L; + const clash = taken.some((o) => o.ring === ri && o.edge === e && o.t0 - 0.5 / L < t1 && o.t1 + 0.5 / L > t0); + const count = usedRooms.get(room) ?? 0; + if (ok && !clash && !(spec.step >= 99 && count >= 1)) { + // окно по центру своего «шага» + wins.push({ a: at(s0, 0), b: at(s1, 0), room }); + opens.push({ ring: ri, edge: e, t0, t1 }); + usedRooms.set(room, count + 1); + s = s1 + Math.max(0.6, spec.step - w); + } else s += 0.25; + } + } + }); + return { wins, opens }; +} + +// ------------------------------------------------------------------ контуры комнат + +/** Обводка множества клеток в кольца (по направленным рёбрам). */ +function traceCells(g: Grid, has: (x: number, y: number) => boolean, bb: [number, number, number, number] = [0, 0, g.gw, g.gh]): Ring[] { + const edges = new Map(); + const add = (x0: number, y0: number, x1: number, y1: number) => { + const k = `${x0},${y0}`; + if (!edges.has(k)) edges.set(k, []); + edges.get(k)!.push([x1, y1]); + }; + for (let y = bb[1]; y < bb[3]; y++) + for (let x = bb[0]; x < bb[2]; x++) { + if (!has(x, y)) continue; + if (!has(x, y - 1)) add(x, y, x + 1, y); + if (!has(x + 1, y)) add(x + 1, y, x + 1, y + 1); + if (!has(x, y + 1)) add(x + 1, y + 1, x, y + 1); + if (!has(x - 1, y)) add(x, y + 1, x, y); + } + const rings: Ring[] = []; + for (;;) { + const startKey = edges.keys().next().value as string | undefined; + if (startKey === undefined) break; + const ring: [number, number][] = []; + let [cx, cy] = startKey.split(',').map(Number); + const sx = cx, sy = cy; + let guard = 0; + do { + const k = `${cx},${cy}`; + const list = edges.get(k); + if (!list || !list.length) break; + const [nx, ny] = list.pop()!; + if (!list.length) edges.delete(k); + ring.push([cx, cy]); + cx = nx; cy = ny; + } while ((cx !== sx || cy !== sy) && ++guard < 1e6); + // убрать коллинеарные вершины + const simp: [number, number][] = []; + for (let i = 0; i < ring.length; i++) { + const p = ring[(i - 1 + ring.length) % ring.length], c = ring[i], n = ring[(i + 1) % ring.length]; + if ((c[0] - p[0]) * (n[1] - c[1]) - (c[1] - p[1]) * (n[0] - c[0]) !== 0) simp.push(c); + } + if (simp.length >= 3) rings.push(simp.map(([x, y]) => [x * C, y * C])); + } + return rings; +} + +/** Точка для подписи — самая «глубокая» клетка комнаты. */ +function poleOf(g: Grid, cells: number[], label: Int32Array, r: number): Vec { + const depth = new Map(); + let frontier = cells.filter((i) => neighbors4(g, i).some((j) => label[j] !== r) || neighbors4(g, i).length < 4); + for (const i of frontier) depth.set(i, 1); + let d = 1; + while (frontier.length) { + const next: number[] = []; + d++; + for (const i of frontier) for (const j of neighbors4(g, i)) if (label[j] === r && !depth.has(j)) { depth.set(j, d); next.push(j); } + frontier = next; + } + let best = cells[0], bd = -1; + for (const [i, v] of depth) if (v > bd || (v === bd && i < best)) { bd = v; best = i; } + return [((best % g.gw) + 0.5) * C, (((best / g.gw) | 0) + 0.5) * C]; +} + +// ------------------------------------------------------------------ сборка + +export interface InteriorResult { + floors: Floor[]; + units: Unit[]; + beds: number; +} + +export function generateInterior(job: InteriorJob): InteriorResult { + const b = job.building; + const g = makeGrid(b, job.roadSegs); + const rngS = new Rng(b.seed); + const maskCount = g.mask.reduce((s, v) => s + v, 0); + if (maskCount < 8) return { floors: [], units: [], beds: 0 }; + const wantCorridor = ['apartments', 'mixed', 'office', 'civic', 'hotel', 'hospital', 'school'].includes(b.kind) || (b.levels > 1 && ['retail', 'restaurant', 'industrial', 'warehouse'].includes(b.kind)); + const S = makeScheme(g, b, rngS, wantCorridor, b.kind === 'apartments' || b.kind === 'mixed'); + const roadSegsQ: [Vec, Vec, number][] = job.roadSegs.map(([a, c, w]) => { + const qa = rotate(a, -g.angle), qc = rotate(c, -g.angle); + return [[qa[0] - g.ox, qa[1] - g.oy], [qc[0] - g.ox, qc[1] - g.oy], w]; + }); + + const floors: Floor[] = []; + const units: Unit[] = []; + let beds = 0; + const W = (q: Vec) => toWorld(g, q); + const pfx = b.id; + + for (let level = 0; level < b.levels; level++) { + // одинаковые типовые этажи: генерируем по сиду варианта, чтобы не множить разнообразие бесконечно + const variant = level === 0 ? 0 : 1 + ((level - 1) % 3); + const rng = new Rng(b.seed * 31 + variant * 7919); + const F = layoutFloor(g, b, S, level, rng); + fillUnlabeled(g, F, g.mask); + cleanup(g, F); + // недостижимые комнаты присоединяем к соседям, пока все не станут достижимы + let conn = connect(g, F, rng); + for (let it = 0; it < 4 && conn.unreached.length; it++) { + for (const r of conn.unreached) { + if (F.rooms[r].kind === 'stairs' || F.rooms[r].kind === 'lift') continue; + mergeRoom(g, F, r); + } + conn = connect(g, F, rng); + } + for (const u of F.units) if (u.hub >= 0 && F.rooms[u.hub].dead) u.hub = -1; + // распространяем разметку на клетки, частично попадающие в контур + fillUnlabeled(g, F, g.touch); + + // двери + const doorRuns = boundaryRuns(g, F, true).filter((r) => r.e - r.s >= 2); + const doors: DoorL[] = []; + for (const [u, v] of conn.pairs) { + const cands = doorRuns.filter((r) => (r.r1 === u && r.r2 === v) || (r.r1 === v && r.r2 === u)); + if (!cands.length) continue; + const run = cands.reduce((m, r) => (r.e - r.s > m.e - m.s ? r : m), cands[0]); + const ku = F.rooms[u].kind, kv = F.rooms[v].kind; + const isOpening = (ku === 'stairs' || kv === 'stairs') && b.kind === 'house' || (ku === 'living' && kv === 'kitchen') || (kv === 'living' && ku === 'kitchen') || ku === 'lift' || kv === 'lift' || (['sales', 'hall_ind', 'openoffice'].includes(ku) && ['sales', 'hall_ind', 'openoffice'].includes(kv)); + const isUnit = (F.rooms[u].unit >= 0) !== (F.rooms[v].unit >= 0); + const kind: Door['kind'] = isOpening ? 'opening' : isUnit ? 'unit' : 'interior'; + const width = isOpening ? 1.4 : ['hall_ind', 'warehouse'].includes(ku) || ['hall_ind'].includes(kv) ? 1.6 : isUnit ? 0.95 : 0.85; + doors.push(placeDoor(g, F, run, u, v, kind, width, rng)); + } + + // входы с улицы + const taken: EdgeOpen[] = []; + if (level === 0) { + const entryRooms = F.entries.filter((r) => !F.rooms[r].dead); + let any = false; + for (const r of entryRooms) { + const garage = F.rooms[r].kind === 'garage'; + const big = ['sales', 'hall_ind', 'nave', 'lobby', 'landing'].includes(F.rooms[r].kind); + const ent = findEntrance(g, F, r, garage ? 2.5 : big ? 1.6 : 1.0, roadSegsQ, taken); + if (ent) { + if (garage) ent.door.kind = 'garage'; + doors.push(ent.door); + taken.push(ent.open); + any = true; + } + } + if (!any) { + // ни один хаб не выходит на фасад — ищем любую комнату у наружной стены по предпочтению + const present = [...new Set([...F.labels].filter((l) => l >= 0))]; + present.sort((x, y) => ENTRY_PREF.indexOf(F.rooms[x].kind) - ENTRY_PREF.indexOf(F.rooms[y].kind)); + for (const r of present) { + if (F.rooms[r].dead || F.rooms[r].kind === 'stairs' || F.rooms[r].kind === 'lift') continue; + const ent = findEntrance(g, F, r, 0.95, roadSegsQ, taken); + if (ent) { doors.push(ent.door); taken.push(ent.open); break; } + } + } + // ворота для промышленных цехов + for (const r of new Set([...F.labels])) { + if (r >= 0 && F.rooms[r].kind === 'hall_ind' && rngS.chance(0.8)) { + const ent = findEntrance(g, F, r, 3.5, [], taken); + if (ent) { ent.door.kind = 'garage'; doors.push(ent.door); taken.push(ent.open); } + } + } + } + const { wins, opens } = placeWindows(g, F, b, taken); + + // ---- выход: локальные → мировые координаты + const roomIds = F.rooms.map((_, i) => `${pfx}_f${level}_r${i}`); + const rooms: Room[] = []; + const cellsOf = new Map(); + for (let i = 0; i < F.labels.length; i++) { + const r = F.labels[i]; + if (r < 0) continue; + if (!cellsOf.has(r)) cellsOf.set(r, []); + cellsOf.get(r)!.push(i); + } + for (const [r, cells] of cellsOf) { + if (F.rooms[r].dead) continue; + let bx0 = g.gw, by0 = g.gh, bx1 = 0, by1 = 0; + for (const i of cells) { + const x = i % g.gw, y = (i / g.gw) | 0; + if (x < bx0) bx0 = x; if (y < by0) by0 = y; if (x + 1 > bx1) bx1 = x + 1; if (y + 1 > by1) by1 = y + 1; + } + const rings = traceCells(g, (x, y) => inG(g, x, y) && F.labels[ci(g, x, y)] === r, [bx0, by0, bx1, by1]); + const maskCells = cells.filter((i) => g.mask[i]); + const u = F.rooms[r].unit; + rooms.push({ + id: roomIds[r], kind: F.rooms[r].kind, rings: rings.map((rr) => rr.map(W)), + area: Math.round(maskCells.length * C * C * 10) / 10, + labelPos: W(poleOf(g, maskCells.length ? maskCells : cells, F.labels, r)), + unitId: u >= 0 ? `${pfx}_f${level}_u${u}` : undefined, + }); + } + + // стены: внутренние по границам клеток минус дверные проёмы + const walls: Wall[] = []; + const wallRuns = boundaryRuns(g, F, false, true); + for (const run of wallRuns) { + // интервалы проёмов на этой линии + const cuts: [number, number][] = []; + for (const d of doors) { + if (d.r2 === -1) continue; + if (run.o === 'h' && Math.abs(d.a[1] - run.line * C) < 1e-6 && Math.abs(d.b[1] - d.a[1]) < 1e-6) cuts.push([Math.min(d.a[0], d.b[0]), Math.max(d.a[0], d.b[0])]); + if (run.o === 'v' && Math.abs(d.a[0] - run.line * C) < 1e-6 && Math.abs(d.b[0] - d.a[0]) < 1e-6) cuts.push([Math.min(d.a[1], d.b[1]), Math.max(d.a[1], d.b[1])]); + } + let segs: [number, number][] = [[run.s * C, run.e * C]]; + for (const [c0, c1] of cuts) { + const next: [number, number][] = []; + for (const [s0, s1] of segs) { + if (c1 <= s0 || c0 >= s1) { next.push([s0, s1]); continue; } + if (c0 > s0) next.push([s0, c0]); + if (c1 < s1) next.push([c1, s1]); + } + segs = next; + } + for (const [s0, s1] of segs) { + if (s1 - s0 < 0.05) continue; + const a: Vec = run.o === 'h' ? [s0, run.line * C] : [run.line * C, s0]; + const bq: Vec = run.o === 'h' ? [s1, run.line * C] : [run.line * C, s1]; + walls.push({ a: W(a), b: W(bq), thickness: WALL_INT, exterior: false }); + } + } + // внешние стены: контур минус вход и окна + const openings = [...taken, ...opens]; + g.rings.forEach((r, ri) => { + for (let e = 0; e < r.length; e++) { + const a = r[e], bq = r[(e + 1) % r.length]; + const cuts = openings.filter((o) => o.ring === ri && o.edge === e).map((o) => [o.t0, o.t1] as [number, number]).sort((x, y) => x[0] - y[0]); + let t = 0; + for (const [t0, t1] of cuts) { + if (t0 > t) walls.push({ a: W(lerpV(a, bq, t)), b: W(lerpV(a, bq, t0)), thickness: WALL_EXT, exterior: true }); + t = Math.max(t, t1); + } + if (t < 1) walls.push({ a: W(lerpV(a, bq, t)), b: W(bq), thickness: WALL_EXT, exterior: true }); + } + }); + + const doorsOut: Door[] = doors.map((d, i) => ({ + id: `${pfx}_f${level}_d${i}`, a: W(d.a), b: W(d.b), + rooms: [roomIds[d.r1], d.r2 >= 0 ? roomIds[d.r2] : 'outside'], kind: d.kind, swingTo: W(d.swingTo), + })); + const windowsOut: Window[] = wins.map((w) => ({ a: W(w.a), b: W(w.b), roomId: roomIds[w.room] })); + const stairsOut: Stairs[] = F.stairs.map((s, i) => { + const k = s.block; + const horiz = k.x1 - k.x0 >= k.y1 - k.y0; + const corners: Vec[] = [[k.x0 * C, k.y0 * C], [k.x1 * C, k.y0 * C], [k.x1 * C, k.y1 * C], [k.x0 * C, k.y1 * C]]; + const from: Vec = horiz ? [k.x0 * C, ((k.y0 + k.y1) / 2) * C] : [((k.x0 + k.x1) / 2) * C, k.y1 * C]; + const to: Vec = horiz ? [k.x1 * C, ((k.y0 + k.y1) / 2) * C] : [((k.x0 + k.x1) / 2) * C, k.y0 * C]; + return { + id: `${pfx}_s${i}_f${level}`, rings: [corners.map(W)], from: W(from), to: W(to), + width: (horiz ? k.y1 - k.y0 : k.x1 - k.x0) * C, up: level < b.levels - 1, down: level > 0, lift: k.lift, roomId: roomIds[s.room], + }; + }); + + // мебель + const propsL = furnishFloor({ g, F, doors, windows: wins, building: b, rng: new Rng(b.seed * 17 + variant * 104729) }); + const props: Prop[] = propsL.map((p, i) => ({ + ...p.prop, + id: `${pfx}_f${level}_p${i}`, + pos: W(p.pos), + rot: p.rot + g.angle, + roomId: p.room >= 0 ? roomIds[p.room] : undefined, + })); + + // юниты (квартиры, магазины…) и спальные места + F.units.forEach((u, ui) => { + const ids = F.rooms.map((r, i) => (r.unit === ui && !r.dead ? roomIds[i] : null)).filter(Boolean) as string[]; + if (!ids.length) return; + const ub = props.filter((p) => p.roomId && ids.includes(p.roomId)).reduce((s, p) => s + sleepOf(p), 0); + units.push({ id: `${pfx}_f${level}_u${ui}`, kind: u.kind, level, roomIds: ids, beds: ub }); + beds += ub; + }); + if (!F.units.length) beds += props.reduce((s, p) => s + sleepOf(p), 0); + + floors.push({ level, rooms, walls, doors: doorsOut, windows: windowsOut, stairs: stairsOut, props }); + } + return { floors, units, beds }; +} + +function sleepOf(p: Prop): number { + const t = p.tags?.find((x) => x.startsWith('sleep:')); + return t ? +t.slice(6) : 0; +} + +const lerpV = (a: Vec, b: Vec, t: number): Vec => [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t]; diff --git a/src/gen/pipeline.ts b/src/gen/pipeline.ts new file mode 100644 index 0000000..3b2986a --- /dev/null +++ b/src/gen/pipeline.ts @@ -0,0 +1,97 @@ +// Полный конвейер в браузере: OSM → город → интерьеры в пуле воркеров → упаковка. + +import type { OsmElement, BBox } from '../osm/overpass'; +import type { World } from '../types'; +import { buildCity, type InteriorJob } from './city'; +import { finalizeWorld } from './finalize'; + +export type OnProgress = (text: string, frac: number) => void; + +export async function generateWorld(elements: OsmElement[], bbox: BBox, name: string, seed: number, onProgress: OnProgress, signal?: AbortSignal): Promise { + onProgress('Строю улицы, зоны и контуры зданий…', 0.05); + await tick(); + const { world, jobs } = buildCity(elements, bbox, name, seed); + finalizeWorld(world, false); + onProgress(`Планировки: 0 / ${jobs.length}`, 0.1); + await runInteriors(world, jobs, (done) => onProgress(`Планировки: ${done} / ${jobs.length} зданий`, 0.1 + 0.88 * (done / Math.max(1, jobs.length))), signal); + onProgress('Готово', 1); + return world; +} + +const tick = () => new Promise((r) => setTimeout(r, 0)); + +async function runInteriors(world: World, jobs: InteriorJob[], onDone: (n: number) => void, signal?: AbortSignal) { + const byId = new Map(world.buildings.map((b) => [b.id, b])); + // крупные здания раньше — меньше «хвост» в конце + const queue = jobs.slice().sort((a, b) => b.building.area * b.building.levels - a.building.area * a.building.levels); + const nWorkers = Math.max(1, Math.min(8, (navigator.hardwareConcurrency || 4) - 1)); + const workers: Worker[] = []; + let done = 0; + try { + for (let i = 0; i < nWorkers; i++) { + const w = new Worker(new URL('./worker.js', import.meta.url), { type: 'module' }); + w.postMessage({ type: 'init', index: i }); + workers.push(w); + } + } catch (e) { + console.warn('Workers unavailable, generating on main thread', e); + } + if (!workers.length) { + const { generateInterior } = await import('./interior'); + const { finalizeBuilding, ModelLibrary } = await import('./finalize'); + const lib = new ModelLibrary(world.models, 'm_'); + for (const job of queue) { + const r = generateInterior(job); + Object.assign(job.building, r); + finalizeBuilding(job.building, lib); + onDone(++done); + if (done % 20 === 0) await tick(); + } + return; + } + let batchNo = 0; + await new Promise((resolve, reject) => { + let active = 0; + const feed = (w: Worker) => { + if (signal?.aborted) return reject(new DOMException('Отменено', 'AbortError')); + if (!queue.length) { + if (active === 0) resolve(); + return; + } + // небольшие пачки: крупные здания по одному + const batch: InteriorJob[] = []; + let cost = 0; + while (queue.length && cost < 3000) { + const j = queue.shift()!; + batch.push(j); + cost += j.building.area * j.building.levels; + if (batch.length >= 30) break; + } + active++; + w.postMessage({ type: 'jobs', batch: batchNo++, jobs: batch }); + }; + for (const w of workers) { + w.onmessage = (ev) => { + const m = ev.data; + if (m.type !== 'done') return; + Object.assign(world.models, m.models); + for (const r of m.results) { + const b = byId.get(r.id); + if (!b) continue; + b.floors = r.floors; + b.units = r.units; + b.beds = r.beds; + b.footprint = r.footprint; + b.holes = r.holes; + b.area = r.area; + } + done += m.results.length; + onDone(done); + active--; + feed(w); + }; + w.onerror = (e) => reject(new Error('Ошибка в воркере: ' + e.message)); + feed(w); + } + }).finally(() => workers.forEach((w) => w.terminate())); +} diff --git a/src/gen/project.ts b/src/gen/project.ts new file mode 100644 index 0000000..e3e57b4 --- /dev/null +++ b/src/gen/project.ts @@ -0,0 +1,18 @@ +import type { Vec } from '../types'; + +const R = 6378137; +const D2R = Math.PI / 180; + +/** Локальная равнопромежуточная проекция вокруг центра области: для нескольких км погрешность < 0.1%. */ +export class Projector { + readonly k: number; + constructor(readonly lat0: number, readonly lon0: number) { + this.k = Math.cos(lat0 * D2R); + } + toXY(lat: number, lon: number): Vec { + return [R * (lon - this.lon0) * D2R * this.k, -R * (lat - this.lat0) * D2R]; + } + toLatLon(p: Vec): { lat: number; lon: number } { + return { lat: this.lat0 - p[1] / R / D2R, lon: this.lon0 + p[0] / (R * D2R * this.k) }; + } +} diff --git a/src/gen/props.ts b/src/gen/props.ts new file mode 100644 index 0000000..d1d0737 --- /dev/null +++ b/src/gen/props.ts @@ -0,0 +1,26 @@ +import type { Prop, Shape, Vec } from '../types'; +import { Rng } from '../util/rng'; + +export const CAR_COLORS = ['#c94c4c', '#3d6fb6', '#e8e8e8', '#2b2b2b', '#8c9298', '#d9c27a', '#4f8a5b', '#b5b9bd', '#6b4a8c', '#e07b39']; + +export function carShapes(): Shape[] { + return [ + { t: 'rect', x: 0, y: 0, w: 1.8, h: 4.4, r: 0.45, s: 'car' }, + { t: 'rect', x: 0, y: -0.75, w: 1.5, h: 0.55, r: 0.15, s: 'glass' }, // лобовое + { t: 'rect', x: 0, y: 1.25, w: 1.45, h: 0.4, r: 0.12, s: 'glass' }, // заднее + { t: 'rect', x: 0, y: 0.25, w: 1.5, h: 1.4, r: 0.2, s: 'dark' }, // крыша + ]; +} + +export function treeProp(id: string, p: Vec, rng: Rng, t: Record): Prop { + const scrub = !!t.scrub; + const r0 = scrub ? rng.range(0.8, 1.6) : t.orchard ? rng.range(1.6, 2.4) : rng.range(2.2, 4.2); + const r = Math.round(r0 * 5) / 5; // немного вариантов — общие модели + const shapes: Shape[] = [{ t: 'circle', x: 0, y: 0, r, s: 'green' }]; + if (!scrub) shapes.push({ t: 'circle', x: 0, y: 0, r: 0.18, s: 'wood' }); + return { + id, kind: scrub ? 'bush' : 'tree', pos: p, rot: 0, w: r * 2, d: r * 2, shapes, + // крона не мешает проходу, мешает только ствол; обзор частично закрывает + blocksMove: !scrub, blocksSight: false, tags: scrub ? ['cover'] : ['trunk:0.2'], + }; +} diff --git a/src/gen/worker.ts b/src/gen/worker.ts new file mode 100644 index 0000000..568ef17 --- /dev/null +++ b/src/gen/worker.ts @@ -0,0 +1,31 @@ +// Web Worker: генерирует интерьеры пачками зданий. +import { generateInterior } from './interior'; +import { finalizeBuilding, ModelLibrary } from './finalize'; +import type { InteriorJob } from './city'; + +let lib = new ModelLibrary({}, 'w0_'); + +self.onmessage = (ev: MessageEvent) => { + const msg = ev.data; + if (msg.type === 'init') { + lib = new ModelLibrary({}, `w${msg.index}_`); + return; + } + if (msg.type === 'jobs') { + const results = (msg.jobs as InteriorJob[]).map((job) => { + const b = job.building; + try { + const r = generateInterior(job); + b.floors = r.floors; + b.units = r.units; + b.beds = r.beds; + } catch (e) { + console.warn('interior failed', b.id, e); + b.floors = []; + } + finalizeBuilding(b, lib); + return { id: b.id, floors: b.floors, units: b.units, beds: b.beds, footprint: b.footprint, holes: b.holes, area: b.area }; + }); + (self as unknown as Worker).postMessage({ type: 'done', batch: msg.batch, results, models: lib.takeNew() }); + } +}; diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..849f9d5 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,237 @@ +import { AreaPicker, bboxSizeKm } from './view/picker'; +import { Viewer } from './view/viewer'; +import { fetchOverpass, geocode, type BBox, type OsmElement } from './osm/overpass'; +import { generateWorld } from './gen/pipeline'; +import { downloadWorld, hasWorld, loadWorld, readJsonFile, saveWorld } from './store'; +import type { World } from './types'; + +const MAX_KM2 = 6; +const WARN_KM2 = 2.5; + +const app = document.getElementById('app')!; +let viewer: Viewer | null = null; +let picker: AreaPicker | null = null; + +const esc = (s: string) => s.replace(/[&<>"]/g, (c) => ({ '&': '&', '<': '<', '>': '>', '"': '"' }[c]!)); + +// ------------------------------------------------------------------ прогресс + +const overlay = document.createElement('div'); +overlay.className = 'overlay'; +overlay.hidden = true; +overlay.innerHTML = `
Генерация
`; +document.body.appendChild(overlay); +let abort: AbortController | null = null; +overlay.querySelector('[data-a=cancel]')!.addEventListener('click', () => abort?.abort()); +function progress(text: string, frac: number) { + overlay.hidden = false; + overlay.querySelector('.p-text')!.textContent = text; + (overlay.querySelector('.bar i') as HTMLElement).style.width = `${Math.round(frac * 100)}%`; +} +const hideProgress = () => (overlay.hidden = true); + +// ------------------------------------------------------------------ экраны + +function showViewer(world: World) { + picker = null; + app.innerHTML = ''; + viewer?.destroy(); + viewer = new Viewer(app, world, { + onNew: () => showPicker(world.bbox), + onExport: () => downloadWorld(world), + }); + (window as any).viewer = viewer; +} + +async function showPicker(initial?: BBox) { + viewer?.destroy(); + viewer = null; + app.innerHTML = ''; + const stage = document.createElement('div'); + stage.className = 'picker-stage'; + app.appendChild(stage); + const panel = document.createElement('div'); + panel.className = 'picker-panel card'; + panel.innerHTML = ` +
Город сверху
+

Выделите на карте небольшой город или район — по данным OpenStreetMap будет построена подробная карта с планировками и мебелью во всех зданиях.

+ +
+
+ + +
+
Или перетаскивайте с зажатым Shift.
+
Область не выбрана
+ + +
Другие способы +
+ + + +
Выгрузка Overpass должна быть в формате [out:json] … out geom;. Область берётся из выделения или из данных.
+
+
+ `; + stage.appendChild(panel); + const mapBox = document.createElement('div'); + mapBox.className = 'map-box'; + stage.appendChild(mapBox); + mapBox.insertAdjacentHTML('beforeend', '
Карта © OpenStreetMap contributors
'); + + const $ = (s: string) => panel.querySelector(s) as T; + const nameInput = $('[data-f=name]'); + const goBtn = $('[data-a=go]'); + const selBtn = $('[data-a=select]'); + const err = $('.err'); + const showErr = (m: string | null) => { err.hidden = !m; err.textContent = m ?? ''; }; + + let bbox: BBox | null = null; + picker = new AreaPicker(mapBox, (b) => { + bbox = b; + const info = $('.sel-info'); + if (!b) { + info.textContent = 'Область не выбрана'; + info.className = 'sel-info'; + goBtn.disabled = true; + return; + } + const s = bboxSizeKm(b); + info.textContent = `${s.w.toFixed(2)} × ${s.h.toFixed(2)} км · ${s.km2.toFixed(2)} км²` + (s.km2 > MAX_KM2 ? ' — слишком большая область' : s.km2 > WARN_KM2 ? ' — большая область, генерация займёт время' : ''); + info.className = 'sel-info' + (s.km2 > MAX_KM2 ? ' bad' : s.km2 > WARN_KM2 ? ' warn' : ' ok'); + goBtn.disabled = s.km2 > MAX_KM2; + }); + if (initial) picker.setSelection(initial); + else picker.fit([47.06, 9.49, 47.075, 9.52]); + + selBtn.addEventListener('click', () => { + picker!.selectMode = !picker!.selectMode; + selBtn.classList.toggle('on', picker!.selectMode); + }); + $('[data-a=quick]').addEventListener('click', () => picker!.selectAroundCenter(1)); + + const form = $('.search'); + form.addEventListener('submit', async (e) => { + e.preventDefault(); + const q = (form.querySelector('input') as HTMLInputElement).value.trim(); + if (!q) return; + const box = $('.results'); + box.innerHTML = '
Ищу…
'; + try { + const res = await geocode(q); + box.innerHTML = res.length ? '' : '
Ничего не найдено
'; + for (const r of res) { + const b = document.createElement('button'); + b.className = 'result'; + b.textContent = r.name; + b.addEventListener('click', () => { + const s = bboxSizeKm(r.bbox); + picker!.fit(r.bbox); + if (s.km2 <= MAX_KM2 && s.km2 > 0.02) picker!.setSelection(r.bbox, false); + else { + picker!.fit([r.lat - 0.01, r.lon - 0.015, r.lat + 0.01, r.lon + 0.015]); + picker!.selectAroundCenter(1.2); + } + nameInput.value = r.name.split(',')[0]; + box.innerHTML = ''; + }); + box.appendChild(b); + } + } catch (ex) { + box.innerHTML = `
${esc((ex as Error).message)}
`; + } + }); + + goBtn.addEventListener('click', async () => { + if (!bbox) return; + showErr(null); + abort = new AbortController(); + try { + progress('Загрузка данных OpenStreetMap…', 0.02); + const els = await fetchOverpass(bbox, (s) => progress(s, 0.03), abort.signal); + await runGeneration(els, bbox, nameInput.value.trim() || 'Новая карта'); + } catch (ex) { + hideProgress(); + if ((ex as Error).name !== 'AbortError') showErr((ex as Error).message); + } + }); + + const lastBtn = $('[data-a=last]'); + if (await hasWorld()) lastBtn.hidden = false; + lastBtn.addEventListener('click', async () => { + progress('Загрузка сохранённого мира…', 0.5); + const w = await loadWorld(); + hideProgress(); + if (w) showViewer(w); + }); + $('[data-f=world]').addEventListener('change', async (e) => { + const f = (e.target as HTMLInputElement).files?.[0]; + if (!f) return; + try { + progress('Чтение файла…', 0.4); + const w = (await readJsonFile(f)) as World; + if (!w.buildings || !w.bounds) throw new Error('Это не файл мира'); + hideProgress(); + showViewer(w); + } catch (ex) { + hideProgress(); + showErr((ex as Error).message); + } + }); + $('[data-f=osm]').addEventListener('change', async (e) => { + const f = (e.target as HTMLInputElement).files?.[0]; + if (!f) return; + try { + progress('Чтение выгрузки…', 0.03); + const data = await readJsonFile(f); + const els: OsmElement[] = data.elements; + if (!Array.isArray(els)) throw new Error('В файле нет поля elements'); + const b = bbox ?? bboxOfElements(els); + abort = new AbortController(); + await runGeneration(els, b, nameInput.value.trim() || f.name.replace(/\.json.*$/, '')); + } catch (ex) { + hideProgress(); + showErr((ex as Error).message); + } + }); +} + +function bboxOfElements(els: OsmElement[]): BBox { + let s = 90, w = 180, n = -90, e = -180; + for (const el of els) + if (el.type === 'node' && el.lat != null && el.lon != null) { + s = Math.min(s, el.lat); n = Math.max(n, el.lat); w = Math.min(w, el.lon); e = Math.max(e, el.lon); + } else if (el.geometry) for (const g of el.geometry) { s = Math.min(s, g.lat); n = Math.max(n, g.lat); w = Math.min(w, g.lon); e = Math.max(e, g.lon); } + return [s, w, n, e]; +} + +async function runGeneration(els: OsmElement[], bbox: BBox, name: string) { + // постоянный сид: один и тот же город всегда генерируется одинаково (сид здания = OSM-id ⊕ сид мира) + const seed = 1; + const t0 = performance.now(); + const world = await generateWorld(els, bbox, name, seed, progress, abort?.signal); + console.info(`world generated in ${((performance.now() - t0) / 1000).toFixed(1)} s`); + progress('Сохранение…', 1); + try { + await saveWorld(world); + } catch (e) { + console.warn('save failed', e); + } + hideProgress(); + showViewer(world); +} + +// ------------------------------------------------------------------ старт + +(async () => { + const params = new URLSearchParams(location.search); + if (params.has('last') && (await hasWorld())) { + const w = await loadWorld(); + if (w) return showViewer(w); + } + showPicker(); +})(); + +// для отладки из консоли +(window as any).citygen = { runGeneration, showViewer }; diff --git a/src/osm/overpass.ts b/src/osm/overpass.ts new file mode 100644 index 0000000..dcebb86 --- /dev/null +++ b/src/osm/overpass.ts @@ -0,0 +1,105 @@ +// Загрузка данных OSM через Overpass API (вызывается прямо из браузера, CORS разрешён). +// Для публичной игры с множеством игроков нужно своё зеркало или статическая нарезка — +// публичные серверы Overpass рассчитаны на умеренную нагрузку. + +export type BBox = [number, number, number, number]; // south, west, north, east + +export interface OsmElement { + type: 'node' | 'way' | 'relation'; + id: number; + tags?: Record; + lat?: number; + lon?: number; + geometry?: { lat: number; lon: number }[]; + members?: { type: string; ref: number; role: string; geometry?: { lat: number; lon: number }[] }[]; +} + +export const OVERPASS_ENDPOINTS = [ + 'https://overpass-api.de/api/interpreter', + 'https://overpass.private.coffee/api/interpreter', + 'https://maps.mail.ru/osm/tools/overpass/api/interpreter', +]; + +export function buildQuery(b: BBox): string { + const bb = `(${b[0]},${b[1]},${b[2]},${b[3]})`; + return `[out:json][timeout:120]; +( + way["building"]${bb}; + relation["building"]["type"="multipolygon"]${bb}; + way["highway"]${bb}; + way["railway"~"^(rail|tram|light_rail|narrow_gauge|subway|platform)$"]${bb}; + way["waterway"]${bb}; + way["landuse"]${bb}; + relation["landuse"]${bb}; + way["natural"]${bb}; + relation["natural"]${bb}; + way["leisure"]${bb}; + relation["leisure"]${bb}; + way["amenity"]${bb}; + relation["amenity"]${bb}; + way["place"~"square"]${bb}; + way["area:highway"]${bb}; + node["natural"="tree"]${bb}; + node["shop"]${bb}; + node["amenity"]${bb}; + node["office"]${bb}; + node["craft"]${bb}; + node["tourism"]${bb}; + node["healthcare"]${bb}; + node["highway"="street_lamp"]${bb}; +); +out geom;`; +} + +export async function fetchOverpass(b: BBox, onStatus?: (s: string) => void, signal?: AbortSignal): Promise { + const query = buildQuery(b); + let lastErr: unknown = null; + for (const url of OVERPASS_ENDPOINTS) { + for (let attempt = 0; attempt < 2; attempt++) { + try { + onStatus?.(`Запрос к ${new URL(url).host}${attempt ? ' (повтор)' : ''}…`); + const res = await fetch(url, { + method: 'POST', + body: 'data=' + encodeURIComponent(query), + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + signal, + }); + if (res.status === 429 || res.status === 504) { + lastErr = new Error(`Сервер перегружен (${res.status})`); + await new Promise((r) => setTimeout(r, 3000 * (attempt + 1))); + continue; + } + if (!res.ok) throw new Error(`HTTP ${res.status}`); + const json = await res.json(); + if (json.remark && /error|timed out|runtime/i.test(json.remark)) throw new Error(json.remark); + return json.elements as OsmElement[]; + } catch (e) { + if (signal?.aborted) throw e; + lastErr = e; + break; + } + } + } + throw new Error('Не удалось загрузить данные OSM: ' + (lastErr instanceof Error ? lastErr.message : String(lastErr))); +} + +export interface GeocodeResult { + name: string; + lat: number; + lon: number; + bbox: BBox; +} + +/** Поиск места через Nominatim (не чаще раза в секунду по правилам сервиса). */ +export async function geocode(q: string): Promise { + const url = `https://nominatim.openstreetmap.org/search?format=jsonv2&limit=6&accept-language=ru&q=${encodeURIComponent(q)}`; + const res = await fetch(url, { headers: { Accept: 'application/json' } }); + if (!res.ok) throw new Error('Поиск недоступен: HTTP ' + res.status); + const arr = await res.json(); + return arr.map((r: any) => ({ + name: r.display_name, + lat: +r.lat, + lon: +r.lon, + bbox: [+r.boundingbox[0], +r.boundingbox[2], +r.boundingbox[1], +r.boundingbox[3]] as BBox, + })); +} diff --git a/src/store.ts b/src/store.ts new file mode 100644 index 0000000..c6c679b --- /dev/null +++ b/src/store.ts @@ -0,0 +1,59 @@ +// Хранение миров в IndexedDB (локально в браузере). +import type { World } from './types'; + +const DB = 'citygen'; +const STORE = 'worlds'; + +function open(): Promise { + return new Promise((resolve, reject) => { + const req = indexedDB.open(DB, 1); + req.onupgradeneeded = () => req.result.createObjectStore(STORE); + req.onsuccess = () => resolve(req.result); + req.onerror = () => reject(req.error); + }); +} + +async function tx(mode: IDBTransactionMode, fn: (s: IDBObjectStore) => IDBRequest): Promise { + const db = await open(); + return new Promise((resolve, reject) => { + const t = db.transaction(STORE, mode); + const req = fn(t.objectStore(STORE)); + req.onsuccess = () => resolve(req.result); + req.onerror = () => reject(req.error); + }); +} + +export const saveWorld = (w: World) => tx('readwrite', (s) => s.put(w, 'last')); +export const loadWorld = () => tx('readonly', (s) => s.get('last')); +export const hasWorld = async () => { + try { + return (await tx('readonly', (s) => s.count('last'))) > 0; + } catch { + return false; + } +}; + +/** Скачать мир файлом (.json.gz, если браузер умеет сжимать). */ +export async function downloadWorld(w: World) { + const json = JSON.stringify(w); + let blob: Blob = new Blob([json], { type: 'application/json' }); + let ext = 'json'; + if ('CompressionStream' in window) { + const cs = blob.stream().pipeThrough(new CompressionStream('gzip')); + blob = await new Response(cs).blob(); + ext = 'json.gz'; + } + const a = document.createElement('a'); + a.href = URL.createObjectURL(blob); + a.download = `${(w.name || 'world').replace(/[^\p{L}\p{N}_-]+/gu, '_').slice(0, 40)}.${ext}`; + a.click(); + setTimeout(() => URL.revokeObjectURL(a.href), 2000); +} + +/** Прочитать файл мира или Overpass JSON (поддерживает .gz). */ +export async function readJsonFile(file: File): Promise { + let stream: ReadableStream = file.stream(); + const head = new Uint8Array(await file.slice(0, 2).arrayBuffer()); + if (head[0] === 0x1f && head[1] === 0x8b) stream = stream.pipeThrough(new DecompressionStream('gzip')); + return JSON.parse(await new Response(stream).text()); +} diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..f95d21b --- /dev/null +++ b/src/types.ts @@ -0,0 +1,197 @@ +// Модель мира. Все координаты в метрах в локальной проекции мира: +// x — на восток, y — на юг (как на экране). Углы в радианах. +// Модель с самого начала рассчитана на будущую симуляцию: у всего есть id, +// двери и лестницы — это связи между комнатами (граф навигации), +// у объектов есть флаги «блокирует проход / блокирует обзор». + +export type Vec = [number, number]; +export type Ring = Vec[]; + +export interface World { + version: 1; + id: string; + name: string; + createdAt: string; + seed: number; + /** Центр проекции и исходная область в градусах [south, west, north, east]. */ + origin: { lat: number; lon: number }; + bbox: [number, number, number, number]; + /** Границы области в метрах. */ + bounds: { minX: number; minY: number; maxX: number; maxY: number }; + areas: Area[]; + roads: Road[]; + buildings: Building[]; + /** Уличные объекты: деревья, машины, скамейки, фонари. */ + props: Prop[]; + /** Библиотека общих моделей предметов: prop.model → набор фигур. */ + models: Record; + attribution: string; +} + +export type AreaKind = + | 'residential' | 'commercial' | 'industrial' | 'retail' | 'farmland' | 'farmyard' + | 'grass' | 'park' | 'forest' | 'scrub' | 'meadow' | 'orchard' | 'vineyard' + | 'water' | 'wetland' | 'beach' | 'sand' | 'parking' | 'pitch' | 'playground' + | 'cemetery' | 'construction' | 'railway' | 'school' | 'hospital' | 'pedestrian' | 'garden'; + +export interface Area { + id: string; + kind: AreaKind; + /** Первое кольцо — внешнее, остальные — дыры. */ + rings: Ring[]; + osmId?: string; + name?: string; +} + +export type RoadKind = + | 'motorway' | 'trunk' | 'primary' | 'secondary' | 'tertiary' | 'residential' + | 'unclassified' | 'service' | 'living_street' | 'pedestrian' | 'track' + | 'footway' | 'cycleway' | 'path' | 'steps' | 'rail' | 'tram' | 'river' | 'stream' | 'canal' | 'ditch'; + +export interface Road { + id: string; + kind: RoadKind; + pts: Vec[]; + /** Ширина проезжей части (или русла) в метрах. */ + width: number; + /** Ширина тротуара с каждой стороны, 0 — нет. */ + sidewalk: number; + lanes: number; + oneway: boolean; + layer: number; + bridge: boolean; + tunnel: boolean; + name?: string; + osmId?: string; +} + +export type BuildingKind = + | 'house' | 'apartments' | 'mixed' | 'retail' | 'restaurant' | 'office' | 'industrial' + | 'warehouse' | 'school' | 'hospital' | 'hotel' | 'church' | 'civic' | 'garage' | 'shed' | 'farm'; + +export interface Building { + id: string; + osmId?: string; + kind: BuildingKind; + /** Подтип из OSM-тегов/POI: 'supermarket', 'bakery', 'pharmacy'… */ + use?: string; + name?: string; + address?: string; + footprint: Ring; + /** Внутренние дворы (дыры в контуре). */ + holes: Ring[]; + /** Площадь контура, м². */ + area: number; + levels: number; + /** Откуда взялась этажность: 'osm' | 'height' | 'estimate'. */ + levelsSource: 'osm' | 'height' | 'estimate'; + /** Локальная система здания: поворот сетки планировки. */ + frame: { origin: Vec; angle: number }; + floors: Floor[]; + /** Помещения-юниты: квартиры, магазины, офисы — будущие «домохозяйства» и «рабочие места». */ + units: Unit[]; + /** Сколько спальных мест (оценка жильцов). */ + beds: number; + seed: number; +} + +export interface Unit { + id: string; + kind: 'home' | 'shop' | 'office' | 'service' | 'common'; + level: number; + roomIds: string[]; + beds: number; +} + +export type RoomKind = + | 'hall' | 'landing' | 'living' | 'kitchen' | 'bedroom' | 'bath' | 'wc' | 'storage' | 'corridor' + | 'stairs' | 'lift' | 'lobby' | 'sales' | 'backroom' | 'office' | 'openoffice' | 'meeting' + | 'dining' | 'prokitchen' | 'workshop' | 'hall_ind' | 'classroom' | 'staff' | 'ward' + | 'guestroom' | 'nave' | 'garage' | 'utility' | 'void'; + +export interface Room { + id: string; + kind: RoomKind; + /** Контур комнаты (может быть несколько колец; дыры — по чётности). Рисовать с клипом по контуру здания. */ + rings: Ring[]; + area: number; + labelPos: Vec; + unitId?: string; +} + +export interface Wall { + a: Vec; + b: Vec; + thickness: number; + exterior: boolean; +} + +export interface Door { + id: string; + a: Vec; + b: Vec; + /** Комнаты по обе стороны; 'outside' — улица. Это ребро графа навигации. */ + rooms: [string, string]; + /** 'opening' — проём без полотна (арка, выход на лестницу). */ + kind: 'interior' | 'entrance' | 'unit' | 'garage' | 'opening'; + /** Сторона, куда открывается полотно (точка внутри комнаты). */ + swingTo: Vec; +} + +export interface Window { + a: Vec; + b: Vec; + roomId: string; +} + +export interface Stairs { + id: string; + rings: Ring[]; + /** Ось марша: от низа к верху. */ + from: Vec; + to: Vec; + width: number; + up: boolean; + down: boolean; + lift?: boolean; + /** id комнаты-лестничной клетки на этом этаже. */ + roomId: string; +} + +export interface Floor { + level: number; + rooms: Room[]; + walls: Wall[]; + doors: Door[]; + windows: Window[]; + stairs: Stairs[]; + props: Prop[]; +} + +/** Примитив в локальных координатах предмета (центр предмета в 0,0; «спинка» к стене при y<0). */ +export type Shape = + | { t: 'rect'; x: number; y: number; w: number; h: number; r?: number; s?: ShapeStyle } + | { t: 'circle'; x: number; y: number; r: number; s?: ShapeStyle } + | { t: 'line'; x1: number; y1: number; x2: number; y2: number; s?: ShapeStyle }; + +/** Стиль: 'base' — основной предмет, 'soft' — ткань/подушка, 'dark' — техника/акцент, 'green' — растение, 'glass', 'metal'. */ +export type ShapeStyle = 'base' | 'soft' | 'dark' | 'green' | 'glass' | 'metal' | 'wood' | 'water' | 'line' | 'car' | 'fabric' | 'accent'; + +export interface Prop { + id: string; + kind: string; + pos: Vec; + rot: number; + w: number; + d: number; + /** Фигуры предмета; после сборки мира обычно вынесены в world.models (см. model). */ + shapes?: Shape[]; + model?: string; + blocksMove: boolean; + blocksSight: boolean; + roomId?: string; + /** Цвет для машин и т.п. (иначе по стилю). */ + color?: string; + /** Для симуляции: можно сидеть/спать/хранить и т.п. */ + tags?: string[]; +} diff --git a/src/util/geom.ts b/src/util/geom.ts new file mode 100644 index 0000000..47dbbaa --- /dev/null +++ b/src/util/geom.ts @@ -0,0 +1,165 @@ +import type { Ring, Vec } from '../types'; + +export const add = (a: Vec, b: Vec): Vec => [a[0] + b[0], a[1] + b[1]]; +export const sub = (a: Vec, b: Vec): Vec => [a[0] - b[0], a[1] - b[1]]; +export const mul = (a: Vec, k: number): Vec => [a[0] * k, a[1] * k]; +export const len = (a: Vec): number => Math.hypot(a[0], a[1]); +export const dist = (a: Vec, b: Vec): number => Math.hypot(a[0] - b[0], a[1] - b[1]); +export const lerp = (a: Vec, b: Vec, t: number): Vec => [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t]; + +export function rotate(p: Vec, ang: number): Vec { + const c = Math.cos(ang), s = Math.sin(ang); + return [p[0] * c - p[1] * s, p[0] * s + p[1] * c]; +} + +/** Знаковая площадь (положительная при обходе по часовой в экранных осях y-вниз). */ +export function signedArea(r: Ring): number { + let a = 0; + for (let i = 0, n = r.length; i < n; i++) { + const p = r[i], q = r[(i + 1) % n]; + a += p[0] * q[1] - q[0] * p[1]; + } + return a / 2; +} + +export const ringArea = (r: Ring): number => Math.abs(signedArea(r)); + +export function centroid(r: Ring): Vec { + let a = 0, cx = 0, cy = 0; + for (let i = 0, n = r.length; i < n; i++) { + const p = r[i], q = r[(i + 1) % n]; + const f = p[0] * q[1] - q[0] * p[1]; + a += f; + cx += (p[0] + q[0]) * f; + cy += (p[1] + q[1]) * f; + } + if (Math.abs(a) < 1e-9) { + const s = r.reduce((acc, p) => add(acc, p), [0, 0] as Vec); + return mul(s, 1 / r.length); + } + return [cx / (3 * a), cy / (3 * a)]; +} + +export function pointInRing(p: Vec, r: Ring): boolean { + let inside = false; + for (let i = 0, j = r.length - 1; i < r.length; j = i++) { + const xi = r[i][0], yi = r[i][1], xj = r[j][0], yj = r[j][1]; + if (yi > p[1] !== yj > p[1] && p[0] < ((xj - xi) * (p[1] - yi)) / (yj - yi) + xi) inside = !inside; + } + return inside; +} + +export function pointInRings(p: Vec, rings: Ring[]): boolean { + let inside = false; + for (const r of rings) if (pointInRing(p, r)) inside = !inside; + return inside; +} + +export function distToSegment(p: Vec, a: Vec, b: Vec): number { + const dx = b[0] - a[0], dy = b[1] - a[1]; + const l2 = dx * dx + dy * dy; + let t = l2 ? ((p[0] - a[0]) * dx + (p[1] - a[1]) * dy) / l2 : 0; + t = Math.max(0, Math.min(1, t)); + return Math.hypot(p[0] - (a[0] + t * dx), p[1] - (a[1] + t * dy)); +} + +export function closestOnSegment(p: Vec, a: Vec, b: Vec): Vec { + const dx = b[0] - a[0], dy = b[1] - a[1]; + const l2 = dx * dx + dy * dy; + let t = l2 ? ((p[0] - a[0]) * dx + (p[1] - a[1]) * dy) / l2 : 0; + t = Math.max(0, Math.min(1, t)); + return [a[0] + t * dx, a[1] + t * dy]; +} + +export function distToRingEdge(p: Vec, r: Ring): number { + let d = Infinity; + for (let i = 0; i < r.length; i++) d = Math.min(d, distToSegment(p, r[i], r[(i + 1) % r.length])); + return d; +} + +export function bboxOf(pts: Vec[]): [number, number, number, number] { + let x0 = Infinity, y0 = Infinity, x1 = -Infinity, y1 = -Infinity; + for (const p of pts) { + if (p[0] < x0) x0 = p[0]; + if (p[1] < y0) y0 = p[1]; + if (p[0] > x1) x1 = p[0]; + if (p[1] > y1) y1 = p[1]; + } + return [x0, y0, x1, y1]; +} + +/** Убрать замыкающую точку, дубликаты и почти-коллинеарные вершины. */ +export function cleanRing(r: Ring, eps = 0.05): Ring { + let pts = r.slice(); + if (pts.length > 1 && dist(pts[0], pts[pts.length - 1]) < 1e-6) pts.pop(); + pts = pts.filter((p, i) => dist(p, pts[(i + 1) % pts.length]) > eps); + let changed = true; + while (changed && pts.length > 3) { + changed = false; + for (let i = 0; i < pts.length; i++) { + const a = pts[(i - 1 + pts.length) % pts.length], b = pts[i], c = pts[(i + 1) % pts.length]; + if (distToSegment(b, a, c) < eps) { + pts.splice(i, 1); + changed = true; + break; + } + } + } + return pts; +} + +/** Выпуклая оболочка (монотонная цепь). */ +export function convexHull(points: Vec[]): Vec[] { + const pts = points.slice().sort((a, b) => a[0] - b[0] || a[1] - b[1]); + if (pts.length < 3) return pts; + const cross = (o: Vec, a: Vec, b: Vec) => (a[0] - o[0]) * (b[1] - o[1]) - (a[1] - o[1]) * (b[0] - o[0]); + const lower: Vec[] = []; + for (const p of pts) { + while (lower.length >= 2 && cross(lower[lower.length - 2], lower[lower.length - 1], p) <= 0) lower.pop(); + lower.push(p); + } + const upper: Vec[] = []; + for (let i = pts.length - 1; i >= 0; i--) { + const p = pts[i]; + while (upper.length >= 2 && cross(upper[upper.length - 2], upper[upper.length - 1], p) <= 0) upper.pop(); + upper.push(p); + } + upper.pop(); + lower.pop(); + return lower.concat(upper); +} + +/** Угол прямоугольника минимальной площади, описанного вокруг контура (ориентация здания). */ +export function minAreaRectAngle(r: Ring): number { + const hull = convexHull(r); + let best = Infinity, bestAng = 0; + for (let i = 0; i < hull.length; i++) { + const a = hull[i], b = hull[(i + 1) % hull.length]; + const ang = Math.atan2(b[1] - a[1], b[0] - a[0]); + const c = Math.cos(-ang), s = Math.sin(-ang); + let x0 = Infinity, y0 = Infinity, x1 = -Infinity, y1 = -Infinity; + for (const p of hull) { + const x = p[0] * c - p[1] * s, y = p[0] * s + p[1] * c; + x0 = Math.min(x0, x); x1 = Math.max(x1, x); y0 = Math.min(y0, y); y1 = Math.max(y1, y); + } + const area = (x1 - x0) * (y1 - y0); + if (area < best - 1e-6) { + best = area; + // ориентируем так, чтобы длинная сторона шла по x + bestAng = x1 - x0 >= y1 - y0 ? ang : ang + Math.PI / 2; + } + } + // нормируем в (-pi/2, pi/2] + while (bestAng > Math.PI / 2) bestAng -= Math.PI; + while (bestAng <= -Math.PI / 2) bestAng += Math.PI; + return bestAng; +} + +export function polylineLength(pts: Vec[]): number { + let l = 0; + for (let i = 1; i < pts.length; i++) l += dist(pts[i - 1], pts[i]); + return l; +} + +/** Пересекаются ли два bbox. */ +export const bboxHit = (a: number[], b: number[]) => a[0] <= b[2] && a[2] >= b[0] && a[1] <= b[3] && a[3] >= b[1]; diff --git a/src/util/rng.ts b/src/util/rng.ts new file mode 100644 index 0000000..99d26f5 --- /dev/null +++ b/src/util/rng.ts @@ -0,0 +1,43 @@ +// Детерминированный ГПСЧ: одно и то же здание с тем же сидом всегда генерируется одинаково. + +export function hashString(s: string): number { + let h = 2166136261 >>> 0; + for (let i = 0; i < s.length; i++) { + h ^= s.charCodeAt(i); + h = Math.imul(h, 16777619); + } + return h >>> 0; +} + +export class Rng { + private s: number; + constructor(seed: number) { + this.s = (seed >>> 0) || 0x9e3779b9; + } + next(): number { + // mulberry32 + let t = (this.s = (this.s + 0x6d2b79f5) >>> 0); + t = Math.imul(t ^ (t >>> 15), t | 1); + t ^= t + Math.imul(t ^ (t >>> 7), t | 61); + return ((t ^ (t >>> 14)) >>> 0) / 4294967296; + } + range(a: number, b: number): number { + return a + (b - a) * this.next(); + } + int(a: number, b: number): number { + return Math.floor(this.range(a, b + 1)); + } + chance(p: number): boolean { + return this.next() < p; + } + pick(arr: readonly T[]): T { + return arr[Math.floor(this.next() * arr.length)]; + } + shuffle(arr: T[]): T[] { + for (let i = arr.length - 1; i > 0; i--) { + const j = Math.floor(this.next() * (i + 1)); + [arr[i], arr[j]] = [arr[j], arr[i]]; + } + return arr; + } +} diff --git a/src/util/spatial.ts b/src/util/spatial.ts new file mode 100644 index 0000000..5bbc2a1 --- /dev/null +++ b/src/util/spatial.ts @@ -0,0 +1,28 @@ +/** Простая равномерная сетка для поиска по bbox. */ +export class SpatialGrid { + private cells = new Map(); + constructor(private size = 50) {} + private key(ix: number, iy: number) { + return (ix + 32768) * 65536 + (iy + 32768); + } + insert(item: T, bb: [number, number, number, number]) { + const s = this.size; + for (let ix = Math.floor(bb[0] / s); ix <= Math.floor(bb[2] / s); ix++) + for (let iy = Math.floor(bb[1] / s); iy <= Math.floor(bb[3] / s); iy++) { + const k = this.key(ix, iy); + let arr = this.cells.get(k); + if (!arr) this.cells.set(k, (arr = [])); + arr.push(item); + } + } + query(bb: [number, number, number, number]): T[] { + const s = this.size; + const out = new Set(); + for (let ix = Math.floor(bb[0] / s); ix <= Math.floor(bb[2] / s); ix++) + for (let iy = Math.floor(bb[1] / s); iy <= Math.floor(bb[3] / s); iy++) { + const arr = this.cells.get(this.key(ix, iy)); + if (arr) for (const it of arr) out.add(it); + } + return [...out]; + } +} diff --git a/src/view/picker.ts b/src/view/picker.ts new file mode 100644 index 0000000..4c518de --- /dev/null +++ b/src/view/picker.ts @@ -0,0 +1,244 @@ +// Мини-карта с тайлами OSM для выбора области (без внешних библиотек). + +import type { BBox } from '../osm/overpass'; + +const TILE = 256; +const TILE_URL = (z: number, x: number, y: number) => `https://tile.openstreetmap.org/${z}/${x}/${y}.png`; + +const lon2x = (lon: number, z: number) => ((lon + 180) / 360) * TILE * 2 ** z; +const lat2y = (lat: number, z: number) => { + const s = Math.sin((lat * Math.PI) / 180); + return (0.5 - Math.log((1 + s) / (1 - s)) / (4 * Math.PI)) * TILE * 2 ** z; +}; +const x2lon = (x: number, z: number) => (x / (TILE * 2 ** z)) * 360 - 180; +const y2lat = (y: number, z: number) => { + const n = Math.PI - (2 * Math.PI * y) / (TILE * 2 ** z); + return (180 / Math.PI) * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n))); +}; + +export function bboxSizeKm(b: BBox): { w: number; h: number; km2: number } { + const lat = ((b[0] + b[2]) / 2) * (Math.PI / 180); + const w = (b[3] - b[1]) * 111.32 * Math.cos(lat); + const h = (b[2] - b[0]) * 110.57; + return { w, h, km2: w * h }; +} + +export class AreaPicker { + readonly canvas = document.createElement('canvas'); + private ctx = this.canvas.getContext('2d')!; + private lat = 55.751; + private lon = 37.618; + private zoom = 12; + private tiles = new Map(); + private drag: { x: number; y: number; lat: number; lon: number } | null = null; + private sel: { a: [number, number]; b: [number, number] } | null = null; // lat, lon + private selecting = false; + selectMode = false; + private raf = 0; + private pointers = new Map(); + private pinch: { d: number; zoom: number } | null = null; + + constructor(private parent: HTMLElement, private onChange: (b: BBox | null) => void) { + this.canvas.className = 'map-canvas'; + parent.appendChild(this.canvas); + new ResizeObserver(() => this.resize()).observe(parent); + this.resize(); + this.canvas.addEventListener('pointerdown', (e) => this.down(e)); + this.canvas.addEventListener('pointermove', (e) => this.move(e)); + this.canvas.addEventListener('pointerup', (e) => this.up(e)); + this.canvas.addEventListener('pointercancel', (e) => this.up(e)); + this.canvas.addEventListener('wheel', (e) => { + e.preventDefault(); + this.zoomAt(e.offsetX, e.offsetY, -Math.sign(e.deltaY) * (Math.abs(e.deltaY) > 50 ? 0.5 : 0.25)); + }, { passive: false }); + } + + private resize() { + const r = this.parent.getBoundingClientRect(); + const dpr = window.devicePixelRatio || 1; + this.canvas.width = Math.round(r.width * dpr); + this.canvas.height = Math.round(r.height * dpr); + this.canvas.style.width = r.width + 'px'; + this.canvas.style.height = r.height + 'px'; + this.request(); + } + + private get W() { return this.canvas.width / (window.devicePixelRatio || 1); } + private get H() { return this.canvas.height / (window.devicePixelRatio || 1); } + + private toScreen(lat: number, lon: number): [number, number] { + const z = this.zoom; + return [lon2x(lon, z) - lon2x(this.lon, z) + this.W / 2, lat2y(lat, z) - lat2y(this.lat, z) + this.H / 2]; + } + private toLatLon(x: number, y: number): [number, number] { + const z = this.zoom; + return [y2lat(lat2y(this.lat, z) + y - this.H / 2, z), x2lon(lon2x(this.lon, z) + x - this.W / 2, z)]; + } + + private zoomAt(x: number, y: number, dz: number) { + const [lat, lon] = this.toLatLon(x, y); + this.zoom = Math.max(2, Math.min(19, this.zoom + dz)); + // держим точку под курсором на месте + const [sx, sy] = this.toScreen(lat, lon); + const [clat, clon] = this.toLatLon(this.W / 2 + (sx - x), this.H / 2 + (sy - y)); + this.lat = clat; + this.lon = clon; + this.request(); + } + + private down(e: PointerEvent) { + this.canvas.setPointerCapture(e.pointerId); + this.pointers.set(e.pointerId, { x: e.offsetX, y: e.offsetY }); + if (this.pointers.size === 2) { + const [p, q] = [...this.pointers.values()]; + this.pinch = { d: Math.hypot(p.x - q.x, p.y - q.y), zoom: this.zoom }; + this.drag = null; + this.selecting = false; + return; + } + if (this.selectMode || e.shiftKey) { + const p = this.toLatLon(e.offsetX, e.offsetY); + this.sel = { a: p, b: p }; + this.selecting = true; + } else this.drag = { x: e.offsetX, y: e.offsetY, lat: this.lat, lon: this.lon }; + } + + private move(e: PointerEvent) { + if (this.pointers.has(e.pointerId)) this.pointers.set(e.pointerId, { x: e.offsetX, y: e.offsetY }); + if (this.pinch && this.pointers.size === 2) { + const [p, q] = [...this.pointers.values()]; + const d = Math.hypot(p.x - q.x, p.y - q.y); + const target = this.pinch.zoom + Math.log2(d / this.pinch.d); + this.zoomAt((p.x + q.x) / 2, (p.y + q.y) / 2, target - this.zoom); + return; + } + if (this.selecting && this.sel) { + this.sel.b = this.toLatLon(e.offsetX, e.offsetY); + this.emit(); + this.request(); + } else if (this.drag) { + const z = this.zoom; + const cx = lon2x(this.drag.lon, z) - (e.offsetX - this.drag.x); + const cy = lat2y(this.drag.lat, z) - (e.offsetY - this.drag.y); + this.lon = x2lon(cx, z); + this.lat = y2lat(cy, z); + this.request(); + } + } + + private up(e: PointerEvent) { + this.pointers.delete(e.pointerId); + if (this.pointers.size < 2) this.pinch = null; + if (this.selecting) { + this.selecting = false; + const b = this.bbox(); + if (b && bboxSizeKm(b).km2 < 0.0004) this.sel = null; // случайный клик + this.emit(); + } + this.drag = null; + this.request(); + } + + bbox(): BBox | null { + if (!this.sel) return null; + const { a, b } = this.sel; + return [Math.min(a[0], b[0]), Math.min(a[1], b[1]), Math.max(a[0], b[0]), Math.max(a[1], b[1])]; + } + + private emit() { + this.onChange(this.bbox()); + } + + setSelection(b: BBox | null, fit = true) { + this.sel = b ? { a: [b[0], b[1]], b: [b[2], b[3]] } : null; + if (b && fit) this.fit(b); + this.emit(); + this.request(); + } + + fit(b: BBox) { + this.lat = (b[0] + b[2]) / 2; + this.lon = (b[1] + b[3]) / 2; + for (let z = 18; z >= 2; z -= 0.25) { + const w = lon2x(b[3], z) - lon2x(b[1], z); + const h = lat2y(b[0], z) - lat2y(b[2], z); + if (w < this.W * 0.7 && h < this.H * 0.7) { this.zoom = z; break; } + } + this.request(); + } + + center(): [number, number] { + return [this.lat, this.lon]; + } + + /** Сделать выделение вокруг центра экрана заданного размера (км). */ + selectAroundCenter(km: number) { + const dLat = km / 2 / 110.57; + const dLon = km / 2 / (111.32 * Math.cos((this.lat * Math.PI) / 180)); + this.setSelection([this.lat - dLat, this.lon - dLon, this.lat + dLat, this.lon + dLon], true); + } + + private request() { + if (this.raf) return; + this.raf = requestAnimationFrame(() => { + this.raf = 0; + this.draw(); + }); + } + + private tile(z: number, x: number, y: number): HTMLImageElement | null { + const n = 2 ** z; + if (y < 0 || y >= n) return null; + x = ((x % n) + n) % n; + const key = `${z}/${x}/${y}`; + let img = this.tiles.get(key); + if (!img) { + img = new Image(); + img.crossOrigin = 'anonymous'; + img.onload = () => this.request(); + img.src = TILE_URL(z, x, y); + this.tiles.set(key, img); + if (this.tiles.size > 600) this.tiles.delete(this.tiles.keys().next().value!); + } + return img.complete && img.naturalWidth ? img : null; + } + + private draw() { + const ctx = this.ctx; + const dpr = window.devicePixelRatio || 1; + const W = this.W, H = this.H; + ctx.setTransform(dpr, 0, 0, dpr, 0, 0); + ctx.fillStyle = '#e8e4dc'; + ctx.fillRect(0, 0, W, H); + const tz = Math.round(this.zoom); + const scale = 2 ** (this.zoom - tz); + const cx = lon2x(this.lon, tz), cy = lat2y(this.lat, tz); + const left = cx - W / 2 / scale, top = cy - H / 2 / scale; + const x0 = Math.floor(left / TILE), y0 = Math.floor(top / TILE); + const x1 = Math.floor((cx + W / 2 / scale) / TILE), y1 = Math.floor((cy + H / 2 / scale) / TILE); + for (let ty = y0; ty <= y1; ty++) + for (let tx = x0; tx <= x1; tx++) { + const sx = (tx * TILE - left) * scale, sy = (ty * TILE - top) * scale; + const img = this.tile(tz, tx, ty); + if (img) ctx.drawImage(img, sx, sy, TILE * scale + 0.5, TILE * scale + 0.5); + else { + // пока тайл грузится — родительский + const p = this.tile(tz - 1, tx >> 1, ty >> 1); + if (p) ctx.drawImage(p, (tx & 1) * 128, (ty & 1) * 128, 128, 128, sx, sy, TILE * scale + 0.5, TILE * scale + 0.5); + } + } + const b = this.bbox(); + if (b) { + const [ax, ay] = this.toScreen(b[2], b[1]); + const [bx, by] = this.toScreen(b[0], b[3]); + ctx.fillStyle = 'rgba(20,20,20,0.35)'; + ctx.beginPath(); + ctx.rect(0, 0, W, H); + ctx.rect(ax, ay, bx - ax, by - ay); + ctx.fill('evenodd'); + ctx.strokeStyle = '#e8590c'; + ctx.lineWidth = 2.5; + ctx.strokeRect(ax, ay, bx - ax, by - ay); + } + } +} diff --git a/src/view/renderer.ts b/src/view/renderer.ts new file mode 100644 index 0000000..c7caa3d --- /dev/null +++ b/src/view/renderer.ts @@ -0,0 +1,658 @@ +// Отрисовка мира на Canvas2D. Все геометрии кэшируются в Path2D в мировых координатах +// (метры) и рисуются с трансформацией камеры, поэтому кадр — это десятки заливок, а не тысячи. + +import type { Building, Floor, Prop, Road, Shape, Vec, World } from '../types'; +import { SpatialGrid } from '../util/spatial'; +import { bboxOf, bboxHit, pointInRings, polylineLength } from '../util/geom'; +import * as S from './style'; + +export interface Camera { + x: number; + y: number; + /** пикселей на метр */ + z: number; +} + +export interface ViewOpts { + /** null — крыши; иначе номер этажа (0 — первый). */ + floor: number | null; + overrides: Map; + selected?: string | null; + furniture: boolean; + labels: boolean; +} + +interface Layer { + order: number; + fill: string | null; + path: Path2D; +} + +interface FloorPaths { + rooms: Map; + wallsExt: Path2D; + wallsInt: Path2D; + windows: Path2D; + doors: Path2D; + stairs: Path2D; + stairLines: Path2D; + props: Layer[]; + labels: { pos: Vec; text: string; area: number }[]; +} + +interface Chunk { + bb: [number, number, number, number]; + layers: Layer[]; + trees: Path2D; + treeEdges: Path2D; + trunks: Path2D; + hasTrees: boolean; +} + +const CHUNK = 120; + +export class Renderer { + private areas: { kind: string; path: Path2D; bb: number[] }[] = []; + private roadsByLayer: Road[][] = []; + private chunks = new Map(); + private bGrid = new SpatialGrid(60); + private roofCache = new Map(); + private floorCache = new Map(); + private streetLabels: { text: string; pos: Vec; ang: number; len: number; major: boolean }[] = []; + private bounds: World['bounds']; + + constructor(public world: World) { + this.bounds = world.bounds; + for (const a of world.areas) { + const p = new Path2D(); + for (const r of a.rings) addRing(p, r); + this.areas.push({ kind: a.kind, path: p, bb: bboxOf(a.rings[0]) }); + } + const layers = new Map(); + for (const r of world.roads) { + const l = r.tunnel ? -10 : r.bridge ? 10 + r.layer : Math.min(r.layer, 0); + if (!layers.has(l)) layers.set(l, []); + layers.get(l)!.push(r); + } + this.roadsByLayer = [...layers.entries()].sort((a, b) => a[0] - b[0]).map((e) => e[1]); + for (const b of world.buildings) this.bGrid.insert(b, bboxOf(b.footprint)); + this.buildChunks(); + this.buildStreetLabels(); + } + + // ---------------------------------------------------------------- подготовка + + private buildChunks() { + const groups = new Map(); + for (const p of this.world.props) { + const k = `${Math.floor(p.pos[0] / CHUNK)},${Math.floor(p.pos[1] / CHUNK)}`; + if (!groups.has(k)) groups.set(k, []); + groups.get(k)!.push(p); + } + for (const [k, props] of groups) { + const [cx, cy] = k.split(',').map(Number); + const trees = new Path2D(), treeEdges = new Path2D(), trunks = new Path2D(); + const rest: Prop[] = []; + let hasTrees = false; + for (const p of props) { + if (p.kind === 'tree' || p.kind === 'bush') { + const r = p.w / 2; + trees.moveTo(p.pos[0] + r, p.pos[1]); + trees.arc(p.pos[0], p.pos[1], r, 0, Math.PI * 2); + treeEdges.moveTo(p.pos[0] + r, p.pos[1]); + treeEdges.arc(p.pos[0], p.pos[1], r, 0, Math.PI * 2); + if (p.kind === 'tree') { + trunks.moveTo(p.pos[0] + 0.25, p.pos[1]); + trunks.arc(p.pos[0], p.pos[1], 0.25, 0, Math.PI * 2); + } + hasTrees = true; + } else rest.push(p); + } + this.chunks.set(k, { + bb: [cx * CHUNK - 6, cy * CHUNK - 6, (cx + 1) * CHUNK + 6, (cy + 1) * CHUNK + 6], + layers: this.propLayers(rest), trees, treeEdges, trunks, hasTrees, + }); + } + } + + private buildStreetLabels() { + const byName = new Map(); + for (const r of this.world.roads) if (r.name && !['rail', 'tram', 'river', 'stream', 'canal', 'ditch', 'footway', 'path', 'cycleway', 'steps'].includes(r.kind)) { + if (!byName.has(r.name)) byName.set(r.name, []); + byName.get(r.name)!.push(r); + } + for (const [name, rs] of byName) { + // подпись на самом длинном участке каждого пути + for (const r of rs) { + if (polylineLength(r.pts) < 40) continue; + let best = 0, bi = 1; + for (let i = 1; i < r.pts.length; i++) { + const l = Math.hypot(r.pts[i][0] - r.pts[i - 1][0], r.pts[i][1] - r.pts[i - 1][1]); + if (l > best) { best = l; bi = i; } + } + const a = r.pts[bi - 1], b = r.pts[bi]; + let ang = Math.atan2(b[1] - a[1], b[0] - a[0]); + if (ang > Math.PI / 2) ang -= Math.PI; + if (ang < -Math.PI / 2) ang += Math.PI; + this.streetLabels.push({ text: name, pos: [(a[0] + b[0]) / 2, (a[1] + b[1]) / 2], ang, len: best, major: ['primary', 'secondary', 'trunk', 'tertiary'].includes(r.kind) }); + } + } + this.streetLabels.sort((a, b) => Number(b.major) - Number(a.major) || b.len - a.len); + } + + private shapesOf(p: Prop): Shape[] { + return p.shapes ?? (p.model ? this.world.models[p.model] ?? [] : []); + } + + /** Фигуры предметов → слои Path2D: слой i каждого предмета рисуется после слоя i-1 всех предметов. */ + private propLayers(props: Prop[]): Layer[] { + const map = new Map(); + for (const p of props) { + const shapes = this.shapesOf(p); + const c = Math.cos(p.rot), s = Math.sin(p.rot); + const T = (x: number, y: number): Vec => [p.pos[0] + x * c - y * s, p.pos[1] + x * s + y * c]; + shapes.forEach((sh, i) => { + const style = sh.s ?? 'base'; + const fill = sh.t === 'line' ? null : style === 'car' ? p.color ?? '#999' : S.SHAPE_FILL[style] ?? '#eee'; + const key = `${i}|${fill}|${sh.t === 'line' ? style : ''}`; + let L = map.get(key); + if (!L) map.set(key, (L = { order: i * 2 + (sh.t === 'line' ? 1 : 0), fill, path: new Path2D() })); + addShape(L.path, sh, T, p.rot); + }); + } + return [...map.values()].sort((a, b) => a.order - b.order); + } + + private roof(b: Building): Path2D { + let p = this.roofCache.get(b.id); + if (!p) { + p = new Path2D(); + addRing(p, b.footprint); + for (const h of b.holes) addRing(p, h); + this.roofCache.set(b.id, p); + } + return p; + } + + private floorPaths(b: Building, f: Floor): FloorPaths { + const key = `${b.id}|${f.level}`; + let fp = this.floorCache.get(key); + if (fp) return fp; + const rooms = new Map(); + const labels: FloorPaths['labels'] = []; + for (const r of f.rooms) { + const col = S.ROOM_COLOR[r.kind] ?? S.ROOM_COLOR.default; + let p = rooms.get(col); + if (!p) rooms.set(col, (p = new Path2D())); + for (const ring of r.rings) addRing(p, ring); + const name = S.ROOM_NAME[r.kind]; + if (name && r.kind !== 'stairs' && r.kind !== 'lift') labels.push({ pos: r.labelPos, text: name, area: r.area }); + } + const wallsExt = new Path2D(), wallsInt = new Path2D(); + for (const w of f.walls) { + const p = w.exterior ? wallsExt : wallsInt; + p.moveTo(w.a[0], w.a[1]); + p.lineTo(w.b[0], w.b[1]); + } + const windows = new Path2D(); + for (const w of f.windows) { windows.moveTo(w.a[0], w.a[1]); windows.lineTo(w.b[0], w.b[1]); } + const doors = new Path2D(); + for (const d of f.doors) { + if (d.kind === 'opening') continue; + const vx = d.b[0] - d.a[0], vy = d.b[1] - d.a[1]; + const L = Math.hypot(vx, vy); + if (L < 0.3) continue; + const mid: Vec = [(d.a[0] + d.b[0]) / 2, (d.a[1] + d.b[1]) / 2]; + let nx = -vy / L, ny = vx / L; + if ((d.swingTo[0] - mid[0]) * nx + (d.swingTo[1] - mid[1]) * ny < 0) { nx = -nx; ny = -ny; } + if (d.kind === 'garage') { + doors.moveTo(d.a[0] + nx * 0.15, d.a[1] + ny * 0.15); + doors.lineTo(d.b[0] + nx * 0.15, d.b[1] + ny * 0.15); + continue; + } + // двустворчатая для широких проёмов + const leaves: [Vec, Vec, number][] = L > 1.3 ? [[d.a, [vx / 2, vy / 2], L / 2], [d.b, [-vx / 2, -vy / 2], L / 2]] : [[d.a, [vx, vy], L]]; + for (const [h, v, r] of leaves) { + const a0 = Math.atan2(v[1], v[0]); + const a1 = Math.atan2(ny, nx); + let da = a1 - a0; + while (da > Math.PI) da -= 2 * Math.PI; + while (da < -Math.PI) da += 2 * Math.PI; + doors.moveTo(h[0], h[1]); + doors.lineTo(h[0] + nx * r, h[1] + ny * r); + doors.arc(h[0], h[1], r, a1, a0, da > 0); + } + } + const stairs = new Path2D(), stairLines = new Path2D(); + for (const s of f.stairs) { + for (const ring of s.rings) addRing(stairs, ring); + if (s.lift) { + const r = s.rings[0]; + stairLines.moveTo(r[0][0], r[0][1]); stairLines.lineTo(r[2][0], r[2][1]); + stairLines.moveTo(r[1][0], r[1][1]); stairLines.lineTo(r[3][0], r[3][1]); + continue; + } + const dx = s.to[0] - s.from[0], dy = s.to[1] - s.from[1]; + const L = Math.hypot(dx, dy); + const ux = dx / L, uy = dy / L, px = -uy, py = ux; + const hw = s.width / 2 - 0.05; + for (let t = 0.28; t < L - 0.05; t += 0.28) { + const cx = s.from[0] + ux * t, cy = s.from[1] + uy * t; + stairLines.moveTo(cx - px * hw, cy - py * hw); + stairLines.lineTo(cx + px * hw, cy + py * hw); + } + // стрелка «вверх» + if (s.up) { + const a: Vec = [s.from[0] + ux * 0.2, s.from[1] + uy * 0.2], b: Vec = [s.to[0] - ux * 0.3, s.to[1] - uy * 0.3]; + stairLines.moveTo(a[0], a[1]); + stairLines.lineTo(b[0], b[1]); + stairLines.lineTo(b[0] - ux * 0.35 + px * 0.25, b[1] - uy * 0.35 + py * 0.25); + stairLines.moveTo(b[0], b[1]); + stairLines.lineTo(b[0] - ux * 0.35 - px * 0.25, b[1] - uy * 0.35 - py * 0.25); + } + } + fp = { rooms, wallsExt, wallsInt, windows, doors, stairs, stairLines, props: this.propLayers(f.props), labels }; + this.floorCache.set(key, fp); + if (this.floorCache.size > 6000) this.floorCache.delete(this.floorCache.keys().next().value!); + return fp; + } + + // ---------------------------------------------------------------- запросы + + buildingAt(p: Vec): Building | null { + for (const b of this.bGrid.query([p[0], p[1], p[0], p[1]])) if (pointInRings(p, [b.footprint, ...b.holes])) return b; + return null; + } + + levelFor(b: Building, o: ViewOpts): number | null { + const lv = o.overrides.has(b.id) ? o.overrides.get(b.id)! : o.floor; + if (lv === null || lv === undefined) return null; + return lv < b.levels ? lv : null; + } + + // ---------------------------------------------------------------- кадр + + draw(ctx: CanvasRenderingContext2D, W: number, H: number, cam: Camera, o: ViewOpts, dpr = 1) { + const z = cam.z; + ctx.setTransform(dpr, 0, 0, dpr, 0, 0); + ctx.fillStyle = S.BG; + ctx.fillRect(0, 0, W, H); + const view: [number, number, number, number] = [cam.x - W / 2 / z, cam.y - H / 2 / z, cam.x + W / 2 / z, cam.y + H / 2 / z]; + const px = 1 / z; // один пиксель в метрах + ctx.setTransform(z * dpr, 0, 0, z * dpr, (W / 2 - cam.x * z) * dpr, (H / 2 - cam.y * z) * dpr); + ctx.lineJoin = 'round'; + ctx.lineCap = 'round'; + + // зоны + for (const a of this.areas) { + if (!bboxHit(a.bb, view)) continue; + ctx.fillStyle = (S.AREA_COLOR as any)[a.kind] ?? '#ddd'; + ctx.fill(a.path, 'evenodd'); + } + if (z > 1.5) { + for (const a of this.areas) if (a.kind === 'parking' && bboxHit(a.bb, view)) { ctx.strokeStyle = '#c2c0bb'; ctx.lineWidth = Math.max(0.2, px); ctx.stroke(a.path); } + } + + // дороги по слоям: тоннели, земля, мосты + for (const group of this.roadsByLayer) this.drawRoads(ctx, group, view, z, px); + + // уличные объекты + const chunks = [...this.chunks.values()].filter((c) => bboxHit(c.bb, view)); + if (z > 0.8) for (const c of chunks) this.drawLayers(ctx, c.layers, z, px); + + // здания + const visible = this.bGrid.query(view); + visible.sort((a, b) => a.levels - b.levels); + // тени от крыш + if (z < 40) { + ctx.save(); + ctx.translate(0.8, 1.2); + ctx.fillStyle = 'rgba(40,30,20,0.16)'; + for (const b of visible) if (this.levelFor(b, o) === null) ctx.fill(this.roof(b), 'evenodd'); + ctx.restore(); + } + for (const b of visible) { + const lv = this.levelFor(b, o); + const f = lv !== null ? b.floors[lv] : undefined; + if (f && z >= 0.9) this.drawFloor(ctx, b, f, z, px, o); + else this.drawRoof(ctx, b, z, px, lv !== null); + if (o.selected === b.id) { + ctx.strokeStyle = '#e8590c'; + ctx.lineWidth = Math.max(3 * px, 0.25); + ctx.stroke(this.roof(b)); + } + } + + // кроны деревьев поверх + if (z > 0.35) { + for (const c of chunks) { + if (!c.hasTrees) continue; + ctx.fillStyle = S.TREE; + ctx.fill(c.trees); + if (z > 1.5) { + ctx.strokeStyle = S.TREE_EDGE; + ctx.lineWidth = Math.max(px, 0.06); + ctx.stroke(c.treeEdges); + ctx.fillStyle = 'rgba(90,64,40,0.7)'; + ctx.fill(c.trunks); + } + } + } + + // затемнение за пределами области + const B = this.bounds; + ctx.fillStyle = S.OUTSIDE; + const big = 1e6; + const outside = new Path2D(); + outside.rect(-big, -big, 2 * big, 2 * big); + outside.rect(B.minX, B.minY, B.maxX - B.minX, B.maxY - B.minY); + ctx.fill(outside, 'evenodd'); + + // подписи — в экранных координатах + ctx.setTransform(dpr, 0, 0, dpr, 0, 0); + const toS = (p: Vec): Vec => [(p[0] - cam.x) * z + W / 2, (p[1] - cam.y) * z + H / 2]; + const boxes: number[][] = []; + const free = (bx: number[]) => { + if (boxes.some((b) => bboxHit(b, bx))) return false; + boxes.push(bx); + return true; + }; + if (o.labels && z >= 9) { + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + ctx.font = `${z > 30 ? 13 : 11}px system-ui, sans-serif`; + for (const b of visible) { + const lv = this.levelFor(b, o); + if (lv === null || !b.floors[lv]) continue; + const fp = this.floorPaths(b, b.floors[lv]); + for (const l of fp.labels) { + const sp = toS(l.pos); + if (sp[0] < -50 || sp[1] < -20 || sp[0] > W + 50 || sp[1] > H + 20) continue; + const tw = ctx.measureText(l.text).width; + if (Math.sqrt(l.area) * z < tw * 0.9) continue; + const yOff = z > 30 ? -12 : 0; + if (!free([sp[0] - tw / 2, sp[1] + yOff - 7, sp[0] + tw / 2, sp[1] + yOff + 7])) continue; + ctx.fillStyle = 'rgba(255,255,255,0.75)'; + ctx.fillText(l.text, sp[0] + 1, sp[1] + yOff + 1); + ctx.fillStyle = '#5a554d'; + ctx.fillText(l.text, sp[0], sp[1] + yOff); + } + } + } + if (o.labels && z > 0.6 && z < 14) { + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + for (const l of this.streetLabels) { + const sp = toS(l.pos); + if (sp[0] < -100 || sp[1] < -50 || sp[0] > W + 100 || sp[1] > H + 50) continue; + ctx.font = `${l.major ? 600 : 500} ${l.major ? 13 : 12}px system-ui, sans-serif`; + const tw = ctx.measureText(l.text).width; + if (tw > l.len * z * 0.95) continue; + const hw = (Math.abs(Math.cos(l.ang)) * tw + Math.abs(Math.sin(l.ang)) * 14) / 2; + const hh = (Math.abs(Math.sin(l.ang)) * tw + Math.abs(Math.cos(l.ang)) * 14) / 2; + if (!free([sp[0] - hw, sp[1] - hh, sp[0] + hw, sp[1] + hh])) continue; + ctx.save(); + ctx.translate(sp[0], sp[1]); + ctx.rotate(l.ang); + ctx.lineWidth = 3.5; + ctx.strokeStyle = 'rgba(255,255,255,0.9)'; + ctx.strokeText(l.text, 0, 0); + ctx.fillStyle = '#3e3a35'; + ctx.fillText(l.text, 0, 0); + ctx.restore(); + } + } + } + + private drawRoads(ctx: CanvasRenderingContext2D, roads: Road[], view: number[], z: number, px: number) { + const vis = roads.filter((r) => { + const bb = bboxOf(r.pts); + const m = r.width / 2 + r.sidewalk + 2; + return bboxHit([bb[0] - m, bb[1] - m, bb[2] + m, bb[3] + m], view); + }); + const line = (r: Road, p: Path2D = new Path2D()) => { + p.moveTo(r.pts[0][0], r.pts[0][1]); + for (let i = 1; i < r.pts.length; i++) p.lineTo(r.pts[i][0], r.pts[i][1]); + return p; + }; + const tunnel = vis.length > 0 && vis[0].tunnel; + ctx.save(); + if (tunnel) { + ctx.globalAlpha = 0.35; + ctx.setLineDash([3, 2]); + } + const water = vis.filter((r) => ['river', 'stream', 'canal', 'ditch'].includes(r.kind)); + for (const r of water) { + ctx.strokeStyle = S.ROAD.water; + ctx.lineWidth = Math.max(r.width, 1.5 * px); + ctx.stroke(line(r)); + } + const isCar = (r: Road) => !['footway', 'path', 'cycleway', 'steps', 'track', 'pedestrian', 'rail', 'tram', 'river', 'stream', 'canal', 'ditch'].includes(r.kind); + const car = vis.filter(isCar); + // мосты: тёмная обводка + for (const r of vis) if (r.bridge && !['rail', 'tram'].includes(r.kind)) { + ctx.strokeStyle = S.ROAD.bridgeCasing; + ctx.lineWidth = Math.max(r.width + 2 * r.sidewalk + 1.2, 3 * px); + ctx.lineCap = 'butt'; + ctx.stroke(line(r)); + ctx.lineCap = 'round'; + } + // тротуары и бордюр + for (const r of car) if (r.sidewalk > 0) { + ctx.strokeStyle = S.ROAD.kerb; + ctx.lineWidth = Math.max(r.width + 2 * r.sidewalk + 0.3, 2 * px); + ctx.stroke(line(r)); + ctx.strokeStyle = S.ROAD.sidewalk; + ctx.lineWidth = Math.max(r.width + 2 * r.sidewalk, 2 * px); + ctx.stroke(line(r)); + } + // пешеходные: площади/дорожки + for (const r of vis) { + if (!['pedestrian', 'footway', 'path', 'cycleway', 'steps', 'track'].includes(r.kind)) continue; + ctx.strokeStyle = r.kind === 'track' ? S.ROAD.track : r.kind === 'path' ? S.ROAD.path : r.kind === 'pedestrian' ? S.ROAD.sidewalk : S.ROAD.footway; + ctx.lineWidth = Math.max(r.width, 1.2 * px); + ctx.stroke(line(r)); + if (r.kind === 'steps' && z > 4) { + ctx.save(); + ctx.setLineDash([0.12, 0.3]); + ctx.lineCap = 'butt'; + ctx.strokeStyle = '#a89c88'; + ctx.lineWidth = r.width; + ctx.stroke(line(r)); + ctx.restore(); + } + } + // проезжая часть + for (const r of car) { + const major = ['motorway', 'trunk', 'primary', 'secondary', 'tertiary'].includes(r.kind); + ctx.strokeStyle = r.kind === 'service' ? S.ROAD.service : major ? S.ROAD.major : S.ROAD.minor; + ctx.lineWidth = Math.max(r.width, (major ? 2.5 : 1.6) * px); + ctx.stroke(line(r)); + } + // разметка + if (z > 1.5) { + ctx.save(); + ctx.strokeStyle = S.ROAD.centre; + ctx.lineWidth = 0.15; + ctx.lineCap = 'butt'; + ctx.setLineDash([3, 4]); + for (const r of car) if (r.width >= 6 && !r.oneway && r.kind !== 'service') ctx.stroke(line(r)); + ctx.restore(); + } + // рельсы + for (const r of vis) if (r.kind === 'rail' || r.kind === 'tram') { + if (z > 2) { + ctx.save(); + ctx.lineCap = 'butt'; + ctx.strokeStyle = S.ROAD.sleeper; + ctx.lineWidth = 2.6; + ctx.setLineDash([0.25, 0.4]); + ctx.stroke(line(r)); + ctx.restore(); + } + ctx.strokeStyle = S.ROAD.rail; + ctx.lineWidth = Math.max(z > 2 ? 1.5 : 1.2, 1.5 * px); + ctx.stroke(line(r)); + if (z > 2) { + ctx.strokeStyle = S.ROAD.sleeper; + ctx.lineWidth = 1.2; + ctx.stroke(line(r)); + } + } + ctx.restore(); + } + + private drawLayers(ctx: CanvasRenderingContext2D, layers: Layer[], z: number, px: number) { + const outline = z > 6; + ctx.lineWidth = Math.max(0.025, px * 0.8); + for (const L of layers) { + if (L.fill) { + ctx.fillStyle = L.fill; + ctx.fill(L.path); + if (outline) { + ctx.strokeStyle = S.SHAPE_STROKE; + ctx.stroke(L.path); + } + } else if (z > 3) { + ctx.strokeStyle = S.SHAPE_STROKE; + ctx.stroke(L.path); + } + } + } + + private drawRoof(ctx: CanvasRenderingContext2D, b: Building, z: number, px: number, lower: boolean) { + const p = this.roof(b); + ctx.fillStyle = S.ROOF[b.kind] ?? '#c8bba9'; + ctx.fill(p, 'evenodd'); + if (lower) { + ctx.fillStyle = 'rgba(255,255,255,0.18)'; + ctx.fill(p, 'evenodd'); + } + ctx.strokeStyle = 'rgba(70,58,46,0.75)'; + ctx.lineWidth = Math.max(px, 0.15); + ctx.stroke(p); + // конёк для небольших домов при приближении + if (z > 3 && (b.kind === 'house' || b.kind === 'garage' || b.kind === 'shed' || b.kind === 'farm') && b.footprint.length <= 6) { + const r = b.footprint; + const c = Math.cos(b.frame.angle), s = Math.sin(b.frame.angle); + const loc = r.map((q) => [q[0] * c + q[1] * s, -q[0] * s + q[1] * c]); + const xs = loc.map((q) => q[0]), ys = loc.map((q) => q[1]); + const x0 = Math.min(...xs), x1 = Math.max(...xs), y0 = Math.min(...ys), y1 = Math.max(...ys); + const ym = (y0 + y1) / 2, inset = (y1 - y0) / 2; + const a: Vec = [x0 + inset * 0.6, ym], bb: Vec = [x1 - inset * 0.6, ym]; + const W = (q: Vec): Vec => [q[0] * c - q[1] * s, q[0] * s + q[1] * c]; + const pa = W(a), pb = W(bb); + ctx.save(); + ctx.clip(p, 'evenodd'); + ctx.strokeStyle = 'rgba(90,70,55,0.45)'; + ctx.lineWidth = Math.max(px, 0.08); + ctx.beginPath(); + ctx.moveTo(pa[0], pa[1]); + ctx.lineTo(pb[0], pb[1]); + for (const corner of r) { + const cl: Vec = [corner[0] * c + corner[1] * s, -corner[0] * s + corner[1] * c]; + const tgt = W(cl[0] < (x0 + x1) / 2 ? a : bb); + ctx.moveTo(corner[0], corner[1]); + ctx.lineTo(tgt[0], tgt[1]); + } + ctx.stroke(); + ctx.restore(); + } + } + + private drawFloor(ctx: CanvasRenderingContext2D, b: Building, f: Floor, z: number, px: number, o: ViewOpts) { + const roof = this.roof(b); + if (z < 1.6) { + ctx.fillStyle = S.ROOM_COLOR.default; + ctx.fill(roof, 'evenodd'); + ctx.strokeStyle = S.WALL_EXT; + ctx.lineWidth = Math.max(px * 1.2, 0.3); + ctx.stroke(roof); + return; + } + const fp = this.floorPaths(b, f); + ctx.save(); + ctx.clip(roof, 'evenodd'); + ctx.fillStyle = S.ROOM_COLOR.default; + ctx.fill(roof, 'evenodd'); + for (const [col, p] of fp.rooms) { + ctx.fillStyle = col; + ctx.fill(p, 'evenodd'); + } + ctx.fillStyle = '#dcd5ca'; + ctx.fill(fp.stairs); + ctx.strokeStyle = '#8f877b'; + ctx.lineWidth = Math.max(px * 0.8, 0.03); + ctx.lineCap = 'butt'; + ctx.stroke(fp.stairLines); + if (o.furniture && z >= 2.5) this.drawLayers(ctx, fp.props, z, px); + ctx.lineCap = 'square'; + ctx.strokeStyle = S.WALL_INT; + ctx.lineWidth = Math.max(0.12, px * 1.0); + ctx.stroke(fp.wallsInt); + ctx.restore(); + // внешние стены (не клипуем — толщина наружу) + ctx.lineCap = 'square'; + ctx.strokeStyle = S.WALL_EXT; + ctx.lineWidth = Math.max(0.3, px * 1.6); + ctx.stroke(fp.wallsExt); + if (z > 2) { + ctx.lineCap = 'butt'; + ctx.strokeStyle = '#eef5f9'; + ctx.lineWidth = 0.22; + ctx.stroke(fp.windows); + ctx.strokeStyle = S.WINDOW; + ctx.lineWidth = Math.max(0.05, px * 0.8); + ctx.stroke(fp.windows); + } + if (z > 5) { + ctx.lineCap = 'butt'; + ctx.strokeStyle = S.DOOR; + ctx.lineWidth = Math.max(0.03, px * 0.8); + ctx.stroke(fp.doors); + } + ctx.lineCap = 'round'; + } +} + +// ---------------------------------------------------------------- геометрия Path2D + +function addRing(p: Path2D, r: Vec[]) { + if (r.length < 2) return; + p.moveTo(r[0][0], r[0][1]); + for (let i = 1; i < r.length; i++) p.lineTo(r[i][0], r[i][1]); + p.closePath(); +} + +function addShape(p: Path2D, sh: Shape, T: (x: number, y: number) => Vec, rot: number) { + if (sh.t === 'circle') { + const c = T(sh.x, sh.y); + p.moveTo(c[0] + sh.r, c[1]); + p.arc(c[0], c[1], sh.r, 0, Math.PI * 2); + return; + } + if (sh.t === 'line') { + const a = T(sh.x1, sh.y1), b = T(sh.x2, sh.y2); + p.moveTo(a[0], a[1]); + p.lineTo(b[0], b[1]); + return; + } + const hw = sh.w / 2, hh = sh.h / 2; + const r = Math.min(sh.r ?? 0, hw, hh); + const corners: Vec[] = [T(sh.x - hw, sh.y - hh), T(sh.x + hw, sh.y - hh), T(sh.x + hw, sh.y + hh), T(sh.x - hw, sh.y + hh)]; + if (r <= 0.01) { + p.moveTo(corners[0][0], corners[0][1]); + for (let i = 1; i < 4; i++) p.lineTo(corners[i][0], corners[i][1]); + p.closePath(); + return; + } + const m = (a: Vec, b: Vec): Vec => [(a[0] + b[0]) / 2, (a[1] + b[1]) / 2]; + const start = m(corners[3], corners[0]); + p.moveTo(start[0], start[1]); + for (let i = 0; i < 4; i++) { + const c = corners[i], n = corners[(i + 1) % 4]; + p.arcTo(c[0], c[1], n[0], n[1], r); + } + p.closePath(); + void rot; +} diff --git a/src/view/style.ts b/src/view/style.ts new file mode 100644 index 0000000..a4ce55a --- /dev/null +++ b/src/view/style.ts @@ -0,0 +1,71 @@ +import type { AreaKind, BuildingKind, RoomKind, ShapeStyle } from '../types'; + +export const BG = '#ebe7de'; +export const OUTSIDE = 'rgba(40,38,34,0.38)'; + +export const AREA_COLOR: Record = { + residential: '#e5e0d5', commercial: '#ead9d3', retail: '#eed6d2', industrial: '#e0d9e2', farmland: '#ecedd2', + farmyard: '#e7d9c2', grass: '#cfe3b0', park: '#c6e2a6', forest: '#a9cc8f', scrub: '#c4d7a1', meadow: '#d7e9b8', + orchard: '#c9e0a6', vineyard: '#d4e3ae', water: '#a8cde6', wetland: '#c3dcd6', beach: '#f0e3bd', sand: '#ebdfbf', + parking: '#d7d6d3', pitch: '#b3d79e', playground: '#d6ecc9', cemetery: '#c3d7b4', construction: '#ddd5c4', + railway: '#dad5cc', school: '#efe5cc', hospital: '#efdcdc', pedestrian: '#e0dbd2', garden: '#d3e8b7', +}; + +export const ROAD = { + major: '#8e9196', + minor: '#a3a6ab', + service: '#b4b6b9', + sidewalk: '#d4d0c8', + kerb: '#b9b4ab', + centre: '#f4f1e8', + footway: '#e3d6bd', + path: '#d4c29f', + track: '#c7b28c', + rail: '#6f6a64', + sleeper: '#a59b8d', + water: '#8fc0e0', + bridgeCasing: '#5e5a54', +}; + +export const ROOF: Record = { + house: '#d2b9a3', apartments: '#c4b3a6', mixed: '#c8b2ad', retail: '#c9b5c3', restaurant: '#cdb3b0', + office: '#b9bfc9', industrial: '#bdbcc2', warehouse: '#b6b8bd', school: '#d6c4a0', hospital: '#d6bcbc', + hotel: '#c9b9b0', church: '#c4a98a', civic: '#cfc19f', garage: '#bab6b0', shed: '#c7bba8', farm: '#c9b394', +}; + +export const ROOM_COLOR: Partial> & { default: string } = { + default: '#f6f3ed', + living: '#f4ead8', bedroom: '#ece7f2', kitchen: '#f3eed4', bath: '#dbeaf0', wc: '#dbeaf0', hall: '#efebe5', + corridor: '#ece8e1', lobby: '#ece8e1', landing: '#e9e5de', stairs: '#e2ddd4', lift: '#d6d2cb', storage: '#ebe5d9', utility: '#e5e8e4', + sales: '#f6ecd9', backroom: '#ebe5d9', office: '#e8edf1', openoffice: '#e8edf1', meeting: '#e3e9f0', + dining: '#f5e6d8', prokitchen: '#e6ebec', workshop: '#e6e5e1', hall_ind: '#e4e4e2', classroom: '#f2ecd9', + staff: '#ecebe2', ward: '#e6f0ee', guestroom: '#f0e8f0', nave: '#f1e9da', garage: '#e1e1df', void: '#d9d6d0', +}; + +export const ROOM_NAME: Record = { + hall: 'прихожая', landing: 'площадка', living: 'гостиная', kitchen: 'кухня', bedroom: 'спальня', bath: 'ванная', wc: 'туалет', + storage: 'кладовая', corridor: 'коридор', stairs: 'лестница', lift: 'лифт', lobby: 'вестибюль', sales: 'торговый зал', + backroom: 'подсобка', office: 'кабинет', openoffice: 'опенспейс', meeting: 'переговорная', dining: 'зал', + prokitchen: 'кухня', workshop: 'мастерская', hall_ind: 'цех', classroom: 'класс', staff: 'учительская', ward: 'палата', + guestroom: 'номер', nave: 'зал', garage: 'гараж', utility: 'техпомещение', void: '', +}; + +export const KIND_NAME: Record = { + house: 'Жилой дом', apartments: 'Многоквартирный дом', mixed: 'Жилой дом с магазином', retail: 'Магазин', + restaurant: 'Кафе / ресторан', office: 'Офис', industrial: 'Производство', warehouse: 'Склад / ангар', school: 'Школа', + hospital: 'Больница', hotel: 'Гостиница', church: 'Храм', civic: 'Общественное здание', garage: 'Гараж', + shed: 'Сарай / хозпостройка', farm: 'Хозяйственная постройка', +}; + +export const SHAPE_FILL: Record = { + base: '#fbfaf6', soft: '#ffffff', dark: '#5f5b55', green: '#86b26e', glass: '#bcd9e8', metal: '#bfc4c8', + wood: '#c9a57f', water: '#cfe6f2', line: null, car: '#999', fabric: '#b8a48f', accent: '#c88e64', +}; +export const SHAPE_STROKE = '#5c564e'; + +export const WALL_EXT = '#33312e'; +export const WALL_INT = '#4d4a45'; +export const WINDOW = '#5d93b8'; +export const DOOR = '#7b766f'; +export const TREE = 'rgba(96,148,72,0.78)'; +export const TREE_EDGE = 'rgba(64,104,48,0.9)'; diff --git a/src/view/viewer.ts b/src/view/viewer.ts new file mode 100644 index 0000000..6807bc6 --- /dev/null +++ b/src/view/viewer.ts @@ -0,0 +1,288 @@ +// Просмотрщик мира: камера (перетаскивание, колесо, щипок), этажи, выбор здания. + +import type { Building, Vec, World } from '../types'; +import { Renderer, type Camera, type ViewOpts } from './renderer'; +import { KIND_NAME, ROOM_NAME } from './style'; +import { centroid } from '../util/geom'; + +const el = (tag: K, cls?: string, html?: string) => { + const e = document.createElement(tag); + if (cls) e.className = cls; + if (html !== undefined) e.innerHTML = html; + return e; +}; +const esc = (s: string) => s.replace(/[&<>"]/g, (c) => ({ '&': '&', '<': '<', '>': '>', '"': '"' }[c]!)); + +export class Viewer { + readonly root = el('div', 'viewer'); + private canvas = el('canvas', 'world-canvas'); + private ctx = this.canvas.getContext('2d')!; + private renderer: Renderer; + cam: Camera; + opts: ViewOpts = { floor: null, overrides: new Map(), selected: null, furniture: true, labels: true }; + private raf = 0; + private floorBar = el('div', 'floor-bar card'); + private info = el('div', 'info card'); + private scale = el('div', 'scale'); + private maxLevel: number; + private pointers = new Map(); + private gesture: { x: number; y: number; cam: Camera; d?: number; moved: boolean } | null = null; + + constructor(parent: HTMLElement, public world: World, private actions: { onNew: () => void; onExport: () => void }) { + this.renderer = new Renderer(world); + const B = world.bounds; + this.cam = { x: (B.minX + B.maxX) / 2, y: (B.minY + B.maxY) / 2, z: 1 }; + this.maxLevel = Math.min(40, Math.max(1, ...world.buildings.map((b) => b.levels))); + this.root.append(this.canvas, this.buildTop(), this.floorBar, this.info, this.scale, el('div', 'attribution', '© OpenStreetMap contributors')); + parent.appendChild(this.root); + this.info.hidden = true; + this.buildFloorBar(); + new ResizeObserver(() => this.resize()).observe(this.root); + this.bindInput(); + requestAnimationFrame(() => { + this.resize(); + this.fitBounds(); + }); + } + + destroy() { + this.root.remove(); + window.removeEventListener('keydown', this.onKey); + } + + private buildTop(): HTMLElement { + const top = el('div', 'viewer-top card'); + const w = this.world; + let floors = 0, rooms = 0, furn = 0, beds = 0, homes = 0; + for (const b of w.buildings) { + floors += b.floors.length; + beds += b.beds; + homes += b.units.filter((u) => u.kind === 'home').length; + for (const f of b.floors) { rooms += f.rooms.length; furn += f.props.length; } + } + top.innerHTML = ` +
${esc(w.name || 'Без названия')}
+
${w.buildings.length.toLocaleString('ru')} зданий · ${floors.toLocaleString('ru')} этажей · ${rooms.toLocaleString('ru')} комнат · ${furn.toLocaleString('ru')} предметов · ${homes.toLocaleString('ru')} квартир/домов · ~${beds.toLocaleString('ru')} жителей
+
+ + + + +
`; + top.querySelector('[data-a=new]')!.addEventListener('click', () => this.actions.onNew()); + top.querySelector('[data-a=export]')!.addEventListener('click', () => this.actions.onExport()); + top.querySelectorAll('input[data-t]').forEach((inp) => + inp.addEventListener('change', () => { + (this.opts as any)[inp.dataset.t!] = inp.checked; + this.request(); + })); + return top; + } + + private buildFloorBar() { + const bar = this.floorBar; + bar.innerHTML = '
Этаж
'; + const list = el('div', 'floor-list'); + const mk = (label: string, value: number | null, title: string) => { + const b = el('button', 'floor-btn', label); + b.title = title; + b.dataset.v = value === null ? 'roof' : String(value); + b.addEventListener('click', () => this.setFloor(value)); + return b; + }; + list.appendChild(mk('⌂', null, 'Крыши')); + for (let l = this.maxLevel - 1; l >= 0; l--) list.appendChild(mk(String(l + 1), l, `${l + 1}-й этаж`)); + bar.appendChild(list); + bar.appendChild(el('div', 'floor-hint', 'PgUp / PgDn')); + this.syncFloorBar(); + } + + private syncFloorBar() { + const v = this.opts.floor === null ? 'roof' : String(this.opts.floor); + this.floorBar.querySelectorAll('.floor-btn').forEach((b) => b.classList.toggle('on', b.dataset.v === v)); + } + + setFloor(v: number | null) { + this.opts.floor = v; + this.opts.overrides.clear(); + this.syncFloorBar(); + this.updateInfo(); + this.request(); + } + + private resize() { + const r = this.root.getBoundingClientRect(); + const dpr = window.devicePixelRatio || 1; + this.canvas.width = Math.round(r.width * dpr); + this.canvas.height = Math.round(r.height * dpr); + this.canvas.style.width = r.width + 'px'; + this.canvas.style.height = r.height + 'px'; + this.request(); + } + + fitBounds() { + const B = this.world.bounds; + const r = this.root.getBoundingClientRect(); + this.cam.x = (B.minX + B.maxX) / 2; + this.cam.y = (B.minY + B.maxY) / 2; + this.cam.z = Math.min(r.width / (B.maxX - B.minX), r.height / (B.maxY - B.minY)) * 0.92; + this.request(); + } + + /** Перелёт к точке (для отладки и будущих событий). */ + lookAt(p: Vec, z: number) { + this.cam = { x: p[0], y: p[1], z }; + this.request(); + } + + request() { + if (this.raf) return; + this.raf = requestAnimationFrame(() => { + this.raf = 0; + const r = this.root.getBoundingClientRect(); + this.renderer.draw(this.ctx, r.width, r.height, this.cam, this.opts, window.devicePixelRatio || 1); + this.updateScale(); + }); + } + + private updateScale() { + const z = this.cam.z; + const target = 120 / z; + const nice = [1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000].find((n) => n >= target * 0.6) ?? 5000; + this.scale.style.width = nice * z + 'px'; + this.scale.textContent = nice >= 1000 ? `${nice / 1000} км` : `${nice} м`; + } + + private screenToWorld(x: number, y: number): Vec { + const r = this.root.getBoundingClientRect(); + return [(x - r.width / 2) / this.cam.z + this.cam.x, (y - r.height / 2) / this.cam.z + this.cam.y]; + } + + private zoomAt(x: number, y: number, factor: number) { + const before = this.screenToWorld(x, y); + this.cam.z = Math.max(0.05, Math.min(120, this.cam.z * factor)); + const after = this.screenToWorld(x, y); + this.cam.x += before[0] - after[0]; + this.cam.y += before[1] - after[1]; + this.request(); + } + + private onKey = (e: KeyboardEvent) => { + if ((e.target as HTMLElement)?.tagName === 'INPUT') return; + const f = this.opts.floor; + if (e.key === 'PageUp' || e.key === ']') this.setFloor(f === null ? 0 : Math.min(this.maxLevel - 1, f + 1)); + else if (e.key === 'PageDown' || e.key === '[') this.setFloor(f === null || f === 0 ? null : f - 1); + else if (e.key === 'Escape') this.select(null); + else if (e.key === '+' || e.key === '=') this.zoomAt(this.canvas.clientWidth / 2, this.canvas.clientHeight / 2, 1.3); + else if (e.key === '-') this.zoomAt(this.canvas.clientWidth / 2, this.canvas.clientHeight / 2, 1 / 1.3); + else return; + e.preventDefault(); + }; + + private bindInput() { + const c = this.canvas; + c.addEventListener('wheel', (e) => { + e.preventDefault(); + const k = e.ctrlKey ? 0.01 : 0.0015; + this.zoomAt(e.offsetX, e.offsetY, Math.exp(-e.deltaY * k)); + }, { passive: false }); + c.addEventListener('pointerdown', (e) => { + c.setPointerCapture(e.pointerId); + this.pointers.set(e.pointerId, { x: e.offsetX, y: e.offsetY }); + const ps = [...this.pointers.values()]; + const mx = ps.reduce((s, p) => s + p.x, 0) / ps.length, my = ps.reduce((s, p) => s + p.y, 0) / ps.length; + this.gesture = { x: mx, y: my, cam: { ...this.cam }, d: ps.length === 2 ? Math.hypot(ps[0].x - ps[1].x, ps[0].y - ps[1].y) : undefined, moved: false }; + }); + c.addEventListener('pointermove', (e) => { + if (!this.pointers.has(e.pointerId) || !this.gesture) return; + this.pointers.set(e.pointerId, { x: e.offsetX, y: e.offsetY }); + const ps = [...this.pointers.values()]; + const mx = ps.reduce((s, p) => s + p.x, 0) / ps.length, my = ps.reduce((s, p) => s + p.y, 0) / ps.length; + const g = this.gesture; + if (Math.hypot(mx - g.x, my - g.y) > 4) g.moved = true; + if (ps.length === 2 && g.d) { + const d = Math.hypot(ps[0].x - ps[1].x, ps[0].y - ps[1].y); + this.cam.z = Math.max(0.05, Math.min(120, g.cam.z * (d / g.d))); + g.moved = true; + } + const r = this.root.getBoundingClientRect(); + const anchor: Vec = [(g.x - r.width / 2) / g.cam.z + g.cam.x, (g.y - r.height / 2) / g.cam.z + g.cam.y]; + this.cam.x = anchor[0] - (mx - r.width / 2) / this.cam.z; + this.cam.y = anchor[1] - (my - r.height / 2) / this.cam.z; + this.request(); + }); + const end = (e: PointerEvent) => { + const g = this.gesture; + this.pointers.delete(e.pointerId); + if (g && !g.moved && this.pointers.size === 0) { + const b = this.renderer.buildingAt(this.screenToWorld(e.offsetX, e.offsetY)); + this.select(b?.id ?? null); + } + if (this.pointers.size) { + const ps = [...this.pointers.values()]; + this.gesture = { x: ps[0].x, y: ps[0].y, cam: { ...this.cam }, moved: true }; + } else this.gesture = null; + }; + c.addEventListener('pointerup', end); + c.addEventListener('pointercancel', end); + c.addEventListener('dblclick', (e) => this.zoomAt(e.offsetX, e.offsetY, 2)); + window.addEventListener('keydown', this.onKey); + } + + select(id: string | null) { + this.opts.selected = id; + this.updateInfo(); + this.request(); + } + + private updateInfo() { + const id = this.opts.selected; + const b = id ? this.world.buildings.find((x) => x.id === id) : null; + if (!b) { + this.info.hidden = true; + return; + } + this.info.hidden = false; + const cur = this.opts.overrides.has(b.id) ? this.opts.overrides.get(b.id)! : this.opts.floor; + const lvl = cur !== null && cur < b.levels ? cur : null; + const f = lvl !== null ? b.floors[lvl] : null; + const src = b.levelsSource === 'osm' ? 'из OSM' : b.levelsSource === 'height' ? 'по высоте' : 'оценка'; + const counts = new Map(); + if (f) for (const r of f.rooms) if (ROOM_NAME[r.kind]) counts.set(ROOM_NAME[r.kind], (counts.get(ROOM_NAME[r.kind]) ?? 0) + 1); + const roomList = [...counts.entries()].map(([k, n]) => (n > 1 ? `${k} ×${n}` : k)).join(', '); + const homes = b.units.filter((u) => u.kind === 'home').length; + const osm = b.osmId ? `OSM` : ''; + this.info.innerHTML = ` + +
${esc(b.name || KIND_NAME[b.kind])}
+
${b.name ? esc(KIND_NAME[b.kind]) + ' · ' : ''}${b.use ? esc(b.use) + ' · ' : ''}${b.address ? esc(b.address) : ''}
+
Этажей${b.levels} ${src}
+
Площадь застройки${Math.round(b.area)} м²
+ ${homes ? `
Жилых помещений${homes}
` : ''} + ${b.beds ? `
Спальных мест${b.beds}
` : ''} +
${['⌂', ...Array.from({ length: Math.min(b.levels, 40) }, (_, i) => String(i + 1))].map((t, i) => ``).join('')}
+ ${f ? `
${f.rooms.length} помещений: ${esc(roomList)}
` : ''} + `; + this.info.querySelector('.close')!.addEventListener('click', () => this.select(null)); + this.info.querySelectorAll('[data-l]').forEach((btn) => + btn.addEventListener('click', () => { + const l = +btn.dataset.l!; + this.opts.overrides.set(b.id, l < 0 ? null : l); + this.updateInfo(); + this.request(); + })); + this.info.querySelector('[data-a=zoom]')!.addEventListener('click', (e) => { + e.preventDefault(); + const c = centroid(b.footprint); + const span = Math.sqrt(b.area) * 1.8 + 10; + const r = this.root.getBoundingClientRect(); + this.lookAt(c, Math.min(60, Math.min(r.width, r.height) / span)); + if (this.opts.overrides.get(b.id) == null && this.opts.floor === null) this.opts.overrides.set(b.id, 0); + this.updateInfo(); + }); + } + + selectBuilding(b: Building) { + this.select(b.id); + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..817e85c --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ESNext", + "moduleResolution": "Bundler", + "lib": ["ES2022", "DOM", "DOM.Iterable", "WebWorker"], + "strict": true, + "noEmit": true, + "skipLibCheck": true, + "types": [] + }, + "include": ["src"] +}