{"id":200642,"date":"2013-11-06T07:40:02","date_gmt":"2013-11-06T03:40:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=200642"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=200642","title":{"rendered":"<span class=\"post_title\">\u041f\u0440\u0438\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0435\u043c Web Map \u0441\u0435\u0440\u0432\u0438\u0441 \u043a \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u0432\u0430\u044e\u0449\u0435\u0439 OpenSource \u0421\u0423\u0411\u0414<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/c4b\/654\/2eb\/c4b6542eb74b8ab895f522eec5acf692.png\" alt=\"image\"\/><br \/>  \u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 <a href=\"http:\/\/habrahabr.ru\/post\/196682\/\">\u0440\u0430\u0437<\/a> \u043c\u044b \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441, \u0430 \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u044d\u0442\u0438\u043c \u043d\u0430\u0432\u044b\u043a\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0436\u0438\u0432\u043e\u0439 (\u043d\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439) \u043a\u0430\u0440\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u0441 web \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e, \u0441\u043a\u0430\u0436\u0435\u043c, \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0434\u0435\u043d\u044c \u043d\u0430 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043e\u0431\u044b\u0447\u043d\u043e\u043c \u00ab\u0436\u0435\u043b\u0435\u0437\u0435\u00bb.<br \/>   <a name=\"habracut\"><\/a>  <\/p>\n<h4><b>\u0414\u0430\u043d\u043d\u044b\u0435<\/b>.<\/h4>\n<p>  <\/p>\n<ul>\n<li>\u0418\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0431\u0443\u0434\u0435\u0442 <a href=\"http:\/\/www.openstreetmap.org\/\">OSM<\/a> <\/li>\n<li>\u0424\u043e\u0440\u043c\u0430\u0442\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432 \u0421\u0423\u0411\u0414 \u0431\u0443\u0434\u0435\u0442 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u0437 <a href=\"http:\/\/ru.wikipedia.org\/wiki\/Shapefile\">shpfile<\/a> <\/li>\n<li>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"http:\/\/gis-lab.info\/qa\/osmshp.html\">\u0434\u0430\u0442\u0430\u0441\u0435\u0442<\/a> \u0420\u043e\u0441\u0441\u0438\u0438<\/li>\n<li>\u0418\u0437 \u0432\u0441\u0435\u0445 \u0441\u043b\u043e\u0435\u0432 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0438 \u2014 \u0432\u043e\u0434\u043e\u0435\u043c\u044b, \u043b\u0435\u0441\u0430 \u0438 \u0437\u0434\u0430\u043d\u0438\u044f (water-polygon, vegetation-polygon, building-polygon). \u042d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0438 \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u0435\u0451 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.<\/li>\n<\/ul>\n<p>  <\/p>\n<h4><b>\u0417\u0430\u043b\u0438\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/b>.<\/h4>\n<p>  <\/p>\n<ul>\n<li>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0421\u0423\u0411\u0414 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 <a href=\"http:\/\/virtuoso.openlinksw.com\/dataspace\/doc\/dav\/wiki\/Main\/VOSDownload\">Virtuoso V7.0.0<\/a><\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u043e \u043e\u0434\u043d\u043e\u0438\u043c\u0435\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0439 \u043d\u0430\u0441 \u0441\u043b\u043e\u0439<\/li>\n<li>\u041f\u043e\u043b\u0435 \u0442\u0438\u043f\u0430 long varbinary \u0441 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u00abShape\u00bb<\/li>\n<li>\u0412\u0441\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0432\u0448\u0438\u0435 \u043f\u043e\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f<\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u044f\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0435 <br \/> \n<ul>\n<li>_OBJECTID_ \u2014 \u043d\u043e\u043c\u0435\u0440 \u0437\u0430\u043f\u0438\u0441\u0438<\/li>\n<li>minx_, miny_, maxx_, maxy_ \u2014 \u044d\u043a\u0441\u0442\u0435\u043d\u0442 \u0437\u0430\u043f\u0438\u0441\u0438<\/li>\n<\/ul>\n<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u043c\u044b \u044d\u0442\u043e <a href=\"http:\/\/habrahabr.ru\/post\/196682\/\">\u0434\u0435\u043b\u0430\u043b\u0438<\/a> \u0440\u0430\u043d\u044c\u0448\u0435.<\/li>\n<li>\u041e\u0442\u043b\u0438\u0447\u0438\u0435 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043b\u043e\u0449\u0430\u0434\u043d\u044b\u0435, \u0430 \u043d\u0435 \u0442\u043e\u0447\u0435\u0447\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0434\u0438\u043d \u043e\u0431\u044a\u0435\u043a\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u0432 \u0438\u043d\u0434\u0435\u043a\u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437.<\/li>\n<li>\u0420\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0430\u043c\u0443\u044e \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u0443\u044e \u2014 \u0432 \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432\u0435\u0441\u044c \u044d\u043a\u0441\u0442\u0435\u043d\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0435\u0433\u043e \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438. \u0410 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0443\u044e \u0436\u0435 \u0440\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u043e\u043a\u0430 \u0441\u043e\u0447\u0442\u0451\u043c \u043f\u0440\u0435\u0436\u0434\u0435\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439.<\/li>\n<li>\u0415\u0449\u0435 \u043e\u0434\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043d\u0435\u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u0441\u0435\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043a\u0430\u0440\u0442\u044b: \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0427\u0443\u043a\u043e\u0442\u043a\u0435 \u0434\u043e\u043b\u0433\u043e\u0442\u0430 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0442 -180 \u0434\u043e +180 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432, \u0430 \u0448\u0438\u0440\u043e\u0442\u0430 \u043e\u0442 ~40 \u0434\u043e 80. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0448\u0430\u0433 \u0431\u043b\u043e\u0447\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u0432 \u043e\u0434\u0438\u043d \u0431\u043b\u043e\u043a \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043f\u043e\u043f\u0430\u043b \u043e\u0434\u0438\u043d \u043e\u0431\u044a\u0435\u043a\u0442. \u041f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a, \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043f\u043e\u0437\u0436\u0435.<\/li>\n<li>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u043a\u0440\u044b\u0442\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <a href=\"http:\/\/shapelib.maptools.org\/\">Shapefile C Library<\/a> <\/li>\n<li>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 BLOB&#8217;\u0430\u043c\u0438 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043d\u0435\u0451 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <i>SHPSerializeObject<\/i> \u0438 <i>SHPDeserializeObject<\/i>, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0440\u043e\u0434\u043d\u044b\u043c <i>SHPWriteObject<\/i> \u0438 <i>SHPReadObject<\/i>, \u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e<\/li>\n<li>\u0414\u043b\u044f \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0441\u0442\u0430\u043d\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u043e\u0434\u043d\u043e\u0439 ODBC \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440, \u043c\u0438\u043d\u0443\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u0432<\/li>\n<li>\u0414\u043b\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u043c \u0430\u0432\u0442\u043e\u043a\u043e\u043c\u043c\u0438\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0438 \u0431\u0443\u0434\u0435\u043c \u043a\u043e\u043c\u043c\u0438\u0442\u0438\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u0436\u0434\u044b\u0435 1000 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432<\/li>\n<li>\u0412 \u0442\u0430\u043a\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435\n<ul>\n<li>\u0437\u0430\u043b\u0438\u0432\u043a\u0430 \u043b\u0435\u0441\u043e\u0432 (~660 \u0442\u044b\u0441\u044f\u0447 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432) \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 1 \u043c\u0438\u043d 56 \u0441\u0435\u043a\u0443\u043d\u0434 <\/li>\n<li>\u0437\u0430\u043b\u0438\u0432\u043a\u0430 \u0432\u043e\u0434\u043e\u0435\u043c\u043e\u0432 (~380 \u0442\u044b\u0441\u044f\u0447 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432) \u2014 1 \u043c\u0438\u043d 9 \u0441\u0435\u043a\u0443\u043d\u0434 <\/li>\n<li>\u0437\u0430\u043b\u0438\u0432\u043a\u0430 \u0437\u0434\u0430\u043d\u0438\u0439 (~5.3 \u043c\u043b\u043d \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432) \u2014 16 \u043c\u0438\u043d 18 \u0441\u0435\u043a\u0443\u043d\u0434 <\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>  <\/p>\n<h4><b>\u041e\u0446\u0435\u043d\u043a\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 web-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430<\/b>.<\/h4>\n<p>  <\/p>\n<ul>\n<li>\u0414\u0430, virtuoso \u0438\u043c\u0435\u0435\u0442 \u0438 web-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432\u043d\u0435\u0448\u043d\u0435 \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u043d\u0430 php. \u0424\u0430\u0439\u043b\u044b vsp (virtuoso server pages) \u0441\u043e \u0432\u0441\u0442\u0430\u0432\u043a\u0430\u043c\u0438 \u043d\u0430 PL\/SQL \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u0445\u0440\u0430\u043d\u0438\u043c\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442 html \u0432\u044b\u0434\u0430\u0447\u0443.<br \/>  \u041c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 (test.vsp), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u043b\u0438\u0448\u044c \u043d\u0430\u0440\u0430\u0449\u0438\u0432\u0430\u0442\u044c \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0438 \u0441 \u0435\u0451 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0440\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<br \/> \n<pre><code class=\"php\">&lt;html&gt;&lt;body&gt; &lt;?vsp   declare cnt integer;   cnt := sequence_next ('xxx.YYY.__cnt'); ?&gt; &lt;table width=&quot;100%&quot; border=&quot;1&quot;&gt; &lt;tr&gt;&lt;td align=&quot;center&quot;&gt;&lt;?vsp= cnt ?&gt;&lt;\/td&gt;&lt;\/tr&gt; &lt;\/table&gt; &lt;\/body&gt;&lt;\/html&gt; <\/code><\/pre>\n<p> \u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <i>sequence_next<\/i> \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e \u043d\u0430\u0440\u0430\u0449\u0438\u0432\u0430\u0435\u0442 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. <\/li>\n<li>\u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u044d\u0442\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0443, \u043c\u044b \u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0435\u0451 \u0432 \u043f\u0430\u043f\u043a\u0443 test \u0432 \u043a\u043e\u0440\u043d\u0435 (\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <i>ServerRoot<\/i> \u0441\u0435\u043a\u0446\u0438\u0438 <i>[HTTPServer]<\/i> \u0444\u0430\u0439\u043b\u0430 <i>virtuoso.ini<\/i>) \u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0438\u0437 \u044d\u0442\u043e\u0439 \u043f\u0430\u043f\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 isql (isql localhost:1111 dba dba)\n<pre><code class=\"sql\">VHOST_DEFINE(lpath=&gt;'\/test\/',ppath=&gt;'\/test\/',vsp_user=&gt;'DBA'); <\/code><\/pre>\n<\/li>\n<li>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0447\u0442\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 <br \/>  <code>http:\/\/localhost:8890\/test\/test.vsp<\/code>  <\/li>\n<li>\u0418 \u0441\u0442\u0430\u043d\u0435\u043c \u043c\u0430\u0441\u0441\u043e\u0432\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c \u0435\u0451, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <a href=\"http:\/\/ru.wikipedia.org\/wiki\/Wget\">wget<\/a><\/li>\n<li>\u0420\u0430\u0431\u043e\u0442\u0430 20 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 wget-\u043e\u0432, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 10 000 \u0440\u0430\u0437 \u043f\u0440\u043e\u0441\u0438\u043b \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0443, \u043d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0435 \u043f\u043e\u0434 windows (i7, 8 \u044f\u0434\u0435\u0440) \u0437\u0430\u043d\u044f\u043b\u0430 28 \u0441\u0435\u043a. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0438\u0441\u043a\u043e\u043c\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c ~7000 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0438 \u0434\u043b\u044f \u043d\u0430\u0441 \u043e\u043d\u0430 \u043d\u0438\u043a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c (\u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f, \u0447\u0442\u043e \u043c\u044b \u043d\u0430\u0446\u0435\u043b\u0438\u043b\u0438\u0441\u044c \u043d\u0430 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0434\u0435\u043d\u044c) \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0437\u043a\u0438\u043c \u043c\u0435\u0441\u0442\u043e\u043c.<\/li>\n<\/ul>\n<p>  <\/p>\n<h4><b>\u0420\u0438\u0441\u0443\u0435\u043c \u043a\u0430\u0440\u0442\u0443<\/b><\/h4>\n<p>  <\/p>\n<ul>\n<li>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043a\u0430\u043a \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435? \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:\n<pre><code class=\"sql\">    for select blob_to_string(Shape) as data from        xxx.YYY.&quot;water-polygon&quot; as x,        xxx.YYY.&quot;v_water-polygon_spx_enum_items_in_box&quot; as a     where a.minx = cminx and a.miny = cminy and a.maxx = cmaxx and a.maxy = cmaxy        and x.&quot;_OBJECTID_&quot; = a.oid       and x.maxx_ &gt;= cminx and x.minx_ &lt;= cmaxx       and x.maxy_ &gt;= cminy and x.miny_ &lt;= cmaxy     do      { ... } <\/code><\/pre>\n<p> \u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u0441 \u044d\u0442\u0438\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u043f\u043e\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435.<\/p>\n<ul>\n<li><code>xxx.YYY.&quot;water-polygon&quot;<\/code> \u2014 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0432\u043e\u0434\u043e\u0435\u043c\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0438 \u0437\u0430\u043b\u0438\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/li>\n<li><code>xxx.YYY.&quot;v_water-polygon_spx_enum_items_in_box&quot;<\/code> \u2014 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u043e\u0435 view \u043f\u043e\u0432\u0435\u0440\u0445 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0435\u0439 \u0440\u043e\u043b\u044c \u0431\u043b\u043e\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430. \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u044d\u0442\u043e \u0433\u0440\u0443\u0431\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0444\u0438\u043b\u044c\u0442\u0440, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0441 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0431\u043b\u043e\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430.<\/li>\n<li><code>a.minx = cminx and...<\/code> \u2014 \u043c\u044b \u0437\u0430\u0434\u0430\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u044b\u0437\u043e\u0432\u0430 view, <i>cminx &#8230;<\/i> \u2014 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u043a\u0430\u0440\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c <\/li>\n<li><code>x.&quot;_OBJECTID_&quot; = a.oid<\/code> \u2014 join \u043c\u0435\u0436\u0434\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0440\u0435\u0437\u0430\u043b\u0442\u0441\u0435\u0442\u043e\u043c, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u043c \u0438\u0437 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u043e\u0433\u043e view <\/li>\n<li><code>x.maxx_ &gt;= cminx and x.minx_ &lt;= cmaxx ...<\/code> \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0444\u0438\u043b\u044c\u0442\u0440, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043d\u0435 \u043b\u0435\u0437\u0442\u044c \u0437\u0430 \u0431\u043b\u043e\u0431\u0430\u043c\u0438 \u0441 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f\u043c\u0438, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u043d\u0435 \u043f\u0440\u0438\u0433\u043e\u0434\u044f\u0442\u0441\u044f<\/li>\n<li>\u0412\u0441\u0435 \u0432\u043c\u0435\u0441\u0442\u0435 \u044d\u0442\u043e \u0434\u0430\u0435\u0442 \u043d\u0430\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432 \u0442\u0435\u043b\u0435 \u0446\u0438\u043a\u043b\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441 \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u041a\u041f\u0414. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u0441\u0430\u043c\u043e \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0442\u043e\u043d\u043a\u0438\u0439 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0444\u0438\u043b\u044c\u0442\u0440.<\/li>\n<\/ul>\n<\/li>\n<li>\u0420\u0430\u0437 \u0443 \u043d\u0430\u0441 \u0442\u0440\u0438 \u0441\u043b\u043e\u044f \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0442\u0440\u0438 \u043f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441<\/li>\n<li>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0443. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u0443\u0440\u0441\u043e\u0440\u0430, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c <a href=\"http:\/\/docs.openlinksw.com\/virtuoso\/cinterface.html\">\u0421 \u2014 plugin<\/a>. \u041e\u043d \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u0435\u0440\u0432\u0435\u0440 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u0438 \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 PL\/SQL.<\/li>\n<li>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <a href=\"http:\/\/en.wikipedia.org\/wiki\/GD_Graphics_Library\">GD<\/a> <\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:\n<ul>\n<li> img_create \u2014 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430<\/li>\n<li> img_tostr \u2014 \u0434\u0435\u043b\u0430\u0435\u0442 gif \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430<\/li>\n<li> img_fromptr \u2014 \u043c\u0430\u0433\u0438\u044f virtuoso \u0434\u043b\u044f \u0441\u043c\u0435\u043d\u044b \u0442\u044d\u0433\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f<\/li>\n<li> img_destroy \u2014 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442<\/li>\n<li> img_alloc_color \u2014 \u0434\u0435\u043b\u0430\u0435\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0446\u0432\u0435\u0442\u0430 \u0438\u0437 RGB \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439<\/li>\n<li> img_draw_polyline \u2014 \u0440\u0438\u0441\u0443\u0435\u043c \u043f\u043e\u043b\u0438\u043b\u0438\u043d\u0438\u044e \u0438\u0437 BLOB-\u0430, \u043a\u0443\u0434\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d shape \u043e\u0431\u044a\u0435\u043a\u0442<\/li>\n<li> img_draw_polygone \u2014 \u0442\u043e \u0436\u0435 \u0434\u043b\u044f \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u0430<\/li>\n<\/ul>\n<\/li>\n<li>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#ifdef _USRDLL #include &quot;plugin.h&quot; #include &quot;import_gate_virtuoso.h&quot; #define wi_inst (wi_instance_get()[0]) #else #include &lt;libutil.h&gt; #include &quot;sqlnode.h&quot; #include &quot;sqlbif.h&quot; #include &quot;wi.h&quot; #include &quot;Dk.h&quot; #endif  #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;math.h&gt;  #include &quot;gd_utils.h&quot; #include &quot;gd\/gd_lib.h&quot; #include &quot;shplib\/shapefil.h&quot;  typedef struct img_ctx_s { \tint dx_; \tint dy_;  \tdouble minx_; \tdouble miny_; \tdouble maxx_; \tdouble maxy_;  \tdouble mulx_; \tdouble muly_;  \tint black_; \tint red_; \tint green_; \tint blue_;  \tint attr_;  \tgdImagePtr img_; } img_ctx_t;   caddr_t  img_create_proc (caddr_t * qst, caddr_t * err, state_slot_t ** args) { \timg_ctx_t *ptr = (img_ctx_t *)dk_alloc_box (sizeof (img_ctx_t), DV_STRING); \tptr-&gt;dx_ = bif_long_arg (qst, args, 0, &quot;img_create_proc&quot;); \tptr-&gt;dy_ = bif_long_arg (qst, args, 1, &quot;img_create_proc&quot;); \tptr-&gt;minx_ = bif_double_arg (qst, args, 2, &quot;img_create_proc&quot;); \tptr-&gt;miny_ = bif_double_arg (qst, args, 3, &quot;img_create_proc&quot;); \tptr-&gt;maxx_ = bif_double_arg (qst, args, 4, &quot;img_create_proc&quot;); \tptr-&gt;maxy_ = bif_double_arg (qst, args, 5, &quot;img_create_proc&quot;); \tptr-&gt;attr_ = bif_long_arg (qst, args, 6, &quot;img_create_proc&quot;); \tptr-&gt;img_ = gdImageCreateTrueColor (ptr-&gt;dx_, ptr-&gt;dy_);  \tptr-&gt;mulx_ = ptr-&gt;dx_\/fabs(ptr-&gt;maxx_ - ptr-&gt;minx_); \tptr-&gt;muly_ = ptr-&gt;dy_\/fabs(ptr-&gt;maxy_ - ptr-&gt;miny_);  \tptr-&gt;black_ = gdImageColorAllocate (ptr-&gt;img_, 0, 0, 0); \tptr-&gt;blue_ = gdImageColorAllocate (ptr-&gt;img_, 0, 0, 255); \tptr-&gt;red_ = gdImageColorAllocate (ptr-&gt;img_, 255, 0, 0); \tptr-&gt;green_ = gdImageColorAllocate (ptr-&gt;img_, 0, 255, 0);  \treturn (caddr_t)ptr; }  caddr_t  img_saveas_proc (caddr_t * qst, caddr_t * err, state_slot_t ** args) { \timg_ctx_t *ptr = (img_ctx_t *)bif_arg (qst, args, 0, &quot;img_saveas_proc&quot;); \tgdImagePtr im = ptr-&gt;img_; \tcaddr_t fname = bif_string_arg (qst, args, 1, &quot;img_saveas_proc&quot;);  \tFILE *out = fopen (fname, &quot;wb&quot;); \tif (NULL != out) \t{ \t\tgdImageGif (im, out); \t\tfclose (out); \t\treturn (caddr_t)0; \t} \treturn (caddr_t)-1; }  static unsigned char clip(int value) { \tif (value &lt; 0) \t\tvalue = 0; \telse if (value &gt; 255) \t\tvalue = 255; \treturn value; }  caddr_t  img_fromptr_proc (caddr_t * qst, caddr_t * err, state_slot_t ** args) { \tptrlong addr = unbox(bif_long_arg (qst, args, 0, &quot;img_fromptr_proc&quot;)); \treturn addr; }  caddr_t  img_tostr_proc (caddr_t * qst, caddr_t * err, state_slot_t ** args) { \timg_ctx_t *ptr = (img_ctx_t *)bif_arg (qst, args, 0, &quot;img_tostr_proc&quot;); \tgdImagePtr im = ptr-&gt;img_; \tvoid *rv = NULL; \tcaddr_t ret = NULL; \tint size = 0; \tgdIOCtx *out = gdNewDynamicCtx (2048, NULL);  \tgdImageGifCtx (im, out); \trv = gdDPExtractData (out, &size); \tif (NULL == rv || size &lt;= 0) \t\treturn 0; \tout-&gt;gd_free (out); \tret = dk_alloc_box (size, DV_STRING); \tmemcpy (ret, rv, size); \tgdFree(rv); \treturn (caddr_t)box_num (ret); }  caddr_t img_destroy_proc (caddr_t * qst, caddr_t * err, state_slot_t ** args) { \timg_ctx_t *ptr = (img_ctx_t *)bif_arg (qst, args, 0, &quot;img_destroy_proc&quot;); \tgdImagePtr im = ptr-&gt;img_; \tgdImageDestroy(im); \t\/*dk_free_box (ptr);*\/ \treturn 0; }  caddr_t img_draw_polyline_proc (caddr_t * qst, caddr_t * err, state_slot_t ** args) { \timg_ctx_t *ptr = (img_ctx_t *)bif_arg (qst, args, 0, &quot;img_draw_polyline_proc&quot;); \tgdImagePtr im = ptr-&gt;img_; \tcaddr_t data = bif_string_arg (qst, args, 1, &quot;img_draw_polyline_proc&quot;);  \tSHPObject *shp = SHPDeserialize (data); \tint nparts = shp-&gt;nParts; \tint npoints = shp-&gt;nVertices; \tdouble *px = shp-&gt;padfX; \tdouble *py = shp-&gt;padfY; \tint i, j;  \tint color = bif_long_arg (qst, args, 2, &quot;img_draw_polyline_proc&quot;); \tgdImageSetAntiAliased (im, color);  \tfor (i = 0; i &lt; nparts; i++) \t{ \t\tlong ps = shp-&gt;panPartStart[i]; \t\tlong psz = (i==(nparts-1))? npoints-ps : shp-&gt;panPartStart[i+1]-ps;  \t\tgdPointPtr points = (gdPointPtr)malloc(sizeof (gdPoint) * psz); \t\tfor (j = 0; j &lt; psz; j++) \t\t{ \t\t\tpoints[j].x = (px[ps+j] - ptr-&gt;minx_) * ptr-&gt;mulx_; \t\t\tpoints[j].y = (ptr-&gt;attr_ & 1) ? \t\t\t\tptr-&gt;dy_ - (py[ps+j] - ptr-&gt;miny_) * ptr-&gt;muly_: \t\t\t(py[ps+j] - ptr-&gt;miny_) * ptr-&gt;muly_; \t\t} \t\tfor (j = 1; j &lt; psz; j++) \t\t{ \t\t\t\/*if (points[j].x == points[j-1].x && points[j].y == points[j-1].y) \t\t\t\tgdImageSetPixel (im, points[j].x, points[j].y, ptr-&gt;blue_); \t\t\telse*\/ \t\t\tgdImageLine (im, points[j].x, points[j].y, points[j-1].x, points[j-1].y, gdAntiAliased); \t\t} \t\tfree (points); \t} \tSHPDestroyObject (shp); \treturn 0; }  caddr_t  img_draw_polygone_proc (caddr_t * qst, caddr_t * err, state_slot_t ** args) { \timg_ctx_t *ptr = (img_ctx_t *)bif_arg (qst, args, 0, &quot;img_draw_polygone_proc&quot;); \tgdImagePtr im = ptr-&gt;img_; \tcaddr_t data = bif_string_arg (qst, args, 1, &quot;img_draw_polygone_proc&quot;);  \tSHPObject *shp = SHPDeserialize (data);  \tint nparts = shp-&gt;nParts; \tint npoints = shp-&gt;nVertices; \tdouble *px = shp-&gt;padfX; \tdouble *py = shp-&gt;padfY; \tint i,j;  \tint color = bif_long_arg (qst, args, 2, &quot;img_draw_polygone_proc&quot;); \tint bcolor = bif_long_arg (qst, args, 3, &quot;img_draw_polygone_proc&quot;);  \tfor (i = 0; i &lt; nparts; i++) \t{ \t\tlong ps = shp-&gt;panPartStart[i]; \t\tlong psz = (i==(nparts-1))? npoints-ps : shp-&gt;panPartStart[i+1]-ps;  \t\tgdPointPtr points = (gdPointPtr)malloc (sizeof (gdPoint) * psz); \t\tfor (j = 0; j &lt; psz; j++) \t\t{ \t\t\tpoints[j].x = (px[ps+j] - ptr-&gt;minx_) * ptr-&gt;mulx_; \t\t\tpoints[j].y = (ptr-&gt;attr_ & 1) ? \t\t\t\tptr-&gt;dy_ - (py[ps+j] - ptr-&gt;miny_) * ptr-&gt;muly_: \t\t\t(py[ps+j] - ptr-&gt;miny_) * ptr-&gt;muly_; \t\t} \t\tgdImageSetAntiAliased (im, color); \t\tgdImageFilledPolygon (im, points, psz, gdAntiAliased); \t\tif (bcolor &gt;= 0) \t\t{ \t\t\tgdImageSetAntiAliased (im, bcolor); \t\t\tgdImagePolygon (im, points, psz, gdAntiAliased); \t\t} \t\tfree (points); \t} \tSHPDestroyObject(shp); \treturn 0; }  caddr_t img_alloc_color_proc (caddr_t * qst, caddr_t * err, state_slot_t ** args) { \timg_ctx_t *ptr = (img_ctx_t *)bif_arg (qst, args, 0, &quot;img_alloc_color_proc&quot;); \tgdImagePtr im = ptr-&gt;img_; \tint r = bif_long_arg (qst, args, 1, &quot;img_alloc_color_proc&quot;);  \tint g = bif_long_arg (qst, args, 2, &quot;img_alloc_color_proc&quot;);  \tint b = bif_long_arg (qst, args, 3, &quot;img_alloc_color_proc&quot;);   \treturn  box_num(gdImageColorAllocateAlpha (ptr-&gt;img_, r, g, b, 0)); }  void  init_shcall_gd_utils () { \tbif_define (&quot;img_create&quot;, img_create_proc); \tbif_define (&quot;img_saveas&quot;, img_saveas_proc); \tbif_define (&quot;img_tostr&quot;, img_tostr_proc); \tbif_define (&quot;img_fromptr&quot;, img_fromptr_proc); \tbif_define (&quot;img_destroy&quot;, img_destroy_proc); \tbif_define (&quot;img_alloc_color&quot;, img_alloc_color_proc); \tbif_define (&quot;img_draw_polyline&quot;, img_draw_polyline_proc); \tbif_define (&quot;img_draw_polygone&quot;, img_draw_polygone_proc); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<\/li>\n<li>\u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u043e\u0434\u043e\u0435\u043c\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<br \/> \n<pre><code class=\"sql\">    declare img any;     img := img_create (512, 512, cminx, cminy, cmaxx, cmaxy, 1);     declare cl integer;     declare bg integer;     cl := img_alloc_color (img, 0, 0, 255);     bg := img_alloc_color (img, 0, 0, 200);      whenever not found goto nf;     for select blob_to_string(Shape) as data from          xxx.YYY.&quot;water-polygon&quot; as x,          xxx.YYY.&quot;v_water-polygon_spx_enum_items_in_box&quot; as a     where          a.minx = cminx and a.miny = cminy          and a.maxx = cmaxx and a.maxy = cmaxy          and x.&quot;_OBJECTID_&quot; = a.oid         and x.maxx_ &gt;= cminx and x.minx_ &lt;= cmaxx         and x.maxy_ &gt;= cminy and x.miny_ &lt;= cmaxy     do      {          img_draw_polygone (img, data, cl, bg);     }     nf:;      declare ptr integer;     ptr := img_tostr (img); -- \u0441\u0434\u0435\u043b\u0430\u043b\u0438 gif     img_destroy (img);     -- \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u043b\u0438 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442     declare image any;     image := img_fromptr(ptr); -- \u043c\u0430\u0433\u0438\u044f \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430      http_header ('Content-type: image\/gif\\t\\n'); -- \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430     http(image);                         -- \u0432\u044b\u0434\u0430\u0447\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0432 \u043e\u0442\u0432\u0435\u0442\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a <\/code><\/pre>\n<\/li>\n<li>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0441\u0430\u043c\u0430 \u0441\u0435\u0431\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b URL,\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0442\u0435\u043b\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c<\/b><\/p>\n<div class=\"spoiler_text\">  <\/p>\n<pre><code class=\"php\">&lt;?vsp   if ({?'getfile'} &lt;&gt; '')     {       http_header ('Content-type: image\/gif\\t\\n');         -- set the header to jpg        declare s_params any;       s_params := deserialize (decode_base64 (get_keyword ('params', params, ''))); --      dbg_obj_print(s_params);       declare &quot;min_x&quot; double precision;       declare &quot;min_y&quot; double precision;       declare &quot;max_x&quot; double precision;       declare &quot;max_y&quot; double precision;        declare &quot;cminx&quot; double precision;       declare &quot;cminy&quot; double precision;       declare &quot;cmaxx&quot; double precision;       declare &quot;cmaxy&quot; double precision;       declare &quot;s&quot; varchar;         s := get_keyword ('minx', s_params, '');       if (s = '')          cminx := min_x;       else         cminx := atof(s);       s := get_keyword ('miny', s_params, '');       if (s = '')          cminy := min_y;       else         cminy := atof(s);       s := get_keyword ('maxx', s_params, '');       if (s = '')          cmaxx := max_x;       else         cmaxx := atof(s);       s := get_keyword ('maxy', s_params, '');       if (s = '')          cmaxy := max_y;       else         cmaxy := atof(s);        declare img any;       img := img_create (512, 512, cminx, cminy, cmaxx, cmaxy, 1);       declare cl integer;       declare bg integer;   {     cl := img_alloc_color (img, 0, 0, 255);     bg := img_alloc_color (img, 0, 0, 200);      whenever not found goto nf;     for select blob_to_string(Shape) as data from        xxx.YYY.&quot;water-polygon&quot; as x, xxx.YYY.&quot;v_water-polygon_spx_enum_items_in_box&quot; as a     where a.minx = cminx and a.miny = cminy and a.maxx = cmaxx and a.maxy = cmaxy        and x.&quot;_OBJECTID_&quot; = a.oid       and x.maxx_ &gt;= cminx and x.minx_ &lt;= cmaxx       and x.maxy_ &gt;= cminy and x.miny_ &lt;= cmaxy     do      {       img_draw_polygone (img, data, cl, bg);     } nf:;      cl := img_alloc_color (img, 0, 255, 0);     bg := img_alloc_color (img, 0, 255, 0);     whenever not found goto nf2;     for select blob_to_string(Shape) as data from        xxx.YYY.&quot;vegetation-polygon&quot; as x, xxx.YYY.&quot;v_vegetation-polygon_spx_enum_items_in_box&quot; as a     where a.minx = cminx and a.miny = cminy and a.maxx = cmaxx and a.maxy = cmaxy        and x.&quot;_OBJECTID_&quot; = a.oid       and x.maxx_ &gt;= cminx and x.minx_ &lt;= cmaxx       and x.maxy_ &gt;= cminy and x.miny_ &lt;= cmaxy     do      {       img_draw_polygone (img, data, cl, bg);     } nf2:;      cl := img_alloc_color (img, 255, 0, 0);     bg := img_alloc_color (img, 255, 0, 0);     whenever not found goto nf3;     for select blob_to_string(Shape) as data from        xxx.YYY.&quot;building-polygon&quot; as x, xxx.YYY.&quot;v_building-polygon_spx_enum_items_in_box&quot; as a     where a.minx = cminx and a.miny = cminy and a.maxx = cmaxx and a.maxy = cmaxy        and x.&quot;_OBJECTID_&quot; = a.oid       and x.maxx_ &gt;= cminx and x.minx_ &lt;= cmaxx       and x.maxy_ &gt;= cminy and x.miny_ &lt;= cmaxy     do      {       img_draw_polygone (img, data, cl, bg);     } nf3:;   }    declare ptr integer;   ptr := img_tostr (img);   img_destroy (img);    declare image any;   image := img_fromptr(ptr);   http(image);                                         -- table and display    --dbg_obj_print('boom',{?'id'});   return; }   ?&gt; &lt;!DOCTYPE HTML PUBLIC &quot;-\/\/W3C\/\/DTD HTML 4.0 Transitional\/\/EN&quot;&gt; &lt;?vsp    declare &quot;min_x&quot; double precision;   declare &quot;min_y&quot; double precision;   declare &quot;max_x&quot; double precision;   declare &quot;max_y&quot; double precision;   min_x := 82.;   max_x := 84.;   min_y := 54.;   max_y := 56.;   params := vector_concat (params,      vector ('minx', sprintf('%g', min_x),              'maxx', sprintf('%g', max_x),              'miny', sprintf('%g', min_y),              'maxy', sprintf('%g', max_y))); ?&gt; &lt;html&gt; &lt;body zonload=&quot;window.location.reload();&quot;&gt;  &lt;script language=&quot;JavaScript&quot; type=&quot;text\/javascript&quot;&gt; function full_extent()  {   document.forms['form1'].minx.value=&lt;?vsp=min_x ?&gt;;   document.forms['form1'].miny.value=&lt;?vsp=min_y ?&gt;;   document.forms['form1'].maxx.value=&lt;?vsp=max_x ?&gt;;   document.forms['form1'].maxy.value=&lt;?vsp=max_y ?&gt;; } &lt;\/script&gt; &lt;script language=&quot;JavaScript&quot; type=&quot;text\/javascript&quot;&gt; function zoom_in()  {   var dx = Math.abs(document.forms['form1'].maxx.value - document.forms['form1'].minx.value);   dx = dx\/8;   var tmp = document.forms['form1'].maxx.value;   tmp -= dx;   document.forms['form1'].maxx.value = tmp;   tmp = document.forms['form1'].minx.value;   tmp -= -dx;   document.forms['form1'].minx.value = tmp;    var dy = Math.abs(document.forms['form1'].maxy.value - document.forms['form1'].miny.value);   dy = dy\/8;   tmp = document.forms['form1'].maxy.value;   tmp -= dy;   document.forms['form1'].maxy.value = tmp;   tmp = document.forms['form1'].miny.value;   tmp -= -dy;   document.forms['form1'].miny.value = tmp; } &lt;\/script&gt; &lt;script language=&quot;JavaScript&quot; type=&quot;text\/javascript&quot;&gt; function zoom_out()  {   var dx = -Math.abs(document.forms['form1'].maxx.value - document.forms['form1'].minx.value);   dx = dx\/8;   var tmp = document.forms['form1'].maxx.value;   tmp -= dx;   document.forms['form1'].maxx.value = tmp;   tmp = document.forms['form1'].minx.value;   tmp -= -dx;   document.forms['form1'].minx.value = tmp;    var dy = -Math.abs(document.forms['form1'].maxy.value - document.forms['form1'].miny.value);   dy = dy\/8;   tmp = document.forms['form1'].maxy.value;   tmp -= dy;   document.forms['form1'].maxy.value = tmp;   tmp = document.forms['form1'].miny.value;   tmp -= -dy;   document.forms['form1'].miny.value = tmp; } &lt;\/script&gt; &lt;script language=&quot;JavaScript&quot; type=&quot;text\/javascript&quot;&gt; function pan_left()  {   var dx = Math.abs(document.forms['form1'].maxx.value - document.forms['form1'].minx.value);   dx = dx\/8;   document.forms['form1'].maxx.value -= dx;   document.forms['form1'].minx.value -= dx; } function pan_right()  {   var dx = -Math.abs(document.forms['form1'].maxx.value - document.forms['form1'].minx.value);   dx = dx\/8;   document.forms['form1'].maxx.value -= dx;   document.forms['form1'].minx.value -= dx; } function pan_up()  {   var dy = -Math.abs(document.forms['form1'].maxy.value - document.forms['form1'].miny.value);   dy = dy\/8;   document.forms['form1'].maxy.value -= dy;   document.forms['form1'].miny.value -= dy; } function pan_down()  {   var dy = Math.abs(document.forms['form1'].maxy.value - document.forms['form1'].miny.value);   dy = dy\/8;   document.forms['form1'].maxy.value -= dy;   document.forms['form1'].miny.value -= dy; } &lt;\/script&gt; &lt;form method=&quot;GET&quot; id=&quot;form1&quot; name=&quot;form1&quot;&gt; &lt;?vsp   declare &quot;cminx&quot; double precision;   declare &quot;cminy&quot; double precision;   declare &quot;cmaxx&quot; double precision;   declare &quot;cmaxy&quot; double precision;   declare &quot;s&quot; varchar;     s := get_keyword ('minx', params, '');   if (s = '')      cminx := min_x;   else     cminx := atof(s);   s := get_keyword ('miny', params, '');   if (s = '')      cminy := min_y;   else     cminy := atof(s);   s := get_keyword ('maxx', params, '');   if (s = '')      cmaxx := max_x;   else     cmaxx := atof(s);   s := get_keyword ('maxy', params, '');   if (s = '')      cmaxy := max_y;   else     cmaxy := atof(s);    declare mashtab double precision;   mashtab := floor((cmaxx-cminx)*96.\/(512.*2.54));    declare cnt integer;   cnt := sequence_next ('xxx.YYY.__cnt'); ?&gt;  &lt;input type=&quot;hidden&quot; name=&quot;minx&quot; value='&lt;?vsp=cminx ?&gt;'\/&gt; &lt;input type=&quot;hidden&quot; name=&quot;miny&quot; value='&lt;?vsp=cminy ?&gt;'\/&gt; &lt;input type=&quot;hidden&quot; name=&quot;maxx&quot; value='&lt;?vsp=cmaxx ?&gt;'\/&gt; &lt;input type=&quot;hidden&quot; name=&quot;maxy&quot; value='&lt;?vsp=cmaxy ?&gt;'\/&gt;  &lt;table width=&quot;100%&quot; border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; summary=&quot;&quot;&gt; &lt;tr&gt; &lt;td width=&quot;20%&quot; align=&quot;center&quot; &gt;&nbsp;&lt;\/td&gt; &lt;td width=&quot;20%&quot; align=&quot;center&quot; &gt;Min X&lt;\/td&gt; &lt;td width=&quot;20%&quot; align=&quot;center&quot; &gt;Min Y&lt;\/td&gt; &lt;td width=&quot;20%&quot; align=&quot;center&quot; &gt;Max X&lt;\/td&gt; &lt;td width=&quot;20%&quot; align=&quot;center&quot; &gt;Max Y&lt;\/td&gt; &lt;\/tr&gt;  &lt;tr&gt; &lt;td width=&quot;20%&quot; align=&quot;center&quot; &gt;Default extent&lt;\/td&gt; &lt;td width=&quot;20%&quot; align=&quot;center&quot; &gt;&nbsp;&lt;?vsp=min_x ?&gt;&nbsp;&lt;\/td&gt; &lt;td width=&quot;20%&quot; align=&quot;center&quot; &gt;&nbsp;&lt;?vsp=min_y ?&gt;&nbsp;&lt;\/td&gt; &lt;td width=&quot;20%&quot; align=&quot;center&quot; &gt;&nbsp;&lt;?vsp=max_x ?&gt;&nbsp;&lt;\/td&gt; &lt;td width=&quot;20%&quot; align=&quot;center&quot; &gt;&nbsp;&lt;?vsp=max_y ?&gt;&nbsp;&lt;\/td&gt; &lt;\/tr&gt;  &lt;tr&gt; &lt;td width=&quot;20%&quot; align=&quot;center&quot; &gt;Current extent&lt;\/td&gt; &lt;td width=&quot;20%&quot; align=&quot;center&quot; &gt;&nbsp;&lt;?vsp=sprintf('%10.3f', cminx) ?&gt;&nbsp;&lt;\/td&gt; &lt;td width=&quot;20%&quot; align=&quot;center&quot; &gt;&nbsp;&lt;?vsp=sprintf('%10.3f', cminy) ?&gt;&nbsp;&lt;\/td&gt; &lt;td width=&quot;20%&quot; align=&quot;center&quot; &gt;&nbsp;&lt;?vsp=sprintf('%10.3f', cmaxx) ?&gt;&nbsp;&lt;\/td&gt; &lt;td width=&quot;20%&quot; align=&quot;center&quot; &gt;&nbsp;&lt;?vsp=sprintf('%10.3f', cmaxy) ?&gt;&nbsp;&lt;\/td&gt; &lt;\/tr&gt;  &lt;tr&gt; &lt;td width=&quot;20%&quot; align=&quot;center&quot; &gt;&nbsp;&lt;\/td&gt; &lt;td width=&quot;20%&quot; align=&quot;center&quot; &gt; &lt;input type=&quot;button&quot; onclick=&quot;javascript: full_extent(); document.forms['form1'].submit ();&quot; value=&quot;[*]&quot;\/&gt; &lt;\/td&gt; &lt;td width=&quot;20%&quot; align=&quot;center&quot; &gt; &lt;input type=&quot;button&quot; onclick=&quot;javascript: zoom_in(); document.forms['form1'].submit ();&quot; value=&quot;+&quot; \/&gt; &lt;br&gt;&lt;input type=&quot;button&quot; onclick=&quot;javascript: zoom_out(); document.forms['form1'].submit ();&quot; value=&quot;-&quot; \/&gt; &lt;\/td&gt; &lt;td width=&quot;20%&quot; align=&quot;center&quot; &gt; &lt;input type=&quot;button&quot; onclick=&quot;javascript: pan_up(); document.forms['form1'].submit ();&quot; value=&quot;^&quot; \/&gt; &lt;br&gt; &lt;input type=&quot;button&quot; onclick=&quot;javascript: pan_down(); document.forms['form1'].submit ();&quot; value=&quot;V&quot; \/&gt; &lt;\/td&gt; &lt;td width=&quot;20%&quot; align=&quot;center&quot; &gt; &lt;input type=&quot;button&quot; onclick=&quot;javascript: pan_left(); document.forms['form1'].submit ();&quot; value=&quot;&lt;&quot; \/&gt; &lt;input type=&quot;button&quot; onclick=&quot;javascript: pan_right(); document.forms['form1'].submit ();&quot; value=&quot;&gt;&quot; \/&gt; &lt;\/td&gt; &lt;\/tr&gt;  &lt;tr&gt;&lt;td colspan=5 align=&quot;center&quot;&gt; &lt;p&gt;&lt;img src=&quot;&quot;&gt;&lt;\/p&gt; &lt;\/td&gt;&lt;\/tr&gt; &lt;\/table&gt; &lt;\/form&gt;&lt;\/body&gt;&lt;\/html&gt; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<\/li>\n<li>\u0418 \u0432\u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: <br \/>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/a02\/ecc\/b0e\/a02eccb0e43a3586fddae887a92a456b.png\" alt=\"image\"\/><\/li>\n<\/ul>\n<p>  <\/p>\n<h4><b>\u041e\u0446\u0435\u043d\u043a\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/b><\/h4>\n<p>  <\/p>\n<ul>\n<li>\u0414\u0435\u043b\u0430\u0442\u044c \u043c\u044b \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u043a\u043e\u0433\u0434\u0430 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e web-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/li>\n<li>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e 4 wget&#8217;\u0430, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0434\u0435\u043b\u0430\u0435\u0442 10 000 \u043f\u0430\u0440 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u2014 \u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435. \u0412\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e wget&#8217;\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435, \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0440\u0430\u0437\u043d\u044b\u0435. \u0421\u0434\u0435\u043b\u0430\u043d\u043e \u044d\u0442\u043e \u0432\u0432\u0438\u0434\u0443 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e, \u0438 \u043e\u043d\u0438 \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u043d\u043e \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c\u0438, \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u0442\u0440\u0443\u0434\u043d\u043e \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0440\u0430\u0437\u043e\u0433\u0440\u0435\u0432. \u0410 \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438, \u043e\u043d\u0438 \u043d\u0430\u0447\u043d\u0443\u0442 \u0442\u043e\u043b\u043a\u0430\u0442\u044c\u0441\u044f \u043b\u043e\u043a\u0442\u044f\u043c\u0438 \u0442.\u043a. \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u043e\u0441\u0442\u0438 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043e\u0442\u043c\u0435\u043d\u044f\u043b.<\/li>\n<li>\u0422.\u043a. \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0432 background&#8217;\u0435 \u0441\u0442\u043e\u0438\u0442 \u0431\u0430\u0440\u044c\u0435\u0440 (wait \u0432 bash), \u0437\u0430\u043c\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d \u043f\u043e \u0441\u0430\u043c\u043e\u043c\u0443 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443.<\/li>\n<li>\u0417\u0430\u043f\u0440\u043e\u0441\u044b \u0431\u0443\u0434\u0443\u0442 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 ~3X3 \u043a\u043c, <\/li>\n<li>\u0412\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0441\u043a\u0430\u0436\u0435\u0442, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u0437\u0430\u0442\u043e\u0447\u0435\u043d\u044b \u043f\u043e\u0434 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0438 \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u0442 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0414\u0430, \u044d\u0442\u043e \u0442\u0430\u043a. \u041f\u0440\u0438\u0440\u043e\u0434\u0430 \u0431\u043b\u043e\u0447\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0442\u0430\u043a\u043e\u0432\u0430, \u0447\u0442\u043e \u043e\u043d \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445, \u0441\u043e\u0438\u0437\u043c\u0435\u0440\u0438\u043c\u044b\u0445 \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0435\u0433\u043e \u044f\u0447\u0435\u0439\u043a\u0438. \u042d\u0442\u043e \u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u0410 \u0441 \u0434\u0440\u0443\u0433\u043e\u0439,<br \/>  \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442 \u043d\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043b\u043e\u0447\u043d\u044b\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043e\u0432 \u043a\u0430\u0440\u0442\u044b. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0430 \u0431\u043b\u043e\u0447\u043d\u044b\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0445 \u0441\u0432\u0435\u0442 \u043a\u043b\u0438\u043d\u043e\u043c \u043d\u0435 \u0441\u043e\u0448\u0435\u043b\u0441\u044f. \u0415\u0441\u043b\u0438 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u044d\u043a\u0441\u0442\u0435\u043d\u0442 \u043a\u0430\u043a \u0447\u0435\u0442\u044b\u0440\u0435\u0445\u043c\u0435\u0440\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438 <a href=\"http:\/\/habrahabr.ru\/post\/186564\/\">\u0442\u043e\u0447\u0435\u0447\u043d\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b<\/a>.  <\/li>\n<li>\u0418\u0442\u0430\u043a, \u043e\u0431\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u2014 8 \u043c\u0438\u043d 12 \u0441\u0435\u043a. \u0418\u043b\u0438 81 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. <\/li>\n<li>\u041d\u0430 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0443\u0445\u043e\u0434\u0438\u0442 3 \u0447\u0430\u0441\u0430 32 \u043c\u0438\u043d, \u0442.\u0435. \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0434\u0435\u0433\u0440\u0430\u0434\u0430\u0446\u0438\u0438 \u043d\u0435\u0442.<\/li>\n<li>\u041f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0442\u044c \u2014 52 \u043c\u0431\u0438\u0442\/\u0441\u0435\u043a \u043d\u0430\u0434\u043e \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u043e\u043f\u043e\u043b\u0430\u043c \u0442.\u043a. \u0443 \u043d\u0430\u0441 \u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0445\u043e\u0441\u0442\u0435<\/li>\n<li>\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u2014 68%, \u0441\u0435\u0440\u0432\u0435\u0440 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 66 \u0438\u0437 \u043d\u0438\u0445<\/li>\n<li>\u0421\u0435\u0440\u0432\u0435\u0440 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0442 1.1 \u0434\u043e 1.6 \u0413\u0431 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u0443\u0442\u0435\u0447\u0435\u043a, \u043f\u043e \u0432\u0438\u0434\u0438\u043c\u043e\u043c\u0443, \u043d\u0435\u0442, \u0432\u043e \u0432\u0441\u044f\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043f\u043e\u0441\u043b\u0435 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0435\u0451 \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e 1.3 \u0413\u0431<\/li>\n<li>\u041e\u0431\u044a\u0451\u043c \u0444\u0430\u0439\u043b\u0430 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 ~3 \u0413\u0431<\/li>\n<\/ul>\n<p>  <\/p>\n<h4><b>\u0412\u044b\u0432\u043e\u0434\u044b<\/b><\/h4>\n<p>  <\/p>\n<ul>\n<li>\u0426\u0435\u043b\u044c \u043f\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442\u0430, \u043e\u043f\u044b\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0434\u0435\u043d\u044c \u043b\u0435\u0433\u043a\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u0441\u043e\u043b\u0438\u0434\u043d\u044b\u043c \u0437\u0430\u043f\u0430\u0441\u043e\u043c \u043f\u043e\u0434 \u043f\u0438\u043a\u043e\u0432\u044b\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438.<\/li>\n<li>\u041f\u0440\u0438 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u044b\u0439 windows \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u041e\u0421<\/li>\n<li>\u0414\u0430 \u0438 \u0436\u0435\u043b\u0435\u0437\u043e \u0431\u044b\u043b\u043e \u043d\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0435<\/li>\n<li>\u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f, \u0430 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u0432\u0441\u0435\u0433\u043e \u0442\u0440\u0438 \u0441\u043b\u043e\u044f, \u043f\u0443\u0441\u0442\u044c \u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u043d\u044b\u0445. \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0436\u0438\u0437\u043d\u0438 \u0441\u043b\u043e\u0451\u0432, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0434\u0435\u0441\u044f\u0442\u043a\u0438, \u043d\u043e \u043d\u0435 \u0432\u0441\u0435 \u043e\u043d\u0438 \u043d\u0443\u0436\u043d\u044b \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u0427\u0442\u043e\u0431\u044b \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u0436\u0438\u0437\u043d\u044c, \u043d\u0430 \u043c\u0435\u043b\u043a\u0438\u0445 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u043b\u043e\u0438. \u0418 \u0442.\u0434. \u0438 \u0442.\u043f. \u041d\u043e, \u0435\u0449\u0435 \u0440\u0430\u0437, \u043d\u0435 \u0441\u0442\u0430\u0432\u0438\u043b\u043e\u0441\u044c \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c OSM, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438.<\/li>\n<li>\u0415\u0441\u043b\u0438 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u2026 \u0430\u0441\u043a\u0435\u0442\u0438\u0447\u043d\u044b\u0439, \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u043f\u0443\u043d\u043a\u0442\u0443.<\/li>\n<li>\u041d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d labeling\u2026 <\/li>\n<li>\u041d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438\u2026 <\/li>\n<li>\u0412\u0430\u0436\u043d\u043e\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u043c\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043a\u0430\u0440\u0442\u044b \u2014 \u0432 \u0432\u0438\u0434\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 PL\/SQL. \u0412 \u044d\u0442\u043e\u043c \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0438 \u043c\u0438\u043d\u0443\u0441\u044b, \u043d\u043e \u0438 \u043d\u0435\u0441\u043e\u043c\u043d\u0435\u043d\u043d\u0439 \u043f\u043b\u044e\u0441 \u2014 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c \u0438 \u043f\u043e\u043b\u043d\u0430\u044f \u0441\u0432\u043e\u0431\u043e\u0434\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439. \u0422\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441 \u043c\u043e\u0449\u044c\u044e \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0413\u0418\u0421 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0438\u0440\u0430\u043c\u0438\u0434\u044b \u0442\u0430\u0439\u043b\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0443\u043b\u0438\u0446\u044b \u043f\u043e\u0432\u0435\u0440\u0445 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u043e\u0431\u043e\u043a.<\/li>\n<\/ul>\n<p>  <\/p>\n<h4><b>PS<\/b>:<\/h4>\n<p> <i>\u041a\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u0437\u043e\u0432\u0451\u0442 \u043f\u0435\u0440\u0435\u0432\u0430\u043b \u043f\u043e\u0434 \u043d\u043e\u043c\u0435\u0440\u043e\u043c 40 \u043d\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u043a\u0430\u0440\u0442\u044b \u0432 \u0448\u0430\u043f\u043a\u0435 \u0441\u0442\u0430\u0442\u044c\u0438, \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0430.<\/i>    \t<\/p>\n<div class=\"clear\"><\/div>\n<\/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=\"http:\/\/habrahabr.ru\/post\/200642\/\"> http:\/\/habrahabr.ru\/post\/200642\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/c4b\/654\/2eb\/c4b6542eb74b8ab895f522eec5acf692.png\" alt=\"image\"\/><br \/>  \u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 <a href=\"http:\/\/habrahabr.ru\/post\/196682\/\">\u0440\u0430\u0437<\/a> \u043c\u044b \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441, \u0430 \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u044d\u0442\u0438\u043c \u043d\u0430\u0432\u044b\u043a\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0436\u0438\u0432\u043e\u0439 (\u043d\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439) \u043a\u0430\u0440\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u0441 web \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e, \u0441\u043a\u0430\u0436\u0435\u043c, \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0434\u0435\u043d\u044c \u043d\u0430 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043e\u0431\u044b\u0447\u043d\u043e\u043c \u00ab\u0436\u0435\u043b\u0435\u0437\u0435\u00bb.   <\/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-200642","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/200642","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=200642"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/200642\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=200642"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=200642"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=200642"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}