{"id":383322,"date":"2024-06-29T04:50:43","date_gmt":"2024-06-29T04:50:43","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=383322"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=383322","title":{"rendered":"<span>\u0413\u0435\u043e\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Python \u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445: \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e<\/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<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/866\/1f4\/763\/8661f4763a85b0ec60ccbabbe5b3c0d4.png\" width=\"998\" height=\"266\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/866\/1f4\/763\/8661f4763a85b0ec60ccbabbe5b3c0d4.png\"\/><figcaption><\/figcaption><\/figure>\n<blockquote>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0431\u0438\u0437\u043d\u0435\u0441 \u0436\u0435\u043b\u0430\u0435\u0442 \u0437\u043d\u0430\u0442\u044c, \u0433\u0434\u0435 \u0441\u0438\u0434\u0438\u0442 <s>\u0444\u0430\u0437\u0430\u043d<\/s> \u0446\u0435\u043b\u0435\u0432\u0430\u044f \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u044f <\/p>\n<\/blockquote>\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u0413\u0435\u043e\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 \u043f\u0440\u0435\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043c\u0435\u043d\u044f \u0432\u043e\u0442 \u0443\u0436\u0435 3 \u0433\u043e\u0434\u0430, \u0441\u043a\u043e\u0440\u043e \u043f\u043e\u0439\u0434\u0435\u0442 4-\u0439. \u041d\u0430\u0447\u0438\u043d\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0435 \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0422\u0430\u043d\u0434\u0435\u0440 (\u041c\u0430\u0433\u043d\u0438\u0442), \u0433\u0434\u0435 \u044f \u0432 \u0440\u043e\u043b\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0414\u0430\u0442\u0430 \u0421\u0430\u0439\u043d\u0442\u0438\u0441\u0442\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u043e\u0440\u043e\u0442 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u043e\u0432, \u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u0411\u0438\u043b\u0430\u0439\u043d\u0435, \u0433\u0434\u0435 \u044f \u0442\u0435\u043f\u0435\u0440\u044c \u0443\u0436\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u043f\u0440\u0435\u0434\u0438\u043a\u0442\u0438\u0432\u043e\u043c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0440\u0438\u0442\u0435\u0439\u043b\u0430, \u043d\u043e \u0438 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432. \u041f\u043e\u043c\u0438\u043c\u043e \u044d\u0442\u043e\u0433\u043e, \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0433\u0435\u043e\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0443 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438\u043d\u0432\u0435\u0441\u0442\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u043e\u0439 \u043d\u0435\u0434\u0432\u0438\u0436\u0438\u043c\u043e\u0441\u0442\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043c\u0438\u043a\u0440\u043e\u0431\u0438\u0437\u043d\u0435\u0441\u043e\u043c \u0438 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0442 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u0431\u044e\u0434\u0436\u0435\u0442\u0430\u043c\u0438 \u0434\u043b\u044f \u0433\u0435\u043e\u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u043e\u0432\u044b\u0445 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439, \u043d\u043e \u0432 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f, \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0442\u044f\u0442 \u0442\u0435\u0440\u044f\u0442\u044c \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0431\u043e\u0440\u0430 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f. \u041f\u0440\u0438\u0441\u0430\u0436\u0438\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u043f\u043e\u0443\u0434\u043e\u0431\u043d\u0435\u0435, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e (\u0430 \u0438\u043c\u0435\u043d\u043d\u043e: \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044f\u043c, \u043c\u0430\u043b\u043e\u043c\u0443 \u0431\u0438\u0437\u043d\u0435\u0441\u0443, \u0433\u0434\u0435 \u0432\u0430\u0436\u0435\u043d \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440 \u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u0438 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430\u043c \u0442\u043e\u0433\u043e \u0441\u0430\u043c\u043e\u0433\u043e \u0431\u0438\u0437\u043d\u0435\u0441\u0430)<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0435\u0439\u0441 &#171;\u041a\u0430\u043a \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043e\u0444\u0435\u0439\u043d\u0438?&#187;. \u0412 \u0446\u0435\u043b\u043e\u043c, \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u043b\u044e\u0431\u044b\u0435 \u0432\u0438\u0434\u044b \u0431\u0438\u0437\u043d\u0435\u0441\u0430, \u0433\u0434\u0435 \u0432\u0430\u0436\u043d\u0430 \u043b\u043e\u043a\u0430\u0446\u0438\u044f \u0438 \u0442\u043e, \u0447\u0442\u043e \u043d\u0430 \u043d\u0435\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\/\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f. <\/p>\n<h2>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435:<\/h2>\n<ul>\n<li>\n<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0433\u0435\u043e\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0443 \u0438 \u0433\u0435\u043e\u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u0430\u043c\u0438: \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u0430\u043c\u0438 (Uber H3), \u043d\u0430\u0443\u0447\u0438\u043c\u0441\u044f \u0438\u0445 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0442\u044c, \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c <\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0433\u0440\u0443\u0437\u043a\u0430, \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u0433\u0435\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 OSM<\/p>\n<\/li>\n<li>\n<p>\u0413\u0434\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043a\u043e\u0444\u0435\u0439\u043d\u044e?<\/p>\n<p><em>\u0411\u0438\u0431\u0438\u043b\u0438\u043e\u0442\u0435\u043a\u0438: geopandas, json, shapely, folium, osmnx, h3 <\/em><\/p>\n<p><em>\u0412\u043e\u043b\u0448\u0435\u0431\u0441\u0442\u0432\u043e: \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 (\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 join) \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u043e\u0432 \u0438 \u0442\u043e\u0447\u0435\u043a, \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0433\u0435\u043e \u0434\u0430\u043d\u043d\u044b\u0445 (\u043d\u0430\u043d\u0435\u0441\u0435\u043d\u0438\u0435 \u0442\u043e\u0447\u0435\u043a\/\u043f\u043e\u043b\u0438\u0433\u043e\u043d\u043e\u0432 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 osm \u0438 \u0435\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435), \u043f\u043e\u0438\u0441\u043a \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0434\u0440. <\/em><\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0433\u0435\u043e\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0443 \u0438 \u0433\u0435\u043e\u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433<\/h2>\n<blockquote>\n<p><strong>\u0413\u0435\u043e\u043c\u0430\u0301\u0440\u043a\u0435\u0442\u0438\u043d\u0433 (\u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433)<\/strong>\u00a0\u2014 \u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u043e\u0432\u0430\u044f \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u0430, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043d\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0435\u0439, \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u043e \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0443, \u0441 \u0446\u0435\u043b\u044c\u044e \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0438 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0441\u0431\u044b\u0442\u0430 \u043f\u0440\u043e\u0434\u0443\u043a\u0446\u0438\u0438 (wikipedia)<\/p>\n<\/blockquote>\n<p>\u041f\u0440\u043e\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, <strong>\u0433\u0435\u043e\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430<\/strong> &#8212; \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0442. \u0435. \u0433\u0435\u043e (\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 (\u043f\u043e\u043b\u0438\u0433\u043e\u043d\u044b, \u043b\u0438\u043d\u0438\u0438 \u0438 \u043f\u0440.)) + \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 (\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430, \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u0432\u044b\u0432\u043e\u0434\u044b), \u0430 <strong>\u0433\u0435\u043e\u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433 <\/strong>&#8212; \u044d\u0442\u043e \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u0430, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043d\u0430 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u0430 \u043f\u0440\u043e\u0436\u0438\u0432\u0430\u044e\u0449\u0435\u0439\/\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0439\/\u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0438 \u0434\u043b\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0431\u0438\u0437\u043d\u0435\u0441\u0430\/\u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u043e\u0432\u044b\u0445 \u043a\u0430\u043c\u043f\u0430\u043d\u0438\u0439 <\/p>\n<p>\u041e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>\u0440\u043e\u0437\u043d\u0438\u0447\u043d\u0430\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u043c\u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u044f (FMCG)<\/p>\n<\/li>\n<li>\n<p>\u0437\u0434\u0440\u0430\u0432\u043e\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 (\u0430\u043f\u0442\u0435\u043a\u0438, \u0447\u0430\u0441\u0442\u043d\u044b\u0435 \u043a\u043b\u0438\u043d\u0438\u043a\u0438)<\/p>\n<\/li>\n<li>\n<p>\u043e\u0431\u0449\u0435\u043f\u0438\u0442 (\u043a\u0430\u0444\u0435, \u0440\u0435\u0441\u0442\u043e\u0440\u0430\u043d\u044b, \u0431\u0430\u0440\u044b)<\/p>\n<\/li>\n<li>\n<p>\u0431\u0430\u043d\u043a\u043e\u0432\u0441\u043a\u0438\u0439 \u0441\u0435\u043a\u0442\u043e\u0440 \u0438 \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u0430\u043d\u0438\u0435<\/p>\n<\/li>\n<li>\n<p>\u0431\u044c\u044e\u0442\u0438 &#8212; \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u044f (\u0441\u0430\u043b\u043e\u043d\u044b \u043a\u0440\u0430\u0441\u043e\u0442\u044b, \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u044b \u043f\u0430\u0440\u0444\u044e\u043c\u0435\u0440\u0438\u0438 \u0438 \u043a\u043e\u0441\u043c\u0435\u0442\u0438\u043a\u0438)<\/p>\n<\/li>\n<li>\n<p>DIY (\u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u044b)<\/p>\n<\/li>\n<li>\n<p>\u0434\u0435\u0432\u0435\u043b\u043e\u043f\u043c\u0435\u043d\u0442 \u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0445 \u0446\u0435\u043d\u0442\u0440\u043e\u0432 \u0438 \u0434\u0440. <\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0438\u043f\u043e\u0432\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438:<\/p>\n<ul>\n<li>\n<p>\u0432\u044b\u0431\u043e\u0440 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430<\/p>\n<\/li>\n<li>\n<p>\u043e\u0446\u0435\u043d\u043a\u0430 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043c\u0430 \u043f\u0440\u043e\u0434\u0430\u0436, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 (\u043c\u0430\u0441\u0441-\u043c\u0430\u0440\u043a\u0435\u0442, \u0431\u0438\u0437\u043d\u0435\u0441, \u043b\u044e\u043a\u0441) \u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u043e\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0446\u0438\u0438\/\u0443\u0441\u043b\u0443\u0433<\/p>\n<\/li>\n<li>\n<p>\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043c\u0435\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430<\/p>\n<\/li>\n<li>\n<p>\u0432\u044b\u0431\u043e\u0440 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043d\u0430\u0440\u0443\u0436\u043d\u043e\u0439 \u0440\u0435\u043a\u043b\u0430\u043c\u044b \u0438 \u0434\u0440. \u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u043e\u0432\u044b\u0445 \u043e\u0444\u0444\u043b\u0430\u0439\u043d \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0435\u0439<\/p>\n<\/li>\n<\/ul>\n<p><strong>4 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0442\u0438:<\/strong><\/p>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/559\/1aa\/ec2\/5591aaec21c9409090a2e4ff282d9e24.png\" alt=\"4 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0442\u0438\" title=\"4 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0442\u0438\" width=\"1906\" height=\"342\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/559\/1aa\/ec2\/5591aaec21c9409090a2e4ff282d9e24.png\"\/><figcaption>4 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0442\u0438<\/figcaption><\/figure>\n<p>1) \u041f\u0435\u0440\u0435\u0445\u0432\u0430\u0442 \u0442\u0440\u0430\u0444\u0438\u043a\u0430<\/p>\n<p>\u042d\u0442\u043e\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u0432 \u0437\u043e\u043d\u0430\u0445 \u0441 \u0432\u044b\u0441\u043e\u043a\u0438\u043c \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u043d\u044b\u043c \u0442\u0440\u0430\u0444\u0438\u043a\u043e\u043c (\u0432\u0430\u0436\u043d\u043e: \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0440\u0430\u0444\u0438\u043a \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0432\u0435\u043d \u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0438 (\u0426\u0410) => \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u0441\u0442\u0430\u0432 \u0426\u0410), \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u0431\u043b\u0438\u0437\u0438 \u0443\u0436\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043e\u0432 (\u0432\u0430\u0436\u043d\u043e: \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e)<\/p>\n<p>2) \u0421\u0438\u043d\u0435\u0440\u0433\u0438\u044f<\/p>\n<p>\u042d\u0444\u0444\u0435\u043a\u0442 \u0441\u0438\u043d\u0435\u0440\u0433\u0438\u0438 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044e \u0441\u043c\u0435\u0436\u043d\u044b\u0445 \u043d\u0438\u0448 \u0431\u0438\u0437\u043d\u0435\u0441\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: \u0440\u044f\u0434\u043e\u043c \u0441 \u0434\u0435\u0442\u0441\u043a\u0438\u043c\u0438 \u0442\u043e\u0432\u0430\u0440\u0430\u043c\u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u0433\u0430\u0437\u0438\u043d \u0441 \u0442\u043e\u0432\u0430\u0440\u0430\u043c\u0438 \u0434\u043b\u044f \u0434\u043e\u043c\u0430\/\u043c\u0430\u043c \u0438 \u043f\u0440.<\/p>\n<p>3) \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c<\/p>\n<p>\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0438\u0445 \u0443\u0441\u0438\u043b\u0438\u0439 (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Principle_of_least_effort\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435<\/a>) &#8212; \u044d\u0442\u043e\u00a0\u00a0 \u043f\u0440\u0438\u043d\u0446\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u0442\u043e\u043c, \u0447\u0442\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u043f\u043e \u043f\u0440\u0438\u0440\u043e\u0434\u0435 \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0441\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0438\u0442\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u0443\u0441\u0438\u043b\u0438\u0439 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0433\u043e. \u041f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439\u00a0\u00a0\u2013 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0439\u0434\u0451\u0442 \u0442\u0443\u0434\u0430, \u0433\u0434\u0435 \u0431\u043b\u0438\u0436\u0435\/\u043f\u0440\u0438\u0432\u044b\u0447\u043d\u0435\u0435\/\u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u0435\u0435. \u041a\u0440\u0438\u0442\u0435\u0440\u0438\u0438: \u0440\u0430\u0434\u0438\u0443\u0441 \u043e\u0445\u0432\u0430\u0442\u0430, \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u043d\u0430\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c, \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u0430\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c <\/p>\n<p>4) \u041a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f<\/p>\n<p>\u0422\u043e\u0440\u0433\u043e\u0432\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u044b (\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u043d\u0430 \u0433\u0440\u0443\u043f\u043f\u044b) \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f\u043c: \u0431\u044e\u0434\u0436\u0435\u0442 \u0440\u0430\u0439\u043e\u043d\u0430, \u0442\u0438\u043f \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u043d\u043a\u0442\u0430 (\u0431\u043e\u043b\u044c\u0448\u043e\u0439\/\u043c\u0430\u043b\u044b\u0439, \u043f\u043e\u0441\u0435\u043b\u043a\u0438 \u0438 \u043f\u0440.), \u0444\u043e\u0440\u043c\u0430\u0442 \u0442\u043e\u0440\u0433\u043e\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0446\u0435\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0430\u0441\u0441\u043e\u0440\u0442\u0438\u043c\u0435\u043d\u0442\u043d\u043e\u0439 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u0438 \u0442.\u0434.<\/p>\n<p><strong>\u0415\u0433\u043e \u0432\u0435\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, BIG DATA<\/strong><\/p>\n<p>\u0420\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0433\u0435\u043e\u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0442\u0432\u043e\u0440\u0438\u0442\u044c \u043f\u043e\u0442\u0440\u044f\u0441\u0430\u044e\u0449\u0438\u0435 \u0432\u0435\u0449\u0438 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0433\u0435\u043e\u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u043e\u0432\u044b\u0445 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439. <\/p>\n<ul>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432\u044b \u0434\u0435\u043b\u0438\u0442\u0435\u0441\u044c \u0441\u0432\u043e\u0435\u0439 \u0433\u0435\u043e\u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0432\u0435\u0440\u0448\u0430\u044f \u0437\u0432\u043e\u043d\u043a\u0438, \u0441\u043c\u0441, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u0432\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u043c \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442\u0435 \u0432 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u043a\u043e\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0445 \u043f\u043e\u0440\u0442\u0430\u043b\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 web-\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044f\u0441\u044c \u043a WIFI \u0432 \u043a\u0430\u0444\u0435, \u0422\u0426, \u0432\u044b \u0442\u043e\u0436\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442\u0435 \u0432 \u0447\u044c\u044e-\u0442\u043e \u0431\u0430\u0437\u0443<\/p>\n<\/li>\n<\/ul>\n<p>\u0418 \u044d\u0442\u043e \u0435\u0449\u0435 \u043d\u0435 \u0432\u0435\u0441\u044c \u0441\u043f\u0438\u0441\u043e\u043a, \u043d\u043e \u0432\u0430\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u043b\u044e\u0431\u043e\u043c \u0433\u0435\u043e\u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u043e\u0432\u043e\u043c \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u0435\u0437\u043b\u0438\u0447\u0435\u043d\u044b \u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a: &#171;\u0432 \u0440\u0430\u0434\u0438\u0443\u0441\u0435 500 \u043c \u043f\u0440\u043e\u0436\u0438\u0432\u0430\u0435\u0442 666 \u0436\u0435\u043d\u0449\u0438\u043d \u0438 999 \u043c\u0443\u0436\u0447\u0438\u043d&#187;<\/p>\n<p>\u041a\u0430\u043a\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0433\u0435\u043e\u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u043e\u0432\u043e\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043b\u043e\u043a\u0430\u0446\u0438\u0438?<\/p>\n<p>\u0422\u0440\u0430\u0444\u0438\u043a (\u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0439, \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u043d\u044b\u0439):<\/p>\n<ul>\n<li>\n<p>\u0410\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c (\u043a\u043e\u043b-\u0432\u043e \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u043e\u0432, \u043a\u043e\u043b-\u0432\u043e \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439, \u043a\u043e\u043b-\u0432\u043e \u043f\u0440\u043e\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0445\/\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445)<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u043e &#8212; \u0434\u0435\u043c\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c: \u043f\u043e\u043b, \u0432\u043e\u0437\u0440\u0430\u0441\u0442, \u0434\u043e\u0445\u043e\u0434\u044b<\/p>\n<\/li>\n<li>\n<p>\u042d\u043a\u043e\u043d\u043e\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c: \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0447\u0435\u043a\u043e\u0432 \u043f\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f\u043c \u043f\u043e\u043a\u0443\u043f\u043e\u043a, \u0441\u0440\u0435\u0434\u043d\u0438\u0439 \u0447\u0435\u043a (\u041e\u0424\u0414)<\/p>\n<\/li>\n<li>\n<p>\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u044b (\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u044b \u043d\u0430 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445, \u0447\u0430\u0441\u0442\u043e \u043f\u043e\u0441\u0435\u0449\u0430\u0435\u043c\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u0438 \u043f\u0440.) \u0438 \u0434\u0440. <\/p>\n<\/li>\n<\/ul>\n<p>\u0413\u0435\u043e\u0434\u0430\u043d\u043d\u044b\u0435:<\/p>\n<ul>\n<li>\n<p>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u043e\u0432, \u0448\u043a\u043e\u043b, \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a, \u043e\u0444\u0438\u0441\u043e\u0432, \u0422\u0426, \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432, \u043f\u0430\u0440\u043a\u043e\u0432, \u0434\u043e\u0441\u0442\u043e\u043f\u0440\u0438\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439, \u0432 \u043e\u0431\u0449\u0435\u043c &#8212; \u0432\u0441\u0435, \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0438\u0439 \u0434\u0435\u043d\u044c, \u0443\u0441\u043b\u0443\u0433\u0438 \u043f\u043e \u0433\u0435\u043e\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0435, \u0433\u0435\u043e\u043c\u0435\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u0443, \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u0413\u0418\u0421 &#8212; \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 &#8212; \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u044b \u0442\u0430\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0440\u044f\u0434\u0447\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043a\u0443\u043f\u0430\u044e\u0442 \u0443 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0435\u0432. <\/p>\n<figure class=\"float full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/21d\/fd6\/947\/21dfd6947c02e01c4e5645ec2c073ce1.jpg\" width=\"714\" height=\"682\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/21d\/fd6\/947\/21dfd6947c02e01c4e5645ec2c073ce1.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u042d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043c\u043e\u0449\u043d\u044b\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u0440\u0438\u0441\u043a &#171;\u0432\u043b\u043e\u0436\u0438\u0442\u044c \u043a\u0443\u0447\u0443 \u0434\u0435\u043d\u0435\u0433 \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435, \u043d\u043e \u043f\u0440\u043e\u0433\u0430\u0434\u0430\u0442\u044c \u0441 \u043c\u0435\u0441\u0442\u043e\u043c&#187;, \u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0441\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0438 \u0438\u0445 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0442\u044c. \u0424\u0435\u0434\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0442\u0438 \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043e\u0442\u0434\u0435\u043b\u044b \u0433\u0435\u043e\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0437\u0430\u043a\u0443\u043f\u0430\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435. \u041d\u043e \u043a\u0430\u043a \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044f\u043c \u0438 \u043c\u0438\u043a\u0440\u043e \u0431\u0438\u0437\u043d\u0435\u0441\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0433\u043e\u0442\u043e\u0432 \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b?<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b &#8212; \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a, \u0432\u043b\u0430\u0434\u0435\u044e\u0449\u0438\u0439 Python, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\/\u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b \u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u0431\u0438\u0437\u043d\u0435\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0449\u0435\u0442 \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f, \u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0445\u043e\u0436\u0438\u0439, \u043a\u043e\u0442, \u0431\u043e\u0442 &#8212; \u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0438 \u0434\u0430\u0439\u0442\u0435 \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0432\u044f\u0437\u044c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445. \u042d\u0442\u043e \u043c\u043e\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f, \u043d\u043e, \u0435\u0441\u043b\u0438 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c, \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435=)<\/p>\n<h3>\u0413\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u044b (H3: Uber\u2019s Hexagonal Hierarchical Spatial Index)<\/h3>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/db8\/527\/50a\/db852750af163ebb5e5f93fed0ad6703.png\" width=\"768\" height=\"384\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/db8\/527\/50a\/db852750af163ebb5e5f93fed0ad6703.png\"\/><figcaption><\/figcaption><\/figure>\n<p>Uber \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b open source \u043f\u0440\u043e\u0435\u043a\u0442, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u043d\u0435\u0441\u0442\u0438 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438 \ud83d\ude42 <a href=\"https:\/\/eng.uber.com\/h3\/\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435<\/a>.<\/p>\n<p>\u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0438\u043c\u043f\u043e\u0440\u0442 \u0432\u0441\u0435\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a:<\/p>\n<pre><code class=\"python\">import geopandas as gpd import pandas as pd import numpy as np import json import h3 import folium import osmnx as ox from shapely import wkt from folium.plugins import HeatMap from shapely.geometry import Polygon<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d \u0434\u043b\u044f \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0432 \u0433. \u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440:<\/p>\n<pre><code class=\"python\">def visualize_hexagons(hexagons, color=\"red\", folium_map=None):      polylines = []     lat = []     lng = []     for hex in hexagons:         polygons = h3.h3_set_to_multi_polygon([hex], geo_json=False)         outlines = [loop for polygon in polygons for loop in polygon]         polyline = [outline + [outline[0]] for outline in outlines][0]         lat.extend(map(lambda v:v[0],polyline))         lng.extend(map(lambda v:v[1],polyline))         polylines.append(polyline)          if folium_map is None:         m = folium.Map(location=[sum(lat)\/len(lat), sum(lng)\/len(lng)], zoom_start=20, tiles='cartodbpositron')     else:         m = folium_map              for polyline in polylines:         my_PolyLine=folium.PolyLine(locations=polyline,weight=8,color=color)         m.add_child(my_PolyLine)     return m    h3_address = h3.geo_to_h3(45.035470, 38.975313,  9) # 9 - \u0438\u043d\u0434\u0435\u043a\u0441, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u0430                                                                                                      visualize_hexagons([h3_address])<\/code><\/pre>\n<p><a href=\"https:\/\/h3geo.org\/docs\/core-library\/restable\/\" rel=\"noopener noreferrer nofollow\">\u0420\u0430\u0437\u043c\u0435\u0440\u044b \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u043e\u0432<\/a>: <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/39c\/504\/b84\/39c504b84dbbc30ada261df18513a4ba.png\" width=\"851\" height=\"425\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/39c\/504\/b84\/39c504b84dbbc30ada261df18513a4ba.png\"\/><figcaption><\/figcaption><\/figure>\n<h2>OSM<\/h2>\n<p>OSM \u0438\u043b\u0438 Open Street Map &#8212;  \u044d\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 \u0441 \u0433\u0435\u043e\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043c\u0438\u0440\u0443. <a href=\"https:\/\/ru.wikipedia.org\/wiki\/OpenStreetMap\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0435<\/a>.<\/p>\n<p><a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/RU:%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B_%D0%BA%D0%B0%D1%80%D1%82%D1%8B\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043a\u0430\u0440\u0442\u044b<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e osmnx \u0438 h3 \u0441\u043e\u0442\u0432\u043e\u0440\u0438\u043c \u043c\u0430\u0433\u0438\u044e \u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u043c \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u0430 \u0433. \u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440\u0430:<\/p>\n<p>1) \u0412\u044b\u0433\u0440\u0443\u0437\u0438\u043c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0433. \u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440\u0430 \u0438\u0437 OSM<\/p>\n<pre><code class=\"python\">def visualize_polygons(geometry):          lats, lons = get_lat_lon(geometry)          m = folium.Map(location=[sum(lats)\/len(lats), sum(lons)\/len(lons)], zoom_start=13, tiles='cartodbpositron')          overlay = gpd.GeoSeries(geometry).to_json()     folium.GeoJson(overlay, name = 'boundary').add_to(m)          return m  # \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0446\u0435\u043d\u0442\u0440\u043e\u0438\u0434\u044b \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u043e\u0432 def get_lat_lon(geometry):              lon = geometry.apply(lambda x: x.x if x.type == 'Point' else x.centroid.x)     lat = geometry.apply(lambda x: x.y if x.type == 'Point' else x.centroid.y)     return lat, lon    # \u0432\u044b\u0433\u0440\u0443\u0437\u0438\u043c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440\u0430 \u0438\u0437 OSM cities = ['\u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440'] polygon_krd = ox.geometries_from_place(cities, {'boundary':'administrative'}).reset_index() polygon_krd = polygon_krd[(polygon_krd['name'] == '\u0433\u043e\u0440\u043e\u0434\u0441\u043a\u043e\u0439 \u043e\u043a\u0440\u0443\u0433 \u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440')] # \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c visualize_polygons(polygon_krd['geometry'])<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3eb\/820\/c05\/3eb820c05b0fda04c2894fd8e1b2e848.png\" width=\"851\" height=\"425\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3eb\/820\/c05\/3eb820c05b0fda04c2894fd8e1b2e848.png\"\/><figcaption><\/figcaption><\/figure>\n<p>2) \u0421\u0433\u0435\u043d\u0435\u0440\u0438\u043c \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u0430:<\/p>\n<pre><code class=\"python\">def create_hexagons(geoJson):          polyline = geoJson['coordinates'][0]      polyline.append(polyline[0])     lat = [p[0] for p in polyline]     lng = [p[1] for p in polyline]     m = folium.Map(location=[sum(lat)\/len(lat), sum(lng)\/len(lng)], zoom_start=13, tiles='cartodbpositron')     my_PolyLine=folium.PolyLine(locations=polyline,weight=8,color=\"green\")     m.add_child(my_PolyLine)      hexagons = list(h3.polyfill(geoJson, 8))     polylines = []     lat = []     lng = []     for hex in hexagons:         polygons = h3.h3_set_to_multi_polygon([hex], geo_json=False)         # flatten polygons into loops.         outlines = [loop for polygon in polygons for loop in polygon]         polyline = [outline + [outline[0]] for outline in outlines][0]         lat.extend(map(lambda v:v[0],polyline))         lng.extend(map(lambda v:v[1],polyline))         polylines.append(polyline)     for polyline in polylines:         my_PolyLine=folium.PolyLine(locations=polyline,weight=3,color='red')         m.add_child(my_PolyLine)              polylines_x = []     for j in range(len(polylines)):         a = np.column_stack((np.array(polylines[j])[:,1],np.array(polylines[j])[:,0])).tolist()         polylines_x.append([(a[i][0], a[i][1]) for i in range(len(a))])              polygons_hex = pd.Series(polylines_x).apply(lambda x: Polygon(x))              return m, polygons_hex, polylines # polygon_hex , polylines - \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u043e\u0432 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445  # \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u043c \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u0430 \u0433. \u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440 geoJson = json.loads(gpd.GeoSeries(polygon_krd['geometry']).to_json()) geoJson = geoJson['features'][0]['geometry'] geoJson = {'type':'Polygon','coordinates': [np.column_stack((np.array(geoJson['coordinates'][0])[:, 1],                                                       np.array(geoJson['coordinates'][0])[:, 0])).tolist()]}  m, polygons, polylines = create_hexagons(geoJson) m<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7c1\/9dc\/55b\/7c19dc55b673c1aa6e4fb8b80b8c5d13.png\" width=\"975\" height=\"504\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7c1\/9dc\/55b\/7c19dc55b673c1aa6e4fb8b80b8c5d13.png\"\/><figcaption><\/figcaption><\/figure>\n<h2>\u0412\u044b\u0433\u0440\u0443\u0437\u043a\u0430, \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u0433\u0435\u043e\u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 OSM<\/h2>\n<p>\u0412\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043a\u0430\u0440\u0442\u044b \u0438\u0437 OSM:<\/p>\n<pre><code class=\"python\">def osm_query(tag, city):     gdf = ox.geometries_from_place(city, tag).reset_index()     gdf['city'] = np.full(len(gdf), city.split(',')[0])     gdf['object'] = np.full(len(gdf), list(tag.keys())[0])     gdf['type'] = np.full(len(gdf), tag[list(tag.keys())[0]])     gdf = gdf[['city', 'object', 'type', 'geometry']]     print(gdf.shape)     return gdf     # \u0412\u044b\u0433\u0440\u0443\u0437\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0441 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432  tags = [         {'building' : 'apartments'}, {'building' : 'detached'},          {'building' : 'dormitory'}, {'building' : 'hotel'},          {'building' : 'house'}, {'building' : 'semidetached_house'},          {'building' : 'terrace'},  {'building' : 'commercial'},         {'building' : 'office'},  {'building' : 'terrace'},           {'building' : 'terrace'}, {'building':'retail'},          {'building':'train_station'},         {'highway' : 'bus_stop'}, {'footway':'crossing'},         {'amenity':'cafe'}, {'amenity':'fast_food'},          {'amenity':'restaurant'}, {'amenity':'college'},          {'amenity':'language_school'},  {'amenity':'school'},           {'amenity':'university'},  {'amenity':'atm'},           {'amenity':'bank'},  {'amenity':'clinic'},           {'amenity':'hospital'},  {'amenity':'pharmacy'},           {'amenity':'theatre'},  {'amenity':'townhall'},           {'amenity':'bench'},         ] cities = ['\u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440, \u0420\u043e\u0441\u0441\u0438\u044f']  gdfs = [] for city in cities:     for tag in tags:         gdfs.append(osm_query(tag, city))          # \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c data_poi = pd.concat(gdfs) data_poi.groupby(['city','object','type'], as_index = False).agg({'geometry':'count'})  # \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b\/\u0446\u0435\u043d\u0442\u0440\u043e\u0438\u0434\u044b lat, lon = get_lat_lon(data_poi['geometry']) data_poi['lat'] = lat data_poi['lon'] = lon<\/code><\/pre>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b04\/570\/192\/b04570192b8670302456d4157dfa21a2.png\" width=\"361\" height=\"239\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b04\/570\/192\/b04570192b8670302456d4157dfa21a2.png\"\/><figcaption><\/figcaption><\/figure>\n<h2>Spatial Join<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0441\u0434\u0436\u043e\u0439\u043d\u0438\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441 \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u0430\u043c\u0438:<\/p>\n<pre><code class=\"python\"># sjoin - spatial join - \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0435\u043c \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u044b \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 (\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043a\u0430\u043a\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u0440\u0435\u0437\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u0430)  gdf_1 = gpd.GeoDataFrame(data_poi, geometry=gpd.points_from_xy(data_poi.lon, data_poi.lat))  gdf_2 = pd.DataFrame(polygons, columns = ['geometry']) gdf_2['polylines'] = polylines gdf_2['geometry'] = gdf_2['geometry'].astype(str) geometry_uniq = pd.DataFrame(gdf_2['geometry'].drop_duplicates()) geometry_uniq['id'] = np.arange(len(geometry_uniq)).astype(str) gdf_2 = gdf_2.merge(geometry_uniq, on = 'geometry') gdf_2['geometry'] = gdf_2['geometry'].apply(wkt.loads) gdf_2 = gpd.GeoDataFrame(gdf_2, geometry='geometry')  itog_table = gpd.sjoin(gdf_2, gdf_1, how='left', op='intersects') itog_table = itog_table.dropna() itog_table.head()<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b7c\/f89\/415\/b7cf8941585a4375570959f4c3e274fc.png\" width=\"928\" height=\"239\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b7c\/f89\/415\/b7cf8941585a4375570959f4c3e274fc.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u043f\u043e \u0433\u043e\u0440\u043e\u0434\u0443 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u043a\u043e\u0444\u0435\u0439\u043d\u0438:<\/p>\n<pre><code class=\"python\">def create_choropleth(data, json, columns, legend_name, feature, bins):          lat, lon = get_lat_lon(data['geometry'])      m = folium.Map(location=[sum(lat)\/len(lat), sum(lon)\/len(lon)], zoom_start=13, tiles='cartodbpositron')          folium.Choropleth(         geo_data=json,         name=\"choropleth\",         data=data,         columns=columns,         key_on=\"feature.id\",         fill_color=\"YlGn\",         fill_opacity=0.7,         line_opacity=0.2,         legend_name=legend_name,         nan_fill_color = 'black',         bins = bins      ).add_to(m)      folium.LayerControl().add_to(m)      return m    # \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435  itog_table['geometry'] = itog_table['geometry'].astype(str) #\u0434\u043b\u044f groupby itog_table['id'] = itog_table['id'].astype(str) #\u0434\u043b\u044f Choropleth agg_all = itog_table.groupby(['geometry','type','id'], as_index = False).agg({'lat':'count'}).rename(columns = {'lat':'counts'}) agg_all['geometry'] = agg_all['geometry'].apply(wkt.loads) #\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0444\u043e\u0440\u043c\u0430\u0442 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0439  agg_all_cafe = agg_all.query(\"type == 'cafe'\")[[\"geometry\",\"counts\",'id']] agg_all_cafe['id'] = agg_all_cafe['id'].astype(str) data_geo_1 = gpd.GeoSeries(agg_all_cafe.set_index('id')[\"geometry\"]).to_json()  create_choropleth(agg_all_cafe, data_geo_1, [\"id\",\"counts\"], 'Cafe counts', 'counts', 5)     <\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/529\/127\/2d2\/5291272d2a73221bfd794c72b9a1746e.png\" width=\"887\" height=\"405\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/529\/127\/2d2\/5291272d2a73221bfd794c72b9a1746e.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412\u044b\u0433\u0440\u0443\u0437\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0443\u044e \u0438\u043d\u0444\u0443 \u043e \u0436\u0438\u043b\u044b\u0445 \u043c\u043d\u043e\u0433\u043e\u044d\u0442\u0430\u0436\u043d\u044b\u0445 \u0437\u0434\u0430\u043d\u0438\u044f\u0445:<\/p>\n<pre><code class=\"python\">gdf_aparts = ox.geometries_from_place(city, {'building' : 'apartments'}).reset_index() # \u043f\u043e\u043b\u043d\u043e\u0442\u0430 building:levels (\u044d\u0442\u0430\u0436\u0438) print(np.round(len(gdf_aparts['building:levels'].dropna())\/len(gdf_aparts['building:levels']), 2))  # \u043f\u043e\u043b\u043d\u043e\u0442\u0430 building:flats (\u043a\u0432\u0430\u0440\u0442\u0438\u0440\u044b) print(np.round(len(gdf_aparts['building:flats'].dropna())\/len(gdf_aparts['building:flats']), 2))parts['building:flats'].dropna())\/len(gdf_aparts['building:flats']), 2)<\/code><\/pre>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u044e\u0434\u0435\u0439 \u043f\u0440\u043e\u0436\u0438\u0432\u0430\u0435\u0442 \u0432 \u044d\u0442\u0438\u0445 \u0434\u043e\u043c\u0430\u0445, \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u044f\u0441\u044c \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445:<\/p>\n<p><strong>Ok, \u0413\u0443\u0433\u043b: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u043a\u0432\u0430\u0440\u0442\u0438\u0440 \u043d\u0430 \u044d\u0442\u0430\u0436\u0435?<\/strong><\/p>\n<p>\u0413\u0443\u0433\u043b \u0432\u0435\u0449\u0430\u0435\u0442, \u0447\u0442\u043e \u043a\u043e\u043b-\u0432\u043e \u043a\u0432\u0430\u0440\u0442\u0438\u0440 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 \u0436\u0438\u043b\u044c\u044f:<\/p>\n<ul>\n<li>\n<p>\u044d\u043a\u043e\u043d\u043e\u043c &#8212; \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c 10<\/p>\n<\/li>\n<li>\n<p>\u043a\u043e\u043c\u0444\u043e\u0440\u0442 &#8212; \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c 6-8<\/p>\n<\/li>\n<li>\n<p>\u0431\u0438\u0437\u043d\u0435\u0441 &#8212; \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c 4-6<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u044b \u043c\u043e\u0436\u0435\u043c (\u043a\u0430\u043a \u043e\u0442\u0447\u0430\u044f\u043d\u043d\u044b\u0435 \u0434\u0430\u0442\u0430 &#8212; \u0441\u0430\u0442\u0430\u043d\u0438\u0441\u0442\u044b) \u0443\u0433\u043b\u0443\u0431\u0438\u0442\u044c\u0441\u044f \u0432 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u0438 \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0430\u0432\u0438\u0442\u043e\/\u0446\u0438\u0430\u043d \u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438 1 \u043a\u0432. \u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0434\u0430 \u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c \u043d\u0435\u0434\u0432\u0438\u0436\u0438\u043c\u043e\u0441\u0442\u0438 \u0431\u0443\u0434\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0441 OSM<\/p>\n<p>\u041d\u043e \u043c\u044b \u0437\u0434\u0435\u0441\u044c \u0441\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u043d\u0435 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0430\u0432\u0438\u0442\u043e\/\u0446\u0438\u0430\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c 10 \u043a\u0432\u0430\u0440\u0442\u0438\u0440 \u043d\u0430 \u044d\u0442\u0430\u0436 (\u0434\u043e\u043b\u044f \u0431\u0438\u0437\u043d\u0435\u0441 \u0438 \u043a\u043e\u043c\u0444\u043e\u0440\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 \u043d\u0435 \u0442\u0430\u043a \u0432\u0435\u043b\u0438\u043a\u0430 \u0432 \u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440\u0435)<\/p>\n<pre><code class=\"python\"># \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0444\u0438\u0447\u0443 - \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435  lat_g, lon_g = get_lat_lon(gdf_aparts['geometry']) gdf_aparts['lat'] = lat_g gdf_aparts['lon'] = lon_g  itog_table_people = itog_table.merge(gdf_aparts[['lat', 'lon', 'building:levels']], on = ['lat', 'lon'], how = 'left') itog_table_people['building:levels'] = itog_table_people['building:levels'].fillna(1) itog_table_people = itog_table_people.rename(columns = {'building:levels' : 'levels'})  apartments = ['apartments' , 'dormitory'] houses = ['house', 'semidetached_house', 'detached', 'terrace'] people_ctn = []  # \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u0432\u043e\u0437\u044c\u043c\u0435\u043c 3 \u0447\u0435\u043b. \u043d\u0430 \u0441\u0435\u043c\u044c\u044e  for i in range(len(itog_table_people)):          if itog_table_people['type'].iloc[i] in apartments:                  people = int(itog_table_people['levels'].iloc[i])*10*3              elif itog_table_people['type'].iloc[i] in houses:                  people = int(itog_table_people['levels'].iloc[i])*3              else:         people = 'not living area'              people_ctn.append(people)      itog_table_people['count_people'] = people_ctn  table_people = itog_table_people.query(\"count_people != 'not living area'\") table_people['count_people'] = table_people['count_people'].astype(int)<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0432\u044b\u0448\u043b\u043e \u0441 \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c\u044e &#171;\u0433\u0438\u043f\u043e\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e&#187; \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f \u0432 \u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440\u0435:<\/p>\n<pre><code class=\"python\">def create_heatmap(data, lat_lon_feature):          m = folium.Map(location=[sum(data['lat'])\/len(data['lat']), sum(data['lon'])\/len(data['lon'])], zoom_start=13, tiles='cartodbpositron')          HeatMap(data[lat_lon_feature].groupby(lat_lon_feature[0:2]).sum().reset_index().values.tolist(),                      radius = 70, min_opacity = 0.05, max_val = int((data[lat_lon_feature[2]]).quantile([0.75])), blur=30).add_to(m)     return m    # \u043a\u0430\u0440\u0442\u0430 \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f create_heatmap(table_people, ['lat', 'lon', 'count_people'])<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3ae\/1d4\/0b1\/3ae1d40b1fed0c701c9ffe2d69ddddd0.png\" alt=\"\u043b\u044f \u043a\u0430\u043a\u0430\u044f \u043a\u0440\u0430\u0441\u043e\u0442\u0430 (\u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0442\u043e\u0447\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0443 OSM, \u043d\u043e \u0434\u0430\u0440\u0435\u043d\u043e\u043c\u0443 \u043a\u043e\u043d\u044e \u0432 \u0437\u0443\u0431\u044b \u043d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f\u0442!)\" title=\"\u043b\u044f \u043a\u0430\u043a\u0430\u044f \u043a\u0440\u0430\u0441\u043e\u0442\u0430 (\u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0442\u043e\u0447\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0443 OSM, \u043d\u043e \u0434\u0430\u0440\u0435\u043d\u043e\u043c\u0443 \u043a\u043e\u043d\u044e \u0432 \u0437\u0443\u0431\u044b \u043d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f\u0442!)\" width=\"946\" height=\"564\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3ae\/1d4\/0b1\/3ae1d40b1fed0c701c9ffe2d69ddddd0.png\"\/><figcaption>\u043b\u044f \u043a\u0430\u043a\u0430\u044f \u043a\u0440\u0430\u0441\u043e\u0442\u0430 (\u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0442\u043e\u0447\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0443 OSM, \u043d\u043e \u0434\u0430\u0440\u0435\u043d\u043e\u043c\u0443 \u043a\u043e\u043d\u044e \u0432 \u0437\u0443\u0431\u044b \u043d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f\u0442!)<\/figcaption><\/figure>\n<h2>\u0413\u0434\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043a\u043e\u0444\u0435\u0439\u043d\u044e? \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043b\u0443\u0447\u0448\u0435\u0435 \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u044f<\/h2>\n<p>\u0413\u0434\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043a\u043e\u0444\u0435\u0439\u043d\u044e? \u0412\u043e\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u0430 \u0441\u044e\u0434\u0430 \u044f \u043f\u0440\u0438\u0448\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0442\u0432\u043e\u0440\u0438\u0442\u044c <s>\u043c\u0430\u0433\u0438\u044e<\/s> \u0433\u0435\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0443 \u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u041b\u043e\u0433\u0438\u0447\u043d\u043e, \u0447\u0442\u043e \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u043b\u044e\u0434\u0435\u0439 \u0438 \u043c\u0430\u043b\u043e \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043e\u0432, \u0442. \u0435. \u044f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0432\u0430\u043c \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0444\u0438\u0447\u0443 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435\/\u043a\u043e\u043b-\u0432\u043e \u043a\u043e\u0444\u0435\u0435\u043d \u0432 \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u0435. \u0422\u0430\u043a \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0422\u041e\u041f \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u044b \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0441\u0442 \u0434\u043b\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043e\u0444\u0435\u0439\u043d\u0438. \u0418\u0442\u043e\u0433\u043e:<\/p>\n<ol>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0444\u0438\u0447\u0443 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435\/\u043a\u043e\u043b-\u0432\u043e \u043a\u043e\u0444\u0435\u0435\u043d \u0432 \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0431\u0435\u0440\u0435\u043c \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d \u0441 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0431\u0435\u0440\u0435\u043c \u044d\u0442\u043e\u0442 \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d \u0438 \u0435\u0433\u043e 6 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 (\u0431\u044b\u0441\u0442\u0440\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e KDTree \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 scipy), \u0447\u0442\u043e\u0431\u044b \u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u043f\u043e\u0436\u0430\u0440\u043d\u044b\u0439 \u043d\u0435 \u0443\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0438\u0437-\u0437\u0430 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u043f\u0435\u0440\u0435\u043a\u043e\u0441\u043e\u0432 \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 OSM (\u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e).<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0430\u0432\u0438\u0442\u043e\/\u0446\u0438\u0430\u043d \u0438 \u0438\u0449\u0435\u043c \u0442\u0430\u043c \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043a\u043e\u0444\u0435\u0439\u043d\u0438.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/ac4\/66b\/ae3\/ac466bae3a9b72b04f70210251b0376a.jpg\" width=\"1000\" height=\"749\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ac4\/66b\/ae3\/ac466bae3a9b72b04f70210251b0376a.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041a\u0430\u043a\u0438\u0435 \u0435\u0449\u0435 \u0444\u0438\u0447\u0438 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0442\u044c?<\/p>\n<ul>\n<li>\n<p>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044f\u043a\u043e\u0440\u0435\u0439 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 (\u0422\u0426, \u0411\u0426, \u0444\u0430\u0441\u0442 \u0444\u0443\u0434 \u0440\u0435\u0441\u0442\u043e\u0440\u0430\u043d\u044b, \u0441\u0443\u043f\u0435\u0440\u043c\u0430\u0440\u043a\u0435\u0442\u044b \u0438 \u0442. \u0434.) \u043f\u043e\u0434\u0435\u043b\u0438\u043c \u043d\u0430 \u043a\u043e\u043b-\u0432\u043e \u043a\u043e\u0444\u0435\u0435\u043d\/\u043d\u0430 \u043a\u043e\u043b-\u0432\u043e \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>Huff (\u0430 \u0432\u043e\u0442 \u043f\u0440\u043e \u043c\u043e\u0434\u0435\u043b\u044c Huff \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u043e\u0437\u0436\u0435 \ud83d\ude42<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/84a\/3fa\/14e\/84a3fa14e72f9a2900a2976ec7cd4131.jpg\" width=\"1403\" height=\"934\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/84a\/3fa\/14e\/84a3fa14e72f9a2900a2976ec7cd4131.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041c\u043e\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0430 Habr. \u041d\u0435 \u043a\u0438\u0434\u0430\u0439\u0442\u0435 \u043f\u043e\u043c\u0438\u0434\u043e\u0440\u044b \ud83d\ude42<\/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\/579838\/\"> https:\/\/habr.com\/ru\/articles\/579838\/<\/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<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<blockquote>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0431\u0438\u0437\u043d\u0435\u0441 \u0436\u0435\u043b\u0430\u0435\u0442 \u0437\u043d\u0430\u0442\u044c, \u0433\u0434\u0435 \u0441\u0438\u0434\u0438\u0442 <s>\u0444\u0430\u0437\u0430\u043d<\/s> \u0446\u0435\u043b\u0435\u0432\u0430\u044f \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u044f <\/p>\n<\/blockquote>\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u0413\u0435\u043e\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 \u043f\u0440\u0435\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043c\u0435\u043d\u044f \u0432\u043e\u0442 \u0443\u0436\u0435 3 \u0433\u043e\u0434\u0430, \u0441\u043a\u043e\u0440\u043e \u043f\u043e\u0439\u0434\u0435\u0442 4-\u0439. \u041d\u0430\u0447\u0438\u043d\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0435 \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0422\u0430\u043d\u0434\u0435\u0440 (\u041c\u0430\u0433\u043d\u0438\u0442), \u0433\u0434\u0435 \u044f \u0432 \u0440\u043e\u043b\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0414\u0430\u0442\u0430 \u0421\u0430\u0439\u043d\u0442\u0438\u0441\u0442\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u043e\u0440\u043e\u0442 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u043e\u0432, \u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u0411\u0438\u043b\u0430\u0439\u043d\u0435, \u0433\u0434\u0435 \u044f \u0442\u0435\u043f\u0435\u0440\u044c \u0443\u0436\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u043f\u0440\u0435\u0434\u0438\u043a\u0442\u0438\u0432\u043e\u043c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0440\u0438\u0442\u0435\u0439\u043b\u0430, \u043d\u043e \u0438 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432. \u041f\u043e\u043c\u0438\u043c\u043e \u044d\u0442\u043e\u0433\u043e, \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0433\u0435\u043e\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0443 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438\u043d\u0432\u0435\u0441\u0442\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u043e\u0439 \u043d\u0435\u0434\u0432\u0438\u0436\u0438\u043c\u043e\u0441\u0442\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043c\u0438\u043a\u0440\u043e\u0431\u0438\u0437\u043d\u0435\u0441\u043e\u043c \u0438 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0442 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u0431\u044e\u0434\u0436\u0435\u0442\u0430\u043c\u0438 \u0434\u043b\u044f \u0433\u0435\u043e\u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u043e\u0432\u044b\u0445 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439, \u043d\u043e \u0432 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f, \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0442\u044f\u0442 \u0442\u0435\u0440\u044f\u0442\u044c \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0431\u043e\u0440\u0430 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f. \u041f\u0440\u0438\u0441\u0430\u0436\u0438\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u043f\u043e\u0443\u0434\u043e\u0431\u043d\u0435\u0435, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e (\u0430 \u0438\u043c\u0435\u043d\u043d\u043e: \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044f\u043c, \u043c\u0430\u043b\u043e\u043c\u0443 \u0431\u0438\u0437\u043d\u0435\u0441\u0443, \u0433\u0434\u0435 \u0432\u0430\u0436\u0435\u043d \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440 \u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u0438 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430\u043c \u0442\u043e\u0433\u043e \u0441\u0430\u043c\u043e\u0433\u043e \u0431\u0438\u0437\u043d\u0435\u0441\u0430)<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0435\u0439\u0441 &#171;\u041a\u0430\u043a \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043e\u0444\u0435\u0439\u043d\u0438?&#187;. \u0412 \u0446\u0435\u043b\u043e\u043c, \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u043b\u044e\u0431\u044b\u0435 \u0432\u0438\u0434\u044b \u0431\u0438\u0437\u043d\u0435\u0441\u0430, \u0433\u0434\u0435 \u0432\u0430\u0436\u043d\u0430 \u043b\u043e\u043a\u0430\u0446\u0438\u044f \u0438 \u0442\u043e, \u0447\u0442\u043e \u043d\u0430 \u043d\u0435\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\/\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f. <\/p>\n<h2>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435:<\/h2>\n<ul>\n<li>\n<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0433\u0435\u043e\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0443 \u0438 \u0433\u0435\u043e\u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u0430\u043c\u0438: \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u0430\u043c\u0438 (Uber H3), \u043d\u0430\u0443\u0447\u0438\u043c\u0441\u044f \u0438\u0445 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0442\u044c, \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c <\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0433\u0440\u0443\u0437\u043a\u0430, \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u0433\u0435\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 OSM<\/p>\n<\/li>\n<li>\n<p>\u0413\u0434\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043a\u043e\u0444\u0435\u0439\u043d\u044e?<\/p>\n<p><em>\u0411\u0438\u0431\u0438\u043b\u0438\u043e\u0442\u0435\u043a\u0438: geopandas, json, shapely, folium, osmnx, h3 <\/em><\/p>\n<p><em>\u0412\u043e\u043b\u0448\u0435\u0431\u0441\u0442\u0432\u043e: \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 (\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 join) \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u043e\u0432 \u0438 \u0442\u043e\u0447\u0435\u043a, \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0433\u0435\u043e \u0434\u0430\u043d\u043d\u044b\u0445 (\u043d\u0430\u043d\u0435\u0441\u0435\u043d\u0438\u0435 \u0442\u043e\u0447\u0435\u043a\/\u043f\u043e\u043b\u0438\u0433\u043e\u043d\u043e\u0432 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 osm \u0438 \u0435\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435), \u043f\u043e\u0438\u0441\u043a \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0434\u0440. <\/em><\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0433\u0435\u043e\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0443 \u0438 \u0433\u0435\u043e\u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433<\/h2>\n<blockquote>\n<p><strong>\u0413\u0435\u043e\u043c\u0430\u0301\u0440\u043a\u0435\u0442\u0438\u043d\u0433 (\u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433)<\/strong>\u00a0\u2014 \u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u043e\u0432\u0430\u044f \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u0430, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043d\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0435\u0439, \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u043e \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0443, \u0441 \u0446\u0435\u043b\u044c\u044e \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0438 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0441\u0431\u044b\u0442\u0430 \u043f\u0440\u043e\u0434\u0443\u043a\u0446\u0438\u0438 (wikipedia)<\/p>\n<\/blockquote>\n<p>\u041f\u0440\u043e\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, <strong>\u0433\u0435\u043e\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430<\/strong> &#8212; \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0442. \u0435. \u0433\u0435\u043e (\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 (\u043f\u043e\u043b\u0438\u0433\u043e\u043d\u044b, \u043b\u0438\u043d\u0438\u0438 \u0438 \u043f\u0440.)) + \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 (\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430, \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u0432\u044b\u0432\u043e\u0434\u044b), \u0430 <strong>\u0433\u0435\u043e\u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433 <\/strong>&#8212; \u044d\u0442\u043e \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u0430, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043d\u0430 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u0430 \u043f\u0440\u043e\u0436\u0438\u0432\u0430\u044e\u0449\u0435\u0439\/\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0439\/\u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0438 \u0434\u043b\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0431\u0438\u0437\u043d\u0435\u0441\u0430\/\u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u043e\u0432\u044b\u0445 \u043a\u0430\u043c\u043f\u0430\u043d\u0438\u0439 <\/p>\n<p>\u041e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>\u0440\u043e\u0437\u043d\u0438\u0447\u043d\u0430\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u043c\u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u044f (FMCG)<\/p>\n<\/li>\n<li>\n<p>\u0437\u0434\u0440\u0430\u0432\u043e\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 (\u0430\u043f\u0442\u0435\u043a\u0438, \u0447\u0430\u0441\u0442\u043d\u044b\u0435 \u043a\u043b\u0438\u043d\u0438\u043a\u0438)<\/p>\n<\/li>\n<li>\n<p>\u043e\u0431\u0449\u0435\u043f\u0438\u0442 (\u043a\u0430\u0444\u0435, \u0440\u0435\u0441\u0442\u043e\u0440\u0430\u043d\u044b, \u0431\u0430\u0440\u044b)<\/p>\n<\/li>\n<li>\n<p>\u0431\u0430\u043d\u043a\u043e\u0432\u0441\u043a\u0438\u0439 \u0441\u0435\u043a\u0442\u043e\u0440 \u0438 \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u0430\u043d\u0438\u0435<\/p>\n<\/li>\n<li>\n<p>\u0431\u044c\u044e\u0442\u0438 &#8212; \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u044f (\u0441\u0430\u043b\u043e\u043d\u044b \u043a\u0440\u0430\u0441\u043e\u0442\u044b, \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u044b \u043f\u0430\u0440\u0444\u044e\u043c\u0435\u0440\u0438\u0438 \u0438 \u043a\u043e\u0441\u043c\u0435\u0442\u0438\u043a\u0438)<\/p>\n<\/li>\n<li>\n<p>DIY (\u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u044b)<\/p>\n<\/li>\n<li>\n<p>\u0434\u0435\u0432\u0435\u043b\u043e\u043f\u043c\u0435\u043d\u0442 \u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0445 \u0446\u0435\u043d\u0442\u0440\u043e\u0432 \u0438 \u0434\u0440. <\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0438\u043f\u043e\u0432\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438:<\/p>\n<ul>\n<li>\n<p>\u0432\u044b\u0431\u043e\u0440 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430<\/p>\n<\/li>\n<li>\n<p>\u043e\u0446\u0435\u043d\u043a\u0430 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043c\u0430 \u043f\u0440\u043e\u0434\u0430\u0436, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 (\u043c\u0430\u0441\u0441-\u043c\u0430\u0440\u043a\u0435\u0442, \u0431\u0438\u0437\u043d\u0435\u0441, \u043b\u044e\u043a\u0441) \u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u043e\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0446\u0438\u0438\/\u0443\u0441\u043b\u0443\u0433<\/p>\n<\/li>\n<li>\n<p>\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043c\u0435\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430<\/p>\n<\/li>\n<li>\n<p>\u0432\u044b\u0431\u043e\u0440 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043d\u0430\u0440\u0443\u0436\u043d\u043e\u0439 \u0440\u0435\u043a\u043b\u0430\u043c\u044b \u0438 \u0434\u0440. \u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u043e\u0432\u044b\u0445 \u043e\u0444\u0444\u043b\u0430\u0439\u043d \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0435\u0439<\/p>\n<\/li>\n<\/ul>\n<p><strong>4 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0442\u0438:<\/strong><\/p>\n<figure class=\"bordered full-width\"><figcaption>4 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0442\u0438<\/figcaption><\/figure>\n<p>1) \u041f\u0435\u0440\u0435\u0445\u0432\u0430\u0442 \u0442\u0440\u0430\u0444\u0438\u043a\u0430<\/p>\n<p>\u042d\u0442\u043e\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u0432 \u0437\u043e\u043d\u0430\u0445 \u0441 \u0432\u044b\u0441\u043e\u043a\u0438\u043c \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u043d\u044b\u043c \u0442\u0440\u0430\u0444\u0438\u043a\u043e\u043c (\u0432\u0430\u0436\u043d\u043e: \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0440\u0430\u0444\u0438\u043a \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0432\u0435\u043d \u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0438 (\u0426\u0410) => \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u0441\u0442\u0430\u0432 \u0426\u0410), \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u0431\u043b\u0438\u0437\u0438 \u0443\u0436\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043e\u0432 (\u0432\u0430\u0436\u043d\u043e: \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e)<\/p>\n<p>2) \u0421\u0438\u043d\u0435\u0440\u0433\u0438\u044f<\/p>\n<p>\u042d\u0444\u0444\u0435\u043a\u0442 \u0441\u0438\u043d\u0435\u0440\u0433\u0438\u0438 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044e \u0441\u043c\u0435\u0436\u043d\u044b\u0445 \u043d\u0438\u0448 \u0431\u0438\u0437\u043d\u0435\u0441\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: \u0440\u044f\u0434\u043e\u043c \u0441 \u0434\u0435\u0442\u0441\u043a\u0438\u043c\u0438 \u0442\u043e\u0432\u0430\u0440\u0430\u043c\u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u0433\u0430\u0437\u0438\u043d \u0441 \u0442\u043e\u0432\u0430\u0440\u0430\u043c\u0438 \u0434\u043b\u044f \u0434\u043e\u043c\u0430\/\u043c\u0430\u043c \u0438 \u043f\u0440.<\/p>\n<p>3) \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c<\/p>\n<p>\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0438\u0445 \u0443\u0441\u0438\u043b\u0438\u0439 (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Principle_of_least_effort\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435<\/a>) &#8212; \u044d\u0442\u043e\u00a0\u00a0 \u043f\u0440\u0438\u043d\u0446\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u0442\u043e\u043c, \u0447\u0442\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u043f\u043e \u043f\u0440\u0438\u0440\u043e\u0434\u0435 \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0441\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0438\u0442\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u0443\u0441\u0438\u043b\u0438\u0439 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0433\u043e. \u041f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439\u00a0\u00a0\u2013 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0439\u0434\u0451\u0442 \u0442\u0443\u0434\u0430, \u0433\u0434\u0435 \u0431\u043b\u0438\u0436\u0435\/\u043f\u0440\u0438\u0432\u044b\u0447\u043d\u0435\u0435\/\u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u0435\u0435. \u041a\u0440\u0438\u0442\u0435\u0440\u0438\u0438: \u0440\u0430\u0434\u0438\u0443\u0441 \u043e\u0445\u0432\u0430\u0442\u0430, \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u043d\u0430\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c, \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u0430\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c <\/p>\n<p>4) \u041a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f<\/p>\n<p>\u0422\u043e\u0440\u0433\u043e\u0432\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u044b (\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u043d\u0430 \u0433\u0440\u0443\u043f\u043f\u044b) \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f\u043c: \u0431\u044e\u0434\u0436\u0435\u0442 \u0440\u0430\u0439\u043e\u043d\u0430, \u0442\u0438\u043f \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u043d\u043a\u0442\u0430 (\u0431\u043e\u043b\u044c\u0448\u043e\u0439\/\u043c\u0430\u043b\u044b\u0439, \u043f\u043e\u0441\u0435\u043b\u043a\u0438 \u0438 \u043f\u0440.), \u0444\u043e\u0440\u043c\u0430\u0442 \u0442\u043e\u0440\u0433\u043e\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0446\u0435\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0430\u0441\u0441\u043e\u0440\u0442\u0438\u043c\u0435\u043d\u0442\u043d\u043e\u0439 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u0438 \u0442.\u0434.<\/p>\n<p><strong>\u0415\u0433\u043e \u0432\u0435\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, BIG DATA<\/strong><\/p>\n<p>\u0420\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0433\u0435\u043e\u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0442\u0432\u043e\u0440\u0438\u0442\u044c \u043f\u043e\u0442\u0440\u044f\u0441\u0430\u044e\u0449\u0438\u0435 \u0432\u0435\u0449\u0438 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0433\u0435\u043e\u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u043e\u0432\u044b\u0445 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439. <\/p>\n<ul>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432\u044b \u0434\u0435\u043b\u0438\u0442\u0435\u0441\u044c \u0441\u0432\u043e\u0435\u0439 \u0433\u0435\u043e\u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0432\u0435\u0440\u0448\u0430\u044f \u0437\u0432\u043e\u043d\u043a\u0438, \u0441\u043c\u0441, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u0432\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u043c \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442\u0435 \u0432 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u043a\u043e\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0445 \u043f\u043e\u0440\u0442\u0430\u043b\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 web-\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044f\u0441\u044c \u043a WIFI \u0432 \u043a\u0430\u0444\u0435, \u0422\u0426, \u0432\u044b \u0442\u043e\u0436\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442\u0435 \u0432 \u0447\u044c\u044e-\u0442\u043e \u0431\u0430\u0437\u0443<\/p>\n<\/li>\n<\/ul>\n<p>\u0418 \u044d\u0442\u043e \u0435\u0449\u0435 \u043d\u0435 \u0432\u0435\u0441\u044c \u0441\u043f\u0438\u0441\u043e\u043a, \u043d\u043e \u0432\u0430\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u043b\u044e\u0431\u043e\u043c \u0433\u0435\u043e\u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u043e\u0432\u043e\u043c \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u0435\u0437\u043b\u0438\u0447\u0435\u043d\u044b \u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a: &#171;\u0432 \u0440\u0430\u0434\u0438\u0443\u0441\u0435 500 \u043c \u043f\u0440\u043e\u0436\u0438\u0432\u0430\u0435\u0442 666 \u0436\u0435\u043d\u0449\u0438\u043d \u0438 999 \u043c\u0443\u0436\u0447\u0438\u043d&#187;<\/p>\n<p>\u041a\u0430\u043a\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0433\u0435\u043e\u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u043e\u0432\u043e\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043b\u043e\u043a\u0430\u0446\u0438\u0438?<\/p>\n<p>\u0422\u0440\u0430\u0444\u0438\u043a (\u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0439, \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u043d\u044b\u0439):<\/p>\n<ul>\n<li>\n<p>\u0410\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c (\u043a\u043e\u043b-\u0432\u043e \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u043e\u0432, \u043a\u043e\u043b-\u0432\u043e \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439, \u043a\u043e\u043b-\u0432\u043e \u043f\u0440\u043e\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0445\/\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445)<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u043e &#8212; \u0434\u0435\u043c\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c: \u043f\u043e\u043b, \u0432\u043e\u0437\u0440\u0430\u0441\u0442, \u0434\u043e\u0445\u043e\u0434\u044b<\/p>\n<\/li>\n<li>\n<p>\u042d\u043a\u043e\u043d\u043e\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c: \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0447\u0435\u043a\u043e\u0432 \u043f\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f\u043c \u043f\u043e\u043a\u0443\u043f\u043e\u043a, \u0441\u0440\u0435\u0434\u043d\u0438\u0439 \u0447\u0435\u043a (\u041e\u0424\u0414)<\/p>\n<\/li>\n<li>\n<p>\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u044b (\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u044b \u043d\u0430 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445, \u0447\u0430\u0441\u0442\u043e \u043f\u043e\u0441\u0435\u0449\u0430\u0435\u043c\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u0438 \u043f\u0440.) \u0438 \u0434\u0440. <\/p>\n<\/li>\n<\/ul>\n<p>\u0413\u0435\u043e\u0434\u0430\u043d\u043d\u044b\u0435:<\/p>\n<ul>\n<li>\n<p>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u043e\u0432, \u0448\u043a\u043e\u043b, \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a, \u043e\u0444\u0438\u0441\u043e\u0432, \u0422\u0426, \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432, \u043f\u0430\u0440\u043a\u043e\u0432, \u0434\u043e\u0441\u0442\u043e\u043f\u0440\u0438\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439, \u0432 \u043e\u0431\u0449\u0435\u043c &#8212; \u0432\u0441\u0435, \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0438\u0439 \u0434\u0435\u043d\u044c, \u0443\u0441\u043b\u0443\u0433\u0438 \u043f\u043e \u0433\u0435\u043e\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0435, \u0433\u0435\u043e\u043c\u0435\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u0443, \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u0413\u0418\u0421 &#8212; \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 &#8212; \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u044b \u0442\u0430\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0440\u044f\u0434\u0447\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043a\u0443\u043f\u0430\u044e\u0442 \u0443 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0435\u0432. <\/p>\n<figure class=\"float full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u042d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043c\u043e\u0449\u043d\u044b\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u0440\u0438\u0441\u043a &#171;\u0432\u043b\u043e\u0436\u0438\u0442\u044c \u043a\u0443\u0447\u0443 \u0434\u0435\u043d\u0435\u0433 \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435, \u043d\u043e \u043f\u0440\u043e\u0433\u0430\u0434\u0430\u0442\u044c \u0441 \u043c\u0435\u0441\u0442\u043e\u043c&#187;, \u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0441\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0438 \u0438\u0445 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0442\u044c. \u0424\u0435\u0434\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0442\u0438 \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043e\u0442\u0434\u0435\u043b\u044b \u0433\u0435\u043e\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0437\u0430\u043a\u0443\u043f\u0430\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435. \u041d\u043e \u043a\u0430\u043a \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044f\u043c \u0438 \u043c\u0438\u043a\u0440\u043e \u0431\u0438\u0437\u043d\u0435\u0441\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0433\u043e\u0442\u043e\u0432 \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b?<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b &#8212; \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a, \u0432\u043b\u0430\u0434\u0435\u044e\u0449\u0438\u0439 Python, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\/\u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b \u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u0431\u0438\u0437\u043d\u0435\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0449\u0435\u0442 \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f, \u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0445\u043e\u0436\u0438\u0439, \u043a\u043e\u0442, \u0431\u043e\u0442 &#8212; \u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0438 \u0434\u0430\u0439\u0442\u0435 \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0432\u044f\u0437\u044c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445. \u042d\u0442\u043e \u043c\u043e\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f, \u043d\u043e, \u0435\u0441\u043b\u0438 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c, \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435=)<\/p>\n<h3>\u0413\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u044b (H3: Uber\u2019s Hexagonal Hierarchical Spatial Index)<\/h3>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>Uber \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b open source \u043f\u0440\u043e\u0435\u043a\u0442, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u043d\u0435\u0441\u0442\u0438 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438 \ud83d\ude42 <a href=\"https:\/\/eng.uber.com\/h3\/\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435<\/a>.<\/p>\n<p>\u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0438\u043c\u043f\u043e\u0440\u0442 \u0432\u0441\u0435\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a:<\/p>\n<pre><code class=\"python\">import geopandas as gpd import pandas as pd import numpy as np import json import h3 import folium import osmnx as ox from shapely import wkt from folium.plugins import HeatMap from shapely.geometry import Polygon<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d \u0434\u043b\u044f \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0432 \u0433. \u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440:<\/p>\n<pre><code class=\"python\">def visualize_hexagons(hexagons, color=\"red\", folium_map=None):      polylines = []     lat = []     lng = []     for hex in hexagons:         polygons = h3.h3_set_to_multi_polygon([hex], geo_json=False)         outlines = [loop for polygon in polygons for loop in polygon]         polyline = [outline + [outline[0]] for outline in outlines][0]         lat.extend(map(lambda v:v[0],polyline))         lng.extend(map(lambda v:v[1],polyline))         polylines.append(polyline)          if folium_map is None:         m = folium.Map(location=[sum(lat)\/len(lat), sum(lng)\/len(lng)], zoom_start=20, tiles='cartodbpositron')     else:         m = folium_map              for polyline in polylines:         my_PolyLine=folium.PolyLine(locations=polyline,weight=8,color=color)         m.add_child(my_PolyLine)     return m    h3_address = h3.geo_to_h3(45.035470, 38.975313,  9) # 9 - \u0438\u043d\u0434\u0435\u043a\u0441, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u0430                                                                                                      visualize_hexagons([h3_address])<\/code><\/pre>\n<p><a href=\"https:\/\/h3geo.org\/docs\/core-library\/restable\/\" rel=\"noopener noreferrer nofollow\">\u0420\u0430\u0437\u043c\u0435\u0440\u044b \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u043e\u0432<\/a>: <\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<h2>OSM<\/h2>\n<p>OSM \u0438\u043b\u0438 Open Street Map &#8212;  \u044d\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 \u0441 \u0433\u0435\u043e\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043c\u0438\u0440\u0443. <a href=\"https:\/\/ru.wikipedia.org\/wiki\/OpenStreetMap\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0435<\/a>.<\/p>\n<p><a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/RU:%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B_%D0%BA%D0%B0%D1%80%D1%82%D1%8B\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043a\u0430\u0440\u0442\u044b<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e osmnx \u0438 h3 \u0441\u043e\u0442\u0432\u043e\u0440\u0438\u043c \u043c\u0430\u0433\u0438\u044e \u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u043c \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u0430 \u0433. \u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440\u0430:<\/p>\n<p>1) \u0412\u044b\u0433\u0440\u0443\u0437\u0438\u043c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0433. \u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440\u0430 \u0438\u0437 OSM<\/p>\n<pre><code class=\"python\">def visualize_polygons(geometry):          lats, lons = get_lat_lon(geometry)          m = folium.Map(location=[sum(lats)\/len(lats), sum(lons)\/len(lons)], zoom_start=13, tiles='cartodbpositron')          overlay = gpd.GeoSeries(geometry).to_json()     folium.GeoJson(overlay, name = 'boundary').add_to(m)          return m  # \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0446\u0435\u043d\u0442\u0440\u043e\u0438\u0434\u044b \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u043e\u0432 def get_lat_lon(geometry):              lon = geometry.apply(lambda x: x.x if x.type == 'Point' else x.centroid.x)     lat = geometry.apply(lambda x: x.y if x.type == 'Point' else x.centroid.y)     return lat, lon    # \u0432\u044b\u0433\u0440\u0443\u0437\u0438\u043c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440\u0430 \u0438\u0437 OSM cities = ['\u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440'] polygon_krd = ox.geometries_from_place(cities, {'boundary':'administrative'}).reset_index() polygon_krd = polygon_krd[(polygon_krd['name'] == '\u0433\u043e\u0440\u043e\u0434\u0441\u043a\u043e\u0439 \u043e\u043a\u0440\u0443\u0433 \u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440')] # \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c visualize_polygons(polygon_krd['geometry'])<\/code><\/pre>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>2) \u0421\u0433\u0435\u043d\u0435\u0440\u0438\u043c \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u0430:<\/p>\n<pre><code class=\"python\">def create_hexagons(geoJson):          polyline = geoJson['coordinates'][0]      polyline.append(polyline[0])     lat = [p[0] for p in polyline]     lng = [p[1] for p in polyline]     m = folium.Map(location=[sum(lat)\/len(lat), sum(lng)\/len(lng)], zoom_start=13, tiles='cartodbpositron')     my_PolyLine=folium.PolyLine(locations=polyline,weight=8,color=\"green\")     m.add_child(my_PolyLine)      hexagons = list(h3.polyfill(geoJson, 8))     polylines = []     lat = []     lng = []     for hex in hexagons:         polygons = h3.h3_set_to_multi_polygon([hex], geo_json=False)         # flatten polygons into loops.         outlines = [loop for polygon in polygons for loop in polygon]         polyline = [outline + [outline[0]] for outline in outlines][0]         lat.extend(map(lambda v:v[0],polyline))         lng.extend(map(lambda v:v[1],polyline))         polylines.append(polyline)     for polyline in polylines:<\/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-383322","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/383322","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=383322"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/383322\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=383322"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=383322"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=383322"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}