{"id":3309,"date":"2012-08-13T09:08:49","date_gmt":"2012-08-13T00:08:49","guid":{"rendered":"https:\/\/y2tech.net\/blog\/?p=3309"},"modified":"2024-02-20T18:48:22","modified_gmt":"2024-02-20T09:48:22","slug":"openlayers-tips-overlaid-layers","status":"publish","type":"post","link":"https:\/\/y2tech.net\/blog\/computer\/webmap\/openlayers-tips-overlaid-layers-3309\/","title":{"rendered":"OpenLayers Tips: \u30aa\u30fc\u30d0\u30ec\u30a4\u8868\u793a"},"content":{"rendered":"<h3>OpenLayers\u3067\u30ec\u30a4\u30e4\u30fc\u3092\u30aa\u30fc\u30d0\u30ec\u30a4\u8868\u793a\u3059\u308b\u65b9\u6cd5<\/h3>\r\n<br>\r\n<p>\r\n<div style=\"width: 682px; margin: 0 auto; text-align: center;\">\r\n<span><\/span>\r\n<\/div>\r\n<br>\r\n<hr \/>\r\n<br>\r\n<p>\u3053\u306e\u3068\u3053\u308dOpenLayers\u3092\u7528\u3044\u3066\u65b0\u3057\u304f\u306a\u3063\u305f\u96fb\u5b50\u56fd\u571fV4\u30b7\u30b9\u30c6\u30e0\u306e\u80cc\u666f\u5730\u56f3\u3092\u8272\u3005\u3068\u8a66\u3057\u3066\u3044\u308b\u304c\u3001OpenLayers\u3067\u30ec\u30a4\u30e4\u30fc\u3092\u30aa\u30fc\u30d0\u30ec\u30a4\u8868\u793a\u3059\u308b\u65b9\u6cd5\u304c\u4f55\u3068\u306a\u304f\u5206\u304b\u3063\u305f\u306e\u3067\u7c21\u5358\u306b\u7d39\u4ecb\u3057\u3066\u304a\u304f\u3053\u3068\u306b\u3059\u308b\uff0e<\/p>\r\n<br>\r\n<p>OpenLayers\u3067\u30ec\u30a4\u30e4\u30fc\u3092\u30aa\u30fc\u30d0\u30ec\u30a4\u8868\u793a\u3059\u308b\u306b\u306f\u3001\u30ec\u30a4\u30e4\u30fc\u3092\u30d9\u30fc\u30b9\u30ec\u30a4\u30e4\u30fc\u3068\u30aa\u30fc\u30d0\u30ec\u30a4\u7528\u306e\u30ec\u30a4\u30e4\u30fc\u3068\u306b\u304d\u3061\u3093\u3068\u5206\u3051\u3066\u7ba1\u7406\u3059\u308c\u3070\u7c21\u5358\u306b\u30aa\u30fc\u30d0\u30ec\u30a4\u8868\u793a\u3092\u884c\u3046\u4e8b\u304c\u3067\u304d\u308b\uff0e\u4e0b\u8a18\u306e\u4f8b\u306f\u96fb\u5b50\u56fd\u571fV4\u306e\u5834\u5408\u3067\u3042\u308b\u304c\u3001Google Maps\u3084OSM\u306a\u3069\u4ed6\u306eWEB\u30de\u30c3\u30d7\u30b5\u30fc\u30d3\u30b9\u306e\u30ec\u30a4\u30e4\u30fc\u306e\u5834\u5408\u3067\u3082\u540c\u3058\u3088\u3046\u306b\u30ec\u30a4\u30e4\u30fc\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u8a2d\u5b9a\u3059\u308c\u3070\u826f\u3044\uff0e\r\n<br>\r\n<\/p>\r\n<pre><code class=\"language-Markup\">\r\n    \/\/ JSGI Denshi Kokudo \uff08\u3053\u306e\u5834\u5408\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30d9\u30fc\u30b9\u30ec\u30a4\u30e4\u30fc\u30e2\u30fc\u30c9\u3068\u3057\u3066\u30ec\u30a4\u30e4\u30fc\u304c\u4f5c\u6210\u3055\u308c\u308b\uff09\r\n    var webtisLayer = new webtis.Layer.BaseMap( \"CJ4 Base Map\", { dataSet: cj4BaseMapSet });\r\n    \r\n    \/\/ overlaid ortho image\u3000\uff08\u30aa\u30fc\u30d0\u30ec\u30a4\u7528\u306e\u30aa\u30eb\u30bd\u753b\u50cf\u30ec\u30a4\u30e4\u30fc\uff09\r\n    var webtisOrthoLayer = new webtis.Layer.BaseMap( \"CJ4 Ortho\", { \r\n         dataSet: cj4OrthoMapSet, \r\n         opacity: 0.3, \u3000\u3000\u3000\u3000\uff08\u30ec\u30a4\u30e4\u30fc\u306e\u521d\u671f\u900f\u660e\u5ea6\u3092\u8a2d\u5b9a\uff09\r\n         isBaseLayer: false   \uff08\u30d9\u30fc\u30b9\u30ec\u30a4\u30e4\u30fc\u30e2\u30fc\u30c9\u3092\u89e3\u9664\uff09\r\n    });\r\n   \r\n    map.addLayers( [ webtisLayer, webtisOrthoLayer ] );\r\n   \r\n<\/code><\/pre>\r\n<hr \/>\r\n<h4> OpenLayers \u306b\u3088\u308b\u30aa\u30fc\u30d0\u30ec\u30a4\u8868\u793a\u306e\u30b5\u30f3\u30d7\u30ebHTML\u30b3\u30fc\u30c9 <\/h4>\r\n<pre><code class=\"language-Markup\">\r\n<!DOCTYPE HTML PUBLIC \"-\/\/W3C\/\/DTD HTML 4.01\/\/EN\"\r\n\t\t\"http:\/\/www.w3.org\/TR\/html4\/strict.dtd\">\r\n<html lang=\"ja\">\r\n<head>\r\n\t<meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\">\r\n\t<title>Ovaerlay Samples [ CJ4 ]<\/title>\r\n\r\n<script type=\"text\/javascript\" src=\".\/OpenLayers-2.12\/OpenLayers.js\"><\/script>\r\n<script type=\"text\/javascript\" src=\".\/webtis_v4.js\" ><\/script>\r\n<script src=\"http:\/\/maps.google.co.jp\/maps\/api\/js?v=3.5&#038;sensor=false&#038;language=ja\"><\/script>\r\n\r\n<script type=\"text\/javascript\">\r\n\r\nvar gCJ4LayerID = \"CJ4 Base Map\";\r\nvar gCJLogo = null;\r\nvar gWebtisOrthoLayer = null;\r\nvar gMaxOpacity = 0.9;\r\nvar gMinOpacity = 0.1;\r\n\r\nfunction init_map(){\r\n\r\n\tvar map = new OpenLayers.Map( 'map_cj4' );\r\n\r\n\t\/\/ Denshikokudo Base Map\r\n\tvar cj4BaseMapSet = { 0: null, 1: null, 2: null, 3: null, 4: null,\r\n\t\t5:{dataId:\"RELIEF\"},\r\n\t\t6:{dataId:\"RELIEF\"},\r\n\t\t7:{dataId:\"RELIEF\"},\r\n\t\t8:{dataId:\"RELIEF\"},\r\n\t\t9:{dataId:\"BAFD1000K\"},\r\n\t\t10:{dataId:\"BAFD1000K\"},\r\n\t\t11:{dataId:\"BAFD1000K\"},\r\n\t\t12:{dataId:\"BAFD200K\"},\r\n\t\t13:{dataId:\"BAFD200K\"},\r\n\t\t14:{dataId:\"BAFD200K\"},\r\n\t\t15:{dataId:\"DJBMM\"},\r\n\t\t16:{dataId:\"DJBMM\"},\r\n\t\t17:{dataId:\"DJBMM\"},\r\n\t\t18:{dataId:\"FGD\"}\r\n\t};\r\n\r\n\tvar cj4OrthoMapSet = { 0: null, 1: null, 2: null, 3: null, 4: null,\r\n\t\t5:{dataId:\"JAIS\"},\r\n\t\t6:{dataId:\"JAIS\"},\r\n\t\t7:{dataId:\"JAIS\"},\r\n\t\t8:{dataId:\"JAIS\"},\r\n\t\t9:{dataId:\"BAFD1000K\"},\r\n\t\t10:{dataId:\"BAFD1000K\"},\r\n\t\t11:{dataId:\"BAFD1000K\"},\r\n\t\t12:{dataId:\"BAFD200K\"},\r\n\t\t13:{dataId:\"BAFD200K\"},\r\n\t\t14:{dataId:\"BAFD200K\"},\r\n\t\t15:{dataId:\"DJBMO\"},\r\n\t\t16:{dataId:\"DJBMO\"},\r\n\t\t17:{dataId:\"DJBMO\"},\r\n\t\t18:{dataId:\"FGD\"}\r\n\t};\r\n\r\n\t\/\/ JSGI Denshi Kokudo \r\n\tvar webtisLayer = new webtis.Layer.BaseMap( gCJ4LayerID, { \r\n\t\tdataSet: cj4BaseMapSet \r\n\t});\r\n\t\r\n\t\/\/ overlaid ortho image\r\n\tgWebtisOrthoLayer = new webtis.Layer.BaseMap( \"CJ4 Ortho\", { \r\n\t\t dataSet: cj4OrthoMapSet, \r\n\t\t opacity: 0.3, \r\n\t\t isBaseLayer: false\r\n\t});\r\n\r\n\t\/\/ Google Maps\r\n\tvar gmap = new OpenLayers.Layer.Google( \"Google ROADMAP\",\r\n\t\t{ numZoomLevels: 20 }\r\n\t);\r\n\r\n\tmap.addLayers( [ webtisLayer, gmap, gWebtisOrthoLayer ] );\r\n\r\n\tvar zoomLevel = 16;\r\n\tvar centerLatLon = new OpenLayers.LonLat(139.52736528, 35.66062806);\r\n\tvar center = centerLatLon.transform( new OpenLayers.Projection(\"EPSG:4326\"), \r\n\t\t\t\t\t\t\t\t\t\t\t map.getProjectionObject() );\r\n\tmap.setCenter( center, zoomLevel );\r\n\r\n\tmap.addControl( new OpenLayers.Control.LayerSwitcher() );\r\n\r\n\tvar crosshairsCursorCtrl = new OpenLayers.Control.CrosshairsCursor({\r\n\t\ticonImageUrl:  \".\/crosshairs.png\",\r\n\t\ticonSize: new OpenLayers.Size(32, 32),\r\n\t\txyPos: new OpenLayers.Pixel( map.getCurrentSize().w\/2, map.getCurrentSize().h\/2 )\r\n\t});\r\n\tmap.addControl( crosshairsCursorCtrl ); \r\n\r\n\t\/\/ Logo\r\n\tgCJLogo = new OpenLayers.Control.CJLogo();\r\n\t\/\/cjLogo.yOffset = 64;\r\n\t\/\/cjLogo.xOffset = 620;\r\n\tmap.addControl( gCJLogo );\r\n\r\n\t\/\/ mouse position\r\n\tmap.addControl( new OpenLayers.Control.MousePosition( \r\n\t\t{ 'div': OpenLayers.Util.getElement('mouse_position'),\r\n\t\t  prefix: 'Mouse Position : ',\r\n\t\t  suffix: ' [Lon, Lat]',\r\n\t\t  displayProjection: new OpenLayers.Projection(\"EPSG:4326\"),\r\n\t\t  emptyString: 'Mouse Position : ',\t\t\r\n\t\t  numDigits: 6\r\n\t\t} ) \r\n\t);\r\n\r\n\tmap.addControl( new OpenLayers.Control.MousePosition( { \r\n\t\t  'div': OpenLayers.Util.getElement('mouse_position_m'),\r\n\t\t  prefix: '\t ( ',\r\n\t\t  suffix: ' [m] )',\r\n\t\t  emptyString: '',\r\n\t\t  numDigits: 0\r\n\t\t} )\r\n\t);\r\n\r\n\t\/\/ draw a map scale bar\r\n\tmap.addControl( new OpenLayers.Control.ScaleLine( { \r\n\t\t  maxWidth:150,\r\n\t\t  bottomOutUnits: \"\", \r\n\t\t  bottomInUnits: \"\",\r\n\t\t  geodesic:true\r\n\t   } )\r\n\t);\r\n\r\n\t\/\/ show map center location\r\n\tshow_map_center( map );\r\n\r\n\t\/\/ event handler\r\n\tmap.events.register( 'moveend', map, function() { show_map_center(map); } );\r\n\tmap.events.register( 'changebaselayer', map, function() { show_denshikokudo_logo(map); } );\r\n\r\n}\r\n\r\n\/\/ our custom crosshairs cursor\r\nOpenLayers.Control.CrosshairsCursor = OpenLayers.Class( OpenLayers.Control, {\r\n\telement : null,\r\n\ticonImageUrl: null,\r\n\ticonSize: new OpenLayers.Size(32,32),\r\n\txyPos: new OpenLayers.Pixel(320,240),\r\n\r\n\tinitialize: function( element ) {\r\n\t\tOpenLayers.Control.prototype.initialize.apply( this, arguments );\r\n\t\tthis.element = OpenLayers.Util.getElement( element );\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tOpenLayers.Control.prototype.draw.apply( this, arguments );\r\n\t\tvar xy = this.xyPos.clone();\r\n\t\tvar centerXYPos = new OpenLayers.Pixel( xy.x - (this.iconSize.w \/ 2), \r\n\t\t\t\t\t\t\t\t\t\t\t\txy.y - (this.iconSize.h \/ 2) );\r\n\t\tthis.buttons = new Array();\r\n\r\n\t\tvar uniqID = OpenLayers.Util.createUniqueID( \"OpenLayers.Control.Crosshairs_\" );\r\n\t\tthis.div = OpenLayers.Util.createAlphaImageDiv(\r\n\t\t\t\tuniqID, \r\n\t\t\t\tcenterXYPos, \r\n\t\t\t\tthis.iconSize, \r\n\t\t\t\tthis.iconImageUrl, \r\n\t\t\t\t\"absolute\");\r\n\t\treturn this.div;\r\n\t},\r\n\tCLASS_NAME: \"OpenLayers.Control.CrosshairsCursor\"\r\n});\r\n\r\nOpenLayers.Control.CJLogo = OpenLayers.Class( OpenLayers.Control, {\r\n\t\r\n\txOffset : 40,\r\n\tyOffset : 56,\r\n\t\r\n\tinitialize: function() {\r\n\t\tOpenLayers.Control.prototype.initialize.apply( this, arguments );\r\n\t},\r\n\t\r\n\tcreateCtrlImage: function( url, left, handler) {\r\n\t\r\n\t\tvar image = document.createElement('img');\r\n\t\timage.src = url;\r\n\t\timage.style.position = \"absolute\";\r\n\t\timage.style.left = left + \"px\";\r\n\t\timage.style.width  = '32px';\r\n\t\timage.style.height = '32px';\r\n\r\n\t\tif ( handler ) {\r\n\t\t\r\n\t\t\t\/\/ only handle click\r\n\t\t\tOpenLayers.Event.observe(image, \"mousedown\", \r\n\t\t\t\tOpenLayers.Function.bindAsEventListener( handler, this));\r\n\t\t\t\t\r\n\t\t\tOpenLayers.Event.observe(image, \"click\", \r\n\t\t\t\tOpenLayers.Function.bindAsEventListener( function(e) {\r\n\t\t\t\t\tOpenLayers.Event.stop(e);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}, this));\r\n\t\t\t\t\r\n\t\t\tOpenLayers.Event.observe(image, \"dblclick\", \r\n\t\t\t\tOpenLayers.Function.bindAsEventListener(function(e) {\r\n\t\t\t\t\tOpenLayers.Event.stop(e);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}, this));\r\n\t\t}\r\n\t\tthis.div.appendChild( image );\r\n\t},\r\n\t\r\n\tdraw: function (px) {\r\n\r\n\t\tif ( this.div == null ) {\r\n\r\n\t\t\tvar mapSize = this.map.getSize();\r\n\t\t\t\r\n\t\t\tthis.div = OpenLayers.Util.createDiv( this.id );\r\n\r\n\t\t\tthis.div.style.position = \"absolute\";\r\n\t\t\tthis.div.style.top\t= ( mapSize.h - this.yOffset ) + \"px\";\r\n\t\t\tthis.div.style.left = ( mapSize.w - this.xOffset ) + \"px\";\r\n\r\n\t\t\tthis.createCtrlImage( \"http:\/\/cyberjapan.jp\/images\/icon01.gif\", 0, \r\n\t\t\t\tfunction(e) {\r\n\t\t\t\t\twindow.open( \"http:\/\/portal.cyberjapan.jp\/index.html\" );\r\n\t\t\t\t\tOpenLayers.Event.stop(e);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t});\r\n\r\n\t\t}\r\n\t\treturn this.div;\r\n\t},\r\n\r\n\tadjustPositionOnMapResize: function() {\r\n\r\n\t\tif (this.div != null) {\r\n\t\t\tvar mapSize = this.map.getSize();\r\n\t\t\tthis.div.style.top\t= ( mapSize.h - this.yOffset ) + \"px\";\r\n\t\t\tthis.div.style.left = ( mapSize.w - this.xOffset ) + \"px\";\r\n\t\t}\r\n\t},\r\n\t\r\n\tCLASS_NAME: \"OpenLayers.Control.CJLogo\"\r\n});\r\n\r\nfunction show_map_center( map ) {\r\n\tvar center = map.getCenter();\r\n\tvar centerLatLon = center.transform( map.getProjectionObject(),\r\n\t\tnew OpenLayers.Projection(\"EPSG:4326\"));\r\n\tvar lat = Math.round(centerLatLon.lat * 1000000) \/ 1000000;\r\n\tvar lon = Math.round(centerLatLon.lon * 1000000) \/ 1000000;\r\n\tvar zoomLevel = map.getZoom();\r\n\t\r\n\tvar htmlText= \"Map Center: \" + lon + \", \" + lat + \"\t Zoom Level: \"+ zoomLevel;\r\n\tdocument.getElementById('map_info').firstChild.nodeValue = htmlText;\r\n}\r\n\r\nfunction show_denshikokudo_logo( map ) {\r\n\r\n\tvar currentBaseLayerName = map.baseLayer.name;\r\n\r\n\tif ( currentBaseLayerName !== gCJ4LayerID ) {\r\n\t\tif ( gCJLogo ) map.removeControl( gCJLogo );\r\n\t\tgCJLogo = null;\r\n\t} else {\r\n\t\tgCJLogo = new OpenLayers.Control.CJLogo();\r\n\t\tmap.addControl( gCJLogo );\r\n\t}\r\n\r\n}\r\n\r\n\/\/ change opacity of the WEBTIS ortho layer\r\nfunction changeOpacity( opacity ) {\r\n\tvar newOpacity = ( parseFloat( OpenLayers.Util.getElement('opacity_control').value) + opacity ).toFixed(1);\r\n\tnewOpacity = Math.min( gMaxOpacity, Math.max( gMinOpacity, newOpacity) );\r\n\tOpenLayers.Util.getElement('opacity_control').value = newOpacity;\r\n\tgWebtisOrthoLayer.setOpacity( newOpacity );\r\n}\r\n\r\n<\/script>\r\n\r\n<style type=\"text\/css\">\r\n#map_cj4 {\r\n  width:  640px;\r\n  height: 480px;\r\n  border: solid 1px #999;\r\n}\r\n#map_info_area {\r\n  width:  640px;\r\n  height: 40px;\r\n  font-size: small;\r\n  border: solid 1px #999;\r\n}\r\n#map_scale {\r\n  float: right;\r\n  height: 40px;\r\n}\r\n#mouse_position {\r\n  float: left;\r\n  height: 20px;\r\n}\r\n#mouse_position_m {\r\n  margin-left: 0.5em;\r\n  float: left;\r\n  height: 20px;\r\n}\r\n#map_zoom {\r\n  float: left;\r\n  height: 20px;\r\n}\r\n#map_info {\r\n  display: block;\r\n  height: 18px;\r\n}\r\n\r\n#opacity_control {\r\n\tpadding: 0;\r\n\ttext-align: center;\r\n\twidth: 2em;\r\n\tfont-family: sans-serif;\r\n\tbackground: transparent;\r\n\tcolor: black;\r\n\tborder: 0;\r\n}\r\n\r\ndiv.olControlAttribution {\r\n  font-size: x-smaller;\r\n  right: 3px;\r\n  bottom: 0.2em;\r\n  position: absolute;\r\n  display: block;\r\n}\r\n\r\n<\/style>\r\n\r\n<\/head>\r\n<body onload=\"init_map()\">\r\n\t<div id=\"map_cj4\" ><\/div>\r\n\t<div id=\"map_info_area\" >\r\n\t\t<div id=\"layer_sw\" ><\/div>\r\n\t\t<div id=\"map_info\" >Map Center: <\/div>\r\n\t\t<div id=\"mouse_position\" ><\/div>\r\n\t\t<div id=\"mouse_position_m\" ><\/div>\r\n\t\t<div id=\"map_scale\" ><\/div>\r\n\t<\/div>\r\n\t<p><b>Overlay Opacity:\r\n\t\t<a title=\"decrease opacity\" href=\"javascript: changeOpacity(-0.1);\">&lt;&lt;<\/a>\r\n\t\t<input id=\"opacity_control\" type=\"text\" value=\"0.3\" size=\"3\" disabled=\"true\" \/>\r\n\t\t<a title=\"increase opacity\" href=\"javascript: changeOpacity(0.1);\">&gt;&gt;<\/a>\r\n\t<\/b><\/p>\r\n\r\n<\/body>\r\n<\/html>\r\n\r\n\r\n<\/code><\/pre>\r\n","protected":false},"excerpt":{"rendered":"\u3053\u306e\u3068\u3053\u308dOpenLayers\u3092\u7528\u3044\u3066\u65b0\u3057\u304f\u306a\u3063\u305f\u96fb\u5b50\u56fd\u571fV4\u30b7\u30b9\u30c6\u30e0\u306e\u80cc\u666f\u5730\u56f3\u3092\u8272\u3005\u3068\u8a66\u3057\u3066\u3044\u308b\u304c\u3001OpenLayers\u3067\u30ec\u30a4\u30e4\u30fc\u3092\u30aa\u30fc\u30d0\u30ec\u30a4\u8868\u793a\u3059\u308b\u65b9\u6cd5\u304c\u4f55\u3068\u306a\u304f\u5206\u304b\u3063\u305f\u306e\u3067\u7c21\u5358\u306b\u7d39\u4ecb\u3057\u3066\u304a\u304f\u3053\u3068\u306b\u3059\u308b\uff0e","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[561],"tags":[507,573,574,575],"class_list":["post-3309","post","type-post","status-publish","format-standard","hentry","category-webmap","tag-openlayers","tag-overlay","tag-574","tag-575"],"_links":{"self":[{"href":"https:\/\/y2tech.net\/blog\/wp-json\/wp\/v2\/posts\/3309","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/y2tech.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/y2tech.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/y2tech.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/y2tech.net\/blog\/wp-json\/wp\/v2\/comments?post=3309"}],"version-history":[{"count":1,"href":"https:\/\/y2tech.net\/blog\/wp-json\/wp\/v2\/posts\/3309\/revisions"}],"predecessor-version":[{"id":9744,"href":"https:\/\/y2tech.net\/blog\/wp-json\/wp\/v2\/posts\/3309\/revisions\/9744"}],"wp:attachment":[{"href":"https:\/\/y2tech.net\/blog\/wp-json\/wp\/v2\/media?parent=3309"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/y2tech.net\/blog\/wp-json\/wp\/v2\/categories?post=3309"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/y2tech.net\/blog\/wp-json\/wp\/v2\/tags?post=3309"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}