{"id":354700,"date":"2024-05-20T22:53:35","date_gmt":"2024-05-20T22:53:35","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=354700"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=354700","title":{"rendered":"<span>\u0413\u0434\u0435 \u0431\u044b \u0432\u044b \u0442\u043e\u0447\u043d\u043e \u043d\u0435 \u0436\u0438\u043b\u0438 \u0438 \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c \u0434\u0430\u0436\u0435 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f, \u0435\u0441\u043b\u0438 \u0431\u044b \u0437\u043d\u0430\u043b\u0438 \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u043b\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0444\u0430\u043a\u0442\u043e\u0432<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0413\u0434\u0435 \u043b\u0443\u0447\u0448\u0435 \u0436\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043a\u0430\u043a \u043f\u043e \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043c\u0435\u0441\u0442\u0430, \u0442\u0430\u043a \u0438 \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u043d\u0435\u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u043e\u0433\u043e \u0434\u043b\u044f \u0432\u0430\u0441 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f. \u0418 \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0439\u043e\u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u0435\u0443\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0438\u044d\u043b\u0442\u043e\u0440\u0430\u043c\u0438, \u0442\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0441\u044e\u0440\u043f\u0440\u0438\u0437\u043e\u043c, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0447\u043d\u0435\u0442\u0435 \u0436\u0438\u0442\u044c \u0432 \u043d\u043e\u0432\u043e\u043c \u043c\u0435\u0441\u0442\u0435. \u041d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0430\u0440\u0435\u043d\u0434\u044b \u0436\u0438\u043b\u044c\u044f \u043c\u043d\u0435 \u0447\u0430\u0441\u0442\u043e \u043f\u043e\u043f\u0430\u0434\u0430\u043b\u0438\u0441\u044c \u043a\u0432\u0430\u0440\u0442\u0438\u0440\u044b &#171;\u043f\u043e\u0447\u0442\u0438 \u0443 \u043c\u0435\u0442\u0440\u043e \u0432 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u0440\u0430\u0439\u043e\u043d\u0435&#187; \u0441\u0438\u043c\u043f\u0430\u0442\u0438\u0447\u043d\u044b\u0435 \u043d\u0430 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f\u0445, \u043f\u0440\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u043a\u0440\u0443\u0442\u0438\u043b\u0441\u044f \u043c\u043e\u0442\u0438\u0432 \u043f\u0435\u0441\u043d\u0438 &#171;\u041c\u0443\u0441\u043e\u0440\u043d\u044b\u0439 \u0432\u0435\u0442\u0435\u0440, \u0434\u044b\u043c \u0438\u0437 \u0442\u0440\u0443\u0431\u044b&#187; \u0438\u043d\u043e\u0433\u0434\u0430 \u0438 \u0441 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c\u044e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0431\u044b\u043b\u0438 \u043d\u0435 \u043c\u0435\u043d\u044c\u0448\u0435. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/3f1\/c8e\/830\/3f1c8e830474bc0f23660901341ea307.jpg\" alt=\"\u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u043d\u0442\u0430\u0437\u0438\u0438 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438 \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0430\u0431\u0437\u0430\u0446\u0430...\" title=\"\u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u043d\u0442\u0430\u0437\u0438\u0438 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438 \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0430\u0431\u0437\u0430\u0446\u0430...\" width=\"768\" height=\"768\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3f1\/c8e\/830\/3f1c8e830474bc0f23660901341ea307.jpg\" data-blurred=\"true\"\/><\/p>\n<div><figcaption>\u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u043d\u0442\u0430\u0437\u0438\u0438 <a href=\"https:\/\/stablediffusionweb.com\/#demo\" rel=\"noopener noreferrer nofollow\">\u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438<\/a> \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0430\u0431\u0437\u0430\u0446\u0430&#8230;<\/figcaption><\/div>\n<\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0438\u0437 \u043e\u043a\u043d\u0430 \u0432\u0438\u0434\u043d\u0430 \u0442\u0440\u0443\u0431\u0430 \u0437\u0430\u0432\u043e\u0434\u0430 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u043b\u0438\u0442 \u0434\u044b\u043c &#171;\u043a\u0438\u0441\u043b\u043e\u0442\u043d\u043e\u0433\u043e&#187; \u0446\u0432\u0435\u0442\u0430, \u043f\u043e\u0434 \u0434\u0440\u0443\u0433\u0438\u043c \u043e\u043a\u043d\u043e\u043c \u043e\u0436\u0438\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0430\u0432\u0442\u043e\u0442\u0440\u0430\u0441\u0441\u0430\/\u0436\u0435\u043b\u0435\u0437\u043d\u0430\u044f \u0434\u043e\u0440\u043e\u0433\u0430 \u0438 \u043b\u0435\u0442\u043e\u043c \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043e\u043a\u043d\u043e \u0438\u0437-\u0437\u0430 \u0433\u0430\u0440\u0438 \u0438 \u0433\u0440\u043e\u043c\u043a\u0438\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430, \u0440\u044f\u0434\u043e\u043c \u0441 \u044d\u0442\u0438\u043c \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u043d\u044b\u043c \u043f\u0435\u0439\u0437\u0430\u0436\u0435\u043c \u0432\u0438\u0434\u043d\u044b \u0434\u044b\u043c\u043e\u043a \u043e\u0442 \u043a\u0440\u0435\u043c\u0430\u0442\u043e\u0440\u0438\u044f \u0438 \u043a\u043b\u0430\u0434\u0431\u0438\u0449\u0435. \u041a\u043e\u0433\u0434\u0430 \u0440\u0435\u0448\u0438\u0442\u0435 \u0432\u044b\u0439\u0442\u0438 \u043d\u0430 \u0431\u0430\u043b\u043a\u043e\u043d \u043b\u0435\u0442\u043e\u043c, \u0442\u043e \u043a\u043e\u043c\u0430\u0440\u044b \u043d\u0430\u043f\u043e\u043c\u043d\u044f\u0442 \u0447\u0442\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u0440\u044f\u0434\u043e\u043c \u0435\u0441\u0442\u044c \u0437\u0430\u0431\u043e\u043b\u043e\u0447\u0435\u043d\u043d\u044b\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a. \u041f\u043e\u0437\u0434\u0440\u0430\u0432\u043b\u044f\u044e, \u0432\u044b \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0432 \u0442\u043e\u043c \u0441\u0430\u043c\u043e\u043c \u043c\u0435\u0441\u0442\u0435!!!<\/p>\n<p>\u0427\u0442\u043e \u043e\u0431\u0449\u0435\u0433\u043e \u0432\u043e \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0444\u0430\u043a\u0442\u043e\u0440\u0430\u0445, \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u044f \u0441\u0433\u0443\u0441\u0442\u0438\u043b \u043a\u0440\u0430\u0441\u043a\u0438 StableDiffusion?  \u0412 \u043e\u043f\u0438\u0441\u0430\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u043b\u044e\u0434\u0435\u0439 \u0435\u0441\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u043a\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f, \u043d\u043e \u043f\u0441\u0438\u0445\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u0438\u0441\u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u0430\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f. \u0412 \u0441\u0442\u0443\u0434\u0435\u043d\u0447\u0435\u0441\u0442\u0432\u0435 \u0432 \u0447\u0430\u0441\u0442\u0438 \u0434\u0438\u043f\u043b\u043e\u043c\u0430, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0439 \u0441 \u044d\u043a\u043e\u043b\u043e\u0433\u0438\u0435\u0439,  \u0431\u044b\u043b\u0438 \u0440\u0430\u0441\u0447\u0435\u0442\u044b \u0443\u0440\u043e\u0432\u043d\u044f \u0448\u0443\u043c\u0430 \u0432 \u0436\u0438\u043b\u044b\u0445 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u0445 \u043e\u0442 \u0442\u0440\u0430\u0441\u0441\u044b\/\u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0431\u044b\u043b &#8212; \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e \u043f\u0440\u044f\u043c\u043e\u0439 \u043e\u0442 \u0436\u0438\u043b\u044c\u044f.<\/p>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043e\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u0440\u043e \u044d\u043a\u043e\u043b\u043e\u0433\u0438\u044e \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u043d\u043e\u0432\u043e\u0433\u043e \u0434\u043b\u044f \u043d\u0430\u0441 \u043c\u0435\u0441\u0442\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0435\u0441\u0442\u044c \u0443 \u043f\u0440\u0435\u0444\u0435\u043a\u0442\u0443\u0440\u044b, \u043f\u043e\u043b\u0438\u0446\u0438\u0438 \u0438 \u0431\u0438\u0437\u043d\u0435\u0441\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441 \u0432\u0430\u043c\u0438 \u0435\u0439 \u043d\u0435 \u043f\u043e\u0434\u0435\u043b\u044f\u0442\u0441\u044f. \u0412\u0441\u0435 \u044d\u0442\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442 \u0448\u0430\u043d\u0441 \u043d\u0430 \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440 \u043d\u043e\u0432\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u0436\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430.<\/p>\n<p>\u041d\u043e \u0434\u0430\u0436\u0435 \u0431\u0435\u0437 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u043f\u043e \u043f\u0440\u0430\u0432\u043e\u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u044f\u043c \u0438 \u0431\u0435\u0437 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0437\u0430\u0433\u0440\u044f\u0437\u043d\u0435\u043d\u0438\u0438 \u0432\u043e\u0437\u0434\u0443\u0445\u0430 \u043c\u044b \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0441\u043c\u043e\u0436\u0435\u043c \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u0434\u0438\u0441\u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u044b\u0445 \u043c\u0435\u0441\u0442. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0433\u0435\u043e\u0434\u0430\u043d\u043d\u044b\u0435 OpenStreetMap. <\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043d\u044f\u0442\u044c \u0433\u0434\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u044b \u0431\u044b \u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u0438 \u0436\u0438\u0442\u044c. \u0425\u043e\u0442\u044c \u043e\u043d \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u0444\u0430\u043a\u0442\u043e\u0440\u0430\u0445, \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u043c\u043e\u0435\u043c\u0443 \u043b\u0438\u0447\u043d\u043e\u043c\u0443 \u043c\u043d\u0435\u043d\u0438\u044e \u0438 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 \u0432\u0430\u0448\u0438\u043c\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u044f\u043c\u0438. \u041c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c SQL \u0437\u0430\u043f\u0440\u043e\u0441 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0433\u0435\u043e\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 \u0431\u044b\u043b\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u0432\u0430\u0448 \u043a\u043e\u0448\u043c\u0430\u0440! \u0418 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u0435\u0433\u043e \u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0438\u0446\u044b \u0433\u0435\u043e\u0434\u0430\u043d\u043d\u044b\u043c \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0438\u0445 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435.<\/p>\n<h2>\u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043d\u0430\u0447\u043d\u0435\u043c<\/h2>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u0442\u043e \u0441\u043c\u0435\u043b\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0442\u0435\u043a\u0441\u0442 \u0438 \u043f\u0440\u043e\u043b\u0438\u0441\u0442\u044b\u0432\u0430\u0439\u0442\u0435 \u0434\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 &#171;\u0410\u043d\u0430\u043b\u0438\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u041c\u043e\u0441\u043a\u0432\u044b&#187;.<\/p>\n<h2>\u041f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430<\/h2>\n<p>\u042d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0447\u0442\u043e \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435 \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 PostgreSQL \u0438 Linux. \u042f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0448\u0430\u0433\u0438 \u043d\u0430 Ubuntu, \u0433\u0434\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b git, wget, docker.io<\/p>\n<p>\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c OSM \u0433\u0435\u043e\u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0430\u0439\u0442\u0430 geofabric \u0438 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u041c\u043e\u0441\u043a\u0432\u044b \u043f\u043e \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u0443 Russia_Moscow.poly. <\/p>\n<pre><code class=\"bash\">mkdir moscow &amp;&amp; cd moscow  wget https:\/\/download.geofabrik.de\/russia\/central-fed-district-latest.osm.pbf wget https:\/\/raw.githubusercontent.com\/mapsme\/omim\/master\/data\/borders\/Russia_Moscow.poly docker run -rm -it -w \/wkd -v $(pwd):\/wkd mschilde\/osmium-tool osmium extract --polygon Russia_Moscow.poly central-fed-district-latest.osm.pbf -o moscow.osm.pbf<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0413\u043e\u0442\u043e\u0432\u044b\u0445 \u0432\u044b\u0433\u0440\u0443\u0437\u043e\u043a, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0435 \u043d\u0430\u0448\u0435\u043b<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0414\u0430\u043d\u043d\u044b\u0435 \u0441 \u0441\u0430\u0439\u0442\u0430 <a href=\"https:\/\/download.openstreetmap.fr\/extracts\/russia\/central_federal_district\/\" rel=\"noopener noreferrer nofollow\">https:\/\/download.openstreetmap.fr\/extracts\/russia\/central_federal_district\/<\/a> \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0438\u0446\u044b \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043d\u0435 \u043f\u043e\u043b\u043d\u044b\u0435, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u043e \u043a \u043e\u0448\u0438\u0431\u043a\u0435 <code>location for one or more nodes not found in node location index<\/code>. <\/p>\n<\/div>\n<\/details>\n<p>\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0443\u0442\u0438\u043b\u0438\u0442\u0443 <a href=\"http:\/\/github.com\/igor-suhorukov\/openstreetmap_h3\" rel=\"noopener noreferrer nofollow\">openstreetmap_h3<\/a> \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 OpenStreetMap \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u0432 PostGIS. \u041f\u0440\u043e \u043d\u0435\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0432 <a href=\"https:\/\/habr.com\/ru\/articles\/714326\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0435\u0440\u0438\u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0439<\/a> \u043d\u0430 \u0425\u0430\u0431\u0440\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u0412\u0441\u0435 \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\u043c\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c Docker in Docker \u0434\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u044f \u0441 openstreetmap_h3 \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435 \u043d\u0430\u0434\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c JDK, maven. \u0412\u0441\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u0441\u0431\u043e\u0440\u043a\u0430 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u044b \u0432 \u0434\u043e\u043a\u0435\u0440 \u043e\u0431\u0440\u0430\u0437. \u041d\u0435 \u0441\u0430\u043c\u043e\u0435 \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u043e \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 osmium \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u043a\u0430\u043a \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0432\u0438\u0434\u0435 Docker \u043e\u0431\u0440\u0430\u0437\u0430, \u0430 \u043d\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u0442\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u043a\u0430\u043a \u0435\u0441\u0442\u044c.<\/p>\n<\/div>\n<\/details>\n<pre><code class=\"bash\">git clone https:\/\/github.com\/igor-suhorukov\/openstreetmap_h3.git cd openstreetmap_h3 &amp;&amp; docker build -t openstreetmap_h3 . cd postgis_docker-master &amp;&amp; docker build -t postgres15_postgis .<\/code><\/pre>\n<p>\u0417\u0430\u0445\u043e\u0434\u0438\u043c \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e, \u0433\u0434\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0438 <code>moscow.osm.pbf<\/code> \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c:<\/p>\n<pre><code class=\"bash\">cd moscow docker run -it --rm -w $(pwd) -v $(pwd):\/$(pwd) -v \/var\/run\/docker.sock:\/var\/run\/docker.sock openstreetmap_h3:latest -source_pbf $(pwd)\/moscow.osm.pbf -result_in_tsv true<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0414\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 moscow.osm.pbf \u0431\u0443\u0434\u0443\u0442 \u0433\u043e\u0442\u043e\u0432\u044b \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 PostGIS \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 &#171;moscow_loc_ways&#187; <\/summary>\n<div class=\"spoiler__content\">\n<pre><code>docker run -it --rm -w $(pwd) -v $(pwd):\/$(pwd) -v \/var\/run\/docker.sock:\/var\/run\/docker.sock openstreetmap_h3:latest -source_pbf $(pwd)\/moscow.osm.pbf -result_in_tsv true  [ 0:00] Started osmium add-locations-to-ways [ 0:00]   osmium version 1.14.0 [ 0:00]   libosmium version 2.18.0 [ 0:00] Command line options and default settings: [ 0:00]   input options: [ 0:00]     file names:  [ 0:00]       moscow.osm.pbf [ 0:00]     file format:  [ 0:00]   output options: [ 0:00]     file name: moscow_loc_ways.pbf [ 0:00]     file format: pbf,pbf_compression=none [ 0:00]     generator: osmium\/1.14.0 [ 0:00]     overwrite: no [ 0:00]     fsync: no [ 0:00]   other options: [ 0:00]     index type (for positive ids): sparse_mem_array [ 0:00]     index type (for negative ids): flex_mem [ 0:00]     keep untagged nodes: no [ 0:00]     keep nodes that are relation members: yes [ 0:00]  [ 0:00] Getting all nodes referenced from relations... [ 0:00] Found 40919 nodes referenced from relations. [ 0:00] Copying input file 'moscow.osm.pbf'... [ 0:02] About 78 MBytes used for node location index (in main memory or on disk). [ 0:02] Peak memory used: 809 MBytes [ 0:02] Done.  0 188  time 14295 diff between total and processing 12765 total thread time 57059 total processing time 44294 total save time 4074 total waiting for save time 4120 thread max time 1024 processing max time 767 nodes 419908 ways 991744 relations 85883 relation members 875942 multipolygon count 54309 0[-32768,4520)1004461137288 1[4520,32695)15101138028175 2 10 80.5279955  [ 0:00] Started osmium export [ 0:00]   osmium version 1.14.0 [ 0:00]   libosmium version 2.18.0 [ 0:00] Command line options and default settings: [ 0:00]   input options: [ 0:00]     file name: moscow.osm.pbf [ 0:00]     file format:  [ 0:00]   output options: [ 0:00]     file name: moscow_loc_ways\/multipolygon\/source.tsv [ 0:00]     file format: pg [ 0:00]     overwrite: no [ 0:00]     fsync: yes [ 0:00]   attributes: [ 0:00]     type:      @type [ 0:00]     id:        @id [ 0:00]     version:   (omitted) [ 0:00]     changeset: (omitted) [ 0:00]     timestamp: (omitted) [ 0:00]     uid:       (omitted) [ 0:00]     user:      (omitted) [ 0:00]     way_nodes: (omitted) [ 0:00]   output format options: [ 0:00]     tags_type = hstore [ 0:00]   linear tags: none [ 0:00]   area tags:   one of the following: [ 0:00]     @type=relation [ 0:00]   other options: [ 0:00]     index type: sparse_mem_array [ 0:00]     add unique IDs: no [ 0:00]     keep untagged features: no [ 0:00]  [ 0:00] Create table with something like this: [ 0:00] CREATE EXTENSION IF NOT EXISTS hstore; [ 0:00] CREATE TABLE osmdata ( [ 0:00]     geom      GEOMETRY, -- or GEOGRAPHY [ 0:00]     osm_type  TEXT, [ 0:00]     osm_id    BIGINT, [ 0:00]     tags      hstore [ 0:00] ); [ 0:00] Then load data with something like this: [ 0:00] \\copy osmdata FROM 'moscow_loc_ways\/multipolygon\/source.tsv' [ 0:00]  [ 0:00] First pass (of two) through input file (reading relations)... [ 0:00] First pass done. [ 0:00] Second pass (of two) through input file... Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry [ 0:03] About 78 MBytes used for node location index (in main memory or on disk). [ 0:03] Second pass done. [ 0:03] Wrote 55341 features. [ 0:03] Encountered 39 errors. [ 0:03] Peak memory used: 828 MBytes [ 0:03] Done.  cat \/home\/user\/dev\/map\/moscow\/moscow_loc_ways\/multipolygon\/source.tsv | grep $'\\trelation\\t' | split -l 13578 - \/home\/user\/dev\/map\/moscow\/moscow_loc_ways\/multipolygon\/multipolygon_<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9b1\/03b\/a6b\/9b103ba6bf7cab0a213c868cbd400234.png\" width=\"1744\" height=\"598\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9b1\/03b\/a6b\/9b103ba6bf7cab0a213c868cbd400234.png\"\/><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 PostGIS. \u042f \u044d\u0442\u043e c\u0434\u0435\u043b\u0430\u044e \u0432 \u0442\u043e\u0439 \u0436\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Docker, \u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u0430\u0448\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b:<\/p>\n<pre><code class=\"bash\">docker run --name postgis15-moscow --memory=12g --memory-swap=12g --memory-swappiness 0 --shm-size=1g -v $(pwd)\/database:\/var\/lib\/postgresql\/data -v $(pwd)\/moscow_loc_ways:\/input -e POSTGRES_PASSWORD=osmworld -d -p 5432:5432 postgres15_postgis:latest -c checkpoint_timeout='15 min' -c checkpoint_completion_target=0.9 -c shared_buffers='4096 MB' -c wal_buffers=-1 -c bgwriter_delay=200ms -c bgwriter_lru_maxpages=100 -c bgwriter_lru_multiplier=2.0 -c bgwriter_flush_after=0 -c max_wal_size='32768 MB' -c min_wal_size='16384 MB'<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043b\u044e\u0431\u044b\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c, \u043f\u0430\u0440\u043e\u043b\u044c \u0443 \u0432\u0430\u0441 \u0443\u043a\u0430\u0437\u0430\u043d \u0432 POSTGRES_PASSWORD \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043f\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">PSQL_PAGER=\"pspg\" psql -h 127.0.0.1 -p 5432 -U postgres -d osmworld Password for user postgres:  ? ? postgres_dba 6.0 installed. Use \":dba\" to see menu Timing is on. psql (14.8 (Ubuntu 14.8-1.pgdg20.04+1), server 15.2 (Debian 15.2-1.pgdg110+1)) WARNING: psql major version 14, server major version 15.          Some psql features might not work. Type \"help\" for help.  osmworld=# :dba Time: 1,892 ms Time: 0,458 ms Time: 0,413 ms Time: 0,538 ms Menu:    0 \u2013 Node &amp; current DB information: master\/replica, lag, DB size, tmp files, etc.    1 \u2013 Databases: size, stats    2 \u2013 Tables: table\/index\/TOAST size, number of rows    3 \u2013 Load profile   a1 \u2013 Current activity: count of current connections grouped by database, user name, state   b1 \u2013 Table bloat (estimated)   b2 \u2013 B-tree index bloat (estimated)   b3 \u2013 Table bloat (requires pgstattuple; expensive)   b4 \u2013 B-tree indexes bloat (requires pgstattuple; expensive)   b5 \u2013 Tables and columns without stats (so bloat cannot be estimated)   e1 \u2013 Extensions installed in current DB   i1 \u2013 Unused and rarely used indexes   i2 \u2013 Redundant indexes   i3 \u2013 FKs with Missing\/Bad Indexes   i4 \u2013 Invalid indexes   i5 \u2013 Cleanup unused and redundant indexes \u2013 DO &amp; UNDO migration DDL   l1 \u2013 Lock trees (leightweight)   l2 \u2013 Lock trees, detailed (based on pg_blocking_pids())   p1 \u2013 [EXP] Alignment padding: how many bytes can be saved if columns are reordered?   s1 \u2013 Slowest queries, by total time (requires pg_stat_statements)   s2 \u2013 Slowest queries report (requires pg_stat_statements)   t1 \u2013 Postgres parameters tuning   v1 \u2013 Vacuum: current activity   v2 \u2013 Vacuum: VACUUM progress and autovacuum queue    q \u2013 Quit  Type your choice and press &lt;Enter>: 2 Time: 0,990 ms          Table          | Rows  |     Total Size     |     Table Size     |  Index(es) Size  |     TOAST Size      ------------------------+-------+--------------------+--------------------+------------------+--------------------  *** TOTAL ***          | ~2M   | 722 MB (100.00%)   | 682 MB (100.00%)   | 35 MB (100.00%)  | 4712 kB (100.00%)                         |       |                    |                    |                  |   ways_001               | ~932k | 461 MB (63.93%)    | 460 MB (67.44%)    | 0 bytes (0.00%)  | 1280 kB (27.35%)  relation_members       | ~876k | 74 MB (10.30%)     | 48 MB (7.03%)      | 26 MB (75.64%)   | 8192 bytes (0.17%)  nodes_001              | ~412k | 72 MB (9.92%)      | 72 MB (10.49%)     | 0 bytes (0.00%)  | 32 kB (0.68%)  multipolygon_001       | ~53k  | 43 MB (6.01%)      | 36 MB (5.29%)      | 4992 kB (13.98%) | 2448 kB (52.31%)  ways_000               | ~59k  | 30 MB (4.20%)      | 30 MB (4.41%)      | 0 bytes (0.00%)  | 248 kB (5.30%)  h3_3_bounds_complex    | ~41k  | 15 MB (2.13%)      | 12 MB (1.77%)      | 3344 kB (9.37%)  | 8192 bytes (0.17%)  relations              | ~86k  | 15 MB (2.07%)      | 15 MB (2.18%)      | 0 bytes (0.00%)  | 80 kB (1.71%)  spatial_ref_sys        | ~9k   | 7144 kB (0.97%)    | 6928 kB (0.99%)    | 208 kB (0.58%)   | 8192 bytes (0.17%)  nodes_000              | ~8k   | 1152 kB (0.16%)    | 1144 kB (0.16%)    | 0 bytes (0.00%)  | 8192 bytes (0.17%)  multipolygon_000       | ~745  | 960 kB (0.13%)     | 752 kB (0.11%)     | 112 kB (0.31%)   | 96 kB (2.05%)  ways_32767             | ~518  | 816 kB (0.11%)     | 616 kB (0.09%)     | 0 bytes (0.00%)  | 200 kB (4.27%)  multipolygon_32767     | ~50   | 440 kB (0.06%)     | 152 kB (0.02%)     | 40 kB (0.11%)    | 248 kB (5.30%)  osm_file_block_content | ~598  | 80 kB (0.01%)      | 80 kB (0.01%)      | 0 bytes (0.00%)  |   osm_file_block         | ~188  | 48 kB (0.01%)      | 48 kB (0.01%)      | 0 bytes (0.00%)  |   osm_stat_nodes_3_3     | ~6    | 16 kB (0.00%)      | 8192 bytes (0.00%) | 0 bytes (0.00%)  | 8192 bytes (0.17%)  osm_stat_ways_3_3      | ~4    | 16 kB (0.00%)      | 8192 bytes (0.00%) | 0 bytes (0.00%)  | 8192 bytes (0.17%)  osm_file_statistics    | ~1    | 8192 bytes (0.00%) | 8192 bytes (0.00%) | 0 bytes (0.00%)  |  (19 rows)  Time: 12,725 ms Press &lt;Enter> to continue\u2026 <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0434\u043b\u044f \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u0442\u0438\u043f\u0430 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0441\u043a\u043e\u0440\u044f\u0442 \u043d\u0430\u0448\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u044b: <\/p>\n<pre><code class=\"sql\">CREATE INDEX idx_nodes_geography ON nodes USING gist (cast (geom as geography)); CREATE INDEX idx_ways_geography ON ways USING gist (cast (linestring as geography)); CREATE INDEX idx_multipolygon_geography ON multipolygon USING gist (cast (polygon as geography));<\/code><\/pre>\n<p>\u0422\u0438\u043f geography, \u0432\u043c\u0435\u0441\u0442\u043e geometry \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u0438\u0437\u043c\u0435\u0440\u044f\u0442\u044c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u043c \u0432 \u043c\u0435\u0442\u0440\u0430\u0445, \u0430 \u043d\u0435 \u0434\u043e\u043b\u044f\u0445 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u043f\u043b\u0430\u043d \u043d\u0430\u0448\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0440\u0430\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043e\u0442 \u0437\u0434\u0430\u043d\u0438\u0439 \u0434\u043e \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432 \u0434\u0438\u0441\u043a\u043e\u043c\u0444\u043e\u0440\u0442\u0430:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">osmworld=# explain create table distance as                     select h3_lat_lng_to_cell(b.centre,10) h3_10, h3_lat_lng_to_cell(b.centre,8) h3_8,                     round(ST_Distance(b.geom::geography,g.geom::geography))::integer distance,                     b.type from_type, g.type to_type, b.id from_id, g.id to_id                         from geometry_global_view b inner join geometry_global_view g                             on ST_DWithin(b.geom::geography,g.geom::geography,200) and     b.tags->'building' is not null and     b.tags->'building' not in --\u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u043d\u0438\u0436\u0435 \u0437\u0434\u0430\u043d\u0438\u044f\u0445 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043b\u044e\u0434\u0438 \u043d\u0435 \u0436\u0438\u0432\u0443\u0442 \u043d\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u0435         ('service','garages','industrial','retail','office','roof','commercial','garage','kiosk','warehouse','church',         'parking','public','shed','hangar','train_station','guardhouse','transportation','terrace','greenhouse','bridge',         'government','chapel','gazebo','civic','ruins','supermarket','sports_centre','semidetached_house','toilets',         'sports_hall','clinic','farm_auxiliary','stable','grandstand','bunker','gatehouse','store','temple','ventilation_kiosk',         'carport','cowshed','barracks','shop','cabin','barn','cathedral','wall','townhouse','manufacture','shelter',         'fire_station','stadium','stands','sport_hall','theatre','storage_tank','checkpoint','houseboat','abandoned','dovecote',         'mosque','museum','military','container','observatory','lift','tent','factory','sport','mall','riding_hall','depot',         'prison','gate','triumphal_arch','water_works','public_building','pavilion','bank','institute','works','collapsed',         'car_repair','crossing_box','fuel','tree_house','presbytery','yesq','farm','outbuilding','police','porch','sauna',         'monastery','cinema','tower','boathouse','library','transformer_tower','heat_exchange_station')     and (     g.tags->'amenity'='waste_transfer_station' or --_\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0430_     g.tags->'landuse'='landfill' or --_\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0430_     g.tags->'man_made'='spoil_heap' or --_\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0430_     g.tags->'man_made'='wastewater_plant' or --_\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0430_     g.tags->'amenity'='crematorium' or --_\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0430_     (g.tags->'natural'='wetland' and g.tags->'wetland' is distinct from 'mangrove') or --_\u043a\u043e\u043c\u0430\u0440\u044b_     g.tags->'power'='substation' or --_\u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c_     g.tags->'power'='generator' or --_\u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c_     g.tags->'power'='plant' or --_\u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c_     g.tags->'building'='industrial' or --_\u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c_     g.tags->'landuse'='industrial' or --_\u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c_     g.tags->'landuse'='quarry' or --\u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c_     g.tags->'aeroway'='runway' or --_\u0448\u0443\u043c\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e_     g.tags->'railway'='rail' or --_\u0448\u0443\u043c\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e_     g.tags->'highway'='primary' or --_\u0448\u0443\u043c\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e_     g.tags->'highway'='trunk' or --_\u0448\u0443\u043c\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e_     g.tags->'leisure'='stadium' or --_\u0448\u0443\u043c\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e_     g.tags->'landuse'='construction' --_\u0448\u0443\u043c\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e_ ); Time: 41,440 ms                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       QUERY PLAN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              QUERY PLAN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------  Gather  (cost=1000.53..698216225.15 rows=91264670 width=44)    Workers Planned: 4    ->  Nested Loop  (cost=0.53..689088758.15 rows=22816168 width=44)          ->  Parallel Append  (cost=0.00..124924.54 rows=31608 width=162)                ->  Parallel Seq Scan on ways_001 ways_4  (cost=0.00..83311.46 rows=20092 width=178)                      Filter: (((tags -> 'amenity'::text) = 'waste_transfer_station'::text) OR ((tags -> 'landuse'::text) = 'landfill'::text) OR ((tags -> 'man_made'::text) = 'spoil_heap'::text) OR ((tags -> 'man_made'::text) = 'wastewater_plant'::text) OR ((tags -> 'amenity'::text) = 'crematorium'::text) OR (((tags -> 'natural'::text) = 'wetland'::text) AND ((tags -> 'wetland'::text) IS DISTINCT FROM 'mangrove'::text)) OR ((tags -> 'power'::text) = 'substation'::text) OR ((tags -> 'power'::text) = 'generator'::text) OR ((tags -> 'power'::text) = 'plant'::text) OR ((tags -> 'building'::text) = 'industrial'::text) OR ((tags -> 'landuse'::text) = 'industrial'::text) OR ((tags -> 'landuse'::text) = 'quarry'::text) OR ((tags -> 'aeroway'::text) = 'runway'::text) OR ((tags -> 'railway'::text) = 'rail'::text) OR ((tags -> 'highway'::text) = 'primary'::text) OR ((tags -> 'highway'::text) = 'trunk'::text) OR ((tags -> 'leisure'::text) = 'stadium'::text) OR ((tags -> 'landuse'::text) = 'construction'::text))                ->  Parallel Seq Scan on nodes_001 nodes_3  (cost=0.00..27175.52 rows=14806 width=76)                      Filter: (((tags -> 'amenity'::text) = 'waste_transfer_station'::text) OR ((tags -> 'landuse'::text) = 'landfill'::text) OR ((tags -> 'man_made'::text) = 'spoil_heap'::text) OR ((tags -> 'man_made'::text) = 'wastewater_plant'::text) OR ((tags -> 'amenity'::text) = 'crematorium'::text) OR (((tags -> 'natural'::text) = 'wetland'::text) AND ((tags -> 'wetland'::text) IS DISTINCT FROM 'mangrove'::text)) OR ((tags -> 'power'::text) = 'substation'::text) OR ((tags -> 'power'::text) = 'generator'::text) OR ((tags -> 'power'::text) = 'plant'::text) OR ((tags -> 'building'::text) = 'industrial'::text) OR ((tags -> 'landuse'::text) = 'industrial'::text) OR ((tags -> 'landuse'::text) = 'quarry'::text) OR ((tags -> 'aeroway'::text) = 'runway'::text) OR ((tags -> 'railway'::text) = 'rail'::text) OR ((tags -> 'highway'::text) = 'primary'::text) OR ((tags -> 'highway'::text) = 'trunk'::text) OR ((tags -> 'leisure'::text) = 'stadium'::text) OR ((tags -> 'landuse'::text) = 'construction'::text))                ->  Parallel Seq Scan on multipolygon_001 multipolygon_4  (cost=0.00..6941.94 rows=1913 width=467)                      Filter: (((tags -> 'amenity'::text) = 'waste_transfer_station'::text) OR ((tags -> 'landuse'::text) = 'landfill'::text) OR ((tags -> 'man_made'::text) = 'spoil_heap'::text) OR ((tags -> 'man_made'::text) = 'wastewater_plant'::text) OR ((tags -> 'amenity'::text) = 'crematorium'::text) OR (((tags -> 'natural'::text) = 'wetland'::text) AND ((tags -> 'wetland'::text) IS DISTINCT FROM 'mangrove'::text)) OR ((tags -> 'power'::text) = 'substation'::text) OR ((tags -> 'power'::text) = 'generator'::text) OR ((tags -> 'power'::text) = 'plant'::text) OR ((tags -> 'building'::text) = 'industrial'::text) OR ((tags -> 'landuse'::text) = 'industrial'::text) OR ((tags -> 'landuse'::text) = 'quarry'::text) OR ((tags -> 'aeroway'::text) = 'runway'::text) OR ((tags -> 'railway'::text) = 'rail'::text) OR ((tags -> 'highway'::text) = 'primary'::text) OR ((tags -> 'highway'::text) = 'trunk'::text) OR ((tags -> 'leisure'::text) = 'stadium'::text) OR ((tags -> 'landuse'::text) = 'construction'::text))                ->  Parallel Seq Scan on ways_000 ways_3  (cost=0.00..6444.37 rows=2136 width=198)                      Filter: (((tags -> 'amenity'::text) = 'waste_transfer_station'::text) OR ((tags -> 'landuse'::text) = 'landfill'::text) OR ((tags -> 'man_made'::text) = 'spoil_heap'::text) OR ((tags -> 'man_made'::text) = 'wastewater_plant'::text) OR ((tags -> 'amenity'::text) = 'crematorium'::text) OR (((tags -> 'natural'::text) = 'wetland'::text) AND ((tags -> 'wetland'::text) IS DISTINCT FROM 'mangrove'::text)) OR ((tags -> 'power'::text) = 'substation'::text) OR ((tags -> 'power'::text) = 'generator'::text) OR ((tags -> 'power'::text) = 'plant'::text) OR ((tags -> 'building'::text) = 'industrial'::text) OR ((tags -> 'landuse'::text) = 'industrial'::text) OR ((tags -> 'landuse'::text) = 'quarry'::text) OR ((tags -> 'aeroway'::text) = 'runway'::text) OR ((tags -> 'railway'::text) = 'rail'::text) OR ((tags -> 'highway'::text) = 'primary'::text) OR ((tags -> 'highway'::text) = 'trunk'::text) OR ((tags -> 'leisure'::text) = 'stadium'::text) OR ((tags -> 'landuse'::text) = 'construction'::text))                ->  Parallel Seq Scan on nodes_000 nodes_2  (cost=0.00..628.11 rows=402 width=76)                      Filter: (((tags -> 'amenity'::text) = 'waste_transfer_station'::text) OR ((tags -> 'landuse'::text) = 'landfill'::text) OR ((tags -> 'man_made'::text) = 'spoil_heap'::text) OR ((tags -> 'man_made'::text) = 'wastewater_plant'::text) OR ((tags -> 'amenity'::text) = 'crematorium'::text) OR (((tags -> 'natural'::text) = 'wetland'::text) AND ((tags -> 'wetland'::text) IS DISTINCT FROM 'mangrove'::text)) OR ((tags -> 'power'::text) = 'substation'::text) OR ((tags -> 'power'::text) = 'generator'::text) OR ((tags -> 'power'::text) = 'plant'::text) OR ((tags -> 'building'::text) = 'industrial'::text) OR ((tags -> 'landuse'::text) = 'industrial'::text) OR ((tags -> 'landuse'::text) = 'quarry'::text) OR ((tags -> 'aeroway'::text) = 'runway'::text) OR ((tags -> 'railway'::text) = 'rail'::text) OR ((tags -> 'highway'::text) = 'primary'::text) OR ((tags -> 'highway'::text) = 'trunk'::text) OR ((tags -> 'leisure'::text) = 'stadium'::text) OR ((tags -> 'landuse'::text) = 'construction'::text))                ->  Parallel Seq Scan on multipolygon_000 multipolygon_3  (cost=0.00..137.01 rows=38 width=807)                      Filter: (((tags -> 'amenity'::text) = 'waste_transfer_station'::text) OR ((tags -> 'landuse'::text) = 'landfill'::text) OR ((tags -> 'man_made'::text) = 'spoil_heap'::text) OR ((tags -> 'man_made'::text) = 'wastewater_plant'::text) OR ((tags -> 'amenity'::text) = 'crematorium'::text) OR (((tags -> 'natural'::text) = 'wetland'::text) AND ((tags -> 'wetland'::text) IS DISTINCT FROM 'mangrove'::text)) OR ((tags -> 'power'::text) = 'substation'::text) OR ((tags -> 'power'::text) = 'generator'::text) OR ((tags -> 'power'::text) = 'plant'::text) OR ((tags -> 'building'::text) = 'industrial'::text) OR ((tags -> 'landuse'::text) = 'industrial'::text) OR ((tags -> 'landuse'::text) = 'quarry'::text) OR ((tags -> 'aeroway'::text) = 'runway'::text) OR ((tags -> 'railway'::text) = 'rail'::text) OR ((tags -> 'highway'::text) = 'primary'::text) OR ((tags -> 'highway'::text) = 'trunk'::text) OR ((tags -> 'leisure'::text) = 'stadium'::text) OR ((tags -> 'landuse'::text) = 'construction'::text))                ->  Parallel Seq Scan on ways_32767 ways_5  (cost=0.00..108.99 rows=26 width=843)                      Filter: (((tags -> 'amenity'::text) = 'waste_transfer_station'::text) OR ((tags -> 'landuse'::text) = 'landfill'::text) OR ((tags -> 'man_made'::text) = 'spoil_heap'::text) OR ((tags -> 'man_made'::text) = 'wastewater_plant'::text) OR ((tags -> 'amenity'::text) = 'crematorium'::text) OR (((tags -> 'natural'::text) = 'wetland'::text) AND ((tags -> 'wetland'::text) IS DISTINCT FROM 'mangrove'::text)) OR ((tags -> 'power'::text) = 'substation'::text) OR ((tags -> 'power'::text) = 'generator'::text) OR ((tags -> 'power'::text) = 'plant'::text) OR ((tags -> 'building'::text) = 'industrial'::text) OR ((tags -> 'landuse'::text) = 'industrial'::text) OR ((tags -> 'landuse'::text) = 'quarry'::text) OR ((tags -> 'aeroway'::text) = 'runway'::text) OR ((tags -> 'railway'::text) = 'rail'::text) OR ((tags -> 'highway'::text) = 'primary'::text) OR ((tags -> 'highway'::text) = 'trunk'::text) OR ((tags -> 'leisure'::text) = 'stadium'::text) OR ((tags -> 'landuse'::text) = 'construction'::text))                ->  Parallel Seq Scan on multipolygon_32767 multipolygon_5  (cost=0.00..19.09 rows=9 width=5966)                      Filter: (((tags -> 'amenity'::text) = 'waste_transfer_station'::text) OR ((tags -> 'landuse'::text) = 'landfill'::text) OR ((tags -> 'man_made'::text) = 'spoil_heap'::text) OR ((tags -> 'man_made'::text) = 'wastewater_plant'::text) OR ((tags -> 'amenity'::text) = 'crematorium'::text) OR (((tags -> 'natural'::text) = 'wetland'::text) AND ((tags -> 'wetland'::text) IS DISTINCT FROM 'mangrove'::text)) OR ((tags -> 'power'::text) = 'substation'::text) OR ((tags -> 'power'::text) = 'generator'::text) OR ((tags -> 'power'::text) = 'plant'::text) OR ((tags -> 'building'::text) = 'industrial'::text) OR ((tags -> 'landuse'::text) = 'industrial'::text) OR ((tags -> 'landuse'::text) = 'quarry'::text) OR ((tags -> 'aeroway'::text) = 'runway'::text) OR ((tags -> 'railway'::text) = 'rail'::text) OR ((tags -> 'highway'::text) = 'primary'::text) OR ((tags -> 'highway'::text) = 'trunk'::text) OR ((tags -> 'leisure'::text) = 'stadium'::text) OR ((tags -> 'landuse'::text) = 'construction'::text))          ->  Append  (cost=0.53..3735.74 rows=76 width=129)                ->  Index Scan using nodes_000_geom_idx on nodes_000 nodes  (cost=0.53..25.56 rows=1 width=44)                      Index Cond: ((geom)::geography &amp;&amp; _st_expand((ways_4.linestring)::geography, '200'::double precision))                      Filter: (((tags -> 'building'::text) IS NOT NULL) AND ((tags -> 'building'::text) &lt;> ALL ('{service,garages,industrial,retail,office,roof,commercial,garage,kiosk,warehouse,church,parking,public,shed,hangar,train_station,guardhouse,transportation,terrace,greenhouse,bridge,government,chapel,gazebo,civic,ruins,supermarket,sports_centre,semidetached_house,toilets,sports_hall,clinic,farm_auxiliary,stable,grandstand,bunker,gatehouse,store,temple,ventilation_kiosk,carport,cowshed,barracks,shop,cabin,barn,cathedral,wall,townhouse,manufacture,shelter,fire_station,stadium,stands,sport_hall,theatre,storage_tank,checkpoint,houseboat,abandoned,dovecote,mosque,museum,military,container,observatory,lift,tent,factory,sport,mall,riding_hall,depot,prison,gate,triumphal_arch,water_works,public_building,pavilion,bank,institute,works,collapsed,car_repair,crossing_box,fuel,tree_house,presbytery,yesq,farm,outbuilding,police,porch,sauna,monastery,cinema,tower,boathouse,library,transformer_tower,heat_exchange_station}'::text[])) AND st_dwithin((geom)::geography, (ways_4.linestring)::geography, '200'::double precision, true))                ->  Index Scan using nodes_001_geom_idx on nodes_001 nodes_1  (cost=0.66..1027.11 rows=20 width=44)                      Index Cond: ((geom)::geography &amp;&amp; _st_expand((ways_4.linestring)::geography, '200'::double precision))                      Filter: (((tags -> 'building'::text) IS NOT NULL) AND ((tags -> 'building'::text) &lt;> ALL ('{service,garages,industrial,retail,office,roof,commercial,garage,kiosk,warehouse,church,parking,public,shed,hangar,train_station,guardhouse,transportation,terrace,greenhouse,bridge,government,chapel,gazebo,civic,ruins,supermarket,sports_centre,semidetached_house,toilets,sports_hall,clinic,farm_auxiliary,stable,grandstand,bunker,gatehouse,store,temple,ventilation_kiosk,carport,cowshed,barracks,shop,cabin,barn,cathedral,wall,townhouse,manufacture,shelter,fire_station,stadium,stands,sport_hall,theatre,storage_tank,checkpoint,houseboat,abandoned,dovecote,mosque,museum,military,container,observatory,lift,tent,factory,sport,mall,riding_hall,depot,prison,gate,triumphal_arch,water_works,public_building,pavilion,bank,institute,works,collapsed,car_repair,crossing_box,fuel,tree_house,presbytery,yesq,farm,outbuilding,police,porch,sauna,monastery,cinema,tower,boathouse,library,transformer_tower,heat_exchange_station}'::text[])) AND st_dwithin((geom)::geography, (ways_4.linestring)::geography, '200'::double precision, true))                ->  Index Scan using ways_000_linestring_idx on ways_000 ways  (cost=0.66..150.89 rows=3 width=166)                      Index Cond: ((linestring)::geography &amp;&amp; _st_expand((ways_4.linestring)::geography, '200'::double precision))                      Filter: (((tags -> 'building'::text) IS NOT NULL) AND ((tags -> 'building'::text) &lt;> ALL ('{service,garages,industrial,retail,office,roof,commercial,garage,kiosk,warehouse,church,parking,public,shed,hangar,train_station,guardhouse,transportation,terrace,greenhouse,bridge,government,chapel,gazebo,civic,ruins,supermarket,sports_centre,semidetached_house,toilets,sports_hall,clinic,farm_auxiliary,stable,grandstand,bunker,gatehouse,store,temple,ventilation_kiosk,carport,cowshed,barracks,shop,cabin,barn,cathedral,wall,townhouse,manufacture,shelter,fire_station,stadium,stands,sport_hall,theatre,storage_tank,checkpoint,houseboat,abandoned,dovecote,mosque,museum,military,container,observatory,lift,tent,factory,sport,mall,riding_hall,depot,prison,gate,triumphal_arch,water_works,public_building,pavilion,bank,institute,works,collapsed,car_repair,crossing_box,fuel,tree_house,presbytery,yesq,farm,outbuilding,police,porch,sauna,monastery,cinema,tower,boathouse,library,transformer_tower,heat_exchange_station}'::text[])) AND st_dwithin((linestring)::geography, (ways_4.linestring)::geography, '200'::double precision, true))                ->  Index Scan using ways_001_linestring_idx on ways_001 ways_1  (cost=0.67..2329.28 rows=46 width=146)                      Index Cond: ((linestring)::geography &amp;&amp; _st_expand((ways_4.linestring)::geography, '200'::double precision))                      Filter: (((tags -> 'building'::text) IS NOT NULL) AND ((tags -> 'building'::text) &lt;> ALL ('{service,garages,industrial,retail,office,roof,commercial,garage,kiosk,warehouse,church,parking,public,shed,hangar,train_station,guardhouse,transportation,terrace,greenhouse,bridge,government,chapel,gazebo,civic,ruins,supermarket,sports_centre,semidetached_house,toilets,sports_hall,clinic,farm_auxiliary,stable,grandstand,bunker,gatehouse,store,temple,ventilation_kiosk,carport,cowshed,barracks,shop,cabin,barn,cathedral,wall,townhouse,manufacture,shelter,fire_station,stadium,stands,sport_hall,theatre,storage_tank,checkpoint,houseboat,abandoned,dovecote,mosque,museum,military,container,observatory,lift,tent,factory,sport,mall,riding_hall,depot,prison,gate,triumphal_arch,water_works,public_building,pavilion,bank,institute,works,collapsed,car_repair,crossing_box,fuel,tree_house,presbytery,yesq,farm,outbuilding,police,porch,sauna,monastery,cinema,tower,boathouse,library,transformer_tower,heat_exchange_station}'::text[])) AND st_dwithin((linestring)::geography, (ways_4.linestring)::geography, '200'::double precision, true))                ->  Index Scan using ways_32767_linestring_idx on ways_32767 ways_2  (cost=0.52..25.56 rows=1 width=811)                      Index Cond: ((linestring)::geography &amp;&amp; _st_expand((ways_4.linestring)::geography, '200'::double precision))                      Filter: (((tags -> 'building'::text) IS NOT NULL) AND ((tags -> 'building'::text) &lt;> ALL ('{service,garages,industrial,retail,office,roof,commercial,garage,kiosk,warehouse,church,parking,public,shed,hangar,train_station,guardhouse,transportation,terrace,greenhouse,bridge,government,chapel,gazebo,civic,ruins,supermarket,sports_centre,semidetached_house,toilets,sports_hall,clinic,farm_auxiliary,stable,grandstand,bunker,gatehouse,store,temple,ventilation_kiosk,carport,cowshed,barracks,shop,cabin,barn,cathedral,wall,townhouse,manufacture,shelter,fire_station,stadium,stands,sport_hall,theatre,storage_tank,checkpoint,houseboat,abandoned,dovecote,mosque,museum,military,container,observatory,lift,tent,factory,sport,mall,riding_hall,depot,prison,gate,triumphal_arch,water_works,public_building,pavilion,bank,institute,works,collapsed,car_repair,crossing_box,fuel,tree_house,presbytery,yesq,farm,outbuilding,police,porch,sauna,monastery,cinema,tower,boathouse,library,transformer_tower,heat_exchange_station}'::text[])) AND st_dwithin((linestring)::geography, (ways_4.linestring)::geography, '200'::double precision, true))                ->  Index Scan using multipolygon_000_polygon_idx1 on multipolygon_000 multipolygon  (cost=0.52..25.56 rows=1 width=775)                      Index Cond: ((polygon)::geography &amp;&amp; _st_expand((ways_4.linestring)::geography, '200'::double precision))                      Filter: (((tags -> 'building'::text) IS NOT NULL) AND ((tags -> 'building'::text) &lt;> ALL ('{service,garages,industrial,retail,office,roof,commercial,garage,kiosk,warehouse,church,parking,public,shed,hangar,train_station,guardhouse,transportation,terrace,greenhouse,bridge,government,chapel,gazebo,civic,ruins,supermarket,sports_centre,semidetached_house,toilets,sports_hall,clinic,farm_auxiliary,stable,grandstand,bunker,gatehouse,store,temple,ventilation_kiosk,carport,cowshed,barracks,shop,cabin,barn,cathedral,wall,townhouse,manufacture,shelter,fire_station,stadium,stands,sport_hall,theatre,storage_tank,checkpoint,houseboat,abandoned,dovecote,mosque,museum,military,container,observatory,lift,tent,factory,sport,mall,riding_hall,depot,prison,gate,triumphal_arch,water_works,public_building,pavilion,bank,institute,works,collapsed,car_repair,crossing_box,fuel,tree_house,presbytery,yesq,farm,outbuilding,police,porch,sauna,monastery,cinema,tower,boathouse,library,transformer_tower,heat_exchange_station}'::text[])) AND st_dwithin((polygon)::geography, (ways_4.linestring)::geography, '200'::double precision, true))                ->  Index Scan using multipolygon_001_polygon_idx1 on multipolygon_001 multipolygon_1  (cost=0.66..125.86 rows=3 width=435)                      Index Cond: ((polygon)::geography &amp;&amp; _st_expand((ways_4.linestring)::geography, '200'::double precision))                      Filter: (((tags -> 'building'::text) IS NOT NULL) AND ((tags -> 'building'::text) &lt;> ALL ('{service,garages,industrial,retail,office,roof,commercial,garage,kiosk,warehouse,church,parking,public,shed,hangar,train_station,guardhouse,transportation,terrace,greenhouse,bridge,government,chapel,gazebo,civic,ruins,supermarket,sports_centre,semidetached_house,toilets,sports_hall,clinic,farm_auxiliary,stable,grandstand,bunker,gatehouse,store,temple,ventilation_kiosk,carport,cowshed,barracks,shop,cabin,barn,cathedral,wall,townhouse,manufacture,shelter,fire_station,stadium,stands,sport_hall,theatre,storage_tank,checkpoint,houseboat,abandoned,dovecote,mosque,museum,military,container,observatory,lift,tent,factory,sport,mall,riding_hall,depot,prison,gate,triumphal_arch,water_works,public_building,pavilion,bank,institute,works,collapsed,car_repair,crossing_box,fuel,tree_house,presbytery,yesq,farm,outbuilding,police,porch,sauna,monastery,cinema,tower,boathouse,library,transformer_tower,heat_exchange_station}'::text[])) AND st_dwithin((polygon)::geography, (ways_4.linestring)::geography, '200'::double precision, true))                ->  Index Scan using multipolygon_32767_polygon_idx1 on multipolygon_32767 multipolygon_2  (cost=0.52..25.55 rows=1 width=5934)                      Index Cond: ((polygon)::geography &amp;&amp; _st_expand((ways_4.linestring)::geography, '200'::double precision))                      Filter: (((tags -> 'building'::text) IS NOT NULL) AND ((tags -> 'building'::text) &lt;> ALL ('{service,garages,industrial,retail,office,roof,commercial,garage,kiosk,warehouse,church,parking,public,shed,hangar,train_station,guardhouse,transportation,terrace,greenhouse,bridge,government,chapel,gazebo,civic,ruins,supermarket,sports_centre,semidetached_house,toilets,sports_hall,clinic,farm_auxiliary,stable,grandstand,bunker,gatehouse,store,temple,ventilation_kiosk,carport,cowshed,barracks,shop,cabin,barn,cathedral,wall,townhouse,manufacture,shelter,fire_station,stadium,stands,sport_hall,theatre,storage_tank,checkpoint,houseboat,abandoned,dovecote,mosque,museum,military,container,observatory,lift,tent,factory,sport,mall,riding_hall,depot,prison,gate,triumphal_arch,water_works,public_building,pavilion,bank,institute,works,collapsed,car_repair,crossing_box,fuel,tree_house,presbytery,yesq,farm,outbuilding,police,porch,sauna,monastery,cinema,tower,boathouse,library,transformer_tower,heat_exchange_station}'::text[])) AND st_dwithin((polygon)::geography, (ways_4.linestring)::geography, '200'::double precision, true))  JIT:    Functions: 81    Options: Inlining true, Optimization true, Expressions true, Deforming true (48 rows) <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u0442 \u0436\u0438\u043b\u044b\u0445 \u0437\u0434\u0430\u043d\u0438\u0439, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0437\u0434\u0430\u043d\u0438\u0435 \u0431\u043b\u0438\u0436\u0435 200\u043c, \u0442\u043e \u043d\u0430 \u043d\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0444\u0430\u043a\u0442\u043e\u0440:<\/p>\n<pre><code class=\"sql\">osmworld=# create table distance as                     select h3_lat_lng_to_cell(b.centre,10) h3_10, h3_lat_lng_to_cell(b.centre,8) h3_8,                     round(ST_Distance(b.geom::geography,g.geom::geography))::integer distance,                     b.type from_type, g.type to_type, b.id from_id, g.id to_id,                     CASE                         WHEN g.tags->'amenity'='waste_transfer_station' or                              g.tags->'landuse'='landfill' or                              g.tags->'man_made'='spoil_heap' or                              g.tags->'man_made'='wastewater_plant' or                              g.tags->'amenity'='crematorium' THEN 'air_quality'                         WHEN g.tags->'power'='substation' or                              g.tags->'power'='generator' or                              g.tags->'power'='plant' or                              g.tags->'building'='industrial' or                              g.tags->'landuse'='industrial' or                              g.tags->'landuse'='quarry' THEN 'industrial'                         WHEN g.tags->'natural'='wetland' and g.tags->'wetland' is distinct from 'mangrove' THEN 'mosquitoes'                         WHEN g.tags->'aeroway'='runway' or                              g.tags->'railway'='rail' or                              g.tags->'highway'='primary' or                              g.tags->'highway'='trunk' or                              g.tags->'leisure'='stadium' or                              g.tags->'landuse'='construction' THEN 'noisy_place'                     END reason                         from geometry_global_view b inner join geometry_global_view g                             on ST_DWithin(b.geom::geography,g.geom::geography,200) and     b.tags->'building' is not null and     b.tags->'building' not in --\u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u043d\u0438\u0436\u0435 \u0437\u0434\u0430\u043d\u0438\u044f\u0445 \u043d\u0435 \u0436\u0438\u0432\u0443\u0442 \u043d\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u0435         ('service','garages','industrial','retail','office','roof','commercial','garage','kiosk','warehouse','church',         'parking','public','shed','hangar','train_station','guardhouse','transportation','terrace','greenhouse','bridge',         'government','chapel','gazebo','civic','ruins','supermarket','sports_centre','semidetached_house','toilets',         'sports_hall','clinic','farm_auxiliary','stable','grandstand','bunker','gatehouse','store','temple','ventilation_kiosk',         'carport','cowshed','barracks','shop','cabin','barn','cathedral','wall','townhouse','manufacture','shelter',         'fire_station','stadium','stands','sport_hall','theatre','storage_tank','checkpoint','houseboat','abandoned','dovecote',         'mosque','museum','military','container','observatory','lift','tent','factory','sport','mall','riding_hall','depot',         'prison','gate','triumphal_arch','water_works','public_building','pavilion','bank','institute','works','collapsed',         'car_repair','crossing_box','fuel','tree_house','presbytery','yesq','farm','outbuilding','police','porch','sauna',         'monastery','cinema','tower','boathouse','library','transformer_tower','heat_exchange_station')     and (     g.tags->'amenity'='waste_transfer_station' or --_\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0430_     g.tags->'landuse'='landfill' or --_\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0430_     g.tags->'man_made'='spoil_heap' or --_\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0430_     g.tags->'man_made'='wastewater_plant' or --_\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0430_     g.tags->'amenity'='crematorium' or --_\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0430_     (g.tags->'natural'='wetland' and g.tags->'wetland' is distinct from 'mangrove') or --_\u043a\u043e\u043c\u0430\u0440\u044b_     g.tags->'power'='substation' or --_\u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c_     g.tags->'power'='generator' or --_\u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c_     g.tags->'power'='plant' or --_\u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c_     g.tags->'building'='industrial' or --_\u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c_     g.tags->'landuse'='industrial' or --_\u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c_     g.tags->'landuse'='quarry' or --\u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c_     g.tags->'aeroway'='runway' or --_\u0448\u0443\u043c\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e_     g.tags->'railway'='rail' or --_\u0448\u0443\u043c\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e_     g.tags->'highway'='primary' or --_\u0448\u0443\u043c\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e_     g.tags->'highway'='trunk' or --_\u0448\u0443\u043c\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e_     g.tags->'leisure'='stadium' or --_\u0448\u0443\u043c\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e_     g.tags->'landuse'='construction' --_\u0448\u0443\u043c\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e_ ); SELECT 808496 Time: 50868,122 ms (00:50,868)  osmworld=# ALTER TABLE distance ADD primary key(from_id,from_type,to_id,to_type); ALTER TABLE Time: 678,886 ms  osmworld=# \\d distance                    Table \"public.distance\"   Column   |      Type       | Collation | Nullable | Default  -----------+-----------------+-----------+----------+---------  h3_10     | h3index         |           |          |   h3_8      | h3index         |           |          |   distance  | integer         |           |          |   from_type | table_reference |           | not null |   to_type   | table_reference |           | not null |   from_id   | bigint          |           | not null |   to_id     | bigint          |           | not null |   reason    | text            |           |          |  Indexes:     \"distance_pkey\" PRIMARY KEY, btree (from_id, from_type, to_id, to_type)<\/code><\/pre>\n<p>geometry_global_view &#8212; \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b nodes, ways, multipolygon \u0438\u0437 OSM PgSnapshot \u0441\u0445\u0435\u043c\u044b \u0431\u0430\u0437\u044b \u0438 \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043a\u043e\u0433\u0434\u0430 \u0432\u0430\u043c \u043d\u0430\u0434\u043e \u043d\u0430\u0439\u0442\u0438 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044e \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u0442\u0435\u0433\u0430\u043c, \u043d\u043e \u0435\u0435 \u0442\u0438\u043f \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442\u0435. <\/p>\n<p>\u0414\u043b\u044f \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 H3: <\/p>\n<pre><code class=\"sql\">CREATE EXTENSION h3_postgis CASCADE;<\/code><\/pre>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u043f\u0440\u0435\u0434\u0430\u0433\u0440\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u044b h3_10_stat \u0434\u043b\u044f \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u0438 \u0441 H3 \u044f\u0447\u0435\u0439\u043a\u043e\u0439 10 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430 \u0438 h3_8_stat \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e:<\/p>\n<pre><code class=\"sql\">create table h3_8_stat as select h3_cell_to_boundary_geography(h3) cell ,count, reason from (select h3_8 h3, count(distinct (to_id,to_type)),array_agg(distinct reason) reason from distance group by 1 order by 1) geo; SELECT 2047 Time: 1257,269 ms (00:01,257)  osmworld=# create table h3_10_stat as select h3_cell_to_boundary_geography(h3) cell ,count, reason from (select h3_10 h3, count(distinct (to_id,to_type)),array_agg(distinct reason) reason from distance group by 1 order by 1) geo; SELECT 15660 Time: 1107,552 ms (00:01,108)<\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0440\u0430\u0441\u0447\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u043b, \u0447\u0442\u043e\u0431\u044b QGIS \u043d\u0435 &#171;\u043f\u043e\u0434\u0432\u0438\u0441\u0430\u043b\u0430&#187; \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438\u0437 PostGIS. \u0414\u043b\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432\u044b\u0433\u0440\u0443\u0436\u0443 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 <a href=\"https:\/\/gist.githubusercontent.com\/igor-suhorukov\/4f91e9ce2c0ff65830e4240b8b449de7\/raw\/2a9734b2e0ee5b71181d978843cf326009fe3103\/uncomfortable_h3-10_region.tsv\" rel=\"noopener noreferrer nofollow\">TSV \u0444\u0430\u0439\u043b<\/a>, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0447\u0442\u043e \u0436\u0435 \u044d\u0442\u043e \u0437\u0430 \u043c\u0435\u0441\u0442\u0430 &#171;\u043f\u043e\u0440\u0442\u044f\u0442&#187; \u043a\u043e\u043c\u0444\u043e\u0440\u0442 \u0436\u0438\u0437\u043d\u0438 \u0432 \u0440\u0430\u0439\u043e\u043d\u0430\u0445 \u041c\u043e\u0441\u043a\u0432\u044b. \u0420\u0430\u0439\u043e\u043d\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0440\u0430\u0437\u0431\u0438\u0432\u043a\u043e\u0439 \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u043e\u0439 <a href=\"https:\/\/h3geo.org\/docs\/core-library\/restable#edge-lengths\" rel=\"noopener noreferrer nofollow\">\u0441 \u0440\u0435\u0431\u0440\u043e\u043c \u043e\u043a\u043e\u043b\u043e 75\u043c<\/a> \u0434\u043b\u044f \u0443\u0440\u043e\u0432\u043d\u044f=10: <\/p>\n<pre><code class=\"sql\">osmworld=# \\copy (select distinct h3_10, reason, CASE WHEN to_type='nodes' THEN 'https:\/\/www.openstreetmap.org\/node\/'||to_id WHEN to_type='ways' THEN 'https:\/\/www.openstreetmap.org\/way\/'||to_id WHEN to_type='multipolygon' THEN 'https:\/\/www.openstreetmap.org\/relation\/'||to_id END OSM_URL from distance order by 1) to 'uncomfortable_h3-10_region.tsv' COPY 27354 Time: 289,032 ms<\/code><\/pre>\n<h2>\u0410\u043d\u0430\u043b\u0438\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u041c\u043e\u0441\u043a\u0432\u044b<\/h2>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u0447\u0430\u0442\u044c \u0441 \u041c\u043e\u0441\u043a\u0432\u044b &#8212; \u0432\u043e \u043f\u0435\u0440\u0432\u044b\u0445 \u0446\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u0437\u0434\u0435\u0441\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u0447\u0442\u043e \u0441 \u0430\u0440\u0435\u043d\u0434\u043e\u0439, \u0447\u0442\u043e \u0441 \u043f\u043e\u043a\u0443\u043f\u043a\u043e\u0439 \u043d\u0435\u0434\u0432\u0438\u0436\u0438\u043c\u043e\u0441\u0442\u0438. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u043b\u0433\u043e \u043f\u0440\u043e\u0436\u0438\u043b \u0432 \u041c\u043e\u0441\u043a\u0432\u0435 \u0438 \u043c\u043e\u0433\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0447\u0442\u043e \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u044d\u0442\u043e\u0442 \u0433\u043e\u0440\u043e\u0434 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u044b\u0439. \u0412 \u043f\u043b\u0430\u043d\u0435 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043c\u0435\u0442\u0440\u043e\u043f\u043e\u043b\u0438\u0442\u0435\u043d\u0430 \u0438 \u0440\u0430\u0437\u0432\u0438\u0442\u043e\u0441\u0442\u0438\/\u0446\u0435\u043d\u044b \u043d\u0430 \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442 \u0432 \u041c\u043e\u0441\u043a\u0432\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e. \u0415\u0441\u0442\u044c \u043f\u0430\u0440\u043a\u0438, \u043c\u0435\u0441\u0442\u0430 \u0433\u0434\u0435 \u043f\u043e\u0433\u0443\u043b\u044f\u0442\u044c \u043f\u0435\u0448\u043a\u043e\u043c \u043f\u043e\u0431\u043b\u0438\u0436\u0435 \u043a \u043f\u0440\u0438\u0440\u043e\u0434\u0435. \u0418 \u0432\u0441\u0435 \u043d\u0435\u043f\u043b\u043e\u0445\u043e, \u043f\u043e\u043a\u0430 \u0436\u0438\u0432\u0435\u0448\u044c \u0432 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u0440\u0430\u0439\u043e\u043d\u0435, \u043d\u0435 \u0434\u0430\u043b\u044c\u0448\u0435 10\u043c\u0438\u043d\u0443\u0442 \u0445\u043e\u0434\u044c\u0431\u044b \u043e\u0442 \u043c\u0435\u0442\u0440\u043e. \u0414\u0430 \u0432\u0441\u0435 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u043a\u0430 \u0436\u0438\u0432\u0435\u0448\u044c \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0448\u044c \u0432 \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u0433\u0434\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0435 \u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u044f \u0432 \u0447\u0430\u0441 \u043f\u0438\u043a!<\/p>\n<p>\u0418\u0442\u0430\u043a, \u044f \u0441\u0447\u0438\u0442\u0430\u044e \u0447\u0442\u043e \u0440\u044f\u0434\u043e\u043c \u0441 \u043a\u0432\u0430\u0440\u0442\u0438\u0440\u043e\u0439, \u0431\u043b\u0438\u0436\u0435 \u0447\u0435\u043c \u0432 200\u043c \u043d\u0435 \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0432\u0438\u0434\u0435\u0442\u044c, \u043d\u044e\u0445\u0430\u0442\u044c \u0438 \u0441\u043b\u044b\u0448\u0430\u0442\u044c \u0442\u043e \u0447\u0442\u043e \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442:<\/p>\n<ul>\n<li>\n<p>\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0430: <a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/RU:Tag:amenity%3Dwaste_transfer_station\" rel=\"noopener noreferrer nofollow\">\u0421\u0442\u0430\u043d\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u0432\u0430\u043b\u043a\u0438 \u043c\u0443\u0441\u043e\u0440\u0430<\/a>, <a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/RU:Tag:landuse=landfill\" rel=\"noopener noreferrer nofollow\">\u0421\u0432\u0430\u043b\u043a\u0430<\/a>, <a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/RU:Tag:man_made=spoil_heap\" rel=\"noopener noreferrer nofollow\">\u0422\u0435\u0440\u0440\u0438\u043a\u043e\u043d<\/a>, <a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/RU:Tag:man_made=wastewater_plant\" rel=\"noopener noreferrer nofollow\">\u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u0441\u0442\u043e\u0447\u043d\u044b\u0445 \u0432\u043e\u0434<\/a>, <a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/RU:Tag:amenity=crematorium\" rel=\"noopener noreferrer nofollow\">\u041a\u0440\u0435\u043c\u0430\u0442\u043e\u0440\u0438\u0439<\/a><\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c: <a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/RU:Tag:landuse=industrial\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u043b\u043e\u0449\u0430\u0434\u0438<\/a>, <a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/RU:Tag:power=substation\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0434\u0441\u0442\u0430\u043d\u0446\u0438\u0438<\/a>, <a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/RU:Tag:power=generator\" rel=\"noopener noreferrer nofollow\">\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440<\/a>, <a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/RU:Tag:power=plant\" rel=\"noopener noreferrer nofollow\">\u0422\u042d\u0426<\/a>, <a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/RU:Tag:landuse=quarry\" rel=\"noopener noreferrer nofollow\">\u041a\u0430\u0440\u044c\u0435\u0440<\/a><\/p>\n<\/li>\n<li>\n<p>\u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0448\u0443\u043c\u0430: <a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/RU:Tag:landuse=construction\" rel=\"noopener noreferrer nofollow\">\u0421\u0442\u0440\u043e\u0439\u043a\u0430<\/a>, <a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/RU:Tag:railway=rail\" rel=\"noopener noreferrer nofollow\">\u0416\u0435\u043b\u0435\u0437\u043d\u043e\u0434\u043e\u0440\u043e\u0436\u043d\u044b\u0435 \u043f\u0443\u0442\u0438<\/a>, <a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/RU:Tag:aeroway=runway\" rel=\"noopener noreferrer nofollow\">\u0412\u0437\u043b\u0451\u0442\u043d\u043e-\u043f\u043e\u0441\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u043f\u043e\u043b\u043e\u0441\u0430<\/a>, <a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/RU:Tag:highway=primary\" rel=\"noopener noreferrer nofollow\">\u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0434\u043e\u0440\u043e\u0433\u0438 \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f<\/a>, <a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/RU:Tag:highway=trunk\" rel=\"noopener noreferrer nofollow\">\u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0434\u043e\u0440\u043e\u0433\u0438 \u0444\u0435\u0434\u0435\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f<\/a>, <a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/RU:Tag:leisure=stadium\" rel=\"noopener noreferrer nofollow\">\u0421\u0442\u0430\u0434\u0438\u043e\u043d<\/a><\/p>\n<\/li>\n<li>\n<p>\u043a\u043e\u043c\u0430\u0440\u044b: <a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/RU:Tag:natural=wetland\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u0431\u043e\u043b\u043e\u0447\u0435\u043d\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u0438<\/a><\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e \u043c\u043e\u0434\u0435\u043b\u044c &#8212; \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0433\u0440\u0443\u0431\u043e\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u0445 \u0434\u043e\u043c\u0430 \u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f. \u041a\u0430\u043a \u0438 \u0433\u043e\u0434\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0437\u0434\u0430\u043d\u0438\u044f, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u044b\u0448\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u0437 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u043a\u0432\u0430\u0440\u0442\u0438\u0440 \u0438 \u0441 \u0443\u043b\u0438\u0446\u044b. \u0422\u0430\u043a \u0436\u0435 \u043a\u0430\u043a \u043d\u0435 \u0440\u0430\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0442\u0443\u0445\u0430\u043d\u0438\u0435 \u0448\u0443\u043c\u0430 \u043d\u0430 \u0434\u0435\u0440\u0435\u0432\u044c\u044f\u0445\/ \u043d\u0430 \u0448\u0443\u043c\u043e\u0437\u0430\u0449\u0438\u0442\u043d\u043e\u043c \u044d\u043a\u0440\u0430\u043d\u0435 \u0443 \u0442\u0440\u0430\u0441\u0441\u044b( \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0432\u044b\u0441\u043e\u0442\u0435 \u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432 \u0438 \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u0438 \u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043d\u0430 OpenStreetMap \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442), \u043a\u0430\u043a\u0438\u0435 \u0441\u043e\u0441\u0435\u0434\u0438 \u0438\u0437 \u043a\u0430\u043a\u0438\u0445 \u043a\u0432\u0430\u0440\u0442\u0438\u0440 \u0443\u0445\u043e\u0434\u044f\u0442 \u0432 \u0437\u0430\u043f\u043e\u0439 \u0438 \u043f\u043e\u043a\u043e\u043b\u0430\u0447\u0438\u0432\u0430\u044e\u0442 \u0441\u0432\u043e\u044e \u0441\u0435\u043c\u044c\u044e, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u044b\u0435 \u043a \u0434\u0440\u0443\u0433\u0438\u043c \u043b\u044e\u0434\u044f\u043c \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u044b \u0432\u043e \u0434\u0432\u043e\u0440\u0430\u0445 \u0438 \u043f\u0430\u0440\u043a\u0430\u0445, \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0434\u043e\u0441\u043d\u0430\u0431\u0436\u0435\u043d\u0438\u044f \u0438 \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u043f\u0438\u0442\u044c \u0432\u043e\u0434\u0443 \u0438\u0437-\u043f\u043e\u0434 \u043a\u0440\u0430\u043d\u0430. \u0416\u0438\u0432\u0443\u0442 \u043b\u0438 \u0442\u0430\u0440\u0430\u043a\u0430\u043d\u044b, \u0443 \u0441\u043e\u0441\u0435\u0434\u043a\u0438-\u043f\u0435\u043d\u0441\u0438\u043e\u043d\u0435\u0440\u043a\u0438 \u0441 20 \u043a\u043e\u0442\u0430\u043c\u0438. \u041a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u043b\u043e\u043c\u0430\u0435\u0442 \u043b\u0438\u0444\u0442 &#171;\u0443\u043f\u043e\u0440\u043e\u0442\u044b\u0439&#187; \u0441\u043e\u0441\u0435\u0434 \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0430\u044f \u0435\u0433\u043e \u0434\u043e \u043f\u043e\u0442\u043e\u043b\u043a\u0430 \u0441\u0442\u0440\u043e\u0439\u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u043c\u0438. \u0415\u0441\u0442\u044c \u043b\u0438 \u0445\u0443\u043b\u0438\u0433\u0430\u043d\u044b \u0436\u0433\u0443\u0449\u0438\u0435 \u043f\u043b\u0430\u0441\u0442\u0438\u043a\u043e\u0432\u044b\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u0432 \u043b\u0438\u0444\u0442\u0435, \u0438\u0437\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u044e\u0442 \u043b\u0438 \u0441\u0442\u0435\u043d\u044b \u0434\u043e\u043c\u0430. \u0418 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435 \u0434\u043b\u044f \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u0430 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0435 \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<p>\u041f\u043e\u043a\u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u043a\u0442\u043e\u0440 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u0435\u0433\u043a\u043e \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0438\u0437 \u043a\u0430\u0440\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u043e\u043a\u0440\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0435\u0439 &#8212; \u0442\u044e\u0440\u044c\u043c\u044b\/\u0438\u0437\u043e\u043b\u044f\u0442\u043e\u0440\u044b, \u043f\u0441\u0438\u0445\u0438\u0430\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435, \u043d\u0430\u0440\u043a\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438 \u0438\u043d\u0444\u0435\u043a\u0446\u0438\u043e\u043d\u043d\u044b\u0435( \u043e\u043d\u0438 \u0440\u0435\u0434\u043a\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0442\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b) \u0431\u043e\u043b\u044c\u043d\u0438\u0446\u044b, \u043c\u043e\u0440\u0433\u0438, \u043a\u043b\u0430\u0434\u0431\u0438\u0449\u0430. \u042d\u0442\u0438 \u0431\u043e\u043d\u0443\u0441\u044b \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0436\u0438\u043b\u044c\u044f \u043d\u0430 \u043f\u0435\u0448\u0435\u043c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0438, \u0430 \u043d\u0435 \u043d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043f\u043e \u043f\u0440\u044f\u043c\u043e\u0439. \u0422\u0430\u043a\u0438\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u044f \u0443\u043c\u0435\u044e \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u043d\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f c openstreetmap_h3 \u043f\u043e\u043a\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0438\u043d\u0435\u0439 \u0438\u0437\u043e\u043b\u0435\u043d\u0442\u044b)<\/p>\n<p>\u041d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043a\u0430\u043a\u0438\u0435 \u0435\u0449\u0435 \u043c\u0435\u0441\u0442\u0430 \u043c\u043e\u0433\u0443\u0442 \u0432\u0430\u0441 \u043e\u0442\u043f\u0443\u0433\u043d\u0443\u0442\u044c \u043e\u0442 \u043c\u0435\u0441\u0442\u0430 \u0433\u0434\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044c \u0436\u0438\u0442\u044c \u0438 \u043f\u043e\u0447\u0435\u043c\u0443?<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4f2\/6e7\/f7f\/4f26e7f7fd17986b55066c7442bcbb5f.png\" alt=\"\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 QGIS\" title=\"\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 QGIS\" width=\"1917\" height=\"993\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4f2\/6e7\/f7f\/4f26e7f7fd17986b55066c7442bcbb5f.png\"\/><\/p>\n<div><figcaption>\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 QGIS<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e6c\/3b7\/412\/e6c3b74121a63fe3c700ca3cd59620f1.png\" alt=\"\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0446\u0432\u0435\u0442 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0447\u0438\u0441\u043b\u0430 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432 \u0432 \u043d\u0435\u0439 \" title=\"\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0446\u0432\u0435\u0442 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0447\u0438\u0441\u043b\u0430 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432 \u0432 \u043d\u0435\u0439 \" width=\"1472\" height=\"1010\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e6c\/3b7\/412\/e6c3b74121a63fe3c700ca3cd59620f1.png\"\/><\/p>\n<div><figcaption>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0446\u0432\u0435\u0442 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0447\u0438\u0441\u043b\u0430 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432 \u0432 \u043d\u0435\u0439 <\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5d9\/a89\/b85\/5d9a89b85efa20159645922e5eb5c5a0.png\" alt=\"\u0421\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0442\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0433\u0434\u0435 \u0444\u0430\u043a\u0442\u043e\u0440 &quot;\u0434\u0438\u0441\u043a\u043e\u043c\u0444\u043e\u0440\u0442\u0430&quot; \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0435\u043d \u0438 \u043b\u044e\u0431\u0443\u0435\u043c\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0430 \u0433\u0434\u0435 \u0431\u044b \u044f \u043d\u0435 \u0445\u043e\u0442\u0435\u043b \u0436\u0438\u0442\u044c\" title=\"\u0421\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0442\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0433\u0434\u0435 \u0444\u0430\u043a\u0442\u043e\u0440 &quot;\u0434\u0438\u0441\u043a\u043e\u043c\u0444\u043e\u0440\u0442\u0430&quot; \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0435\u043d \u0438 \u043b\u044e\u0431\u0443\u0435\u043c\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0430 \u0433\u0434\u0435 \u0431\u044b \u044f \u043d\u0435 \u0445\u043e\u0442\u0435\u043b \u0436\u0438\u0442\u044c\" width=\"1283\" height=\"1026\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5d9\/a89\/b85\/5d9a89b85efa20159645922e5eb5c5a0.png\"\/><\/p>\n<div><figcaption>\u0421\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0442\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0433\u0434\u0435 \u0444\u0430\u043a\u0442\u043e\u0440 &#171;\u0434\u0438\u0441\u043a\u043e\u043c\u0444\u043e\u0440\u0442\u0430&#187; \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0435\u043d \u0438 \u043b\u044e\u0431\u0443\u0435\u043c\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0430 \u0433\u0434\u0435 \u0431\u044b \u044f \u043d\u0435 \u0445\u043e\u0442\u0435\u043b \u0436\u0438\u0442\u044c<\/figcaption><\/div>\n<\/figure>\n<p>\u0418\u0437 QGIS \u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043b\u043e\u044f \u0432 GeoJSON \u0438 <a href=\"https:\/\/gist.github.com\/igor-suhorukov\/01933ab722c9a6bc0f8b13145e007f03\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0434\u0435\u043b\u044e\u0441\u044c \u0438\u043c \u0441 \u0432\u0430\u043c\u0438<\/a>. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0435\u0433\u043e \u043b\u0438\u0431\u043e \u0443\u0434\u043e\u0431\u043d\u0443\u044e \u0432\u0430\u043c \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0438\u043b\u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u043d\u043b\u0430\u0439\u043d \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c <a href=\"https:\/\/geojson.io\" rel=\"noopener noreferrer nofollow\">https:\/\/geojson.io<\/a><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/454\/5d5\/faf\/4545d5faf24a854009137ae0f5d03deb.png\" width=\"1918\" height=\"1005\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/454\/5d5\/faf\/4545d5faf24a854009137ae0f5d03deb.png\"\/><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/36d\/e48\/03a\/36de4803af0f3b03a84e175bbdb9d1de.png\" alt=\"\u041d\u0435 \u0441\u0430\u043c\u043e\u0435 \u0443\u0434\u0430\u0447\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u0436\u0438\u043b\u044c\u044f, \u0435\u0441\u043b\u0438 \u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0435 OSM - 220 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0445 \u043c\u0435\u0441\u0442 \u043d\u0430 7\u043a\u043c2\" title=\"\u041d\u0435 \u0441\u0430\u043c\u043e\u0435 \u0443\u0434\u0430\u0447\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u0436\u0438\u043b\u044c\u044f, \u0435\u0441\u043b\u0438 \u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0435 OSM - 220 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0445 \u043c\u0435\u0441\u0442 \u043d\u0430 7\u043a\u043c2\" width=\"1920\" height=\"1008\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/36d\/e48\/03a\/36de4803af0f3b03a84e175bbdb9d1de.png\"\/><\/p>\n<div><figcaption>\u041d\u0435 \u0441\u0430\u043c\u043e\u0435 \u0443\u0434\u0430\u0447\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u0436\u0438\u043b\u044c\u044f, \u0435\u0441\u043b\u0438 \u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0435 OSM &#8212; 220 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0445 \u043c\u0435\u0441\u0442 \u043d\u0430 7\u043a\u043c2<\/figcaption><\/div>\n<\/figure>\n<p> \u0410 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0433\u0440\u0443\u0437\u0438\u0442\u044c GeoJSON \u0434\u043b\u044f H3 \u044f\u0447\u0435\u0435\u043a \u0443\u0440\u043e\u0432\u043d\u044f 10 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e SQL:<\/p>\n<pre><code class=\"sql\">osmworld=# \\copy (select json_build_object('type', 'FeatureCollection','features', json_agg(json_build_object('type', 'Feature','geometry', st_AsGeoJSON(cell)::json, 'properties', json_build_object('count', count, 'reason', reason)))) FROM h3_10_stat) to 'uncomfortable_h3-10_region.json.geojson'; COPY 1 Time: 87,625 ms<\/code><\/pre>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b <a href=\"https:\/\/gist.github.com\/igor-suhorukov\/c8907a0da8b835746818c1019836a1ca\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/737\/327\/372\/737327372dbbe63f153a540df37356ea.png\" alt=\"\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 uncomfortable_h3-10_region.json.geojson \u0432 gist.github.com\" title=\"\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 uncomfortable_h3-10_region.json.geojson \u0432 gist.github.com\" width=\"1250\" height=\"720\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/737\/327\/372\/737327372dbbe63f153a540df37356ea.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 uncomfortable_h3-10_region.json.geojson \u0432 <a href=\"http:\/\/gist.github.com\" rel=\"noopener noreferrer nofollow\">gist.github.com<\/a><\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/54c\/388\/6ac\/54c3886ac5f994a3454dc84e5058fc74.png\" alt=\"\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 uncomfortable_h3-10_region.json.geojson \u0432 geojson.io\" title=\"\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 uncomfortable_h3-10_region.json.geojson \u0432 geojson.io\" width=\"1917\" height=\"1005\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/54c\/388\/6ac\/54c3886ac5f994a3454dc84e5058fc74.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 uncomfortable_h3-10_region.json.geojson \u0432 <a href=\"http:\/\/geojson.io\" rel=\"noopener noreferrer nofollow\">geojson.io<\/a><\/figcaption><\/div>\n<\/figure>\n<p>\u0417\u0430\u0431\u044b\u043b \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c \u0447\u0442\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u0447\u0438\u0442\u0430\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e \u0436\u0438\u043b\u044b\u0445 \u0437\u0434\u0430\u043d\u0438\u0439. \u0410 \u044d\u0442\u043e \u0432\u0441\u0435 \u0447\u0442\u043e \u043d\u0435:<\/p>\n<details class=\"spoiler\">\n<summary>building = &#8230;<\/summary>\n<div class=\"spoiler__content\">\n<p>&#8216;service&#8217;,&#8217;garages&#8217;,&#8217;industrial&#8217;,&#8217;retail&#8217;,&#8217;office&#8217;,&#8217;roof&#8217;,&#8217;commercial&#8217;,&#8217;garage&#8217;,&#8217;kiosk&#8217;,&#8217;warehouse&#8217;,&#8217;church&#8217;,&#8217;parking&#8217;,&#8217;public&#8217;,&#8217;shed&#8217;,&#8217;hangar&#8217;,&#8217;train_station&#8217;,&#8217;guardhouse&#8217;,&#8217;transportation&#8217;,&#8217;terrace&#8217;,&#8217;greenhouse&#8217;,&#8217;bridge&#8217;,&#8217;government&#8217;,&#8217;chapel&#8217;,&#8217;gazebo&#8217;,&#8217;civic&#8217;,&#8217;ruins&#8217;,&#8217;supermarket&#8217;,&#8217;sports_centre&#8217;,&#8217;semidetached_house&#8217;,&#8217;toilets&#8217;,&#8217;sports_hall&#8217;,&#8217;clinic&#8217;,&#8217;farm_auxiliary&#8217;,&#8217;stable&#8217;,&#8217;grandstand&#8217;,&#8217;bunker&#8217;,&#8217;gatehouse&#8217;,&#8217;store&#8217;,&#8217;temple&#8217;,&#8217;ventilation_kiosk&#8217;,&#8217;carport&#8217;,&#8217;cowshed&#8217;,&#8217;barracks&#8217;,&#8217;shop&#8217;,&#8217;cabin&#8217;,&#8217;barn&#8217;,&#8217;cathedral&#8217;,&#8217;wall&#8217;,&#8217;townhouse&#8217;,&#8217;manufacture&#8217;,&#8217;shelter&#8217;,&#8217;fire_station&#8217;,&#8217;stadium&#8217;,&#8217;stands&#8217;,&#8217;sport_hall&#8217;,&#8217;theatre&#8217;,&#8217;storage_tank&#8217;,&#8217;checkpoint&#8217;,&#8217;houseboat&#8217;,&#8217;abandoned&#8217;,&#8217;dovecote&#8217;,&#8217;mosque&#8217;,&#8217;museum&#8217;,&#8217;military&#8217;,&#8217;container&#8217;,&#8217;observatory&#8217;,&#8217;lift&#8217;,&#8217;tent&#8217;,&#8217;factory&#8217;,&#8217;sport&#8217;,&#8217;mall&#8217;,&#8217;riding_hall&#8217;,&#8217;depot&#8217;,&#8217;prison&#8217;,&#8217;gate&#8217;,&#8217;triumphal_arch&#8217;,&#8217;water_works&#8217;,&#8217;public_building&#8217;,&#8217;pavilion&#8217;,&#8217;bank&#8217;,&#8217;institute&#8217;,&#8217;works&#8217;,&#8217;collapsed&#8217;,&#8217;car_repair&#8217;,&#8217;crossing_box&#8217;,&#8217;fuel&#8217;,&#8217;tree_house&#8217;,&#8217;presbytery&#8217;,&#8217;yesq&#8217;,&#8217;farm&#8217;,&#8217;outbuilding&#8217;,&#8217;police&#8217;,&#8217;porch&#8217;,&#8217;sauna&#8217;,&#8217;monastery&#8217;,&#8217;cinema&#8217;,&#8217;tower&#8217;,&#8217;boathouse&#8217;,&#8217;library&#8217;,&#8217;transformer_tower&#8217;,&#8217;heat_exchange_station&#8217;<\/p>\n<\/div>\n<\/details>\n<p>\u0421\u0447\u0438\u0442\u0430\u044f, \u0447\u0442\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u0434\u0430\u043d\u0438\u044f \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0436\u0438\u043b\u044b\u043c\u0438. \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 OpenStreetMap \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u043c\u0438, \u043a\u0430\u043a \u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438. \u041d\u043e \u043b\u0438\u0447\u043d\u043e \u044f \u043b\u0443\u0447\u0448\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u0430\u0445\u0443\u044e\u0441\u044c, \u0438 \u043e\u0431\u043e\u0439\u0434\u0443 \u0437\u0434\u0430\u043d\u0438\u0435 &#8212; &#171;\u0436\u0435\u043c\u0447\u0443\u0436\u0438\u043d\u0443&#187; \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0439\u043e\u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u043e\u0439. <\/p>\n<p>\u0421\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u041c\u043e\u0441\u043a\u0432\u0435, \u044f \u0437\u0430\u043c\u0435\u0442\u0438\u043b \u0447\u0442\u043e \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u0430\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0438\u0433\u0440\u0430\u0435\u0442 \u0432 \u043c\u0438\u043d\u0443\u0441 \u0436\u0438\u043b\u044c\u044e, \u043a\u043e\u0433\u0434\u0430 \u0442\u0440\u0430\u0441\u0441\u0430 \u0431\u043b\u0438\u0436\u0435 200\u043c \u043a \u0437\u0434\u0430\u043d\u0438\u044e &#8212; \u0438\u0437-\u0437\u0430 \u0448\u0443\u043c\u0430 \u0430\u0432\u0442\u043e\u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430 \u0438 \u0437\u0430\u0433\u0430\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u0432\u043e\u0437\u0434\u0443\u0445\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6f7\/aa9\/346\/6f7aa93464617d5c0d7967c886d69ce4.png\" alt=\"StableDiffusion: Best place in the city to live\" title=\"StableDiffusion: Best place in the city to live\" width=\"1024\" height=\"512\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6f7\/aa9\/346\/6f7aa93464617d5c0d7967c886d69ce4.png\"\/><\/p>\n<div><figcaption>StableDiffusion: Best place in the city to live<\/figcaption><\/div>\n<\/figure>\n<p>\u0418\u0449\u0438\u0442\u0435 \u0432\u0430\u0448 \u0434\u043e\u043c \u0438 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0439\u0442\u0435 \u043e\u043a\u0440\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043f\u0438\u0448\u0438\u0442\u0435 \u0447\u0442\u043e \u0431\u044b \u0432\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0443, \u043a\u0430\u043a\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b! \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0439\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 &#8212; \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0438\u043b\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 OSM \u0444\u0430\u0439\u043b\u044b. <\/p>\n<h2>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/h2>\n<p>\u041c\u043e\u0434\u0435\u043b\u044c \u0432\u044b\u0448\u043b\u0430 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043e\u0431\u0449\u0435\u0439 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043b\u044e\u0434\u0435\u0439. \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0436\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f, \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043b\u044e\u0434\u0438 \u043c\u043e\u0433\u0443\u0442 \u0436\u0438\u0442\u044c \u0432 \u0442\u0430\u043a\u0438\u0445 &#171;\u043d\u0435\u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u044b\u0445&#187; \u043c\u0435\u0441\u0442\u0430\u0445 \u0438\u0437-\u0437\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0436\u0438\u043b\u044c\u044f, \u0431\u043b\u0438\u0437\u043e\u0441\u0442\u044c \u043a \u0440\u0430\u0431\u043e\u0442\u0435 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0433\u043e\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u044c \u0438 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043c\u0435\u0441\u0442\u0430. \u041e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 OSM \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0438\u043c\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0438 \u044f \u0432\u044b\u0448\u0435 \u043a\u0430\u043a \u0438\u0445 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0432 \u0447\u0435\u043c \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u0434\u0440\u0443\u0433 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0438 \u0447\u0442\u043e \u0440\u0430\u0439\u043e\u043d \u0432\u0430\u0448\u0435\u0433\u043e \u0434\u043e\u043c\u0430 \u043d\u0435\u0437\u0430\u0441\u043b\u0443\u0436\u0435\u043d\u043d\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043f\u043e\u043c\u0435\u0447\u0435\u043d \u043a\u0430\u043a \u043d\u0435\u0443\u044e\u0442\u043d\u044b\u0439, \u0442\u043e \u0438\u0449\u0438\u0442\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u0432 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 OpenStreetMap \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0439\u0442\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u0441\u043b\u0435\u0434\u0443\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c \u0441 <a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/Category:RU:%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%B3%D0%BE%D0%B2\" rel=\"noopener noreferrer nofollow\">wiki<\/a>. \u041d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e \u0431\u043e\u0440\u0435\u0442\u0441\u044f \u0441 \u0432\u0430\u043d\u0434\u0430\u043b\u0438\u0437\u043c\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 &#8212; \u043a\u043e\u0433\u0434\u0430 \u043a\u0442\u043e-\u043b\u0438\u0431\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0438\u0441\u043a\u0430\u0436\u0430\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u043b\u0438 \u043f\u043e\u0440\u0442\u0438\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0d5\/cf8\/617\/0d5cf8617b2479b16b535801d974a410.png\" alt=\"\u0421\u0432\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u043b\u0438 \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u0433\u043e\u0434\u0443! \u0422\u0440\u0438 \u043b\u043e\u043a\u0442\u044f \u043f\u043e \u043a\u0430\u0440\u0442\u0435 \u043e\u0442 \u0446\u0435\u043d\u0442\u0440\u0430 \u043c\u0435\u0433\u0430\u043f\u043e\u043b\u0438\u0441\u0430... \u041f\u043e\u043f\u0440\u043e\u0441\u0438\u043b \u0435\u0449\u0435 \u0431\u0435\u043b\u043a\u0443 \u043d\u0430 \u043b\u0443\u0436\u0430\u0439\u043a\u0435)\" title=\"\u0421\u0432\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u043b\u0438 \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u0433\u043e\u0434\u0443! \u0422\u0440\u0438 \u043b\u043e\u043a\u0442\u044f \u043f\u043e \u043a\u0430\u0440\u0442\u0435 \u043e\u0442 \u0446\u0435\u043d\u0442\u0440\u0430 \u043c\u0435\u0433\u0430\u043f\u043e\u043b\u0438\u0441\u0430... \u041f\u043e\u043f\u0440\u043e\u0441\u0438\u043b \u0435\u0449\u0435 \u0431\u0435\u043b\u043a\u0443 \u043d\u0430 \u043b\u0443\u0436\u0430\u0439\u043a\u0435)\" width=\"1024\" height=\"512\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0d5\/cf8\/617\/0d5cf8617b2479b16b535801d974a410.png\"\/><\/p>\n<div><figcaption>\u0421\u0432\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u043b\u0438 \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u0433\u043e\u0434\u0443! \u0422\u0440\u0438 \u043b\u043e\u043a\u0442\u044f \u043f\u043e \u043a\u0430\u0440\u0442\u0435 \u043e\u0442 \u0446\u0435\u043d\u0442\u0440\u0430 \u043c\u0435\u0433\u0430\u043f\u043e\u043b\u0438\u0441\u0430&#8230; \u041f\u043e\u043f\u0440\u043e\u0441\u0438\u043b \u0435\u0449\u0435 \u0431\u0435\u043b\u043a\u0443 \u043d\u0430 \u043b\u0443\u0436\u0430\u0439\u043a\u0435)<\/figcaption><\/div>\n<\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0435\u043c\u0430 \u0432\u0430\u0441 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442, \u0442\u043e \u043c\u043e\u0433\u0443 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0433\u043e\u0440\u043e\u0434\u043e\u0432: \u043a\u0430\u043a \u043c\u0435\u0433\u0430\u043f\u043e\u043b\u0438\u0441\u043e\u0432, \u0442\u0430\u043a \u0438 \u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u041a\u0440\u0430\u0441\u043d\u043e\u044f\u0440\u0441\u043a\u0430, \u041e\u043c\u0441\u043a\u0430 \u0438\u043b\u0438 \u043a\u0443\u0440\u043e\u0440\u0442\u043d\u044b\u0445 \u0433\u043e\u0440\u043e\u0434\u043e\u0432 \u043d\u0430 \u043f\u043e\u0431\u0435\u0440\u0435\u0436\u044c\u0435. \u041c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u0444\u0430\u0432\u0435\u043b\u0430\u0445 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0442\u0440\u0430\u043d\u0430\u0445, \u043e\u0441\u0442\u0440\u043e\u0432\u0430\u0445, \u043a\u043e\u043d\u0442\u0438\u043d\u0435\u043d\u0442\u0430\u0445. \u0416\u0434\u0443 \u0432\u0430\u0448\u0438 \u0438\u0434\u0435\u0438 \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/760562\/\"> https:\/\/habr.com\/ru\/articles\/760562\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0413\u0434\u0435 \u043b\u0443\u0447\u0448\u0435 \u0436\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043a\u0430\u043a \u043f\u043e \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043c\u0435\u0441\u0442\u0430, \u0442\u0430\u043a \u0438 \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u043d\u0435\u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u043e\u0433\u043e \u0434\u043b\u044f \u0432\u0430\u0441 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f. \u0418 \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0439\u043e\u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u0435\u0443\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0438\u044d\u043b\u0442\u043e\u0440\u0430\u043c\u0438, \u0442\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0441\u044e\u0440\u043f\u0440\u0438\u0437\u043e\u043c, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0447\u043d\u0435\u0442\u0435 \u0436\u0438\u0442\u044c \u0432 \u043d\u043e\u0432\u043e\u043c \u043c\u0435\u0441\u0442\u0435. \u041d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0430\u0440\u0435\u043d\u0434\u044b \u0436\u0438\u043b\u044c\u044f \u043c\u043d\u0435 \u0447\u0430\u0441\u0442\u043e \u043f\u043e\u043f\u0430\u0434\u0430\u043b\u0438\u0441\u044c \u043a\u0432\u0430\u0440\u0442\u0438\u0440\u044b &#171;\u043f\u043e\u0447\u0442\u0438 \u0443 \u043c\u0435\u0442\u0440\u043e \u0432 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u0440\u0430\u0439\u043e\u043d\u0435&#187; \u0441\u0438\u043c\u043f\u0430\u0442\u0438\u0447\u043d\u044b\u0435 \u043d\u0430 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f\u0445, \u043f\u0440\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u043a\u0440\u0443\u0442\u0438\u043b\u0441\u044f \u043c\u043e\u0442\u0438\u0432 \u043f\u0435\u0441\u043d\u0438 &#171;\u041c\u0443\u0441\u043e\u0440\u043d\u044b\u0439 \u0432\u0435\u0442\u0435\u0440, \u0434\u044b\u043c \u0438\u0437 \u0442\u0440\u0443\u0431\u044b&#187; \u0438\u043d\u043e\u0433\u0434\u0430 \u0438 \u0441 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c\u044e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0431\u044b\u043b\u0438 \u043d\u0435 \u043c\u0435\u043d\u044c\u0448\u0435. <\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u043d\u0442\u0430\u0437\u0438\u0438 <a href=\"https:\/\/stablediffusionweb.com\/#demo\" rel=\"noopener noreferrer nofollow\">\u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438<\/a> \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0430\u0431\u0437\u0430\u0446\u0430&#8230;<\/figcaption><\/div>\n<\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0438\u0437 \u043e\u043a\u043d\u0430 \u0432\u0438\u0434\u043d\u0430 \u0442\u0440\u0443\u0431\u0430 \u0437\u0430\u0432\u043e\u0434\u0430 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u043b\u0438\u0442 \u0434\u044b\u043c &#171;\u043a\u0438\u0441\u043b\u043e\u0442\u043d\u043e\u0433\u043e&#187; \u0446\u0432\u0435\u0442\u0430, \u043f\u043e\u0434 \u0434\u0440\u0443\u0433\u0438\u043c \u043e\u043a\u043d\u043e\u043c \u043e\u0436\u0438\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0430\u0432\u0442\u043e\u0442\u0440\u0430\u0441\u0441\u0430\/\u0436\u0435\u043b\u0435\u0437\u043d\u0430\u044f \u0434\u043e\u0440\u043e\u0433\u0430 \u0438 \u043b\u0435\u0442\u043e\u043c \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043e\u043a\u043d\u043e \u0438\u0437-\u0437\u0430 \u0433\u0430\u0440\u0438 \u0438 \u0433\u0440\u043e\u043c\u043a\u0438\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430, \u0440\u044f\u0434\u043e\u043c \u0441 \u044d\u0442\u0438\u043c \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u043d\u044b\u043c \u043f\u0435\u0439\u0437\u0430\u0436\u0435\u043c \u0432\u0438\u0434\u043d\u044b \u0434\u044b\u043c\u043e\u043a \u043e\u0442 \u043a\u0440\u0435\u043c\u0430\u0442\u043e\u0440\u0438\u044f \u0438 \u043a\u043b\u0430\u0434\u0431\u0438\u0449\u0435. \u041a\u043e\u0433\u0434\u0430 \u0440\u0435\u0448\u0438\u0442\u0435 \u0432\u044b\u0439\u0442\u0438 \u043d\u0430 \u0431\u0430\u043b\u043a\u043e\u043d \u043b\u0435\u0442\u043e\u043c, \u0442\u043e \u043a\u043e\u043c\u0430\u0440\u044b \u043d\u0430\u043f\u043e\u043c\u043d\u044f\u0442 \u0447\u0442\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u0440\u044f\u0434\u043e\u043c \u0435\u0441\u0442\u044c \u0437\u0430\u0431\u043e\u043b\u043e\u0447\u0435\u043d\u043d\u044b\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a. \u041f\u043e\u0437\u0434\u0440\u0430\u0432\u043b\u044f\u044e, \u0432\u044b \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0432 \u0442\u043e\u043c \u0441\u0430\u043c\u043e\u043c \u043c\u0435\u0441\u0442\u0435!!!<\/p>\n<p>\u0427\u0442\u043e \u043e\u0431\u0449\u0435\u0433\u043e \u0432\u043e \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0444\u0430\u043a\u0442\u043e\u0440\u0430\u0445, \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u044f \u0441\u0433\u0443\u0441\u0442\u0438\u043b \u043a\u0440\u0430\u0441\u043a\u0438 StableDiffusion?  \u0412 \u043e\u043f\u0438\u0441\u0430\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u043b\u044e\u0434\u0435\u0439 \u0435\u0441\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u043a\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f, \u043d\u043e \u043f\u0441\u0438\u0445\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u0438\u0441\u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u0430\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f. \u0412 \u0441\u0442\u0443\u0434\u0435\u043d\u0447\u0435\u0441\u0442\u0432\u0435 \u0432 \u0447\u0430\u0441\u0442\u0438 \u0434\u0438\u043f\u043b\u043e\u043c\u0430, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0439 \u0441 \u044d\u043a\u043e\u043b\u043e\u0433\u0438\u0435\u0439,  \u0431\u044b\u043b\u0438 \u0440\u0430\u0441\u0447\u0435\u0442\u044b \u0443\u0440\u043e\u0432\u043d\u044f \u0448\u0443\u043c\u0430 \u0432 \u0436\u0438\u043b\u044b\u0445 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u0445 \u043e\u0442 \u0442\u0440\u0430\u0441\u0441\u044b\/\u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0431\u044b\u043b &#8212; \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e \u043f\u0440\u044f\u043c\u043e\u0439 \u043e\u0442 \u0436\u0438\u043b\u044c\u044f.<\/p>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043e\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u0440\u043e \u044d\u043a\u043e\u043b\u043e\u0433\u0438\u044e \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u043d\u043e\u0432\u043e\u0433\u043e \u0434\u043b\u044f \u043d\u0430\u0441 \u043c\u0435\u0441\u0442\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0435\u0441\u0442\u044c \u0443 \u043f\u0440\u0435\u0444\u0435\u043a\u0442\u0443\u0440\u044b, \u043f\u043e\u043b\u0438\u0446\u0438\u0438 \u0438 \u0431\u0438\u0437\u043d\u0435\u0441\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441 \u0432\u0430\u043c\u0438 \u0435\u0439 \u043d\u0435 \u043f\u043e\u0434\u0435\u043b\u044f\u0442\u0441\u044f. \u0412\u0441\u0435 \u044d\u0442\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442 \u0448\u0430\u043d\u0441 \u043d\u0430 \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440 \u043d\u043e\u0432\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u0436\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430.<\/p>\n<p>\u041d\u043e \u0434\u0430\u0436\u0435 \u0431\u0435\u0437 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u043f\u043e \u043f\u0440\u0430\u0432\u043e\u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u044f\u043c \u0438 \u0431\u0435\u0437 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0437\u0430\u0433\u0440\u044f\u0437\u043d\u0435\u043d\u0438\u0438 \u0432\u043e\u0437\u0434\u0443\u0445\u0430 \u043c\u044b \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0441\u043c\u043e\u0436\u0435\u043c \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u0434\u0438\u0441\u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u044b\u0445 \u043c\u0435\u0441\u0442. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0433\u0435\u043e\u0434\u0430\u043d\u043d\u044b\u0435 OpenStreetMap. <\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043d\u044f\u0442\u044c \u0433\u0434\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u044b \u0431\u044b \u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u0438 \u0436\u0438\u0442\u044c. \u0425\u043e\u0442\u044c \u043e\u043d \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u0444\u0430\u043a\u0442\u043e\u0440\u0430\u0445, \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u043c\u043e\u0435\u043c\u0443 \u043b\u0438\u0447\u043d\u043e\u043c\u0443 \u043c\u043d\u0435\u043d\u0438\u044e \u0438 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 \u0432\u0430\u0448\u0438\u043c\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u044f\u043c\u0438. \u041c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c SQL \u0437\u0430\u043f\u0440\u043e\u0441 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0433\u0435\u043e\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 \u0431\u044b\u043b\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u0432\u0430\u0448 \u043a\u043e\u0448\u043c\u0430\u0440! \u0418 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u0435\u0433\u043e \u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0438\u0446\u044b \u0433\u0435\u043e\u0434\u0430\u043d\u043d\u044b\u043c \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0438\u0445 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435.<\/p>\n<h2>\u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043d\u0430\u0447\u043d\u0435\u043c<\/h2>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u0442\u043e \u0441\u043c\u0435\u043b\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0442\u0435\u043a\u0441\u0442 \u0438 \u043f\u0440\u043e\u043b\u0438\u0441\u0442\u044b\u0432\u0430\u0439\u0442\u0435 \u0434\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 &#171;\u0410\u043d\u0430\u043b\u0438\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u041c\u043e\u0441\u043a\u0432\u044b&#187;.<\/p>\n<h2>\u041f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430<\/h2>\n<p>\u042d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0447\u0442\u043e \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435 \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 PostgreSQL \u0438 Linux. \u042f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0448\u0430\u0433\u0438 \u043d\u0430 Ubuntu, \u0433\u0434\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b git, wget, docker.io<\/p>\n<p>\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c OSM \u0433\u0435\u043e\u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0430\u0439\u0442\u0430 geofabric \u0438 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u041c\u043e\u0441\u043a\u0432\u044b \u043f\u043e \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u0443 Russia_Moscow.poly. <\/p>\n<pre><code class=\"bash\">mkdir moscow &amp;&amp; cd moscow  wget https:\/\/download.geofabrik.de\/russia\/central-fed-district-latest.osm.pbf wget https:\/\/raw.githubusercontent.com\/mapsme\/omim\/master\/data\/borders\/Russia_Moscow.poly docker run -rm -it -w \/wkd -v $(pwd):\/wkd mschilde\/osmium-tool osmium extract --polygon Russia_Moscow.poly central-fed-district-latest.osm.pbf -o moscow.osm.pbf<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0413\u043e\u0442\u043e\u0432\u044b\u0445 \u0432\u044b\u0433\u0440\u0443\u0437\u043e\u043a, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0435 \u043d\u0430\u0448\u0435\u043b<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0414\u0430\u043d\u043d\u044b\u0435 \u0441 \u0441\u0430\u0439\u0442\u0430 <a href=\"https:\/\/download.openstreetmap.fr\/extracts\/russia\/central_federal_district\/\" rel=\"noopener noreferrer nofollow\">https:\/\/download.openstreetmap.fr\/extracts\/russia\/central_federal_district\/<\/a> \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0438\u0446\u044b \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043d\u0435 \u043f\u043e\u043b\u043d\u044b\u0435, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u043e \u043a \u043e\u0448\u0438\u0431\u043a\u0435 <code>location for one or more nodes not found in node location index<\/code>. <\/p>\n<\/div>\n<\/details>\n<p>\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0443\u0442\u0438\u043b\u0438\u0442\u0443 <a href=\"http:\/\/github.com\/igor-suhorukov\/openstreetmap_h3\" rel=\"noopener noreferrer nofollow\">openstreetmap_h3<\/a> \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 OpenStreetMap \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u0432 PostGIS. \u041f\u0440\u043e \u043d\u0435\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0432 <a href=\"https:\/\/habr.com\/ru\/articles\/714326\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0435\u0440\u0438\u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0439<\/a> \u043d\u0430 \u0425\u0430\u0431\u0440\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u0412\u0441\u0435 \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\u043c\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c Docker in Docker \u0434\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u044f \u0441 openstreetmap_h3 \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435 \u043d\u0430\u0434\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c JDK, maven. \u0412\u0441\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u0441\u0431\u043e\u0440\u043a\u0430 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u044b \u0432 \u0434\u043e\u043a\u0435\u0440 \u043e\u0431\u0440\u0430\u0437. \u041d\u0435 \u0441\u0430\u043c\u043e\u0435 \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u043e \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 osmium \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u043a\u0430\u043a \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0432\u0438\u0434\u0435 Docker \u043e\u0431\u0440\u0430\u0437\u0430, \u0430 \u043d\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u0442\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u043a\u0430\u043a \u0435\u0441\u0442\u044c.<\/p>\n<\/div>\n<\/details>\n<pre><code class=\"bash\">git clone https:\/\/github.com\/igor-suhorukov\/openstreetmap_h3.git cd openstreetmap_h3 &amp;&amp; docker build -t openstreetmap_h3 . cd postgis_docker-master &amp;&amp; docker build -t postgres15_postgis .<\/code><\/pre>\n<p>\u0417\u0430\u0445\u043e\u0434\u0438\u043c \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e, \u0433\u0434\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0438 <code>moscow.osm.pbf<\/code> \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c:<\/p>\n<pre><code class=\"bash\">cd moscow docker run -it --rm -w $(pwd) -v $(pwd):\/$(pwd) -v \/var\/run\/docker.sock:\/var\/run\/docker.sock openstreetmap_h3:latest -source_pbf $(pwd)\/moscow.osm.pbf -result_in_tsv true<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0414\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 moscow.osm.pbf \u0431\u0443\u0434\u0443\u0442 \u0433\u043e\u0442\u043e\u0432\u044b \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 PostGIS \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 &#171;moscow_loc_ways&#187; <\/summary>\n<div class=\"spoiler__content\">\n<pre><code>docker run -it --rm -w $(pwd) -v $(pwd):\/$(pwd) -v \/var\/run\/docker.sock:\/var\/run\/docker.sock openstreetmap_h3:latest -source_pbf $(pwd)\/moscow.osm.pbf -result_in_tsv true  [ 0:00] Started osmium add-locations-to-ways [ 0:00]   osmium version 1.14.0 [ 0:00]   libosmium version 2.18.0 [ 0:00] Command line options and default settings: [ 0:00]   input options: [ 0:00]     file names:  [ 0:00]       moscow.osm.pbf [ 0:00]     file format:  [ 0:00]   output options: [ 0:00]     file name: moscow_loc_ways.pbf [ 0:00]     file format: pbf,pbf_compression=none [ 0:00]     generator: osmium\/1.14.0 [ 0:00]     overwrite: no [ 0:00]     fsync: no [ 0:00]   other options: [ 0:00]     index type (for positive ids): sparse_mem_array [ 0:00]     index type (for negative ids): flex_mem [ 0:00]     keep untagged nodes: no [ 0:00]     keep nodes that are relation members: yes [ 0:00]  [ 0:00] Getting all nodes referenced from relations... [ 0:00] Found 40919 nodes referenced from relations. [ 0:00] Copying input file 'moscow.osm.pbf'... [ 0:02] About 78 MBytes used for node location index (in main memory or on disk). [ 0:02] Peak memory used: 809 MBytes [ 0:02] Done.  0 188  time 14295 diff between total and processing 12765 total thread time 57059 total processing time 44294 total save time 4074 total waiting for save time 4120 thread max time 1024 processing max time 767 nodes 419908 ways 991744 relations 85883 relation members 875942 multipolygon count 54309 0[-32768,4520)1004461137288 1[4520,32695)15101138028175 2 10 80.5279955  [ 0:00] Started osmium export [ 0:00]   osmium version 1.14.0 [ 0:00]   libosmium version 2.18.0 [ 0:00] Command line options and default settings: [ 0:00]   input options: [ 0:00]     file name: moscow.osm.pbf [ 0:00]     file format:  [ 0:00]   output options: [ 0:00]     file name: moscow_loc_ways\/multipolygon\/source.tsv [ 0:00]     file format: pg [ 0:00]     overwrite: no [ 0:00]     fsync: yes [ 0:00]   attributes: [ 0:00]     type:      @type [ 0:00]     id:        @id [ 0:00]     version:   (omitted) [ 0:00]     changeset: (omitted) [ 0:00]     timestamp: (omitted) [ 0:00]     uid:       (omitted) [ 0:00]     user:      (omitted) [ 0:00]     way_nodes: (omitted) [ 0:00]   output format options: [ 0:00]     tags_type = hstore [ 0:00]   linear tags: none [ 0:00]   area tags:   one of the following: [ 0:00]     @type=relation [ 0:00]   other options: [ 0:00]     index type: sparse_mem_array [ 0:00]     add unique IDs: no [ 0:00]     keep untagged features: no [ 0:00]  [ 0:00] Create table with something like this: [ 0:00] CREATE EXTENSION IF NOT EXISTS hstore; [ 0:00] CREATE TABLE osmdata ( [ 0:00]     geom      GEOMETRY, -- or GEOGRAPHY [ 0:00]     osm_type  TEXT, [ 0:00]     osm_id    BIGINT, [ 0:00]     tags      hstore [ 0:00] ); [ 0:00] Then load data with something like this: [ 0:00] \\copy osmdata FROM 'moscow_loc_ways\/multipolygon\/source.tsv' [ 0:00]  [ 0:00] First pass (of two) through input file (reading relations)... [ 0:00] First pass done. [ 0:00] Second pass (of two) through input file... Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry Geometry error: Could not build area geometry [ 0:03] About 78 MBytes used for node location index (in main memory or on disk). [ 0:03] Second pass done. [ 0:03] Wrote 55341 features. [ 0:03] Encountered 39 errors. [ 0:03] Peak memory used: 828 MBytes [ 0:03] Done.  cat \/home\/user\/dev\/map\/moscow\/moscow_loc_ways\/multipolygon\/source.tsv | grep $'\\trelation\\t' | split -l 13578 - \/home\/user\/dev\/map\/moscow\/moscow_loc_ways\/multipolygon\/multipolygon_<\/code><\/pre>\n<figure class=\"full-width\"><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 PostGIS. \u042f \u044d\u0442\u043e c\u0434\u0435\u043b\u0430\u044e \u0432 \u0442\u043e\u0439 \u0436\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Docker, \u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u0430\u0448\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b:<\/p>\n<pre><code class=\"bash\">docker run --name postgis15-moscow --memory=12g --memory-swap=12g --memory-swappiness 0 --shm-size=1g -v $(pwd)\/database:\/var\/lib\/postgresql\/data -v<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-354700","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/354700","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=354700"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/354700\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=354700"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=354700"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=354700"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}