commit 2d4bad0dc7c5a94fa202f406cc053e58ea2f3e1f
Author: mrleo1nid <43583385+mrleo1nid@users.noreply.github.com>
Date: Fri Oct 30 18:10:47 2026 +0300
Initial commit: browser OSM city generator
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', '');
+
+ 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"]
+}