{"id":312589,"date":"2020-11-05T15:00:27","date_gmt":"2020-11-05T15:00:27","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=312589"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2020-11-05T15:00:27","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=312589","title":{"rendered":"\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0442\u0430\u0439\u043b\u043e\u0432 \u0438\u0437 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u044b\u0445 \u043a\u0430\u0440\u0442 (\u0447.2)"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043c \u043d\u0430\u0448 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u0439\u043b\u0430, \u0443\u0437\u043d\u0430\u0435\u043c, \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0442\u0430\u0439\u043b\u044b \u0432 OpenLayers \u0438 \u0432 OsmAnd. \u041f\u043e\u043f\u0443\u0442\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 \u0413\u0418\u0421 \u0438 \u0443\u0437\u043d\u0430\u0435\u043c \u043f\u0440\u043e \u043a\u0430\u0440\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0443\u0437\u043d\u0430\u0435\u043c \u0432 \u0447\u0435\u043c \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u00ab\u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430\u00bb \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u0438 \u0437\u0430\u0447\u0435\u043c \u043e\u043d\u0430 \u043d\u0443\u0436\u043d\u0430.<br \/>  <a name=\"habracut\"><\/a><\/p>\n<p>  \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u0430 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0446\u0432\u0435\u0442 \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u043f\u043e \u0433\u0435\u043e\u0434\u0435\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c \u0448\u0438\u0440\u043e\u0442\u0430,<br \/>  \u0434\u043e\u043b\u0433\u043e\u0442\u0430), \u0443\u0436\u0435 \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u043c \u0432 \u0421\u041a \u044d\u0442\u043e\u0439 \u043a\u0430\u0440\u0442\u044b.<\/p>\n<p>  \u0413\u0435\u043e\u0434\u0435\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0437\u0430\u0434\u0430\u043d\u044b \u043d\u0430 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u044d\u043b\u043b\u0438\u043f\u0441\u043e\u0438\u0434\u0430, \u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u043d\u0430 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438, \u0442.\u0435. \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043e\u0442 \u0432\u044b\u043f\u0443\u043a\u043b\u043e\u0439 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u043a \u043f\u043b\u043e\u0441\u043a\u043e\u0439. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u044b\u043f\u0443\u043a\u043b\u0443\u044e \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c (\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0447\u0442\u043e \u043d\u0430 \u043d\u0435\u0439 \u043d\u0430\u043d\u0435\u0441\u0435\u043d \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0440\u0438\u0441\u0443\u043d\u043e\u043a \u0438\u043b\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043d\u0430\u044f \u0441\u0435\u0442\u043a\u0430), \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u043d\u0430 \u043f\u043b\u043e\u0441\u043a\u0443\u044e \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u0439. \u0418\u0441\u043a\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u043c\u043e\u0436\u0435\u0442: \u0444\u043e\u0440\u043c\u0430 (\u0443\u0433\u043b\u044b), \u043f\u043b\u043e\u0449\u0430\u0434\u044c, \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u044b. \u0415\u0441\u0442\u044c, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c, \u043f\u0440\u0438\u0447\u0435\u043c \u043d\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f, \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u043d\u0430 \u043f\u043b\u043e\u0441\u043a\u0443\u044e \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c \u043d\u0435 \u0438\u0441\u043a\u0430\u0436\u0430\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e-\u0442\u043e \u043e\u0434\u043d\u043e, \u043d\u043e \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043a\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/gr\/av\/6h\/grav6hbx-dcvismf_fp0ohk3fzu.jpeg\"><\/p>\n<p>  \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u043b\u043a\u0438\u0445 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430\u0445 (\u0432\u0441\u044f \u043f\u043b\u0430\u043d\u0435\u0442\u0430, \u043a\u043e\u043d\u0442\u0438\u043d\u0435\u0442), \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0438\u043b\u044c\u043d\u0435\u0435, \u0447\u0435\u043c \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 (\u043e\u0431\u043b\u0430\u0441\u0442\u044c, \u0433\u043e\u0440\u043e\u0434), \u0430 \u043d\u0430 \u0441\u0430\u043c\u044b\u0445 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 (\u043f\u043b\u0430\u043d \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u043a\u0430) \u043e \u043d\u0438\u0445 \u0432\u043e\u043e\u0431\u0449\u0435 \u0440\u0435\u0447\u044c \u043d\u0435 \u0438\u0434\u0435\u0442, \u0442.\u043a. \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c \u044d\u043b\u043b\u0438\u043f\u0441\u043e\u0438\u0434\u0430 \u043d\u0430 \u0442\u0430\u043a\u0438\u0445 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430\u0445 \u0443\u0436\u0435 \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u043c\u0430 \u043e\u0442 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438.<\/p>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043f\u043e\u0434\u043e\u0448\u043b\u0438 \u043a \u043f\u043e\u043d\u044f\u0442\u0438\u044e \u043a\u0430\u0440\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438. \u041d\u0435 \u0431\u0443\u0434\u0443 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0441 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u043c\u0438 \u043f\u0440\u043e\u0435\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0444\u0435\u0440\u044b \u043d\u0430 \u0446\u0438\u043b\u0438\u043d\u0434\u0440 \u0438\u043b\u0438 \u043d\u0430 \u043a\u043e\u043d\u0443\u0441 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u043a\u043e\u0439, \u0434\u043b\u044f \u043d\u0430\u0441 \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u0430\u0436\u043d\u043e \u043e\u0431\u043e\u0431\u0449\u0438\u0442\u044c.<\/p>\n<p>  \u041a\u0430\u0440\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u2014 \u044d\u0442\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u044d\u043b\u043b\u0438\u043f\u0441\u043e\u0438\u0434\u0430 \u043d\u0430 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c. \u041f\u0440\u043e\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u044d\u0442\u043e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0433\u0435\u043e\u0434\u0435\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 (\u0448\u0438\u0440\u043e\u0442\u0430, \u0434\u043e\u043b\u0433\u043e\u0442\u0430) \u0432 \u043f\u043b\u043e\u0441\u043a\u0438\u0435 \u0434\u0435\u043a\u0430\u0440\u0442\u043e\u0432\u044b \u2014 \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e.<\/p>\n<p>  \u041a\u0430\u0440\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0439 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u043e \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e, \u0432\u0441\u0435 \u043e\u043d\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u0446\u0435\u043b\u0435\u0439: \u0440\u0430\u0432\u043d\u043e\u0432\u0435\u043b\u0438\u043a\u0438\u0435 (\u0432 \u043a\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043b\u043e\u0449\u0430\u0434\u044c) \u0434\u043b\u044f \u043f\u043e\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u0430\u0440\u0442, \u043a\u0430\u0440\u0442 \u0433\u0440\u0443\u043d\u0442\u043e\u0432, \u0440\u0430\u0432\u043d\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0435 (\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0444\u043e\u0440\u043c\u0430) \u2014 \u0434\u043b\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438, \u0440\u0430\u0432\u043d\u043e\u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 (\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430 \u043f\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c\u0443 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e) \u2014 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0433\u0435\u043e\u0434\u0430\u043d\u043d\u044b\u0445. \u0415\u0441\u0442\u044c \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u044e\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u044f\u0445 \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u0435\u0441\u0442\u044c \u0441\u043e\u0432\u0441\u0435\u043c \u044d\u0437\u043e\u0442\u0435\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438. \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u0438 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u00ab\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u0430\u0440\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0439\u00bb.<\/p>\n<p>  \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438 \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u044b \u043b\u0438\u0431\u043e \u0442\u043e\u0447\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u0443\u043b\u044b, \u043b\u0438\u0431\u043e \u0432 \u0432\u0438\u0434\u0435 \u0441\u0443\u043c\u043c\u044b \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0445\u0441\u044f \u0440\u044f\u0434\u043e\u0432, \u043f\u0440\u0438\u0447\u0435\u043c \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432. \u0424\u043e\u0440\u043c\u0443\u043b\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044f\u0442 \u0448\u0438\u0440\u043e\u0442\u0443 \u0438 \u0434\u043e\u043b\u0433\u043e\u0442\u0443 \u0432 \u0434\u0435\u043a\u0430\u0440\u0442\u043e\u0432\u044b \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0435\u0434\u0438\u043d\u0438\u0446\u0435\u0439 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0432 \u0442\u0430\u043a\u0438\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u0440. \u0422\u0430\u043a\u0430\u044f \u043c\u0435\u0442\u0440\u043e\u0432\u0430\u044f \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043d\u0430\u044f \u0441\u0435\u0442\u043a\u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u043d\u0435\u0441\u0435\u043d\u0430 \u0438 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 (\u0432 \u0432\u0438\u0434\u0435 \u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440\u043e\u0432\u043e\u0439 \u0441\u0435\u0442\u043a\u0438), \u043d\u043e \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0435\u0435 \u043d\u0435 \u043d\u0430\u043d\u043e\u0441\u044f\u0442. \u041d\u043e \u043c\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0432 \u043d\u0435\u044f\u0432\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u043e\u043d\u0430 \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u0435\u0441\u0442\u044c. \u041c\u0430\u0441\u0448\u0442\u0430\u0431 \u043a\u0430\u0440\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u043d \u043d\u0430 \u043a\u0430\u0440\u0442\u0435, \u043a\u0430\u043a\u0440\u0430\u0437 \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u044d\u0442\u043e\u0439 \u0441\u0435\u0442\u043a\u0438. \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u0447\u0435\u0442\u043a\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e 1 \u043c\u0435\u0442\u0440 \u043d\u0430 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 1 \u043c\u0435\u0442\u0440\u0443 \u043d\u0430 \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u043d\u0435 \u043d\u0430 \u0432\u0441\u0435\u0439 \u043a\u0430\u0440\u0442\u0435, \u0430 \u043b\u0438\u0448\u044c \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0442\u043e\u0447\u043a\u0430\u0445, \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0438, \u043b\u0438\u0431\u043e \u043f\u043e \u043b\u0438\u043d\u0438\u044f\u043c \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u0432 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0436\u0435 \u0442\u043e\u0447\u043a\u0430\u0445 \u0438\u043b\u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445 \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f \u0438 1 \u043c\u0435\u0442\u0440 \u043d\u0430 \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u0442 1 \u043c\u0435\u0442\u0440\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438.<\/p>\n<p>  \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435. \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 WGS84_XYZ \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0438\u0437 \u0421\u041a WGS84 \u0432 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u043d\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u043d\u044b\u0435 \u043d\u0435 \u0432 \u043c\u0435\u0442\u0440\u0430\u0445, \u0430 \u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445. \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u0442\u0430\u043c \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f, \u0435\u0441\u043b\u0438 \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u041c\u0435\u0440\u043a\u0430\u0442\u043e\u0440\u0430 \u043d\u0435 \u043d\u0430 \u0441\u0444\u0435\u0440\u0435, \u0430 \u043d\u0430 \u044d\u043b\u043b\u0438\u043f\u0441\u043e\u0438\u0434\u0435, \u0442\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u0431\u044b\u043b\u0430 \u0431\u044b \u043f\u043e\u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u0436\u0438\u0437\u043d\u044c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u043c, \u0431\u044b\u043b\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u0441\u0444\u0435\u0440\u0430, \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f WebMercator \u0442\u0430\u043a \u0438 \u043f\u0440\u0438\u0436\u0438\u043b\u0430\u0441\u044c \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u0444\u0435\u0440\u043e\u0439, \u0437\u0430 \u0447\u0442\u043e \u0435\u0435 \u0447\u0430\u0441\u0442\u043e \u0440\u0443\u0433\u0430\u044e\u0442.<\/p>\n<p>  \u0414\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u043d\u0443\u0436\u0434 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u00abMap projections used by the U.S. Geological Survey\u00bb \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 pdf, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442. \u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043b\u0435\u0433\u043a\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430\u0448 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c. \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043e\u0434\u043d\u0443 \u0438\u0437 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0439 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u043e\u043f\u0435\u0440\u0435\u0447\u043d\u0430\u044f \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u041c\u0435\u0440\u043a\u0430\u0442\u043e\u0440\u0430 (Transverse Mercator) \u0438 \u043e\u0434\u0438\u043d \u0438\u0437 \u0435\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u0413\u0430\u0443\u0441\u0441\u0430-\u041a\u0440\u044e\u0433\u0435\u0440\u0430 (Gauss-Kruger).<\/p>\n<pre><code class=\"cpp\">struct TransverseMercatorParam {     struct Ellipsoid *ep;     double k;           \/* \u041c\u0430\u0441\u0448\u0442\u0430\u0431\u043d\u044b\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442                                 *\/     double lat0;        \/* \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c  (\u0432 \u0440\u0430\u0434\u0438\u0430\u043d\u0430\u0445)                      *\/     double lon0;        \/* \u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0440\u0438\u0434\u0438\u0430\u043d (\u0432 \u0440\u0430\u0434\u0438\u0430\u043d\u0430\u0445)                      *\/     double n0;          \/* \u0423\u0441\u043b\u043e\u0432\u043d\u043e\u0435 \u0441\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438     *\/     double e0;          \/* \u0423\u0441\u043b\u043e\u0432\u043d\u043e\u0435 \u0432\u043e\u0441\u0442\u043e\u0447\u043d\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0435\u0440\u0438\u0434\u0438\u0430\u043d\u0430 *\/     double zw;          \/* \u0428\u0438\u0440\u0438\u043d\u0430 \u0437\u043e\u043d\u044b (\u0432 \u0440\u0430\u0434\u0438\u0430\u043d\u0430\u0445)                               *\/     double zs;          \/* \u0423\u0441\u043b\u043e\u0432\u043d\u043e\u0435 \u0432\u043e\u0441\u0442\u043e\u0447\u043d\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0437\u043e\u043d\u0430\u043c\u0438               *\/     \/\/ \u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b     double e2__a2k2, ie2__a2k2, m0, mp, imp;     double f0, f2, f4, f6;     double m1, m2, m4, m6;     double q, q1, q2, q3, q4, q6, q7, q8;     double q11, q12, q13, q14, q15, q16, q17, q18;     \/\/ \u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b - 2     double apk, n, b, c, d;     double b1, b2, b3, b4; };  struct TransverseMercatorParam TM_GaussKruger = {     .ep   = &amp;Ellipsoid_Krasovsky,     .zw   = rad(6,0,0),     .lon0 = -rad(3,0,0),     .e0   = 5e5,     .zs   = 1e6, }; <\/code><\/pre>\n<p>  \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u043f\u0435\u0440\u0435\u0447\u043d\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438 \u041c\u0435\u0440\u043a\u0430\u0442\u043e\u0440\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u043e\u043d\u0430 \u043a\u043e\u043d\u0444\u043e\u0440\u043c\u043d\u0430, \u0442.\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0444\u043e\u0440\u043c\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 \u0438 \u0443\u0433\u043b\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0442\u043e, \u0447\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u0432\u0434\u043e\u043b\u044c \u043e\u0434\u043d\u043e\u0433\u043e \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0435\u0440\u0438\u0434\u0438\u0430\u043d\u0430. \u041f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u0430 \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u0437\u0435\u043c\u043d\u043e\u0433\u043e \u0448\u0430\u0440\u0430, \u043d\u043e \u043f\u0440\u0438 \u043e\u0442\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u043e\u0442 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0435\u0440\u0438\u0434\u0438\u0430\u043d\u0430 \u0440\u0430\u0441\u0442\u0443\u0442 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u044e \u0437\u0435\u043c\u043d\u0443\u044e \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0440\u0435\u0437\u0430\u044e\u0442 \u043d\u0430 \u0443\u0437\u043a\u0438\u0435 \u043f\u043e\u043b\u043e\u0441\u043a\u0438 \u043f\u043e \u043c\u0435\u0440\u0438\u0434\u0438\u0430\u043d\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0437\u043e\u043d\u0430\u043c\u0438, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0439 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0440\u0438\u0434\u0438\u0430\u043d. \u041f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0439 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u0413\u0430\u0443\u0441\u0441\u0430-\u041a\u0440\u044e\u0433\u0435\u0440\u0430 \u0438 UTM, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043f\u043e \u0437\u043e\u043d\u0430\u043c, \u0442.\u0435. \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u0438 \u043e\u0434\u043d\u043e\u0438\u043c\u0435\u043d\u043d\u0430\u044f \u0421\u041a.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/tl\/t8\/x0\/tlt8x05u4s917sihuuzxjymwfuc.jpeg\"><\/p>\n<p>  \u0418, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442. \u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cpp\">void setupTransverseMercator(struct TransverseMercatorParam *pp) {     double sin_lat, cos_lat, cos2_lat;     double q, n, rk, ak;      if (!pp-&gt;k)         pp-&gt;k = 1.0;     sin_lat = sin(pp-&gt;lat0);     cos_lat = cos(pp-&gt;lat0);     cos2_lat = cos_lat * cos_lat;     q = pp-&gt;ep-&gt;e2 \/ (1 - pp-&gt;ep-&gt;e2);     \/\/ \u041f\u0440\u0438\u043f\u043b\u044e\u0441\u043d\u0443\u0442\u043e\u0441\u0442\u044c n = (a-b)\/(a+b)     n = (pp-&gt;ep-&gt;a - pp-&gt;ep-&gt;b) \/ (pp-&gt;ep-&gt;a + pp-&gt;ep-&gt;b);     rk = (pp-&gt;ep-&gt;a + pp-&gt;ep-&gt;b) * pp-&gt;k \/ 2;     ak = pp-&gt;ep-&gt;a * pp-&gt;k;     pp-&gt;e2__a2k2  = pp-&gt;ep-&gt;e2 \/ (ak * ak);     pp-&gt;ie2__a2k2 = (1 - pp-&gt;ep-&gt;e2) \/ (ak * ak);      pp-&gt;f6 = 1097.0\/4 * n*n*n*n;     pp-&gt;f4 = (151.0\/3 - 3291.0\/8 * n) * n*n*n;     pp-&gt;f2 = (21.0\/2 + (-151.0\/3 + 5045.0\/32 * n) * n) * n*n;     pp-&gt;f0 = (3.0 + (-21.0\/4 + (31.0\/4 - 657.0\/64 * n) * n) * n) * n;      pp-&gt;m6 = rk * 315.0\/4 * n*n*n*n;     pp-&gt;m4 = rk * (-70.0\/3 - 945.0\/8 * n) * n*n*n;     pp-&gt;m2 = rk * (15.0\/2 + (70.0\/3 + 1515.0\/32 * n) * n) * n*n;     pp-&gt;m1 = rk * (-3.0 + (-15.0\/4 + (-4.0 - 255.0\/64 * n) * n) * n) * n;      \/\/ polar distance     pp-&gt;mp = rk * (1.0 + (1.0\/4 + 1.0\/64 * n*n) * n*n);     pp-&gt;imp = 1 \/ pp-&gt;mp;     pp-&gt;m0 = pp-&gt;n0 - pp-&gt;mp * pp-&gt;lat0 - sin_lat * cos_lat *         (pp-&gt;m1 + (pp-&gt;m2 + (pp-&gt;m4 + pp-&gt;m6 * cos2_lat) * cos2_lat) * cos2_lat);      pp-&gt;q   =                        q;     pp-&gt;q1  =                            1.0\/6    * q*q;     pp-&gt;q2  =            3.0\/8     * q;     pp-&gt;q3  =            5.0\/6     * q;     pp-&gt;q4  =  1.0\/6   - 11.0\/24   * q;     pp-&gt;q6  =            1.0\/6     * q;     pp-&gt;q7  =            3.0\/5     * q;     pp-&gt;q8  =  1.0\/5   - 29.0\/60   * q;     pp-&gt;q11 =          - 5.0\/12    * q;     pp-&gt;q12 = -5.0\/24  + 3.0\/8     * q;     pp-&gt;q13 =                          - 1.0\/240  * q*q;     pp-&gt;q14 =            149.0\/360 * q;     pp-&gt;q15 = 61.0\/720 - 63.0\/180  * q;     pp-&gt;q16 =                          - 1.0\/40   * q*q;     pp-&gt;q17 =          - 1.0\/60    * q;     pp-&gt;q18 = 1.0\/24   + 1.0\/15    * q;      \/\/ \u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b - 2     double e2 = pp-&gt;ep-&gt;e2;     pp-&gt;apk = ak * (1 + n*n \/ 4 + n*n*n*n \/ 64) \/ (1 + n);     pp-&gt;n = n;     pp-&gt;b = (5 - e2) * e2 * e2 \/ 6;     pp-&gt;c = (104 - 45 * e2) * e2 * e2 * e2 \/ 120;     pp-&gt;d = 1237.0\/1260 * e2 * e2 * e2 * e2;     pp-&gt;b1 = (1.0\/2 + (-2.0\/3 + (5.0\/16 + 41.0\/180 * n) * n) * n) * n;     pp-&gt;b2 = (13.0\/48 + (-3.0\/5 + 557.0\/1440 * n) * n) * n*n;     pp-&gt;b3 = (61.0\/240 - 103.0\/140 * n) * n*n*n;     pp-&gt;b3 = 49561.0\/161280 * n*n*n*n; }  void translateTransverseMercator(struct TransverseMercatorParam *pp, int zone,                 double lat, double lon, double *ep, double *np) {     double lon2, v, m;     double k4, k6, h3, h5;     double sin_lat = sin(lat);     double cos_lat = cos(lat);     double cos2_lat = cos_lat * cos_lat;      lon -= zone * pp-&gt;zw + pp-&gt;lon0;     while (unlikely(lon &lt;= -M_PI))         lon += 2*M_PI;     lon2 = lon * lon;      \/\/ \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f     v  = 1 \/ sqrt(pp-&gt;e2__a2k2 * cos2_lat + pp-&gt;ie2__a2k2);     m  = ((pp-&gt;m6 * cos2_lat + pp-&gt;m4) * cos2_lat + pp-&gt;m2) * cos2_lat + pp-&gt;m1;     k4 = ((pp-&gt;q1 * cos2_lat + pp-&gt;q2) * cos2_lat + 1.0\/4 ) * cos2_lat - 1.0\/24;     k6 = ((pp-&gt;q3 * cos2_lat + pp-&gt;q4) * cos2_lat - 1.0\/12) * cos2_lat + 1.0\/720;     h3 = ((                    pp-&gt;q6) * cos2_lat + 1.0\/3 ) * cos2_lat - 1.0\/6;     h5 = ((pp-&gt;q7 * cos2_lat + pp-&gt;q8) * cos2_lat - 1.0\/6 ) * cos2_lat + 1.0\/120;      \/\/ \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u0438 \u0432\u043e\u0441\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f (\u0432 \u043c\u0435\u0442\u0440\u0430\u0445)     *np = pp-&gt;m0 + pp-&gt;mp * lat         + (m + v * ((k6 * lon2 + k4) * lon2 + 0.5) * lon2) * cos_lat * sin_lat;     *ep = pp-&gt;e0 + pp-&gt;zs * zone         + (    v * ((h5 * lon2 + h3) * lon2 + 1.0) * lon ) * cos_lat; } <\/code><\/pre>\n<p>  \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u043c \u0438\u043c\u0435\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b: \u0432\u043e\u0441\u0442\u043e\u0447\u043d\u043e\u0435 \u0438 \u0441\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 (e,n) \u2014 \u044d\u0442\u043e \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0435 \u0434\u0435\u043a\u0430\u0440\u0442\u043e\u0432\u044b \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432 \u043c\u0435\u0442\u0440\u0430\u0445.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/vi\/s9\/le\/vis9lebgpu0bhyg-akpncyxeml4.jpeg\"><\/p>\n<p>  \u041c\u044b \u0443\u0436\u0435 \u043e\u0447\u0435\u043d\u044c \u0431\u043b\u0438\u0437\u043a\u0438 \u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044e \u043d\u0430\u0448\u0435\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430. \u041d\u0430\u043c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0439\u0442\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u044f (x,y) \u0432 \u0444\u0430\u0439\u043b\u0435 \u043a\u0430\u0440\u0442\u044b. \u0422.\u043a. \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0442\u043e\u0436\u0435 \u0434\u0435\u043a\u0430\u0440\u0442\u043e\u0432\u044b, \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0439\u0442\u0438 \u0438\u0445 \u0430\u0444\u0438\u043d\u043d\u044b\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c (e,n) \u043a (x,y). \u041a \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0430\u043c\u043e\u0433\u043e \u0430\u0444\u0438\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u044b \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435.<\/p>\n<pre><code class=\"cpp\">struct AffineParam {     double c00, c01, c02;     double c10, c11, c12; };  void translateAffine(struct AffineParam *app, double e, double n,                                 double *xp, double *yp) {     *xp = app-&gt;c00 + app-&gt;c01 * e + app-&gt;c02 * n;     *yp = app-&gt;c10 + app-&gt;c11 * e + app-&gt;c12 * n; } <\/code><\/pre>\n<p>  \u0418, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u043e\u043b\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u0439\u043b\u0430:<\/p>\n<pre><code class=\"cpp\">void renderTile(ImagePtr tile, int z, unsigned long x, unsigned long y) {     int i, j;     double wlat, wlon;     ImagePtr srcimg;     double lat, lon;     double e, n;     double x, y;      for (i = 0; i &lt; 256; ++i) {         for (j = 0; j &lt; 256; ++j) {             XYZ_WGS84(x * 256 + j, y * 256 + i, z, &amp;wlat, &amp;wlon);             translateHelmertInv(&amp;Helmert_SK42_WGS84, wlat, wlon, 0, &amp;lat, &amp;lon);             findSrcImg(&amp;srcimg, lat, lon);             translateTransverseMercator(&amp;TM_GaussKruger, srcimg-&gt;zone, lat, lon, &amp;e, &amp;n);             translateAffine(&amp;srcimg-&gt;affine, e, n, &amp;x, &amp;y);             setPixelColor(tile, j, i, interpolatePixelColor(srcimg, x, y));         }     } } <\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u043b\u044f z=12, y=1377, x=2391:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/zx\/vy\/gh\/zxvyghc1l_sinjoswl-iixglqng.jpeg\"><\/p>\n<p>  \u0412 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435 \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u043d\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u044b srcimg \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u0432 \u0421\u041a \u043a\u0430\u0440\u0442\u044b \u0433\u0435\u043e\u0434\u0435\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c lat, lon. \u0414\u0443\u043c\u0430\u044e, \u0441 \u043d\u0435\u0439 \u0438 \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u0437\u043e\u043d\u044b srcimg-&gt;zone \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442, \u0430 \u0432\u043e\u0442 \u043d\u0430 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0430\u0444\u0438\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f srcimg-&gt;affine \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e.<\/p>\n<p>  \u0413\u0434\u0435-\u0442\u043e \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u0432\u043d\u043e \u0431\u044b\u043b\u0430 \u043d\u0430\u0439\u0434\u0435\u043d\u0430 \u0432\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0430\u0444\u0438\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u0440\u0438\u0432\u043e\u0436\u0443 \u0435\u0435 \u0434\u0430\u0436\u0435 \u0441 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438:<\/p>\n<pre><code class=\"cpp\">struct TiePoint {     struct TiePoint       *next;     double                lon, lat;     double                e, n;     double                x, y; };  void setupAffine(struct AffineParam *app, struct TiePoint *plist) {     \/*      * \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u0430\u043c\u0438:      *   x = c00 + c01 * e + c02 * n      *   y = c10 + c11 * e + c12 * n      *\/     struct TiePoint *pp;     \/* \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 *\/     double a11, a12, a13;    \/*             *\/     double a21, a22, a23;    \/* \u041c\u0430\u0442\u0440\u0438\u0446\u0430 3*3 *\/     double a31, a32, a33;    \/*             *\/     double b1, b2, b3;       \/* \u0421\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0447\u043b\u0435\u043d *\/     int    m;                \/* \u0418\u043d\u0434\u0435\u043a\u0441 \u0446\u0438\u043a\u043b\u0430 \u0434\u043b\u044f z: m=0 -&gt; z=x, m=1 -&gt; z=y *\/     double z;                \/* \u041b\u0438\u0431\u043e x, \u043b\u0438\u0431\u043e y *\/     double t;                \/* \u0420\u0430\u0431\u043e\u0447\u0430\u044f \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430 \u043f\u0440\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 *\/      \/* \u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 2-\u0445 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c \u043f\u043e 3 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f,        \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u043c\u0438 \u0447\u043b\u0435\u043d\u0430\u043c\u0438. *\/     \/* \u041f\u043e\u0434\u0441\u0447\u0435\u0442 \u043e\u0431\u0449\u0438\u0445 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u044b *\/     a11 = a12 = a13 = a22 = a23 = a33 = 0;     for (pp = plist; pp; pp = pp-&gt;next) {         a11 += 1;         a12 += pp-&gt;e;         a13 += pp-&gt;n;         a22 += pp-&gt;e * pp-&gt;e;         a23 += pp-&gt;e * pp-&gt;n;         a33 += pp-&gt;n * pp-&gt;n;     }     \/* \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 (\u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\u044b) *\/     a21 = a12;     a31 = a13;     a12 \/= a11;     a13 \/= a11;     a22 -= a21 * a12;     a32 = a23 - a31 * a12;     a23 = a32 \/ a22;     a33 -= a31 * a13 + a32 * a23;     \/* \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0435\u0449\u0438, \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c X \u0438 Y *\/     for (m = 0; m &lt; 2; m++) { \/* m=0 -&gt; X, m=1 -&gt; Y *\/         \/* \u041f\u043e\u0434\u0441\u0447\u0435\u0442 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u0447\u043b\u0435\u043d\u043e\u0432 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b *\/         b1 = b2 = b3 = 0;         for (pp = plist; pp; pp = pp-&gt;next) {             z = !m ? pp-&gt;x : pp-&gt;y;             b1 += z;             b2 += pp-&gt;e * z;             b3 += pp-&gt;n * z;         }         \/* \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u0447\u043b\u0435\u043d\u043e\u0432 *\/         b1 \/= a11;         b2 = (b2 - a21 * b1) \/ a22;         b3 = (b3 - a31 * b1 - a32 * b2) \/ a33;         \/* \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b *\/         t = b2 - a23 * b3;         *(!m ? &amp;app-&gt;c00 : &amp;app-&gt;c10) = b1 - a12 * t - a13 * b3;         *(!m ? &amp;app-&gt;c01 : &amp;app-&gt;c11) = t;         *(!m ? &amp;app-&gt;c02 : &amp;app-&gt;c12) = b3;     } } <\/code><\/pre>\n<p>  \u041d\u0430 \u0432\u0445\u043e\u0434 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u0430\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0442\u0440\u0435\u0445 \u0442\u043e\u0447\u0435\u043a \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438, \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b. \u0422\u043e\u0447\u043a\u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u2014 \u044d\u0442\u043e \u0442\u043e\u0447\u043a\u0438, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u044f (x,y) \u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432\u043e\u0441\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0438 \u0441\u0435\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f (e,n). \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0430\u043a\u0438\u0445 \u0442\u043e\u0447\u0435\u043a \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440\u043e\u0432\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0435. \u0410 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 \u043d\u0435\u0442 \u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440\u043e\u0432\u043e\u0439 \u0441\u0435\u0442\u043a\u0438? \u0422\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043f\u0430\u0440\u044b (x,y) \u0438 (lon,lat), \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0430\u043a\u0438\u0445 \u0442\u043e\u0447\u0435\u043a \u0432\u0437\u044f\u0442\u044c \u0442\u043e\u0447\u043a\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0435\u0439 \u0438 \u043c\u0435\u0440\u0438\u0434\u0438\u0430\u043d\u043e\u0432, \u043e\u043d\u0438 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 \u0435\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u0434\u0430. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c (lon,lat) \u0432 (e,n), \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e translateTransverseMercator().<\/p>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u0442\u043e\u0447\u043a\u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443, \u043a\u0430\u043a\u043e\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u0437\u0435\u043c\u043d\u043e\u0439 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0444\u0430\u0439\u043b \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u043a\u0430\u0440\u0442\u044b. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u0431\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0431\u044b\u043b\u0438 \u0434\u0435\u043a\u0430\u0440\u0442\u043e\u0432\u044b\u043c\u0438, \u0442\u043e \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b \u0442\u043e\u0447\u0435\u043a \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u043c\u044b \u043d\u0435 \u0437\u0430\u0434\u0430\u0432\u0430\u043b\u0438 \u0438 \u043a\u0430\u043a \u0434\u0430\u043b\u0435\u043a\u043e \u0431\u044b \u043e\u043d\u0438 \u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430, \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u043e \u0432\u0441\u0435\u0439 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438 \u043a\u0430\u0440\u0442\u044b \u0431\u0443\u0434\u0435\u0442 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u0435\u043a \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043e\u0448\u0438\u0431\u043e\u043a \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430\u044f (\u0441 \u043d\u0435 \u0442\u043e\u0447\u043d\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438) \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f, \u0434\u0430\u0442\u0443\u043c \u0438\u043b\u0438 \u044d\u043b\u043b\u0438\u043f\u0441\u043e\u0438\u0434, \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b (e,n) \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u043d\u0435 \u0432 \u0434\u0435\u043a\u0430\u0440\u0442\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442, \u0430 \u0432 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u0441\u043a\u0440\u0438\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0435\u043a\u0430\u0440\u0442\u043e\u0432\u043e\u0439. \u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u00ab\u043c\u044f\u0442\u0443\u044e \u043f\u0440\u043e\u0441\u0442\u044b\u043d\u044e\u00bb. \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0442\u043e\u0447\u0435\u043a \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u0435 \u0440\u0435\u0448\u0430\u0435\u0442. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043c\u043e\u0436\u0435\u0442 \u0440\u0435\u0448\u0438\u0442\u044c \u0442\u044e\u043d\u0438\u043d\u0433 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438, \u0434\u0430\u0442\u0443\u043c\u0430 \u0438 \u044d\u043b\u043b\u0438\u043f\u0441\u043e\u0438\u0434\u0430, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u043e\u0447\u0435\u043a \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0440\u0430\u0437\u0433\u043b\u0430\u0434\u0438\u0442\u044c \u00ab\u043f\u0440\u043e\u0441\u0442\u044b\u043d\u044e\u00bb \u0442\u043e\u0447\u043d\u0435\u0435 \u0438 \u043d\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0435\u0440\u0430\u0437\u0433\u043b\u0430\u0436\u0435\u043d\u043d\u044b\u0445 \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432.<\/p>\n<p>  \u0418 \u0432 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0442\u0430\u0439\u043b\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 OpenLayers \u0438 \u0432 \u043a\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435 \u0438\u0445 \u043f\u0440\u0438\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b OsmAnd.<\/p>\n<p>  \u0414\u043b\u044f OpenLayers \u0442\u0430\u0439\u043b\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u043b\u043e\u0436\u0438\u0442\u044c \u0432 web \u0438 \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u0444\u0430\u0439\u043b\u0430 \u0438\u043b\u0438 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c (z,y,x), \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a:<br \/>  \/tiles\/topo\/12_1377_2391.jpg<br \/>  \u0438\u043b\u0438, \u0435\u0449\u0435 \u043b\u0443\u0447\u0448\u0435 \u0442\u0430\u043a:<br \/>  \/tiles\/topo\/12\/1377\/2391.jpg<br \/>  \u0422\u043e\u0433\u0434\u0430 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"javascript\">map = new OpenLayers.Map (...); map.addLayer(new OpenLayers.Layer.XYZ(&quot;Topo Maps&quot;, &quot;\/tiles\/topo\/${z}_${y}_${x}.jpg&quot;, {       isBaseLayer: false, visibility: false,   })); <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b OsmAnd \u043b\u0435\u0433\u043a\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442 \u043f\u043e \u043a\u0430\u043a\u0438\u043c-\u043b\u0438\u0431\u043e \u0443\u0436\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0441\u044f \u0444\u0430\u0439\u043b\u0430\u043c \u0441 \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0442\u0430\u0439\u043b\u043e\u0432. \u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b. \u0422\u0430\u0439\u043b\u044b \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 sqlite, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"sql\">CREATE TABLE info AS SELECT 99 AS minzoom, 0 AS maxzoom; CREATE TABLE tiles (x int, y int, z int, s int, image blob, PRIMARY KEY (x,y,z,s)); CREATE INDEX IND on tiles (x,y,z,s); UPDATE info SET minzoom=$minzoom, maxzoom=$maxzoom <\/code><\/pre>\n<p>  \u041a\u043e\u043b\u043e\u043d\u043a\u0430 s \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0443\u043b\u0435\u043c, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043e\u043d\u0430, \u044f \u043d\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b\u0441\u044f, \u0432 image \u0437\u0430\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u043c \u0432\u0438\u0434\u0435, \u0444\u043e\u0440\u043c\u0430\u0442 (jpg, png, gif) \u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f, \u043d\u043e OsmAnd \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0435\u0433\u043e \u0441\u0430\u043c \u043f\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c\u0443. \u0412 \u043e\u0434\u043d\u043e\u0439 \u0431\u0430\u0437\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u044b \u0442\u0430\u0439\u043b\u044b \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445. \u0412\u043c\u0435\u0441\u0442\u043e $minzoom \u0438 $maxzoom \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430 \u0437\u0430\u043d\u0435\u0441\u0435\u043d\u043d\u044b\u0445 \u0432 \u0431\u0430\u0437\u0443 \u0442\u0430\u0439\u043b\u043e\u0432. \u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Topo.sqlitedb \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c \u043d\u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d \u0438\u043b\u0438 \u043f\u043b\u0430\u043d\u0448\u0435\u0442 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 osmand\/tiles. \u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c OsmAnd, \u0432 \u041c\u0435\u043d\u044e -&gt; \u00abConfigure Map\u00bb -&gt; \u00ab\u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u0441\u043b\u043e\u0439\u00bb \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043d\u043e\u0432\u0430\u044f \u043e\u043f\u0446\u0438\u044f \u00abTopo\u00bb \u2014 \u044d\u0442\u043e \u043a\u0430\u0440\u0442\u0430 \u0441 \u043d\u0430\u0448\u0438\u043c\u0438 \u043d\u043e\u0432\u044b\u043c\u0438 \u0442\u0430\u0439\u043b\u0430\u043c\u0438.<\/p><\/div>\n<p> \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\/post\/526630\/\"> https:\/\/habr.com\/ru\/post\/526630\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043c \u043d\u0430\u0448 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u0439\u043b\u0430, \u0443\u0437\u043d\u0430\u0435\u043c, \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0442\u0430\u0439\u043b\u044b \u0432 OpenLayers \u0438 \u0432 OsmAnd. \u041f\u043e\u043f\u0443\u0442\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 \u0413\u0418\u0421 \u0438 \u0443\u0437\u043d\u0430\u0435\u043c \u043f\u0440\u043e \u043a\u0430\u0440\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0443\u0437\u043d\u0430\u0435\u043c \u0432 \u0447\u0435\u043c \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u00ab\u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430\u00bb \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u0438 \u0437\u0430\u0447\u0435\u043c \u043e\u043d\u0430 \u043d\u0443\u0436\u043d\u0430.  <\/p>\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-312589","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/312589","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=312589"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/312589\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=312589"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=312589"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=312589"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}