{"id":358548,"date":"2024-05-21T00:14:14","date_gmt":"2024-05-21T00:14:14","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=358548"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-05-21T00:14:14","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=358548","title":{"rendered":"<span>\u0413\u0434\u0435 15 \u043c\u0438\u043d\u0443\u0442 \u043f\u0435\u0448\u043a\u043e\u043c \u043e\u0442 \u0434\u043e\u043c\u0430 \u0434\u043e \u043c\u0435\u0442\u0440\u043e \u0432 \u041c\u043e\u0441\u043a\u0432\u0435 \u0438 \u043a\u0430\u043a \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c \u043f\u0430\u043d\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u043e\u043c\u0430\u2026<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u044e \u0441\u0442\u043e\u043b\u0438\u0446\u044b \u0438 \u043a\u0430\u043a \u043e\u043d\u0430 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043a\u043e\u043c\u0444\u043e\u0440\u0442 \u0436\u0438\u043b\u044c\u044f. \u0412 \u044d\u0442\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u0440\u0430\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u0442 \u0432\u0445\u043e\u0434\u0430 \u0432 \u043c\u0435\u0442\u0440\u043e\u043f\u043e\u043b\u0438\u0442\u0435\u043d \u0434\u043e \u0436\u0438\u043b\u044b\u0445 \u0437\u0434\u0430\u043d\u0438\u0439. \u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437 \u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b \u0436\u0438\u043b\u044c\u0435 \u0432 \u0433\u043e\u0440\u043e\u0434\u0435 \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043e\u0442 \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432 \u0438 \u043f\u043e\u0434\u0435\u043b\u0438\u043b\u0441\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439 <a href=\"https:\/\/habr.com\/ru\/articles\/761600\/\" rel=\"noopener noreferrer nofollow\">&#171;\u0413\u0434\u0435 \u0432 \u041c\u043e\u0441\u043a\u0432\u0435 \u0436\u0438\u0442\u044c \u00ab\u043d\u0435\u043f\u043b\u043e\u0445\u043e\u00bb&#187;<\/a>. \u0422\u0435\u043f\u0435\u0440\u044c \u0436\u0435 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043d\u0430 \u043f\u043e\u0437\u0438\u0442\u0438\u0432\u043d\u044b\u0435 \u0444\u0430\u043a\u0442\u043e\u0440\u044b \u0432\u044b\u0431\u043e\u0440\u0430 \u043c\u0435\u0441\u0442\u0430 \u043a\u0432\u0430\u0440\u0442\u0438\u0440\u044b \u0438 \u043d\u0430\u0439\u0434\u0435\u043c \u0432 \u041c\u043e\u0441\u043a\u0432\u0435 \u0436\u0438\u043b\u044b\u0435 \u0434\u043e\u043c\u0430 \u0432 \u0448\u0430\u0433\u043e\u0432\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u043e\u0442 \u043c\u0435\u0442\u0440\u043e.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/21b\/e09\/4fe\/21be094fe3231bf03792639569b78874.jpg\" width=\"1098\" height=\"878\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/21b\/e09\/4fe\/21be094fe3231bf03792639569b78874.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u0421\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e c \u043f\u043e\u043c\u043e\u0449\u044c\u044e Graphhopper, <a href=\"https:\/\/github.com\/igor-suhorukov\/openstreetmap_h3\" rel=\"noopener noreferrer nofollow\">OpenStreetMap H3<\/a> \u0438 PostGIS. \u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u0430\u043b\u0435\u043a\u0438 \u043e\u0442 PostgreSQL\/Java, \u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u043e\u043b\u0438\u0441\u0442\u044b\u0432\u0430\u0439\u0442\u0435 \u0432 \u043a\u043e\u043d\u0435\u0446 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<h2>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p>\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u043b \u0433\u0435\u043e\u0434\u0430\u043d\u043d\u044b\u0435 \u041c\u043e\u0441\u043a\u0432\u044b \u0432 Ubuntu, \u0433\u0434\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b git, wget, docker.io:<\/p>\n<pre><code class=\"bash\">mkdir ~\/moscow &amp;&amp; cd ~\/moscow  wget https:\/\/download.geofabrik.de\/russia\/central-fed-district-latest.osm.pbf wget https:\/\/raw.githubusercontent.com\/mapsme\/omim\/master\/data\/borders\/Russia_Moscow.poly docker run -rm -it -w \/wkd -v $(pwd):\/wkd mschilde\/osmium-tool osmium extract --polygon Russia_Moscow.poly central-fed-district-latest.osm.pbf -o moscow.osm.pbf  git clone https:\/\/github.com\/igor-suhorukov\/openstreetmap_h3.git cd openstreetmap_h3 &amp;&amp; docker build -t openstreetmap_h3 . cd postgis_docker-master &amp;&amp; docker build -t postgres15_postgis .  cd ~\/moscow docker run -it --rm -w $(pwd) -v $(pwd):\/$(pwd) -v \/var\/run\/docker.sock:\/var\/run\/docker.sock openstreetmap_h3:latest -source_pbf $(pwd)\/moscow.osm.pbf -result_in_tsv true docker run --name postgis15-moscow --memory=12g --memory-swap=12g --memory-swappiness 0 --shm-size=1g -v $(pwd)\/database:\/var\/lib\/postgresql\/data -v $(pwd)\/moscow_loc_ways:\/input -e POSTGRES_PASSWORD=osmworld -d -p 5432:5432 postgres15_postgis:latest -c checkpoint_timeout='15 min' -c checkpoint_completion_target=0.9 -c shared_buffers='4096 MB' -c wal_buffers=-1 -c bgwriter_delay=200ms -c bgwriter_lru_maxpages=100 -c bgwriter_lru_multiplier=2.0 -c bgwriter_flush_after=0 -c max_wal_size='32768 MB' -c min_wal_size='16384 MB'<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code class=\"bash\">psql -h 127.0.0.1 -p 5432 -U postgres -d osmworld<\/code><\/pre>\n<p>\u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u0445\u043e\u0434\u044b \u0432 \u043c\u0435\u0442\u0440\u043e \u0438 \u041c\u0426\u041a  \u043f\u043e \u0442\u0435\u0433\u0443 <a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/RU:Tag:railway%3Dsubway_entrance\" rel=\"noopener noreferrer nofollow\">railway=subway_entrance<\/a>:<\/p>\n<pre><code class=\"sql\">create temporary table subway_entrance as    select id, centre, tags      from geometry_global_view e       where tags@>'railway=>subway_entrance';<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/035\/157\/98a\/03515798a6ef45f83a137005c2abd720.png\" alt=\"\u041a\u0440\u0430\u0441\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 - \u0432\u044b\u0445\u043e\u0434\u044b network=\u041c\u0426\u041a. \u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043d\u0435 \u0432\u0441\u0435 \u0432\u044b\u0445\u043e\u0434\u044b \u0438\u0437 \u041c\u0426\u041a \u0440\u0430\u0437\u043c\u0435\u0447\u0435\u043d\u044b \u0441 network  \" title=\"\u041a\u0440\u0430\u0441\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 - \u0432\u044b\u0445\u043e\u0434\u044b network=\u041c\u0426\u041a. \u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043d\u0435 \u0432\u0441\u0435 \u0432\u044b\u0445\u043e\u0434\u044b \u0438\u0437 \u041c\u0426\u041a \u0440\u0430\u0437\u043c\u0435\u0447\u0435\u043d\u044b \u0441 network  \" width=\"963\" height=\"885\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/035\/157\/98a\/03515798a6ef45f83a137005c2abd720.png\"\/><\/p>\n<div><figcaption>\u041a\u0440\u0430\u0441\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 &#8212; \u0432\u044b\u0445\u043e\u0434\u044b network=\u041c\u0426\u041a. \u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043d\u0435 \u0432\u0441\u0435 \u0432\u044b\u0445\u043e\u0434\u044b \u0438\u0437 \u041c\u0426\u041a \u0440\u0430\u0437\u043c\u0435\u0447\u0435\u043d\u044b \u0441 network  <\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u044f \u0448\u043a\u043e\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u043a\u0438 \u043f\u0440\u043e \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u0430, \u0438\u0434\u0443\u0449\u0435\u0433\u043e \u0441\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e 5\u043a\u043c\/\u0447, \u0437\u0430 15 \u043c\u0438\u043d\u0443\u0442 \u043f\u0435\u0448\u043a\u043e\u043c \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 1250\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u0445\u043e\u0434\u0430 \u0432 \u043f\u043e\u0434\u0437\u0435\u043c\u043a\u0443 \u043d\u0430\u0439\u0434\u0435\u043c \u0436\u0438\u043b\u044b\u0435 \u0437\u0434\u0430\u043d\u0438\u044f \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c \u0440\u0430\u0434\u0438\u0443\u0441\u0435, \u043f\u043e \u043f\u0440\u044f\u043c\u043e\u0439.<\/p>\n<pre><code class=\"sql\">CREATE TYPE building_info AS (id bigint, type table_reference, x float8, y float8);  create table living_building_near as select m.id subway_entrance_id,st_x(m.centre) subway_entrance_x,st_y(m.centre) subway_entrance_y,        array_agg((b.id,b.type,st_x(b.centre),st_y(b.centre))::building_info) buildings   from subway_entrance m inner join geometry_global_view b on     b.tags?'building' and     not(b.tags?'amenity') and     not(b.tags?'shop') and     b.tags->'building' not in --\u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u043d\u0438\u0436\u0435 \u0437\u0434\u0430\u043d\u0438\u044f\u0445 \u043d\u0435 \u0436\u0438\u0432\u0443\u0442 \u043d\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u0435         ('service','garages','industrial','retail','office','roof','commercial','garage','kiosk','warehouse','church',         'parking','public','shed','hangar','train_station','guardhouse','transportation','terrace','greenhouse','bridge',         'government','chapel','gazebo','civic','ruins','supermarket','sports_centre','semidetached_house','toilets',         'sports_hall','clinic','farm_auxiliary','stable','grandstand','bunker','gatehouse','store','temple','ventilation_kiosk',         'carport','cowshed','barracks','shop','cabin','barn','cathedral','wall','townhouse','manufacture','shelter',         'fire_station','stadium','stands','sport_hall','theatre','storage_tank','checkpoint','houseboat','abandoned','dovecote',         'mosque','museum','military','container','observatory','lift','tent','factory','sport','mall','riding_hall','depot',         'prison','gate','triumphal_arch','water_works','public_building','pavilion','bank','institute','works','collapsed',         'car_repair','crossing_box','fuel','tree_house','presbytery','yesq','farm','outbuilding','police','porch','sauna',         'monastery','cinema','tower','boathouse','library','transformer_tower','heat_exchange_station','ice_rink','entrance','construction','transformer') and      ST_DWithin(b.geom::geography,m.centre::geography,1250)    group by 1,2,3; --select m.id subway_entrance_id,st_x(m.centre) subway_entrance_x,st_y(m.centre) subway_entrance_y,array_agg((b.id,b.type,st_x(b.centre),st_y(b.centre))::building_info) buildings from subway_entrance m inner join geometry_global_view b on b.tags?'_lb' and ST_DWithin(b.geom::geography,m.centre::geography,1250) group by group by 1,2,3;<\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 \u0431\u0430\u0437\u0435 \u0441\u043e\u0437\u0434\u0430\u0441\u0442\u0441\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u0433\u0434\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u0445\u043e\u0434\u0430 \u0432 \u043c\u0435\u0442\u0440\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0434\u0430\u043d\u0438\u0439 \u0432 \u0440\u0430\u0434\u0438\u0443\u0441\u0435 1250\u043c \u043f\u043e \u043f\u0440\u044f\u043c\u043e\u0439 \u0441 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 \u0438\u0445 \u0446\u0435\u043d\u0442\u0440\u043e\u0432 \u0438 ID:<\/p>\n<pre><code class=\"sql\">osmworld=# \\d living_building_near                    Table \"public.living_building_near\"        Column       |       Type       | Collation | Nullable | Default  --------------------+------------------+-----------+----------+---------  subway_entrance_id | bigint           |           |          |   subway_entrance_x  | double precision |           |          |   subway_entrance_y  | double precision |           |          |   buildings          | building_info[]  |           |          | <\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u043a\u0443\u0434\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439:<\/p>\n<pre><code class=\"sql\">create table subway_distance(                 entrance_id bigint,                 building_id bigint,                 building_type table_reference,                 distance smallint,                 primary key(entrance_id,building_id,building_type) );<\/code><\/pre>\n<h2>\u0420\u0430\u0441\u0447\u0435\u0442 \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u043d\u044b\u0445 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439<\/h2>\n<p>\u0412\u044b\u0431\u0440\u0430\u043b\u0438 \u0434\u043e\u043c\u0430 \u0432 \u043e\u043a\u0440\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u044f\u0445, \u043d\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e \u043f\u0440\u044f\u043c\u043e\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u043a\u043e\u0440\u043e\u0447\u0435 \u0447\u0435\u043c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c. \u0410 \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u0440\u0430\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0443\u0436\u0435\u043d \u043b\u0438\u0431\u043e \u0441\u0435\u0440\u0432\u0438\u0441 \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u0437\u0430 \u0434\u0435\u043d\u044c\u0433\u0438 \u0438 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043b\u0438\u0431\u043e \u043b\u043e\u043a\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u0440\u043e\u0443\u0442\u0435\u0440 \u044d\u043d\u0434\u0436\u0438\u043d. \u0414\u043b\u044f OpenStreetMap \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e Open Source \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438. \u041d\u043e \u043c\u043d\u0435 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u0435\u0435 \u0438 \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Graphhopper \u043d\u0430 Java. \u0412 \u0447\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0434 API \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u043a\u043b\u0430\u0434\u043a\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 &#8212; \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043b\u0438\u043c\u0438\u0442\u043e\u0432, \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a \u0438 \u043f\u043b\u0430\u0442\u044b \u0437\u0430 \u0441\u0435\u0440\u0432\u0438\u0441. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0440\u0430\u0441\u0447\u0438\u0442\u0430\u043b\u0430 450032 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439 &#171;\u0431\u0435\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0439 \u0438 \u0421\u041c\u0421&#187;. \u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 Graphhopper \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u0430 \u0438 \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0440\u043e\u0443\u0442\u0438\u043d\u0433 \u043f\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u044f \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0431\u043b\u0438\u0437\u043e\u0441\u0442\u044c \u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432 \u043a \u0434\u043e\u0440\u043e\u0436\u043a\u0435 \u0438 \u0438\u0437\u0431\u0435\u0433\u0430\u044f \u043c\u0435\u0441\u0442 \u0433\u0434\u0435 \u043d\u0435\u0442 \u0430\u0441\u0444\u0430\u043b\u044c\u0442\u0430.<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0440\u0430\u0441\u0447\u0435\u0442\u043e\u043c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439 &#8212; \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u0441\u0435\u0440\u0432\u0438\u0441 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 \u043a\u0430\u043a REST \u0447\u0435\u0440\u0435\u0437 TCP, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f <strong>\u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Graphhopper 8.0 \u043a\u0430\u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0441 in-process \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c \u0431\u0435\u0437 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043f\u043e HTTP<\/strong>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044e \u0432 \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 graphhopper-core \u0438 postgresql jdbc \u0434\u0440\u0430\u0439\u0432\u0435\u0440:<\/p>\n<details class=\"spoiler\">\n<summary>Maven pom.xml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?> &lt;project xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\"          xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"          xsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd\">     &lt;modelVersion>4.0.0&lt;\/modelVersion>      &lt;groupId>com.github.igor-suhorukov&lt;\/groupId>     &lt;artifactId>routing-example&lt;\/artifactId>     &lt;version>1.0-SNAPSHOT&lt;\/version>      &lt;properties>         &lt;maven.compiler.source>11&lt;\/maven.compiler.source>         &lt;maven.compiler.target>11&lt;\/maven.compiler.target>       &lt;\/properties>      &lt;dependencies>         &lt;dependency>             &lt;groupId>com.graphhopper&lt;\/groupId>             &lt;artifactId>graphhopper-core&lt;\/artifactId>             &lt;version>8.0&lt;\/version>         &lt;\/dependency>         &lt;dependency>             &lt;groupId>org.postgresql&lt;\/groupId>             &lt;artifactId>postgresql&lt;\/artifactId>             &lt;version>42.6.0&lt;\/version>         &lt;\/dependency>     &lt;\/dependencies> &lt;\/project><\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041c\u043e\u044f Java \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b living_building_near \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0432\u0445\u043e\u0434\u0430 \u0432 \u043c\u0435\u0442\u0440\u043e \u0438 \u0437\u0434\u0430\u043d\u0438\u044f \u0432 \u043e\u043a\u0440\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u044f\u0445 \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u0440\u0430\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u043d\u0443\u044e \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u044e \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0435\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 subway_distance. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044f \u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f, \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c 1250\u043c.<\/p>\n<pre><code class=\"java\">package com.github.isuhorukov.routing;  import com.graphhopper.GHRequest; import com.graphhopper.GHResponse; import com.graphhopper.GraphHopper; import com.graphhopper.ResponsePath; import com.graphhopper.config.CHProfile; import com.graphhopper.config.Profile; import org.postgresql.jdbc.PgArray; import org.postgresql.util.PGobject;  import java.sql.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors;  public class Routing {      public static void main(String[] args) throws Exception {         GraphHopper hopper = getGraphHopper();         try (Connection connection = DriverManager.getConnection(                 System.getenv(\"jdbc_url\"), System.getenv(\"user\"), System.getenv(\"password\"))) {             connection.setAutoCommit(false);             try {                 var distances = calculateDistances(connection, hopper);                 saveDistance(connection, distances);             } catch (SQLException e) {                 connection.rollback();                 throw e;             }         }     }      private static GraphHopper getGraphHopper() {         var hopper = new GraphHopper();         hopper.setOSMFile(System.getenv(\"osm_file\"));         hopper.setGraphHopperLocation(\"route\");         hopper.getCHPreparationHandler().setCHProfiles(new CHProfile(\"foot\"));         hopper.setProfiles(new Profile(\"foot\").setVehicle(\"foot\"));         hopper.importOrLoad();         return hopper;     }      private static List&lt;Distance> calculateDistances(Connection connection, GraphHopper hopper) throws SQLException {         List&lt;Distance> distances = new ArrayList&lt;>();         try (Statement subwayQuery = connection.createStatement()){             int step=0;             try (ResultSet livingBuilding = subwayQuery.executeQuery(\"select * from living_building_near\")){                 while (livingBuilding.next()){                     long subwayEntranceId = livingBuilding.getLong(\"subway_entrance_id\");                     double subwayEntranceX = livingBuilding.getDouble(\"subway_entrance_x\");                     double subwayEntranceY = livingBuilding.getDouble(\"subway_entrance_y\");                     PgArray buildingsArray = (PgArray) livingBuilding.getArray(\"buildings\");                     List&lt;Building> buildings = mapBuildings(buildingsArray);                     System.out.println(step++);                     distances.addAll(buildings.stream().map(building -> {                         short distance = calculateDistances(hopper, building, subwayEntranceY, subwayEntranceX);                         return new Distance(subwayEntranceId,building.buildingId, building.buildingType, distance);                     }).collect(Collectors.toList()));                 }             }         }         return distances;     }      private static void saveDistance(Connection connection, List&lt;Distance> distances) throws SQLException {         try (PreparedStatement insert = connection.prepareStatement(                 \"insert into subway_distance(entrance_id,building_id,building_type,distance) \" +                         \"values (?,?,?::table_reference,?)\")){             distances.forEach(distance -> {                 if(distance.distance>1250) return;                 try {                     insert.setLong(1, distance.subwayEntranceId);                     insert.setLong(2, distance.buildingId);                     insert.setString(3, distance.buildingType);                     insert.setShort(4, distance.distance);                     insert.addBatch();                 } catch (SQLException e) {                     throw new RuntimeException(e);                 }             });             insert.executeBatch();             connection.commit();         }     }       private static List&lt;Building> mapBuildings(PgArray buildingsArray) throws SQLException {         return getPgObjects(buildingsArray).stream().map(pGobject -> {             String value = pGobject.getValue();             if(value==null || value.length()&lt;=2){                 throw new IllegalArgumentException();             }             String[] parts = value.substring(1, value.length() - 1).split(\",\");             long buildingId = Long.parseLong(parts[0]);             String buildingType = parts[1];             double buildingX = Double.parseDouble(parts[2]);             double buildingY = Double.parseDouble(parts[3]);             return new Building(buildingId, buildingType, buildingX, buildingY);         }).collect(Collectors.toList());     }      private static List&lt;PGobject> getPgObjects(PgArray buildingsArray) throws SQLException {         Object[] array = (Object[]) buildingsArray.getArray();         buildingsArray.free();         return Arrays.stream(array).map(object -> (PGobject) object).collect(Collectors.toList());     }      private static short calculateDistances(GraphHopper hopper,                                       Building building, double subwayEntranceY, double subwayEntranceX) {         GHRequest request = new GHRequest(subwayEntranceY, subwayEntranceX, building.buildingY, building.buildingX);         request.setProfile(\"foot\");         GHResponse route = hopper.route(request);         ResponsePath bestRoute = route.getBest();         return (short) Math.round(bestRoute.getDistance());     }      private static class Building{         long buildingId;         String buildingType;         double buildingX;         double buildingY;         public Building(long buildingId, String buildingType, double buildingX, double buildingY) {             this.buildingId = buildingId;             this.buildingType = buildingType;             this.buildingX = buildingX;             this.buildingY = buildingY;         }     }      private static class Distance{         long subwayEntranceId;         long buildingId;         String buildingType;         short distance;         public Distance(long subwayEntranceId, long buildingId, String buildingType, short distance) {             this.subwayEntranceId = subwayEntranceId;             this.buildingId = buildingId;             this.buildingType = buildingType;             this.distance = distance;         }     } }<\/code><\/pre>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f jdbc_url, osm_file, password, user.<\/p>\n<p>\u0426\u0435\u043d\u0442\u0440\u044b \u0437\u0434\u0430\u043d\u0438\u0439 \u0432\u044b\u0433\u0440\u0443\u0437\u0438\u043b \u0432 GeoJSON \u0444\u0430\u0439\u043b:<\/p>\n<pre><code class=\"sql\">\\copy (select json_build_object('type', 'FeatureCollection','features', json_agg(json_build_object('type', 'Feature','geometry', st_AsGeoJSON(centre)::json))) from (select distinct centre from subway_distance s inner join geometry_global_view b on b.id=s.building_id and b.type=s.building_type) buildings ) to '~\/moscow_metro_footpath.json';<\/code><\/pre>\n<h2>\u041a\u043e\u0433\u0434\u0430 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u043f\u0430\u043d\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u043e\u043c \u0432 OpenStreetMap<\/h2>\n<p>\u0417\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043c\u043d\u0435 \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0434\u043e\u043c\u043e\u0432 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0438\u043f\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043e\u043c\u0430, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c \u043f\u0430\u043d\u0435\u043b\u044c\u043a\u0438 \u043e\u0442 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0437\u0434\u0430\u043d\u0438\u0439 \u0438 \u0442\u0443\u0442 \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u043a\u043e\u0435-\u0447\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0441 <s>\u043d\u0435<\/s>\u043f\u043e\u043b\u043d\u043e\u0442\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/ca2\/f2f\/33b\/ca2f2f33b8fd472759a55ac1fb953b7f.jpg\" alt=\"\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 3D \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u043e\u0436\u0438\u0432\u043b\u044f\u044e\u0442 \u0430\u0442\u043c\u043e\u0441\u0444\u0435\u0440\u0443 \u0434\u043e\u043c\u043e\u0432, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u043f\u043e \u0442\u0438\u043f\u043e\u0432\u043e\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0443\" title=\"\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 3D \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u043e\u0436\u0438\u0432\u043b\u044f\u044e\u0442 \u0430\u0442\u043c\u043e\u0441\u0444\u0435\u0440\u0443 \u0434\u043e\u043c\u043e\u0432, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u043f\u043e \u0442\u0438\u043f\u043e\u0432\u043e\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0443\" width=\"1916\" height=\"1014\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ca2\/f2f\/33b\/ca2f2f33b8fd472759a55ac1fb953b7f.jpg\" data-blurred=\"true\"\/><\/p>\n<div><figcaption>\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 3D \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u043e\u0436\u0438\u0432\u043b\u044f\u044e\u0442 \u0430\u0442\u043c\u043e\u0441\u0444\u0435\u0440\u0443 \u0434\u043e\u043c\u043e\u0432, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u043f\u043e \u0442\u0438\u043f\u043e\u0432\u043e\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0443<\/figcaption><\/div>\n<\/figure>\n<pre><code class=\"sql\">--\u0432\u0441\u0435 \u0436\u0438\u043b\u044b\u0435 \u0434\u043e\u043c\u0430 select count(tags->'design:ref')*100.0\/count(*) cnt, count(*) from geometry_global_view where tags?'_lb';          cnt         | count   ---------------------+--------  18.7563917273088398 | 118317   --\u0432 15\u043c\u0438\u043d\u0443\u0442\u0430\u0445 \u043e\u0442 \u043c\u0435\u0442\u0440\u043e select count(tags->'design:ref')*100.0\/count(*) cnt, count(*) from (select distinct building_id, building_type, b.tags from subway_distance s inner join geometry_global_view b on b.id=s.building_id and b.type=s.building_type) b;          cnt         | count  ---------------------+-------  38.1045937491921516 | 38683<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0438\u0439 \u0434\u043e\u043c\u043e\u0432, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u041c\u043e\u0441\u043a\u0432\u044b \u0432 OpenStreetMap<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">select regexp_split_to_table(tags->'design:ref',';') design_ref, count(*)    from geometry_global_view    where tags?'_lb'      group by 1      order by 2 desc;<\/code><\/pre>\n<pre><code> design_ref            | count  ---------------------------------+-------  II-18-01\/12                     |  1100  \u041f44-1\/17 \u0442\u0438\u043f 1                  |   636  II-18-01\/\u041c\u0418 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u0411\u00bb         |   635  1-511-4\/\u041c                       |   627  \u041f44\u0422-1\/17 \u0442\u0438\u043f 1                 |   534  \u041f3-2\/16                         |   514  \u0418-209\u0410                          |   496  1-511-3\/\u041c                       |   464  1-515-4\/\u041c                       |   371  II-68-01\/16\u042e-2\/78               |   361  II-49-04\/\u042e \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u0414\u00bb          |   331  II-14                           |   309  \u041a\u041e\u041f\u042d-85                         |   295  1-410                           |   267  1-510-4\/\u041c23                     |   265  \u0421\u041c-6                            |   252  1-515-04\/9\u042e\u041b                    |   246  1-515-4\/\u041c37                     |   243  \u041f44-1\/16 \u0442\u0438\u043f 1                  |   242  \u041f43\/16                          |   233  II-14-33                        |   231  II-68-01\/16\u042e                    |   231  \u0411\u0430\u0448\u043d\u044f \u0412\u0443\u043b\u044b\u0445\u0430                    |   227  \u041a\u0422\u0416\u0421-2                          |   223  \u041f47\/12                          |   222  1-410-9                         |   219  1-515-3\/\u042e37                     |   218  II-49-06\/\u042e \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u0414\u00bb          |   216  \u041a\u0422\u0416\u0421-1                          |   206  \u041a\u0422\u0416\u0421-5                          |   191  \u0418-209                           |   184  1-515-5\/\u041c                       |   181  II-01                           |   180  \u041f46-2\/12\u0412                       |   180  1-510-3\/\u041c23                     |   171  1-515-3\/\u042e                       |   163  \u041f44\u0422-4\/17 \u0442\u0438\u043f 2                 |   162  1-515-5\/\u041c37                     |   157  1-515-04\/9\u041c                     |   155  II-18-11\/\u041c\u0418 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u0411\u00bb         |   151  1605\u0410\u041c\/12                       |   151  \u041f44-4\/17 \u0442\u0438\u043f 2                  |   147  II-49-08\/\u042e \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u0414\u00bb          |   145  1-511-4\/\u041c37                     |   144  1-511-3\/\u042e                       |   141  II-14-31                        |   140  II-29-41\/37                     |   135  II-18-21\/12                     |   134  \u041f30-4\/12                        |   133  1-515-06\/9\u042e\u041b                    |   131  1-510-4\/\u041c                       |   130  1605\u0410\u041c-04\/12\u042e                   |   129  \u041f55-4\/12                        |   124  II-68-03\/12\u042e                    |   122  \u041f-44                            |   118  1-511-3\/\u041c37                     |   117  1-511-4\/\u042e                       |   114  II-57-03\/12\u042e\u0410                   |   112  1-511-2\/\u042e                       |   108  1-511                           |   106  1-510-4\/\u042e23                     |   104  1-510-3\/\u041c                       |   103  \u041f3-1\/16                         |    98  \u041f30-3\/12                        |    97  II-29\/37                        |    94  \u041f46\u041c-2\/14                       |    94  II-18-31\/12                     |    94  1-515-06\/9\u041c                     |    92  \u041c\u0433-1                            |    90  \u041a\u0422\u0416\u0421-9                          |    89  II-18-01\/\u041c\u0418 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u041a\u00bb         |    89  \u041f44\u0422-4\/17 \u0442\u0438\u043f 3                 |    89  II-49-06\/\u042e \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u041f\u00bb          |    89  II-49-04\/\u042e \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u041f\u00bb          |    88  \u041f44-4\/17 \u0442\u0438\u043f 3                  |    88  II-28-3                         |    88  \u041f46\u041c                            |    87  \u041f46-3\/12                        |    86  1-410-10                        |    86  1-447\u0421-5                        |    85  II-49-02\/\u042e \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u0414\u00bb          |    84  II-18-31\/12\u0410                    |    83  II-14-32                        |    81  II-49-06\/\u041c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u0414\u00bb          |    81  \u041f44\u0422-4\/17 \u0442\u0438\u043f 5                 |    81  1-447\u0421-7                        |    79  \u041f30-1\/12                        |    79  \u041f44-4\/17 \u0442\u0438\u043f 4                  |    79  II-28-4                         |    78  \u041f44\u0422-4\/17 \u0442\u0438\u043f 4                 |    75  II-29-03\/\u042e37                    |    74  \u041a\u041e\u041f\u042d-2000                       |    73  1-511-2\/\u041c                       |    72  \u041f46\/12                          |    71  II-18-02\/12                     |    70  II-49-04\/\u041c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u0414\u00bb          |    67  1-410 (\u043e\u0431\u0449\u0435\u0436\u0438\u0442\u0438\u044f)               |    67  \u0423\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u0430\u0440\u043a\u0430\u0441          |    65  \u041f44-4\/16 \u0442\u0438\u043f 2                  |    65  II-29-03\/\u041c37                    |    63  \u0413\u041c\u0421-2001                        |    61  II-29-04\/\u041c37                    |    61  \u041f30-2\/12                        |    61  1-511-3\/\u042e37                     |    60  1-510-4\/\u041c37                     |    59  4572\u0410                           |    59  \u041f44-4\/17 \u0442\u0438\u043f 5                  |    57  \u041f46\u041c-4\/14                       |    57  II-49\/\u042e \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u0414\u00bb             |    57  II-29-04\/\u042e37                    |    57  II-68-02\/16\u041c                    |    55  1-510-3\/\u042e23                     |    55  \u041f44\u0422                            |    54  II-68-02\/12\u041a                    |    54  1-410-12                        |    54  \u041f3\u041c-1\/17                        |    54  II-29                           |    53  II-05-02\u0410                       |    52  \u0418\u041f46\u0421                           |    52  \u041f55-26\/12                       |    51  \u041f3\u041c                             |    51  \u0418-522\u0410                          |    50  \u041f46\u041c-4\/9                        |    48  II-18-01 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u0411\u00bb            |    48  1-511-4\/\u042e37                     |    47  \u0418-155\u0411                          |    47  \u041f55-25\/12                       |    46  \u041a\u041e\u041f\u042d-80                         |    46  II-29-05\/\u042e37                    |    45  \u041f44                             |    45  \u041f3\u041c-1\/16                        |    45  1-447\u0421-8                        |    42  \u041f55-21\/12                       |    42  II-67 \u0421\u043c\u0438\u0440\u043d\u043e\u0432\u0441\u043a\u0430\u044f               |    42  \u041f44\u041a-1\/17                       |    42  II-29-14\/\u042e37                    |    41  \u041f30-6\/12                        |    41  II-57                           |    40  \u041f30\/12                          |    40  111\u041c                            |    40  II-29-03\/\u041c                      |    40  1-511-14\/\u041c37                    |    40  1-447\u0421-3                        |    40  II-04                           |    39  II-49-08\/\u042e \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u041f\u00bb          |    39  \u041a\u041e\u041f\u042d-\u041c \u00ab\u041f\u0430\u0440\u0443\u0441\u00bb                  |    39  1-515-178\/9\u041c                    |    39  \u0418-III-3                         |    38  \u0421\u041c-3                            |    38  II-29-04\/\u041c                      |    38  1605\u0410\u041c\/9                        |    38  II-49\/\u041c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u0414\u00bb             |    37  \u041f55-23\/12                       |    37  \u0411\u0421 05-17\u041c                       |    37  1-410-13                        |    36  1-410-11                        |    36  1\u041c\u0433-601\/\u0414                       |    36  II-49-08\/\u041c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u0414\u00bb          |    35  1-510-4\/\u042e37                     |    35  II-68                           |    35  \u041f3\u041c-3\/17                        |    35  II-68-01\/22-83                  |    34  II-29-05\/\u041c                      |    33  \u041f3\/16                           |    33  1\u041c\u0433-601                         |    32  \u041f46\u041c-22\u043f\u0440\/14                    |    32  4570                            |    32  II-57-05\/\u042e                      |    31  1-515\/9                         |    31  II-29-15\/\u041c37                    |    31  1-447\u0421-1                        |    31  1605\u0410\u041c-04\/9\u042e                    |    30  1-510-3\/\u042e                       |    30  \u041f30-5\/12                        |    30  \u041f3\u041c-4\/17                        |    29  1-510-3\/\u041c37                     |    29  1-515-3\/\u041c                       |    29  \u0422\u0438\u043f I                           |    29  \u041f3\u041c-2\/16                        |    29  1-511-2\/\u042e37                     |    29  \u041f46\u041c-2\/9                        |    29  \u041a\u0422\u0416\u0421 1\u043f-25                      |    29  II-05-01                        |    28  1\u041c\u0433-601\/\u0416                       |    28  II-29-14\/\u041c37                    |    28  \u0422\u0438\u043f IV                          |    28  II-29-05\/\u041c37                    |    28  II-67 \u041c\u043e\u0441\u043a\u0432\u043e\u0440\u0435\u0446\u043a\u0430\u044f              |    28  II-28-2                         |    27  II-49-04\/\u041c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u041f\u00bb          |    27  \u041f44-4\/16 \u0442\u0438\u043f 5                  |    27  \u041f42\/16                          |    26  1-300-3                         |    26  \u041f3\u041c-2\/17                        |    26  II-57-05\/12\u042e\u0410                   |    26  1-410-5                         |    26  1-335-1                         |    26  \u041f46\u041c-22\u043f\u0440\/9                     |    26  II-57-07\/\u042e                      |    25  1-447\u0421-2                        |    25  \u041f3\u041c\u041a                            |    25  \u041f44-4\/16 \u0442\u0438\u043f 3                  |    24  \u041f-111\u041c                          |    24  II-29-04\/\u042e                      |    24  II-49\/12 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u041f\u00bb            |    24  \u041f31\/12                          |    24  II-49\/\u042e \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u041f\u00bb             |    24  1-511-130\/37                    |    23  II-57-03\/12\u041c\u0410                   |    23  \u041f\u0418\u041a-1                           |    22  1-515-24\/9\u041c                     |    22  I-511(I-511\/25\u0411\u0418)               |    22  1-510\/23                        |    22  \u0418-155\u041d\u0411                         |    22  \u0421\u041c-3-3                          |    22  1-447\u0421-6                        |    21  \u041f44-4\/16 \u0442\u0438\u043f 4                  |    21  I-515(I-515\/37)                 |    21  II-29-03\/\u042e                      |    21  II-18-01 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u041a\u00bb            |    21  II-20                           |    21  II-29-15\/\u042e37                    |    21  \u041a\u0422\u0416\u0421-1\u0443\u043a                        |    20  1-335-2                         |    20  \u041f30                             |    20  1605\u0410\u041c-06\/12\u042e                   |    20  \u0418-155\u041c\u043a                         |    19  1-247\u0421-1                        |    19  \u041f55-24\/12                       |    19  \u041f3\u041c-3\/16                        |    18  1605\u0410\u041c\/5                        |    18  \u041a\u0422\u0416\u0421 2\u043f-25                      |    18  1-447\u0421-38                       |    18  \u0418-491\u0410                          |    17  \u0418-155-16\u041a1                      |    17  \u041f46\u041c-21\/9                       |    17  1-410-8                         |    17  1-447\u0421-40                       |    17  \u041f46\u041c-21\/14                      |    17  II-07-19                        |    17  II-49-02\/\u041c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u0414\u00bb          |    17  \u0418-1782\/1                        |    17  1605\u0410\u041c-06\/9\u042e                    |    17  II-57-03\/\u042e\u0410                     |    16  \u041f3\u041c-4\/16                        |    16  II-68-01\/12-83                  |    16  1605\u0410\u041c-08\/9\u041c                    |    16  II-57-05\/\u042e\u0410                     |    16  1-511\/37                        |    16  \u041f\u04344-1\/12\u041d1                      |    15  II-67-386                       |    15  1-801                           |    15  \u041f3\u041c-7\/23                        |    15  1-513                           |    15  \u041f46\u041c-22\u043b\/9                      |    15  \u041f55\u041c-4\/14                       |    15  1-515-26\/9\u041c                     |    15  1-515-3\/\u041c37                     |    15  222-15\/17                       |    14  \u041f44\u0422-1\/14\u041c \u0442\u0438\u043f 1                |    14  II-67 \u0422\u0438\u0448\u0438\u043d\u0441\u043a\u0430\u044f                 |    14  II-29-160                       |    14  1-510-3\/\u042e37                     |    14  \u0418-700                           |    14  \u0421\u041c-3-5                          |    14  \u041f\u0418\u041a-2                           |    14  \u041b\u0421\u0420                             |    14  1-515\/37                        |    13  I-511(I-511\/37)                 |    13  1-464\u0410-15                       |    13  II-49-06\/\u041c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u041f\u00bb          |    13  \u041a\u041e\u041f\u042d                            |    13  II-14-34                        |    13  II-14-35                        |    13  1-244-1                         |    13  \u0411\u0421 05-16\u041c                       |    13  II-57-07\/\u042e\u0410                     |    13  II-57-05\/12\u041c\u0410                   |    12  1\u041c\u0413-601-\u0416                       |    12  \u041a\u041e\u041f\u042d-87                         |    12  \u041f-3\/17                          |    12  \u041f55\/12                          |    12  \u041f3\u041c-6\/17                        |    12  \u0418-155\u041c\u043c                         |    12  II-34                           |    12  II-68-03\/12\u042e-2\/76               |    12  1-467\u0414                          |    12  I-515(I-515\/5)                  |    12  \u0428\u041a\u0414                             |    12  \u041c\u043c1-3                           |    12  II-18\/12                        |    12  1-467\u0410-17                       |    12  1-447\u0421-4                        |    11  1-233-2                         |    11  \u0418-1491-17                       |    11  I-515-3\/\u042e37                     |    11  \u041f44\u041a                            |    11  I-410                           |    11  1-510-2\/23                      |    11  II-18-11\/\u041c\u0418 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u041a\u00bb         |    11  1-510-4\/\u042e                       |    11  1-464\u0410-17                       |    11  1-204-113                       |    11  222-02\/17                       |    11  1-447\u0421-37                       |    11  II-29-05\/\u042e                      |    11  \u041c\u0433-2                            |    11  1\u0420-447\u0421-25                      |    11  1\u0420-447\u0421-26                      |    11  \u041f46\u041c-22\u043b\/9\u0418                     |    11  II-68-01\/16-83                  |    10  \u041f22\/25                          |    10  \u041f46                             |    10  1\u041c\u0433-600-1                       |    10  1-515-4\/\u042e                       |    10  II-68-01\/14-83                  |    10  1-510\/37                        |    10  \u041f44\u0422-1\/25                       |    10  1-204-5                         |    10  4570-63                         |    10  1-515\/9\u041c                        |    10  \u041f\u04344-1\/16\u041d1                      |    10  \u0411\u0421 08-17\u041a                       |    10  \u041f55\u041c-2\/14                       |    10  \u0418-155-16\u041a2                      |    10  I-410 (\u0421\u0410\u041a\u0411)                    |     9  \u041f-46\u041c                           |     9  \u041f44\u041c-1\/17                       |     9  \u041c\u043c1-4                           |     9  \u041a\u0422\u0416\u0421-14                         |     9  \u041f55-22\/12                       |     9  \u041f30(\u041f30\/12)                     |     9  \u041f\u04344-5\/12\u041d1                      |     9  \u0418-700\u041d                          |     9  II-57-05\/\u041c                      |     9  I-515-4\/\u041c37                     |     9  \u041f30\u041c                            |     9  1-225-109                       |     9  \u0418-155\u04112                         |     9  \u042d\u041a-1                            |     8  \u041a\u041e\u041f\u042d-\u0411\u0430\u0448\u043d\u044f(\u041a\u041e\u041f\u042d-\u0411\u0430\u0448\u043d\u044f \u041c-2)      |     8  \u041f\u04344-5\/16\u041d1                      |     8  2-4-1                           |     8  \u041f\u04344                             |     8  \u0411\u0435\u043a\u0435\u0440\u043e\u043d                         |     8  \u0418-782                           |     8  II-68-04\/12\u041c1                   |     8  111                             |     8  \u041f\u04344-1\/10\u041d1                      |     8  \u0418-155-16\u041c4                      |     8  \u0418-155                           |     8  1-447\u0421-39                       |     8  1-511-2\/\u041c37                     |     8  \u0411\u0421 07-17\u041c                       |     8  \u0418-1820                          |     8  1\u041c\u0433-601-441                     |     8  \u0418-155-22\u041c3                      |     8  II-66                           |     8  \u0418-155\u0421                          |     7  II-49                           |     7  1-801-1                         |     7  \u0418-155-9\u041c2                       |     7  \u041f4\/22                           |     7  \u0418-155-16\u041a3                      |     7  \u0418-155-9\u041c3                       |     7  1605\u0410\u041c-06\/9\u041c                    |     7  \u041f\u043f83(83-305\/28-503)             |     7  II-08                           |     7  \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442           |     7  \u0418-1158                          |     7  \u041f\u04344-1\/12                        |     7  \u041f46\u041c-21\/9\u0418                      |     7  II-29-208                       |     7  \u0413\u0440\u0430\u0434-2\u041c                         |     7  \u041f55-2\/12\u0410                       |     7  \u0418-155-16\u041a8                      |     7  \u0421\u042d\u041c-2                           |     7  II-07-04                        |     7  1605\u0410\u041c-04\/9\u041c                    |     7  1-467\u0410-15                       |     7  1-467\u0410-12                       |     7  \u041f\u0414-4                            |     7  \u041f22\u041a                            |     7  1605\u0410\u041c\/\u042d                        |     7  II-49-08\/\u041c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u041f\u00bb          |     7  1-515-142\/9\u041c                    |     7  I-410(I-410 (\u0421\u0410\u041a\u0411))             |     7  1605\u0410\u041c-08\/9\u042e                    |     7  II-18\/12(II-18-01\/12)           |     7  I-510\/23\u0411\u0418                      |     6  \u0418-286                           |     6  \u041f\u04344-5\/10\u041d1                      |     6  1-211-2                         |     6  I-511                           |     6  \u041f3\u041c-3\/9                         |     6  \u0411\u0410\u0428\u041d\u042f \u041c-1                       |     6  \u0422\u0438\u043f II                          |     6  \u041f-44\u0422                           |     6  \u0418-155-22\u041c4                      |     6  \u0418-273                           |     6  \u041f55-2\/12                        |     6  \u0418-155-9\u041c4                       |     6  \u0421\u041c-3-4                          |     6  \u0411\u0421 09-17\u041a                       |     6  \u041f3\u041c-6                           |     6  \u0411\u041e\u0414-1                           |     6  1605-\u0410\u041c(1605\u0410\u041c\/12\u042e)             |     6  1-211-3                         |     6  II-57-07\/\u041c\u0410                     |     6  \u0411\u0421 08-17\u041c                       |     6  222-12\/25                       |     6  \u041f-44\u043c                           |     6  \u041f3-3\/16                         |     6  \u041f\u04344-2\/16\u041d1                      |     6  1\u041c\u0433-600                         |     5  220-\u041c17-1122-\u0420\u0422                 |     5  \u0418-155-22\u041c2                      |     5  \u041f\u04344-1\/8                         |     5  I-515\/9\u041c                        |     5  \u0421\u042d\u041c2                            |     5  1-253\u0410-7                        |     5  1-235-1                         |     5  1\u041c\u0413-601(1\u041c\u0413-601-\u0416)              |     5  \u041f\u0411-02                           |     5  \u0418-155\u041d                          |     5  1-515-5\/\u042e                       |     5  \u0418-155-16\u041c2                      |     5  \u0418-1751                          |     5  1-515                           |     5  \u041f46\u041c-10\u043b\/17                     |     5  220-\u041c25-1222-\u0420\u0422                 |     5  \u0422\u041c-25                           |     5  II-28                           |     5  \u041f\u0440\u0438\u0437\u043c\u0430 (\u0418-1630)                 |     5  1-234-1\u041a\u0411                       |     5  I-447\u0421-26                       |     5  \u0418-760\u0410                          |     5  1\u041c\u0413-601                         |     5  I-515\/9\u042e\u041b                       |     5  \u041f\u04343-02\/22                       |     5  \u041a\u041f\u0414-4570-73\/75                  |     5  1-510                           |     5  \u041a\u041e\u041f\u042d(\u041a\u041e\u041f\u042d-85)                   |     5  \u041f3-4\/16                         |     5  1-801-3                         |     5  II-18-32\/12\u0410                    |     5  \u041f46\u041c-2\/14\u0418                      |     5  I-511\/25\u0411\u0418                      |     5  \u0421\u041c-3-2                          |     5  \u041f44\u0422-4\/14\u041c \u0442\u0438\u043f 4                |     5  \u041f\u04343-03\/22                       |     5  I-510(I-510\/23\u0411\u0418)               |     5  \u041c\u041f\u0421\u041c                            |     5  \u0418-155-16\u041c5                      |     5  \u041f\u0411-01                           |     4  \u041f44\u0422\u041c                           |     4  1-253\u0410-2                        |     4  II-57-07\/12\u042e\u0410                   |     4  II-18\/12(II-18-21\/12\u0410)          |     4  \u041f44\u0422\u041c\/25                        |     4  222-11\/17                       |     4  II-49(II-49\/\u042e \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0414)        |     4  XI-36-01                        |     4  1\u041c\u0433-601\/\u0415                       |     4  \u041a7\/16                           |     4  \u0411\u0421 08-16\u041a                       |     4  \u0421-222-01\/17                     |     4  1605\u0410\u041c\/\u043b                        |     4  1-446\u0421-3                        |     4  1-447\u0421                          |     4  \u0418-155-22\u041c1                      |     4  \u0418-521\u0410                          |     4  \u0418-155-\u0411                         |     4  1-428-3                         |     4  \u041c\u043c1-2                           |     4  I-515\/37                        |     4  \u0418-1630(\u041f\u0440\u0438\u0437\u043c\u0430)                  |     4  1605\u0410\u041c-03\/12\u042e                   |     4  1-510-2\/37                      |     4  \u0411\u0421 12-17\u041c                       |     4  \u0411\u0421 06-17\u041c                       |     4  1-447\u0421-34                       |     4  \u041f3\u041c-1\/9                         |     4  \u0418-1723 (\u0428\u041a\u0414)                    |     4  \u041c\u042d\u0421-84                          |     4  \u041f\u04344-4\/16\u041d1                      |     4  \u041a\u043e\u043b\u043e\u0441                           |     4  1-440\u0421-1                        |     4  \u0414-25                            |     4  \u041f22-1\/16                        |     4  1-447                           |     4  1-260-3\u0410                        |     4  220-\u041c25-1223-\u0423\u0422                 |     4  \u041c-10                            |     4  1-515-4\/\u042e37                     |     4  \u0418-155-9\u041c5                       |     3  \u041f23\/16                          |     3  1-515-5\/\u042e37                     |     3  \u041f3                              |     3  114-86                          |     3  II-57-07\/\u041c                      |     3  \u041f\u04344-1\/16                        |     3  \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u041a\u0423\u0411                     |     3  \u0415\u0432\u0440\u043e\u041f\u0430                          |     3  \u0411\u0421 09-17\u041c                       |     3  1-440\u0421-3                        |     3  222-01\/17                       |     3  II-18-01\/08                     |     3  \u041c\u042e                              |     3  II-57-\u0410\/12                      |     3  \u041f44\u0422-4\/14\u041c \u0442\u0438\u043f 3                |     3  1-260-1                         |     3  VII-40                          |     3  \u041a\u0422\u0416\u0421-13                         |     3  \u0418-1168                          |     3  \u0418-1194                          |     3  1-253-3                         |     3  \u0411\u0421 09-16\u041a                       |     3  \u041a4\/16                           |     3  \u041f46\u041c\u041c, \u0418-1824                   |     3  II-18-01\/09 \u041c\u0418\u0411                 |     3  \u041f\u04344-2\/16                        |     3  \u041a\u0422\u0416\u0421-16                         |     3  \u0418-155-16\u041c1                      |     3  \u0418-1822\/1                        |     3  \u041a\u041e\u041f\u042d-\u041c-\u041f\u0430\u0440\u0443\u0441                    |     3  1-439\u0410-5                        |     3  \u041f55\u041c-30                         |     3  1-228                           |     3  1-467\u0410-18                       |     3  \u041f30(85-07)                      |     3  \u0418-155-9\u041a1                       |     3  222-08\/17                       |     3  \u0418-155-22\u041c7                      |     3  I-447\u0421                          |     3  VI-12\u0410                          |     3  I-515-178\/9\u041c                    |     3  222-09\/17                       |     3  II-68-04\/12\u041c2                   |     3  \u0418-155-16\u041c6                      |     3  \u041f44\u0422-4\/14\u041c \u0442\u0438\u043f 5                |     3  \u0418-1414                          |     3  II-49\/\u041c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0414               |     3  \u041f\u04344-5\/8                         |     3  \u0418-155-16\u041c3                      |     3  VII-42                          |     3  \u0418-1824                          |     3  \u0418-701                           |     3  II-18-22\/\u041c\u0418 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u0411\u00bb         |     3  \u0418-155-16\u041a4                      |     3  \u0418-155-9\u041a5                       |     3  1-515-5                         |     3  II-49(II-49\/\u041c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u041f)        |     3  \u041f46\u041c-22\u043f\u0440\/9\u0418                    |     3  \u041f46\u041c(\u0418\u041f46\u041c)                     |     3  \u041f-46                            |     3  1-428-1                         |     2  164-80-3                        |     2  1-228-9                         |     2  I-511-4\/\u041c                       |     2  II-18-01\/09 \u041c\u0418 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u041a        |     2  \u041f-3\u041c                            |     2  1-447\u0421-47                       |     2  \u041f46\u041c-22\u043b\/14\u041f\u0420                   |     2  \u041f46\u041c-322\/14                     |     2  \u041f46\u041c-23\u043f\u0440\/14                    |     2  \u041f46\u041c\u041c                           |     2  220-\u041c17-1234-\u0420\u0422                 |     2  1-801-13                        |     2  \u041f-30                            |     2  \u041a\u0422\u0416\u0421 3\u043f-25                      |     2  1-447\u0421-10                       |     2  \u041f55\u041c                            |     2  VI-44                           |     2  1-228-7                         |     2  \u0418-155-9\u041a3                       |     2  II-49(II-49\/\u041c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0414)        |     2  1-447\u0421-17                       |     2  \u041f3(\u041f3\/16)                       |     2  I-511-2\/\u042e                       |     2  I-515-06\/9\u042e\u041b                    |     2  \u041a\u0422\u0416\u0421-3                          |     2  1-801-4                         |     2  \u0418-155-16\u041a5                      |     2  \u0418-155-16\u041a7                      |     2  II-18                           |     2  1-460-7                         |     2  1-466\u041a-4                        |     2  \u0418-155-22\u041c6                      |     2  1-260-2                         |     2  1-277-1                         |     2  \u041f44\u041a(\u041f44\u0422,\u041f44\u041a)                 |     2  I-515-06\/9\u041c                     |     2  1-510-2                         |     2  1\u041c\u0413-601\/\u0414                       |     2  II-05                           |     2  1-467\u0410-20                       |     2  1-234-1                         |     2  1-225-110                       |     2  \u041f\u04344-2\/12                        |     2  \u041f46\u041c-23\u043b\/14                     |     2  \u0421-222-15\/17                     |     2  \u0418-155-16\u041c7                      |     2  1-222-126                       |     2  1-447\u0421-46                       |     2  1-300                           |     2  \u0418\u041f46\u041c                           |     2  \u0418-155-9\u041c1                       |     2  1-446\u0421-1                        |     2  1-467\u0414-20                       |     2  1-447\u0421-35                       |     2  \u041f\u04343-01\/22                       |     2  \u041f46\u041c-302\/14                     |     2  II-68-04\/12\u041c                    |     2  1-447\u0421-53                       |     2  I-511\/37                        |     2  \u041a-8-49\u0411                         |     2  II-57-02\/12\u042e\u0410                   |     2  1-428-2                         |     2  \u041f\u043f70-07\/17                      |     2  1\u0420-447\u0421-25\u041c                     |     2  \u0418-1782                          |     2  XI-36-02                        |     2  1-206-104                       |     2  \u041f44\u0422-4\/14\u041c \u0442\u0438\u043f 2                |     2  II-57-07\/12\u041c\u0410                   |     2  \u0418-155-9\u041a2                       |     2  1-204-112                       |     2  II-57\/17                        |     2  II-18-01\/09                     |     2  II-18(II-18-01\/09 \u041c\u0418\u0411)          |     2  \u0418-209A                          |     2  1-253\u0410-6                        |     2  I-511-3\/\u041c                       |     2  \u0418-155-22\u041a1                      |     2  I-515-24\/9\u041c                     |     2  II-29-\u0411                         |     2  \u0421\u0423-155                          |     2  1-301-1                         |     2  1-464\u0410-1                        |     2  1-102-12                        |     2  I-510-4\/\u041c23                     |     2  1-225-111                       |     2  VI-52 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 1                 |     1  1\u0420-303-2                        |     1  II-49\/\u041c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u041f\u00bb             |     1  \u041f-3\/16                          |     1  1-439\u0410-7                        |     1  \u041f3\u041c-2\/9                         |     1  \u041f\u04344-5\/12                        |     1  \u0411\u0410\u0428\u041d\u042f \u041c-2                       |     1  1-447\u0421-13                       |     1  II-18\/12(II-18-31\/12\u0410)          |     1  VII-70                          |     1  1\u0421-01-1                         |     1  \u041f\u04344-2\/12\u041d1                      |     1  \u041f30(\u041f31\/12)                     |     1  1-464\u0414-105                      |     1  1-410-4                         |     1  II-07                           |     1  1-255-5                         |     1  1-515-5\u041c                        |     1  \u041b\u0435\u0431\u0435\u0434\u044c (\u0443\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u0430\u0440\u043a\u0430\u0441) |     1  II-32-04                        |     1  II-66\/\u0411\u0421-36                     |     1  \u041a\u041f\u0414-4570(\u041a\u041f\u0414-4570-I)            |     1  1-460-10                        |     1  I-515-5\/\u041c37                     |     1  \u041f46\u041c-22\u043f\u0440\/14\u041f\u0420                  |     1  I-447\u0421-1                        |     1  \u041a-7-3-5                         |     1  C-222-01\/17                     |     1  II-32-05                        |     1  \u041f44\u0422(\u041f44\u0422, \u041f44\u041a)                |     1  II-57-\u0410\/09                      |     1  \u0426\u0418\u0422\u041f \u2116 51                       |     1  1\u0420-303-17                       |     1  1-439\u0410-4                        |     1  1-300-2                         |     1  1-251-7                         |     1  1-203-15                        |     1  1-447\u0421-12                       |     1  1-301-2                         |     1  \u0418-155-22\u041c5                      |     1  I-335-5                         |     1  \u041f46\u041c, \u0418-1824                    |     1  brown                           |     1  1-275-4                         |     1  \u041f46\u041c-321\/14                     |     1  \u0421-222-02\/17                     |     1  \u0411\u0421 10-17\u041c                       |     1  II-57-05\/\u041c\u0410                     |     1  II-49\/\u042e \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0414               |     1  \u041f\u04344-4\/12\u041d1                      |     1  II-38-03\/1A                     |     1  \u041a-7 (\u041a7-3)                      |     1  I-447                           |     1  II-49(II-49\u041f\/12 (\u0418-294\u0410))       |     1  1-418                           |     1  II-66\/\u0411\u0421-34                     |     1  161-101-21                      |     1  1-251\u0410-17                       |     1  1-460-9                         |     1  I-467\u0410-15                       |     1  \u041f30(\u041f30\/12*)                    |     1  I-447\u0421-25                       |     1  \u0418-1849                          |     1  \u0411\u0421 01-17\u041a                       |     1  1-251-15                        |     1  1-801-16                        |     1  II-32-130                       |     1  \u0411\u0421 07-16\u041c                       |     1  1-447\u0421-12\u0410                      |     1  124-124-4                       |     1  \u041f\u04344-5\/14\u041d1                      |     1  1-335-4                         |     1  1-253-5                         |     1  \u041a\u041e\u041f\u042d(\u043c\u043e\u043d\u043e\u043b\u0438\u0442-\u043a\u0438\u0440\u043f\u0438\u0447)            |     1  II-29-3(II-29-3(9))             |     1  II-49\/\u042e                         |     1  V-79                            |     1  12 (\u0421\u043e\u044e\u0437\u0442\u0440\u0430\u043d\u0441\u043f\u0440\u043e\u0435\u043a\u0442)            |     1  1-204-6                         |     1  1-204-114                       |     1  \u0422-3                             |     1  II-57-02\/12\u041c\u0410                   |     1  1-251                           |     1  \u041a\u041f\u0414-4572\u0410                       |     1  1-242-103                       |     1  I-335-4                         |     1  \u041f\u0440\u0438\u0437\u043c\u0430(\u0418-1630)                  |     1  I-447\u0421-38                       |     1  \u041f\u04344-1\/14\u041d1                      |     1  \u041f3\u041c-4\/9                         |     1  I-515(\u0441\u0442\u0430\u043b\u0438\u043d\u0441\u043a\u0438\u0439)               |     1  VI-13\u0410                          |     1  \u041a\u041e\u041f\u042d(\u041a\u041e\u041f\u042d-2000))                |     1  \u0418-1747                          |     1  1-275-1                         |     1  1-466\u0410-2                        |     1  222-10\/17                       |     1  \u0411\u0421 10-16\u041c                       |     1  \u0411\u0421 06-16\u041c                       |     1  I-510(I-510\/37)                 |     1  II-51                           |     1  \u041f46\u041c-302\/14\u0418                    |     1  \u041f47(\u041f47\/12*)                    |     1  K-7(\u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442)      |     1  \u0418-1746                          |     1  65-426\/I                        |     1  VI-23                           |     1  \u041f-49 \u0414                          |     1  I-515\/9                         |     1  I-515-04\/9\u042e\u041b                    |     1  \u041f47(\u041f47\/12)                     |     1  1-253\u0410-4                        |     1  1-251-11                        |     1  1-294-3                         |     1  1-447\u0421-54                       |     1  VI-52\/2                         |     1  1-467\u0414-19                       |     1  I-467\u0410-4                        |     1  2-5-6                           |     1  1\u041c\u0413-601-441                     |     1  1-277-2                         |     1  1-251-2                         |     1  \u041a\u041f\u0414-4570-I                      |     1  1-447\u0421-44                       |     1  \u041f46\u041c-23\u043f\u0440\/9                     |     1  I-511-130\/37                    |     1  II-18-21\/12\u0410                    |     1  \u0421222                            |     1  \u041f-111\u041c(\u041f-111)                   |     1  1-464\u0414-102                      |     1  1-447\u0421-36                       |     1  II-66\/\u0411\u0421-35                     |     1  \u0418\u041f-46\u0421                          |     1  \u0421-222(222)                      |     1  white                           |     1  II-65                           |     1  1-201-12                        |     1  \u041f\u0417                              |     1  \u041f30\/12*                         |     1  1-252-8                         |     1  \u0414\u041e\u041c\u0420\u0418\u041a \u0442\u0438\u043f 1                    |     1  1-439\u0410-3                        |     1  1-447\u0421-11\u0410                      |     1  17 (\u0421\u043e\u044e\u0437\u0442\u0440\u0430\u043d\u0441\u043f\u0440\u043e\u0435\u043a\u0442)            |     1  \u041f46\u041c-23\u043b\/9                      |     1  \u0418-155-22\u041a5                      |     1  1-447\u0421-33                       |     1  \u041f-3\u043c                            |     1  1-255-4                         |     1  \u041f46\u041c-322\/14\u0418                    |     1  I-410 (\u0442\u0438\u043f I, IV)               |     1  1-251-13                        |     1  1-447\u0421-9                        |     1  I-447\u0421-8                        |     1  1-262                           |     1  1-280                           |     1  1-241-115                       |     1  \u041a\u041e\u041f\u042d(\u041a\u041e\u041f\u042d-80)                   |     1  II-68-01                        |     1  II-18-03\/\u041c\u0418 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u00ab\u0411\u00bb         |     1  1-255-6                         |     1  II-49(II-49\/12 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u041f)       |     1  \u041f46\u041c-23\u043f\u0440\/14\u0418                   |     1  \u041f46\u041c-22\u043b\/14                     |     1  II-29-3(9)                      |     1  K-7                             |     1  1-253-6                         |     1  \u0418-1483                          |     1  \u041f3\u041c-2\/19                        |     1 (813 rows)<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412\u0441\u0435\u0433\u043e-\u0442\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c 100 000 \u0436\u0438\u043b\u044b\u0445 \u0437\u0434\u0430\u043d\u0438\u0439 \u0432 \u041c\u043e\u0441\u043a\u0432\u0435 \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c <a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/RU:Key:design:ref\" rel=\"noopener noreferrer nofollow\">design:ref<\/a> \u0433\u0434\u0435 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d&#8230; \u0411\u0440\u043e\u0434\u0438\u0442\u044c \u043f\u043e \u0434\u0436\u0443\u043d\u0433\u043b\u044f\u043c \u0431\u0435\u0442\u043e\u043d\u043d\u044b\u0445 \u043a\u043e\u0440\u043e\u0431\u043e\u043a \u0441 OSMTracker, \u043d\u0430\u0441\u043b\u0430\u0436\u0434\u0430\u044f\u0441\u044c \u0430\u0442\u043c\u043e\u0441\u0444\u0435\u0440\u043e\u0439 \u043c\u0435\u043b\u043e\u043d\u0445\u043e\u043b\u0438\u0438 \u0438 \u0444\u043b\u0435\u0448\u0431\u0435\u043a\u0430\u043c\u0438 \u0434\u0435\u0442\u0441\u0442\u0432\u0430 \u0438 \u0441\u0442\u0443\u0434\u0435\u043d\u0447\u0435\u0441\u0442\u0432\u0430. \u0412 \u044d\u0442\u043e\u043c \u0435\u0441\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0440\u043e\u0434\u043d\u043e\u0435 \u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0433\u0440\u0443\u0441\u0442\u043d\u043e\u0435!<\/p>\n<p>\u0414\u043b\u044f \u0434\u043e\u043c\u043e\u0432 \u0443 \u043c\u0435\u0442\u0440\u043e \u043f\u0440\u043e\u0446\u0435\u043d\u0442 <a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/RU:Key:design:ref\" rel=\"noopener noreferrer nofollow\">design:ref<\/a> = 35%, \u0437\u043d\u0430\u0447\u0438\u0442 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c 23983 \u043d\u0435 \u0440\u0430\u0437\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0445 \u044d\u0442\u0438\u043c \u0442\u0435\u0433\u043e\u043c \u0434\u043e\u043c\u043e\u0432! \u042d\u0445, \u0435\u0441\u043b\u0438 \u0431\u044b \u043a\u0430\u0436\u0434\u044b\u0439 \u0425\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0438\u043d \u043e\u043a\u0438\u043d\u0443\u043b \u0432\u0437\u043e\u0440\u043e\u043c \u0441\u0432\u043e\u0438 \u043e\u043a\u0440\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0438 \u0443\u043a\u0430\u0437\u0430\u043b <a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/RU:Key:design:ref\" rel=\"noopener noreferrer nofollow\">design:ref<\/a> \u0438 \u0433\u043e\u0434 \u043f\u043e\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f \u043f\u0430\u0440\u044b \u0434\u043e\u043c\u043e\u0432. \u041d\u043e \u043f\u043e\u043a\u0430 \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0443.<\/p>\n<h2>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b<\/h2>\n<p>\u041f\u043e \u0434\u0430\u043d\u043d\u044b\u043c OpenStreetMap 32% \u0437\u0434\u0430\u043d\u0438\u0439 \u0432 \u041c\u043e\u0441\u043a\u0432\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0432 15 \u043c\u0438\u043d\u0443\u0442\u0430\u0445 \u043f\u0435\u0448\u043a\u043e\u043c \u043e\u0442 \u043c\u0435\u0442\u0440\u043e. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u044d\u0442\u0438\u0445 \u0434\u043e\u043c\u043e\u0432 \u0443 \u043c\u0435\u0442\u0440\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 <a href=\"https:\/\/gist.github.com\/igor-suhorukov\/89675e951210d9fa2825a17485e7681f\" rel=\"noopener noreferrer nofollow\">GitHub Gist<\/a>, \u0433\u0434\u0435 \u043a\u0430\u0440\u0442\u0443 \u043c\u043e\u0436\u043d\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c (\u0442\u0430\u043c \u0435\u0449\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043f\u0430\u0441\u0445\u0430\u043b\u043e\u0447\u043a\u0430 \u0432 \u0446\u0435\u043d\u0442\u0440\u0435 \u0441 \u0434\u043e\u043c\u043e\u043c). <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b9b\/60d\/72f\/b9b60d72fd05116396d5836684d0a655.png\" width=\"1800\" height=\"888\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b9b\/60d\/72f\/b9b60d72fd05116396d5836684d0a655.png\"\/><\/figure>\n<p>\u0420\u0430\u0441\u0447\u0435\u0442\u044b \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u044b \u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0433\u0435\u043e\u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u043e\u043b\u044c\u043a\u043e Open Source \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b. \u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0430\u0448\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0443, \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043d\u0430 OpenStreetMap \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u043b\u0438 \u0442\u0430\u043c \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u043d\u0430\u044f \u0434\u043e\u0440\u043e\u0433\u0430 \u043e\u0442 \u0432\u0430\u0448\u0435\u0433\u043e \u0434\u043e\u043c\u0430 \u043a \u043c\u0435\u0442\u0440\u043e. \u0412\u043e \u0432\u0442\u043e\u0440\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043c\u0430\u0440\u0448\u0440\u0443\u0442 <a href=\"https:\/\/graphhopper.com\/maps\/\" rel=\"noopener noreferrer nofollow\">\u043d\u0430 \u0441\u0430\u0439\u0442\u0435<\/a> \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043a\u0430\u043a \u043f\u0440\u043e\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0438 \u043a\u0430\u043a\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0418 \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0443 \u0432\u0430\u0448\u0435\u0433\u043e \u0434\u043e\u043c\u0430 \u0441 \u043c\u043e\u0435\u0439 \u043a\u0430\u0440\u0442\u044b &#171;\u043f\u0440\u043e\u043f\u0430\u043b\u043e \u043c\u0435\u0442\u0440\u043e&#187;, \u0442\u043e \u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 &#8212; \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f!<\/p>\n<p>\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f\u0445 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0442 \u0434\u043e\u043c\u043e\u0432 \u0434\u043e \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u043e\u0432, \u0448\u043a\u043e\u043b, \u0434\u0435\u0442\u0441\u0430\u0434\u043e\u0432, \u043f\u043e\u043b\u0438\u043a\u043b\u0438\u043d\u0438\u043a. \u0423\u0434\u0430\u0447\u043d\u043e\u0433\u043e \u0432\u0430\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u043e\u0433\u043e \u0436\u0438\u043b\u044c\u044f!<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/770044\/\"> https:\/\/habr.com\/ru\/articles\/770044\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u044e \u0441\u0442\u043e\u043b\u0438\u0446\u044b \u0438 \u043a\u0430\u043a \u043e\u043d\u0430 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043a\u043e\u043c\u0444\u043e\u0440\u0442 \u0436\u0438\u043b\u044c\u044f. \u0412 \u044d\u0442\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u0440\u0430\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u0442 \u0432\u0445\u043e\u0434\u0430 \u0432 \u043c\u0435\u0442\u0440\u043e\u043f\u043e\u043b\u0438\u0442\u0435\u043d \u0434\u043e \u0436\u0438\u043b\u044b\u0445 \u0437\u0434\u0430\u043d\u0438\u0439. \u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437 \u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b \u0436\u0438\u043b\u044c\u0435 \u0432 \u0433\u043e\u0440\u043e\u0434\u0435 \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043e\u0442 \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432 \u0438 \u043f\u043e\u0434\u0435\u043b\u0438\u043b\u0441\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439 <a href=\"https:\/\/habr.com\/ru\/articles\/761600\/\" rel=\"noopener noreferrer nofollow\">&#171;\u0413\u0434\u0435 \u0432 \u041c\u043e\u0441\u043a\u0432\u0435 \u0436\u0438\u0442\u044c \u00ab\u043d\u0435\u043f\u043b\u043e\u0445\u043e\u00bb&#187;<\/a>. \u0422\u0435\u043f\u0435\u0440\u044c \u0436\u0435 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043d\u0430 \u043f\u043e\u0437\u0438\u0442\u0438\u0432\u043d\u044b\u0435 \u0444\u0430\u043a\u0442\u043e\u0440\u044b \u0432\u044b\u0431\u043e\u0440\u0430 \u043c\u0435\u0441\u0442\u0430 \u043a\u0432\u0430\u0440\u0442\u0438\u0440\u044b \u0438 \u043d\u0430\u0439\u0434\u0435\u043c \u0432 \u041c\u043e\u0441\u043a\u0432\u0435 \u0436\u0438\u043b\u044b\u0435 \u0434\u043e\u043c\u0430 \u0432 \u0448\u0430\u0433\u043e\u0432\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u043e\u0442 \u043c\u0435\u0442\u0440\u043e.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0421\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e c \u043f\u043e\u043c\u043e\u0449\u044c\u044e Graphhopper, <a href=\"https:\/\/github.com\/igor-suhorukov\/openstreetmap_h3\" rel=\"noopener noreferrer nofollow\">OpenStreetMap H3<\/a> \u0438 PostGIS. \u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u0430\u043b\u0435\u043a\u0438 \u043e\u0442 PostgreSQL\/Java, \u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u043e\u043b\u0438\u0441\u0442\u044b\u0432\u0430\u0439\u0442\u0435 \u0432 \u043a\u043e\u043d\u0435\u0446 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<h2>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p>\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u043b \u0433\u0435\u043e\u0434\u0430\u043d\u043d\u044b\u0435 \u041c\u043e\u0441\u043a\u0432\u044b \u0432 Ubuntu, \u0433\u0434\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b git, wget, docker.io:<\/p>\n<pre><code class=\"bash\">mkdir ~\/moscow &amp;&amp; cd ~\/moscow  wget https:\/\/download.geofabrik.de\/russia\/central-fed-district-latest.osm.pbf wget https:\/\/raw.githubusercontent.com\/mapsme\/omim\/master\/data\/borders\/Russia_Moscow.poly docker run -rm -it -w \/wkd -v $(pwd):\/wkd mschilde\/osmium-tool osmium extract --polygon Russia_Moscow.poly central-fed-district-latest.osm.pbf -o moscow.osm.pbf  git clone https:\/\/github.com\/igor-suhorukov\/openstreetmap_h3.git cd openstreetmap_h3 &amp;&amp; docker build -t openstreetmap_h3 . cd postgis_docker-master &amp;&amp; docker build -t postgres15_postgis .  cd ~\/moscow docker run -it --rm -w $(pwd) -v $(pwd):\/$(pwd) -v \/var\/run\/docker.sock:\/var\/run\/docker.sock openstreetmap_h3:latest -source_pbf $(pwd)\/moscow.osm.pbf -result_in_tsv true docker run --name postgis15-moscow --memory=12g --memory-swap=12g --memory-swappiness 0 --shm-size=1g -v $(pwd)\/database:\/var\/lib\/postgresql\/data -v $(pwd)\/moscow_loc_ways:\/input -e POSTGRES_PASSWORD=osmworld -d -p 5432:5432 postgres15_postgis:latest -c checkpoint_timeout='15 min' -c checkpoint_completion_target=0.9 -c shared_buffers='4096 MB' -c wal_buffers=-1 -c bgwriter_delay=200ms -c bgwriter_lru_maxpages=100 -c bgwriter_lru_multiplier=2.0 -c bgwriter_flush_after=0 -c max_wal_size='32768 MB' -c min_wal_size='16384 MB'<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code class=\"bash\">psql -h 127.0.0.1 -p 5432 -U postgres -d osmworld<\/code><\/pre>\n<p>\u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u0445\u043e\u0434\u044b \u0432 \u043c\u0435\u0442\u0440\u043e \u0438 \u041c\u0426\u041a  \u043f\u043e \u0442\u0435\u0433\u0443 <a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/RU:Tag:railway%3Dsubway_entrance\" rel=\"noopener noreferrer nofollow\">railway=subway_entrance<\/a>:<\/p>\n<pre><code class=\"sql\">create temporary table subway_entrance as    select id, centre, tags      from geometry_global_view e       where tags@>'railway=>subway_entrance';<\/code><\/pre>\n<figure class=\"full-width\">\n<div><figcaption>\u041a\u0440\u0430\u0441\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 &#8212; \u0432\u044b\u0445\u043e\u0434\u044b network=\u041c\u0426\u041a. \u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043d\u0435 \u0432\u0441\u0435 \u0432\u044b\u0445\u043e\u0434\u044b \u0438\u0437 \u041c\u0426\u041a \u0440\u0430\u0437\u043c\u0435\u0447\u0435\u043d\u044b \u0441 network  <\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u044f \u0448\u043a\u043e\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u043a\u0438 \u043f\u0440\u043e \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u0430, \u0438\u0434\u0443\u0449\u0435\u0433\u043e \u0441\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e 5\u043a\u043c\/\u0447, \u0437\u0430 15 \u043c\u0438\u043d\u0443\u0442 \u043f\u0435\u0448\u043a\u043e\u043c \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 1250\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u0445\u043e\u0434\u0430 \u0432 \u043f\u043e\u0434\u0437\u0435\u043c\u043a\u0443 \u043d\u0430\u0439\u0434\u0435\u043c \u0436\u0438\u043b\u044b\u0435 \u0437\u0434\u0430\u043d\u0438\u044f \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c \u0440\u0430\u0434\u0438\u0443\u0441\u0435, \u043f\u043e \u043f\u0440\u044f\u043c\u043e\u0439.<\/p>\n<pre><code class=\"sql\">CREATE TYPE building_info AS (id bigint, type table_reference, x float8, y float8);  create table living_building_near as select m.id subway_entrance_id,st_x(m.centre) subway_entrance_x,st_y(m.centre) subway_entrance_y,        array_agg((b.id,b.type,st_x(b.centre),st_y(b.centre))::building_info) buildings   from subway_entrance m inner join geometry_global_view b on     b.tags?'building' and     not(b.tags?'amenity') and     not(b.tags?'shop') and     b.tags->'building' not in --\u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u043d\u0438\u0436\u0435 \u0437\u0434\u0430\u043d\u0438\u044f\u0445 \u043d\u0435 \u0436\u0438\u0432\u0443\u0442 \u043d\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u0435         ('service','garages','industrial','retail','office','roof','commercial','garage','kiosk','warehouse','church',         'parking','public','shed','hangar','train_station','guardhouse','transportation','terrace','greenhouse','bridge',         'government','chapel','gazebo','civic','ruins','supermarket','sports_centre','semidetached_house','toilets',         'sports_hall','clinic','farm_auxiliary','stable','grandstand','bunker','gatehouse','store','temple','ventilation_kiosk',         'carport','cowshed','barracks','shop','cabin','barn','cathedral','wall','townhouse','manufacture','shelter',         'fire_station','stadium','stands','sport_hall','theatre','storage_tank','checkpoint','houseboat','abandoned','dovecote',         'mosque','museum','military','container','observatory','lift','tent','factory','sport','mall','riding_hall','depot',         'prison','gate','triumphal_arch','water_works','public_building','pavilion','bank','institute','works','collapsed',         'car_repair','crossing_box','fuel','tree_house','presbytery','yesq','farm','outbuilding','police','porch','sauna',         'monastery','cinema','tower','boathouse','library','transformer_tower','heat_exchange_station','ice_rink','entrance','construction','transformer') and      ST_DWithin(b.geom::geography,m.centre::geography,1250)    group by 1,2,3; --select m.id subway_entrance_id,st_x(m.centre) subway_entrance_x,st_y(m.centre) subway_entrance_y,array_agg((b.id,b.type,st_x(b.centre),st_y(b.centre))::building_info) buildings from subway_entrance m inner join geometry_global_view b on b.tags?'_lb' and ST_DWithin(b.geom::geography,m.centre::geography,1250) group by group by 1,2,3;<\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 \u0431\u0430\u0437\u0435 \u0441\u043e\u0437\u0434\u0430\u0441\u0442\u0441\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u0433\u0434\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u0445\u043e\u0434\u0430 \u0432 \u043c\u0435\u0442\u0440\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0434\u0430\u043d\u0438\u0439 \u0432 \u0440\u0430\u0434\u0438\u0443\u0441\u0435 1250\u043c \u043f\u043e \u043f\u0440\u044f\u043c\u043e\u0439 \u0441 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 \u0438\u0445 \u0446\u0435\u043d\u0442\u0440\u043e\u0432 \u0438 ID:<\/p>\n<pre><code class=\"sql\">osmworld=# \\d living_building_near                    Table \"public.living_building_near\"        Column       |       Type       | Collation | Nullable | Default  --------------------+------------------+-----------+----------+---------  subway_entrance_id | bigint           |           |          |   subway_entrance_x  | double precision |           |          |   subway_entrance_y  | double precision |           |          |   buildings          | building_info[]  |           |          | <\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u043a\u0443\u0434\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439:<\/p>\n<pre><code class=\"sql\">create table subway_distance(                 entrance_id bigint,                 building_id bigint,                 building_type table_reference,                 distance smallint,                 primary key(entrance_id,building_id,building_type) );<\/code><\/pre>\n<h2>\u0420\u0430\u0441\u0447\u0435\u0442 \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u043d\u044b\u0445 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439<\/h2>\n<p>\u0412\u044b\u0431\u0440\u0430\u043b\u0438 \u0434\u043e\u043c\u0430 \u0432 \u043e\u043a\u0440\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u044f\u0445, \u043d\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e \u043f\u0440\u044f\u043c\u043e\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u043a\u043e\u0440\u043e\u0447\u0435 \u0447\u0435\u043c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c. \u0410 \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u0440\u0430\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0443\u0436\u0435\u043d \u043b\u0438\u0431\u043e \u0441\u0435\u0440\u0432\u0438\u0441 \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u0437\u0430 \u0434\u0435\u043d\u044c\u0433\u0438 \u0438 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043b\u0438\u0431\u043e \u043b\u043e\u043a\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u0440\u043e\u0443\u0442\u0435\u0440 \u044d\u043d\u0434\u0436\u0438\u043d. \u0414\u043b\u044f OpenStreetMap \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e Open Source \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438. \u041d\u043e \u043c\u043d\u0435 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u0435\u0435 \u0438 \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Graphhopper \u043d\u0430 Java. \u0412 \u0447\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0434 API \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u043a\u043b\u0430\u0434\u043a\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 &#8212; \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043b\u0438\u043c\u0438\u0442\u043e\u0432, \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a \u0438 \u043f\u043b\u0430\u0442\u044b \u0437\u0430 \u0441\u0435\u0440\u0432\u0438\u0441. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0440\u0430\u0441\u0447\u0438\u0442\u0430\u043b\u0430 450032 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439 &#171;\u0431\u0435\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0439 \u0438 \u0421\u041c\u0421&#187;. \u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 Graphhopper \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u0430 \u0438 \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0440\u043e\u0443\u0442\u0438\u043d\u0433 \u043f\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u044f \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0431\u043b\u0438\u0437\u043e\u0441\u0442\u044c \u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432 \u043a \u0434\u043e\u0440\u043e\u0436\u043a\u0435 \u0438 \u0438\u0437\u0431\u0435\u0433\u0430\u044f \u043c\u0435\u0441\u0442 \u0433\u0434\u0435 \u043d\u0435\u0442 \u0430\u0441\u0444\u0430\u043b\u044c\u0442\u0430.<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0440\u0430\u0441\u0447\u0435\u0442\u043e\u043c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439 &#8212; \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u0441\u0435\u0440\u0432\u0438\u0441 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 \u043a\u0430\u043a REST \u0447\u0435\u0440\u0435\u0437 TCP, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f <strong>\u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Graphhopper 8.0 \u043a\u0430\u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0441 in-process \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c \u0431\u0435\u0437 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043f\u043e HTTP<\/strong>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044e \u0432 \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 graphhopper-core \u0438 postgresql jdbc \u0434\u0440\u0430\u0439\u0432\u0435\u0440:<\/p>\n<details class=\"spoiler\">\n<summary>Maven pom.xml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?> &lt;project xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\"          xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"          xsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd\">     &lt;modelVersion>4.0.0&lt;\/modelVersion>      &lt;groupId>com.github.igor-suhorukov&lt;\/groupId>     &lt;artifactId>routing-example&lt;\/artifactId>     &lt;version>1.0-SNAPSHOT&lt;\/version>      &lt;properties>         &lt;maven.compiler.source>11&lt;\/maven.compiler.source>         &lt;maven.compiler.target>11&lt;\/maven.compiler.target>       &lt;\/properties>      &lt;dependencies>         &lt;dependency>             &lt;groupId>com.graphhopper&lt;\/groupId>             &lt;artifactId>graphhopper-core&lt;\/artifactId>             &lt;version>8.0&lt;\/version>         &lt;\/dependency>         &lt;dependency>             &lt;groupId>org.postgresql&lt;\/groupId>             &lt;artifactId>postgresql&lt;\/artifactId>             &lt;version>42.6.0&lt;\/version>         &lt;\/dependency>     &lt;\/dependencies> &lt;\/project><\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041c\u043e\u044f Java \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b living_building_near \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0432\u0445\u043e\u0434\u0430 \u0432 \u043c\u0435\u0442\u0440\u043e \u0438 \u0437\u0434\u0430\u043d\u0438\u044f \u0432 \u043e\u043a\u0440\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u044f\u0445 \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u0440\u0430\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u043d\u0443\u044e \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u044e \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0435\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 subway_distance. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044f \u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f, \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c 1250\u043c.<\/p>\n<pre><code class=\"java\">package com.github.isuhorukov.routing;  import com.graphhopper.GHRequest; import com.graphhopper.GHResponse; import com.graphhopper.GraphHopper; import com.graphhopper.ResponsePath; import com.graphhopper.config.CHProfile; import com.graphhopper.config.Profile; import org.postgresql.jdbc.PgArray; import org.postgresql.util.PGobject;  import java.sql.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors;  public class Routing {      public static void main(String[] args) throws Exception {         GraphHopper hopper = getGraphHopper();         try (Connection connection = DriverManager.getConnection(                 System.getenv(\"jdbc_url\"), System.getenv(\"user\"), System.getenv(\"password\"))) {             connection.setAutoCommit(false);             try {                 var distances = calculateDistances(connection, hopper);                 saveDistance(connection, distances);             } catch (SQLException e) {                 connection.rollback();                 throw e;             }         }     }      private static GraphHopper getGraphHopper() {         var hopper = new GraphHopper();         hopper.setOSMFile(System.getenv(\"osm_file\"));         hopper.setGraphHopperLocation(\"route\");         hopper.getCHPreparationHandler().setCHProfiles(new CHProfile(\"foot\"));         hopper.setProfiles(new Profile(\"foot\").setVehicle(\"foot\"));         hopper.importOrLoad();         return hopper;     }      private static List&lt;Distance> calculateDistances(Connection connection, GraphHopper hopper) throws SQLException {         List&lt;Distance> distances = new ArrayList&lt;>();         try (Statement subwayQuery = connection.createStatement()){             int step=0;             try (ResultSet<\/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-358548","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/358548","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=358548"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/358548\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=358548"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=358548"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=358548"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}