{"id":2393,"date":"2026-11-09T00:59:54","date_gmt":"2026-11-08T15:59:54","guid":{"rendered":"https:\/\/blog.coppe.jp\/?p=2393"},"modified":"2026-11-09T00:59:54","modified_gmt":"2026-11-08T15:59:54","slug":"google-maps-api-youtube-location","status":"publish","type":"post","link":"https:\/\/blog.coppe.jp\/en\/2026\/11\/09\/google-maps-api-youtube-location\/","title":{"rendered":"Integrate the Google Maps API into your YouTube catalog and link it to filming locations."},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">YouTube \u52d5\u753b\u306e\u30ab\u30bf\u30ed\u30b0\u30b5\u30a4\u30c8\u306b <strong>Google Maps API<\/strong>\uff08Maps JavaScript API \/ Geocoding API\uff09\u3092\u5f8c\u304b\u3089\u5165\u308c\u3001\u30ed\u30b1\u5730\u70b9\u3092\u753a\u540d\u30e9\u30d9\u30eb\u3068\u5730\u56f3\u3067\u9023\u52d5\u3055\u305b\u305f\u5b9f\u88c5\u306e\u8a18\u9332\u3060\u3002\u5bfe\u8c61\u30b5\u30a4\u30c8\u306f <strong>GeoRunning \u516c\u5f0fWeb\u30b5\u30a4\u30c8<\/strong>\u306e <a href=\"https:\/\/georunning.work\/\">https:\/\/georunning.work\/<\/a> \u3002HTTP API \u3084\u30d5\u30ed\u30f3\u30c8\u306e\u975e\u540c\u671f\u51e6\u7406\u306b\u306f\u6163\u308c\u3066\u3044\u308b\u304c\u3001Maps \u306f\u3053\u308c\u304b\u3089\u3001\u3068\u3044\u3046\u4eba\u5411\u3051\u306b\u66f8\u304f\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5148\u306b\u30ab\u30bf\u30ed\u30b0\u753b\u9762\u306e\u9aa8\u683c\u3092\u898b\u308b\u3002\u7d9a\u3051\u3066\u3001\u3069\u306e API \u3092\u4f55\u306b\u4f7f\u3063\u305f\u304b\u3001\u5730\u70b9\u306e\u4fdd\u5b58\u3001\u77ed\u3044\u4f4f\u6240\u306e\u4f5c\u308a\u65b9\u3001\u516c\u958b\u5074\u306e\u5730\u56f3\u3001\u306e\u9806\u3067\u9032\u3081\u308b\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>GeoRunning \u516c\u5f0fWeb\u30b5\u30a4\u30c8<\/strong> = YouTube \u52d5\u753b\u30ab\u30bf\u30ed\u30b0<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><strong>GeoRunning \u516c\u5f0fWeb\u30b5\u30a4\u30c8<\/strong>\u306e <a href=\"https:\/\/georunning.work\/\">https:\/\/georunning.work\/<\/a> <\/strong>\u306f\u3001YouTube \u30c1\u30e3\u30f3\u30cd\u30eb\u306e\u300cGeoRunning\u300d\u3092\u306f\u3058\u3081\u3001\u30b5\u30d6\u30c1\u30e3\u30f3\u30cd\u30eb\u306e\u300cGeo SUB-CH\u300d\u3001\u300cGeoAUTO\u300d\u3001\u300cGeoBreathing\u300d\u306e\u516c\u958b\u52d5\u753b\u30ab\u30bf\u30ed\u30b0\u3060\u3002\u30e1\u30a4\u30f3\u30fb\u30b5\u30d6\u30c1\u30e3\u30f3\u30cd\u30eb\u306e\u8a08\uff14\u30c1\u30e3\u30f3\u30cd\u30eb\u306e\u516c\u4f1a\u52d5\u753b\u3092\u540c\u3058\u753b\u9762\u3067\u63a2\u305b\u308b\u3002CMS \u306f Drupal\u3002\u52d5\u753b\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u306f\u81ea\u524d\u306e\u30c6\u30fc\u30d6\u30eb\u306b\u6301\u3061\u3001\u30c8\u30c3\u30d7\u3067\u30bf\u30a4\u30eb\u3068\u3057\u3066\u4e26\u3079\u3066\u3044\u308b\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1440\" src=\"https:\/\/blog.coppe.jp\/app\/uploads\/2026\/11\/gr-top-panel-scaled.png\" alt=\"The GeoRunning top panel display. It shows filters, panel\/map tabs, and video tiles with addresses.\" class=\"wp-image-2410\" srcset=\"https:\/\/blog.coppe.jp\/app\/uploads\/2026\/11\/gr-top-panel-scaled.png 2560w, https:\/\/blog.coppe.jp\/app\/uploads\/2026\/11\/gr-top-panel-300x169.png 300w, https:\/\/blog.coppe.jp\/app\/uploads\/2026\/11\/gr-top-panel-1024x576.png 1024w, https:\/\/blog.coppe.jp\/app\/uploads\/2026\/11\/gr-top-panel-768x432.png 768w, https:\/\/blog.coppe.jp\/app\/uploads\/2026\/11\/gr-top-panel-1536x864.png 1536w, https:\/\/blog.coppe.jp\/app\/uploads\/2026\/11\/gr-top-panel-2048x1152.png 2048w, https:\/\/blog.coppe.jp\/app\/uploads\/2026\/11\/gr-top-panel-18x10.png 18w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption coppe-img-caption coppe-i18n\" data-caption-source=\"figcaption\">Immediately after opening the top page (PANEL). The top is for filtering, and the bottom is for video tiles. Below each tile is the address up to the town name.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u753b\u9762\u306e\u9aa8\u683c\u306f\u3001\u6b21\u306e\u3068\u304a\u308a\u3060\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/blog.coppe.jp\/app\/uploads\/2026\/11\/gr-top-wireframe.png\" alt=\"Wireframe for the homepage. Includes header, filter, panel\/map, tiles, address label, and footer.\" class=\"wp-image-2410\"\/><figcaption class=\"wp-element-caption coppe-img-caption coppe-i18n\" data-caption-source=\"figcaption\">\u2460 Header \u2461 Filter\/Sort\/Search \u2462 Panel \/ Map \u2463 Tile List \u2464 Town Name Label \u2465 Footer<\/figcaption><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u2461\u3067\u30c1\u30e3\u30f3\u30cd\u30eb\u30fb\u4e26\u3073\u9806\u30fb\u30b7\u30ea\u30fc\u30ba\u30fb\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u5909\u3048\u308b\u3068\u3001\u2463\u306e\u30bf\u30a4\u30eb\u304c\u5165\u308c\u66ff\u308f\u308b<\/li>\n\n\n\n<li>\u2462\u306e PANEL \u304c\u30bf\u30a4\u30eb\u4e00\u89a7\u3001MAP \u304c\u540c\u3058\u6761\u4ef6\u306e\u5730\u70b9\u3092\u5730\u56f3\u306b\u3057\u305f\u3082\u306e<\/li>\n\n\n\n<li>\u2464\u306e\u4f4f\u6240\u3092\u62bc\u3059\u3068\u3001\u305d\u306e\u52d5\u753b\u3060\u3051\u306e\u5730\u70b9\u5730\u56f3\u304c\u958b\u304f\uff08\u5f8c\u8ff0\uff09<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u30bf\u30a4\u30eb\u914d\u7f6e\u306b Muuri \u3092\u4f7f\u3046<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u30bf\u30a4\u30eb\u306e\u4f4d\u7f6e\u6c7a\u3081\u306b\u306f <a href=\"https:\/\/muuri.dev\/\">Muuri<\/a> \u3092\u4f7f\u3063\u3066\u3044\u308b\u3002\u30d5\u30a3\u30eb\u30bf\u3084\u30bd\u30fc\u30c8\u306e\u305f\u3073\u306b\u3001\u6b8b\u3063\u305f\u30bf\u30a4\u30eb\u3092\u9699\u9593\u306a\u304f\u4e26\u3079\u76f4\u3059\u305f\u3081\u3060\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e\u30b5\u30a4\u30c8\u5074\u3067\u6c7a\u3081\u305f\u3053\u3068\u306f\u3001\u6b21\u306e\u7a0b\u5ea6\u3060\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c9\u30e9\u30c3\u30b0\u4e26\u3079\u66ff\u3048\u306f\u3057\u306a\u3044\uff08\u95b2\u89a7\u7528\u30ab\u30bf\u30ed\u30b0\u3060\u304b\u3089\uff09<\/li>\n\n\n\n<li>\u30ec\u30a4\u30a2\u30a6\u30c8\u306e\u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\u6642\u9593\u306f 0\uff08\u4ef6\u6570\u304c\u591a\u3044\u306e\u3067\u52d5\u304d\u3092\u6291\u3048\u308b\uff09<\/li>\n\n\n\n<li>\u4eee\u60f3\u30b9\u30af\u30ed\u30fc\u30eb\u3067\u898b\u3048\u3066\u3044\u306a\u3044\u30bf\u30a4\u30eb\u306f\u3001\u30ec\u30a4\u30a2\u30a6\u30c8\u5bfe\u8c61\u304b\u3089\u5916\u3059<\/li>\n\n\n\n<li>\u30c1\u30e3\u30f3\u30cd\u30eb\u30fb\u30b7\u30ea\u30fc\u30ba\u30fb\u30ad\u30fc\u30ef\u30fc\u30c9\u30fb\u5b57\u5e55\u691c\u7d22\u30fb\u5404\u7a2e\u30bd\u30fc\u30c8\u306f Muuri \u306e\u5916\u3067\u5224\u5b9a\u3057\u3001\u7d50\u679c\u3060\u3051\u3092\u30b0\u30ea\u30c3\u30c9\u3078\u6e21\u3059<\/li>\n\n\n\n<li>Muuri \u304c\u521d\u671f\u5316\u3067\u304d\u306a\u304b\u3063\u305f\u3068\u304d\u306f CSS Grid \u306b\u843d\u3068\u3059\u3002\u30ea\u30b9\u30c8\u8868\u793a\u306b\u5207\u308a\u66ff\u3048\u305f\u3068\u304d\u306f Muuri \u3092\u4f7f\u308f\u305a DOM \u3092\u76f4\u63a5\u4e26\u3079\u308b<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Muuri \u306f\u300c\u6b8b\u3063\u305f\u30ab\u30fc\u30c9\u3092\u3069\u3046\u4e26\u3079\u308b\u304b\u300d\u3060\u3051\u3092\u62c5\u5f53\u3059\u308b\u3002\u300c\u3069\u308c\u3092\u6b8b\u3059\u304b\u300d\u300c\u3069\u306e\u9806\u304b\u300d\u306f\u30b5\u30a4\u30c8\u5074\u306e\u30ed\u30b8\u30c3\u30af\u304c\u6c7a\u3081\u308b\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Google Maps API \u3067\u8db3\u3057\u305f\u3053\u3068<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u30ab\u30bf\u30ed\u30b0\u3068\u3057\u3066\u306f\u3001\u30bf\u30a4\u30c8\u30eb\u3068\u30b5\u30e0\u30cd\u30a4\u30eb\u3067\u52d5\u753b\u3092\u63a2\u305b\u305f\u3002\u8db3\u308a\u306a\u304b\u3063\u305f\u306e\u306f\u300c\u305d\u306e\u52d5\u753b\u304c\u3069\u3053\u3067\u64ae\u3089\u308c\u305f\u304b\u300d\u3060\u3002\u30ed\u30b1\u306f1\u672c\u306b\u8907\u6570\u3042\u308b\u3002\u4e00\u89a7\u3067\u306f\u753a\u540d\u307e\u3067\u3092\u898b\u305b\u3001\u756a\u5730\u307e\u3067\u306f\u51fa\u3055\u306a\u3044\u3002\u4f4f\u6240\u3092\u62bc\u3057\u305f\u3089\u305d\u306e\u52d5\u753b\u306e\u5730\u70b9\u3060\u3051\u3092\u958b\u304d\u3001MAP \u3067\u306f\u3044\u307e\u4e00\u89a7\u306b\u51fa\u3066\u3044\u308b\u52d5\u753b\u3092\u307e\u3068\u3081\u3066\u898b\u3089\u308c\u308b\u3088\u3046\u306b\u3057\u305f\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/blog.coppe.jp\/app\/uploads\/2026\/11\/fig_map-f70d567a-025c-4f22-b2c2-73319e8818a3.jpg\" alt=\"A map opened from the address on the tile. The locations in one video are numbered and listed alongside satellite images and labels below.\" class=\"wp-image-2410\"\/><figcaption class=\"wp-element-caption coppe-img-caption coppe-i18n\" data-caption-source=\"figcaption\">This is the screen displayed after clicking the address below the tile. Only the location in this video is arranged from 1 to 4. The tag below shows the saved string up to the town name.<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\u4f7f\u3046 API \u306f\u4e8c\u3064<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Google Maps Platform \u306e\u3046\u3061\u3001\u3053\u306e\u6a5f\u80fd\u306b\u4f7f\u3063\u305f\u306e\u306f\u6b21\u306e\u4e8c\u3064\u3060\u3002\u521d\u3081\u3066 Maps \u3092\u89e6\u308b\u3068\u304d\u306f\u3001\u3053\u3053\u3092\u53d6\u308a\u9055\u3048\u3084\u3059\u3044\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Maps JavaScript API<\/strong> \u2026 \u30d6\u30e9\u30a6\u30b6\u4e0a\u306b\u5730\u56f3\u3092\u63cf\u304f\u3002\u30d4\u30f3\u3001\u30ba\u30fc\u30e0\u3001<code>ROADMAP<\/code> \/ <code>HYBRID<\/code>\u3001\u30b9\u30c8\u30ea\u30fc\u30c8\u30d3\u30e5\u30fc\uff08\u30da\u30b0\u30de\u30f3\uff09\u306f\u3053\u3061\u3089<\/li>\n\n\n\n<li><strong>Geocoding API<\/strong> \u2026 \u7def\u5ea6\u7d4c\u5ea6\u3068\u4f4f\u6240\u6587\u5b57\u5217\u306e\u5909\u63db\u3002\u3053\u306e\u30b5\u30a4\u30c8\u3067\u306f\u30b5\u30fc\u30d0\u304b\u3089 <code>latlng<\/code> \u3092\u6295\u3052\u3001\u65e5\u672c\u8a9e\u306e\u77ed\u3044\u30e9\u30d9\u30eb\u3092\u5f97\u308b\uff08\u9006\u30b8\u30aa\u30b3\u30fc\u30c9\uff09<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">API \u30ad\u30fc\u306f\u30d6\u30e9\u30a6\u30b6\u7528\u3068\u30b5\u30fc\u30d0\u7528\u3067\u5206\u3051\u308b\u3002\u30ea\u30d5\u30a1\u30e9\u5236\u9650\uff08JS\uff09\u3068 IP \/ API \u5236\u9650\uff08\u30b5\u30fc\u30d0\uff09\u3092\u305d\u308c\u305e\u308c\u4ed8\u3051\u308b\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u30c7\u30fc\u30bf\u306e\u6d41\u308c\uff08\u5168\u4f53\uff09<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u7ba1\u7406\u753b\u9762\u3067\u3001\u52d5\u753b\u3054\u3068\u306b\u7def\u5ea6\u30fb\u7d4c\u5ea6\u30fb\u5730\u70b9\u540d\u30fb\u9806\u5e8f\u3092\u4fdd\u5b58\u3059\u308b<\/li>\n\n\n\n<li>\u4fdd\u5b58\u306e\u30bf\u30a4\u30df\u30f3\u30b0\u3067 Geocoding API \u3092\u547c\u3073\u3001\u300c\u90fd\u9053\u5e9c\u770c\u301c\u753a\u540d\u300d\u306e\u77ed\u6587\u3092\u4f5c\u3063\u3066\u4e00\u7dd2\u306b\u4fdd\u5b58\u3059\u308b<\/li>\n\n\n\n<li>\u516c\u958b\u30da\u30fc\u30b8\u306e\u30bf\u30a4\u30eb\u306f\u3001\u305d\u306e\u77ed\u6587\u3092\u8aad\u3080\u3060\u3051\uff08\u958b\u304f\u305f\u3073\u306b Geocoding \u3057\u306a\u3044\uff09<\/li>\n\n\n\n<li>\u30bf\u30a4\u30eb\u306e\u4f4f\u6240\u30af\u30ea\u30c3\u30af \u2192 Maps JavaScript API \u3067\u300c\u305d\u306e\u52d5\u753b\u306e\u5730\u70b9\u300d\u3060\u3051\u3092\u8868\u793a<\/li>\n\n\n\n<li>MAP \u30bf\u30d6 \u2192 \u540c\u3058 API \u3067\u300c\u3044\u307e\u4e00\u89a7\u306b\u51fa\u3066\u3044\u308b\u52d5\u753b\u306e\u5730\u70b9\u300d\u3092\u307e\u3068\u3081\u3066\u8868\u793a<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">\u5730\u70b9\u306f\u7ba1\u7406\u753b\u9762\u3067\u4fdd\u5b58\u3059\u308b<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u52d5\u753b ID \u306b\u5bfe\u3057\u3066\u3001\u5730\u70b9\u3092\u8907\u6570\u884c\u6301\u305f\u305b\u308b\u3002\u6301\u3064\u306e\u306f\u7def\u5ea6\u3001\u7d4c\u5ea6\u3001\u5730\u70b9\u540d\u3001\u30e1\u30e2\u3001\u8868\u793a\u9806\uff08sort_order\uff09\u3060\u3002\u3053\u306e\u8868\u793a\u9806\u304c\u3001\u3042\u3068\u3067\u5730\u56f3\u4e0a\u306e 1\u30012\u30013 \u306b\u306a\u308b\u3002\u7def\u5ea6\u7d4c\u5ea6\u304c\u4e21\u65b9 0\u3001\u307e\u305f\u306f\u5730\u70b9\u540d\u304c\u7a7a\u306e\u4fdd\u5b58\u306f\u62d2\u5426\u3059\u308b\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4fdd\u5b58\u306e\u305f\u3073\u306b\u9006\u30b8\u30aa\u30b3\u30fc\u30c9\u3092\u8d70\u3089\u305b\u3001\u3067\u304d\u305f\u77ed\u6587\u3092\u5730\u70b9\u306b\u7d10\u3065\u3051\u3066\u7f6e\u304f\u3002\u516c\u958b\u30da\u30fc\u30b8\u304c\u30bf\u30a4\u30eb\u3084\u5730\u56f3\u306e\u672d\u306b\u51fa\u3059\u306e\u306f\u3001\u3053\u306e\u4fdd\u5b58\u6e08\u307f\u77ed\u6587\u3060\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/blog.coppe.jp\/app\/uploads\/2026\/11\/fig-admin-gps.jpg\" alt=\"Admin panel. Click on the map to select a location, and the registered locations will be displayed with their numbers and coordinates.\" class=\"wp-image-2410\"\/><figcaption class=\"wp-element-caption coppe-img-caption coppe-i18n\" data-caption-source=\"figcaption\">An example of the administration screen. Clicking on the map adds a location, and registered locations are listed by number, coordinates, and order. Locations 1-4 on the public side will follow this list order.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0a\u306e\u4f8b\u3067\u306f 4 \u5730\u70b9\u304c\u767b\u9332\u3055\u308c\u3066\u3044\u308b\u3002\u30ea\u30b9\u30c8\u975e\u8868\u793a\u306e\u30c1\u30a7\u30c3\u30af\u306f\u3001\u30ab\u30bf\u30ed\u30b0\u306e\u30bf\u30a4\u30eb\u306b\u306f\u51fa\u3055\u305a\u3001\u5730\u70b9\u30c7\u30fc\u30bf\u3060\u3051\u6b8b\u3057\u305f\u3044\u3068\u304d\u306b\u4f7f\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Geocoding API \u3067\u753a\u540d\u307e\u3067\u306e\u30e9\u30d9\u30eb\u3092\u4f5c\u308b<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Geocoding API \u306f\u3001\u5ea7\u6a19\u306b\u5bfe\u3057\u3066\u300c\u5175\u5eab\u770c\u795e\u6238\u5e02\u4e2d\u592e\u533a\u5e03\u5f15\u753a\u56db\u4e01\u76ee1\u756a1\u53f7\u300d\u306e\u3088\u3046\u306a\u5168\u6587\u3082\u8fd4\u3059\u3002\u30bf\u30a4\u30eb\u306e\u4e0b\u306b\u51fa\u3059\u306b\u306f\u9577\u3044\u3002\u305d\u3053\u3067 <code>address_components<\/code> \u304b\u3089\u90e8\u54c1\u3092\u7a4d\u307f\u3001\u4e01\u76ee\u3088\u308a\u4e0b\u3092\u843d\u3068\u3057\u3066\u4fdd\u5b58\u3059\u308b\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4f8b\uff08\u5207\u308a\u65b9\u306e\u8aac\u660e\u7528\u3002\u3053\u306e\u99c5\u305d\u306e\u3082\u306e\u306e\u767b\u9332\u5024\u3067\u306f\u306a\u3044\uff09\uff1a\u7def\u5ea6 34.694839\u3001\u7d4c\u5ea6 135.194942\u3002<code>language=ja<\/code>\u3001<code>region=jp<\/code> \u3067\u8fd4\u308b\u5168\u6587\u306f\u300c\u5175\u5eab\u770c\u795e\u6238\u5e02\u4e2d\u592e\u533a\u5e03\u5f15\u753a\u56db\u4e01\u76ee1\u756a1\u53f7\u300d\u3002\u6b8b\u3059\u30e9\u30d9\u30eb\u306f\u300c\u5175\u5eab\u770c\u795e\u6238\u5e02\u4e2d\u592e\u533a\u5e03\u5f15\u753a\u300d\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ee5\u4e0b\u306f\u3001\u5b9f\u88c5\u3092\u8ffd\u3048\u308b\u3088\u3046\u306b\u95a2\u6570\u540d\u3092\u89e3\u8aac\u7528\u3078\u7f6e\u304d\u63db\u3048\u305f\u7248\u3060\u3002\u30b3\u30e1\u30f3\u30c8\u306e\u3010Google\u3011\u306f API \u306e\u4e00\u822c\u7684\u306a\u624b\u7d9a\u304d\u3001\u3010\u65b9\u91dd\u3011\u306f\u3053\u306e\u30b5\u30a4\u30c8\u306e\u8868\u793a\u30fb\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6c7a\u3081\u3054\u3068\u3060\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\/\/ \u89e3\u8aac\u7528\u306b\u95a2\u6570\u540d\u30fb\u5b9a\u6570\u540d\u3092\u7f6e\u304d\u63db\u3048\u305f\u7248\u3002\n\/\/ \u3010Google\u3011= Geocoding API \u306e\u4e00\u822c\u7684\u306a\u4f7f\u3044\u65b9\n\/\/ \u3010\u65b9\u91dd\u3011  = \u3053\u306e\u30b5\u30a4\u30c8\u3067\u6c7a\u3081\u305f\u8868\u793a\u30eb\u30fc\u30eb \/ \u30ad\u30e3\u30c3\u30b7\u30e5\u65b9\u91dd\n\nconst TOWN_LABEL_CACHE_SECONDS = 86400 * 30; \/\/ \u3010\u65b9\u91dd\u3011\u7d0430\u65e5\n\n\/**\n * \u7def\u5ea6\u7d4c\u5ea6 \u2192 \u300c\u90fd\u9053\u5e9c\u770c\u301c\u753a\u540d\u300d\u307e\u3067\u306e\u77ed\u3044\u30e9\u30d9\u30eb\u3002\n * \u4e01\u76ee\u30fb\u756a\u5730\u30fb\u53f7\u306f\u51fa\u3055\u306a\u3044\u3002\n *\/\nfunction buildTownLevelLabel(float $lat, float $lon, bool $forceRefresh = false): string\n{\n    \/\/ \u3010\u65b9\u91dd\u30111m\u5f31\u306e\u5dee\u306f\u540c\u3058\u5730\u70b9\u3068\u3057\u3066\u6271\u3046\n    $latKey = round($lat, 5);\n    $lonKey = round($lon, 5);\n    $cacheId = 'town_label_v3:' . hash('sha256', $latKey . ',' . $lonKey);\n\n    if (!$forceRefresh) {\n        $cached = cacheGet($cacheId); \/\/ Drupal cache \u306a\u3069\n        if (is_string($cached) &amp;&amp; $cached !== '') {\n            return $cached === '__EMPTY__' ? '' : $cached;\n        }\n    }\n\n    $apiKey = getMapsApiKey(); \/\/ \u30b5\u30fc\u30d0\u5074\u3067\u4fdd\u6301\n    if ($apiKey === '') {\n        return '';\n    }\n\n    \/\/ \u3010Google\u3011\u9006\u30b8\u30aa\u30b3\u30fc\u30c9\uff08latlng\uff09\n    $url = 'https:\/\/maps.googleapis.com\/maps\/api\/geocode\/json?' . http_build_query(&#91;\n        'latlng'   =&gt; sprintf('%F,%F', $lat, $lon),\n        'language' =&gt; 'ja',   \/\/ \u3010\u65b9\u91dd\u3011\u65e5\u672c\u8a9e\u30e9\u30d9\u30eb\u304c\u6b32\u3057\u3044\n        'region'   =&gt; 'jp',   \/\/ \u3010\u65b9\u91dd\u3011\u65e5\u672c\u306e\u89e3\u91c8\u3092\u512a\u5148\n        'key'      =&gt; $apiKey,\n    ], '', '&amp;', PHP_QUERY_RFC3986);\n\n    $payload = httpGet($url);\n    $decoded = json_decode($payload, true);\n    if (!is_array($decoded)) {\n        return '';\n    }\n\n    $status = $decoded&#91;'status'] ?? '';\n    if ($status !== 'OK') {\n        \/\/ \u3010\u65b9\u91dd\u3011\u5931\u6557\u3082\u30ad\u30e3\u30c3\u30b7\u30e5\u3057\u3001\u7a7a\u632f\u308a\u306e\u9023\u7d9a\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9632\u3050\n        cacheSet($cacheId, '__EMPTY__', TOWN_LABEL_CACHE_SECONDS);\n        return '';\n    }\n\n    $components = $decoded&#91;'results']&#91;0]&#91;'address_components'] ?? &#91;];\n    $label = composeTownLabelFromComponents($components);\n\n    cacheSet(\n        $cacheId,\n        $label !== '' ? $label : '__EMPTY__',\n        TOWN_LABEL_CACHE_SECONDS\n    );\n\n    return $label;\n}\n\n\/**\n * address_components \u304b\u3089\u8868\u793a\u7528\u77ed\u6587\u3092\u7d44\u3080\u3002\n * Google \u306f\u300c\u5168\u6587\u300d\u3082\u8fd4\u3059\u304c\u3001\u4e00\u89a7\u306b\u306f\u9577\u3059\u304e\u308b\u306e\u3067\u4f7f\u308f\u306a\u3044\u3002\u3010\u65b9\u91dd\u3011\n *\/\nfunction composeTownLabelFromComponents(array $components): string\n{\n    $prefecture = firstLongName($components, 'administrative_area_level_1');\n    $locality   = firstLongName($components, 'locality');           \/\/ \u5e02\u306a\u3069\n    $ward       = firstLongName($components, 'sublocality_level_1'); \/\/ \u533a\u306a\u3069\n    $county     = firstLongName($components, 'administrative_area_level_2');\n\n    \/\/ \u5e02\u533a\u306e\u9aa8\u683c\n    $base = '';\n    if ($locality !== '' &amp;&amp; $ward !== '') {\n        $base = (mb_strpos($locality, $ward) !== false)\n            ? $locality\n            : ($locality . $ward);\n    } elseif ($locality !== '') {\n        $base = $locality;\n    } elseif ($county !== '') {\n        \/\/ \u90e1\u30fb\u652f\u5e81\u306a\u3069 locality \u304c\u8584\u3044\u30b1\u30fc\u30b9\u306e\u30d5\u30a9\u30fc\u30eb\u30d0\u30c3\u30af\n        $base = $county;\n    }\n\n    if ($base === '') {\n        $base = $prefecture;\n    }\n\n    \/\/ \u753a\u540d\u30fb\u5b57\u76f8\u5f53\u3092\u8db3\u3059\uff08\u756a\u5730\u306f\u8db3\u3055\u306a\u3044\uff09\n    $withTown = appendNeighborhood($base, $components);\n\n    \/\/ \u90fd\u9053\u5e9c\u770c\u304c\u982d\u306b\u7121\u3051\u308c\u3070\u4ed8\u3051\u308b\n    $withPref = ensurePrefecturePrefix($withTown, $prefecture);\n\n    \/\/ \u300c\u6570\u5b57+\u4e01\u76ee\u300d\u4ee5\u964d\u3092\u843d\u3068\u3059\n    return stripFromChomeOnward($withPref);\n}\n\nfunction appendNeighborhood(string $base, array $components): string\n{\n    $types = &#91;\n        'neighborhood',\n        'sublocality_level_2',\n        'sublocality_level_3',\n        'sublocality_level_4',\n        'sublocality_level_5',\n    ];\n    $parts = &#91;];\n    foreach ($types as $type) {\n        $name = firstLongName($components, $type);\n        if ($name === '' || mb_strpos($base, $name) !== false) {\n            continue;\n        }\n        $parts&#91;] = $name;\n    }\n    return $base . implode('', $parts);\n}\n\nfunction ensurePrefecturePrefix(string $base, string $prefecture): string\n{\n    $base = trim($base);\n    $prefecture = trim($prefecture);\n    if ($base === '') {\n        return $prefecture;\n    }\n    if ($prefecture === '' || mb_strpos($base, $prefecture) === 0) {\n        return $base;\n    }\n    return $prefecture . $base;\n}\n\n\/** \u3010\u65b9\u91dd\u3011\u6700\u521d\u306e\u300c\u25ef\u4e01\u76ee\u300d\u3068\u305d\u306e\u5f8c\u308d\u3092\u6368\u3066\u308b\u3002\u4e01\u76ee\u8868\u8a18\u304c\u7121\u3044\u6570\u5b57\u306f\u305d\u306e\u307e\u307e\u6b8b\u308b *\/\nfunction stripFromChomeOnward(string $s): string\n{\n    $s = trim($s);\n    if ($s === '') {\n        return '';\n    }\n    return trim(preg_replace('\/&#91;0-9]+\u4e01\u76ee.*$\/us', '', $s) ?? $s);\n}\n\nfunction firstLongName(array $components, string $wantType): string\n{\n    foreach ($components as $c) {\n        $types = $c&#91;'types'] ?? &#91;];\n        if (!is_array($types) || !in_array($wantType, $types, true)) {\n            continue;\n        }\n        $long = trim((string) ($c&#91;'long_name'] ?? ''));\n        if ($long !== '') {\n            return $long;\n        }\n    }\n    return '';\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u30dd\u30a4\u30f3\u30c8\u3060\u3051\u629c\u304d\u51fa\u3059\u3068\u3001\u6b21\u306e\u4e09\u3064\u3060\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u3010Google\u3011<code>geocode\/json<\/code> \u306b <code>latlng<\/code> \u3092\u6e21\u3057\u3001<code>results[0].address_components<\/code> \u3092\u8aad\u3080<\/li>\n\n\n\n<li>\u3010\u65b9\u91dd\u3011\u90fd\u9053\u5e9c\u770c\u30fb\u5e02\u533a\u30fb\u753a\u540d\u307e\u3067\u3092\u7d44\u307f\u7acb\u3066\u3001\u6700\u521d\u306e\u300c\u6570\u5b57+\u4e01\u76ee\u300d\u4ee5\u964d\u3092\u6b63\u898f\u8868\u73fe\u3067\u843d\u3068\u3059<\/li>\n\n\n\n<li>\u3010\u65b9\u91dd\u3011\u7def\u5ea6\u7d4c\u5ea6\u3092\u5c0f\u6570\u7b2c5\u4f4d\u3067\u4e38\u3081\u305f\u30ad\u30fc\u3067\u7d0430\u65e5\u30ad\u30e3\u30c3\u30b7\u30e5\u3057\u3001\u7a7a\u7d50\u679c\u3082\u899a\u3048\u308b\uff08\u5931\u6557\u306e\u9023\u6253\u3092\u9632\u3050\uff09<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\u5730\u70b9\u540d\u304c\u52d5\u753b\u30bf\u30a4\u30c8\u30eb\u3068\u307e\u3063\u305f\u304f\u540c\u3058\u6587\u5b57\u5217\u3060\u3051\u3001\u3068\u3044\u3046\u30b1\u30fc\u30b9\u3067\u306f\u3001\u305d\u308c\u3092\u4f4f\u6240\u30e9\u30d9\u30eb\u3068\u3057\u3066\u306f\u51fa\u3055\u306a\u3044\u3002\u30bf\u30a4\u30c8\u30eb\u306e\u7e70\u308a\u8fd4\u3057\u304c\u3001\u5834\u6240\u306b\u898b\u3048\u3066\u3057\u307e\u3046\u305f\u3081\u3060\u3002\u5fc5\u8981\u306a\u3089\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u8aad\u307e\u305a\u306b\u53d6\u308a\u76f4\u3059\u30d5\u30e9\u30b0\uff08\u4e0a\u306e <code>$forceRefresh<\/code>\uff09\u3092\u4f7f\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u516c\u958b\u30da\u30fc\u30b8\u306f\u4fdd\u5b58\u6e08\u307f\u30e9\u30d9\u30eb\u3092\u8aad\u3080<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u30bf\u30a4\u30eb\u3092\u63cf\u304f\u3068\u304d\u3001\u8868\u793a\u306e\u305f\u3073\u306b Geocoding API \u306f\u547c\u3070\u306a\u3044\u3002\u5148\u982d\u306e\u5730\u70b9\u306b\u3064\u3044\u3066\u3001\u6b21\u306e\u9806\u3067\u30e9\u30d9\u30eb\u3092\u6c7a\u3081\u308b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u64ec\u4f3c\u30b3\u30fc\u30c9\nif (\u4fdd\u5b58\u6e08\u307f\u306e\u77ed\u6587\u304c\u3042\u308b) {\n  \u30bf\u30a4\u30eb\u4e0b\u6bb5 = \u4fdd\u5b58\u6e08\u307f\u306e\u77ed\u6587;\n} else if (\u5730\u70b9\u540d\u304c\u3042\u308a\u3001\u304b\u3064\u52d5\u753b\u30bf\u30a4\u30c8\u30eb\u3068\u9055\u3046) {\n  \u30bf\u30a4\u30eb\u4e0b\u6bb5 = \u5730\u70b9\u540d\u304b\u3089\u300c\u6570\u5b57+\u4e01\u76ee\u300d\u4ee5\u964d\u3092\u843d\u3068\u3057\u305f\u3082\u306e;\n} else {\n  \u30bf\u30a4\u30eb\u4e0b\u6bb5 = \u51fa\u3055\u306a\u3044 \/ GPS \u30a2\u30a4\u30b3\u30f3\u306e\u307f;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u540c\u6642\u306b\u3001\u305d\u306e\u52d5\u753b\u306e\u5168\u5730\u70b9\uff08\u7def\u5ea6\u7d4c\u5ea6\u3068\u8868\u793a\u7528\u4f4f\u6240\uff09\u3092 JSON \u3068\u3057\u3066\u30bf\u30a4\u30eb\u5074\u306b\u57cb\u3081\u8fbc\u3093\u3067\u304a\u304f\u3002\u5730\u56f3\u3092\u958b\u304f\u30b9\u30af\u30ea\u30d7\u30c8\u306f\u3001\u3053\u306e JSON \u3060\u3051\u3092\u8aad\u3081\u3070\u3088\u3044\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u30bf\u30a4\u30eb\u306e\u4f4f\u6240\u304b\u3089\u3001\u305d\u306e\u52d5\u753b\u306e\u5730\u70b9\u5730\u56f3\u3092\u958b\u304f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">PANEL \u3067\u30bf\u30a4\u30eb\u4e0b\u306e\u4f4f\u6240\u3092\u62bc\u3059\u3068\u3001\u30e2\u30fc\u30c0\u30eb\u304c\u958b\u304d\u3001Maps JavaScript API \u306e\u5730\u56f3\u304c\u305d\u306e\u52d5\u753b\u306e\u5730\u70b9\u3060\u3051\u3092\u30d7\u30ed\u30c3\u30c8\u3059\u308b\u3002\u4e00\u89a7\u5168\u4f53\u306b\u306f\u5e83\u3052\u306a\u3044\u3002\u5730\u70b9\u304c2\u4ef6\u4ee5\u4e0a\u306a\u3089\u3001\u4fdd\u5b58\u9806\u306b 1 \u304b\u3089\u756a\u53f7\u3092\u632f\u308b\u3002\u30d4\u30f3\u3068\u4e0b\u306e\u672d\u304c\u540c\u3058\u756a\u53f7\u3092\u5171\u6709\u3059\u308b\u30021\u4ef6\u3060\u3051\u306e\u3068\u304d\u306f\u756a\u53f7\u3092\u4ed8\u3051\u305a\u3001\u958b\u3044\u305f\u76f4\u5f8c\u306e\u30ba\u30fc\u30e0\u3092 15 \u306b\u3059\u308b\u3002\u8907\u6570\u4ef6\u306a\u3089\u5168\u5730\u70b9\u306b <code>fitBounds<\/code> \u3059\u308b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u30bf\u30a4\u30eb\u304b\u3089\u958b\u304f\u5730\u56f3\uff08\u305d\u306e\u52d5\u753b\u306e\u5730\u70b9\u3060\u3051\uff09\nconst map = new google.maps.Map(canvas, {\n  zoom: 13,\n  center: { lat: 34.678541, lng: 135.010225 }, \/\/ \u521d\u671f\u5024\u3002\u76f4\u5f8c\u306b fitBounds \u3059\u308b\n  mapTypeId: google.maps.MapTypeId.HYBRID,     \/\/ \u885b\u661f + \u9053\u8def\u30fb\u5730\u540d\n  streetViewControl: true,\n  mapTypeControl: false,                      \/\/ \u6a19\u6e96UI\u306f\u51fa\u3055\u305a\u3001\u81ea\u524d\u30dc\u30bf\u30f3\u3067\u5207\u66ff\n});\n\n\/\/ \u9053\u8def\u5730\u56f3 \u2194 \u885b\u661f\uff08\u30cf\u30a4\u30d6\u30ea\u30c3\u30c9\uff09\nmap.setMapTypeId(\n  isRoadmapNow\n    ? google.maps.MapTypeId.HYBRID\n    : google.maps.MapTypeId.ROADMAP\n);\n\n\/\/ \u756a\u53f7\u672d \/ \u30d4\u30f3\u62bc\u4e0b \u2192 \u305d\u306e\u5730\u70b9\u3078\nmap.panTo(marker.getPosition());\nconst z = map.getZoom();\nmap.setZoom(typeof z === 'number' ? Math.max(z, 17) : 17);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u958b\u3044\u305f\u76f4\u5f8c\u306e\u5730\u56f3\u7a2e\u5225\u306f <code>HYBRID<\/code>\uff08\u885b\u661f\u5199\u771f\u306b\u9053\u8def\u3068\u5730\u540d\uff09\u3002\u81ea\u524d\u30dc\u30bf\u30f3\u3067 <code>ROADMAP<\/code> \u3068\u5f80\u5fa9\u3057\u3001\u53f3\u4e0b\u306e\u30da\u30b0\u30de\u30f3\u3092\u9053\u3078\u7f6e\u304f\u3068\u30b9\u30c8\u30ea\u30fc\u30c8\u30d3\u30e5\u30fc\u306b\u306a\u308b\u3002\u756a\u53f7\u304b\u30d4\u30f3\u3092\u62bc\u3059\u3068 <code>panTo<\/code> \u3057\u3001\u30ba\u30fc\u30e0\u304c 17 \u672a\u6e80\u306a\u3089 17 \u307e\u3067\u4e0a\u3052\u308b\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u672d\u306e\u6587\u8a00\u306f\u3001\u4fdd\u5b58\u6e08\u307f\u306e\u8868\u793a\u7528\u4f4f\u6240\u3092\u5148\u306b\u4f7f\u3046\u3002\u7a7a\u306e\u5730\u70b9\u3060\u3051\u3001\u30e2\u30fc\u30c0\u30eb\u3092\u958b\u3044\u305f\u30bf\u30a4\u30df\u30f3\u30b0\u3067\u30d6\u30e9\u30a6\u30b6\u5074 Geocoder \u306b\u30d5\u30a9\u30fc\u30eb\u30d0\u30c3\u30af\u3059\u308b\u3002\u30bf\u30a4\u30eb\u4e0b\u6bb5\u305d\u306e\u3082\u306e\u306f\u3001\u958b\u304f\u305f\u3073\u306b\u53d6\u308a\u76f4\u3055\u306a\u3044\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">MAP \u30bf\u30d6\u3067\u4e00\u89a7\u306e\u5730\u70b9\u3092\u307e\u3068\u3081\u3066\u898b\u308b<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">MAP \u306f\u5225\u306e\u5730\u56f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3060\u3002\u30d7\u30ed\u30c3\u30c8\u5bfe\u8c61\u306f\u3001\u300c\u3044\u307e PANEL \u5074\u3067\u898b\u3048\u3066\u3044\u308b\u30bf\u30a4\u30eb\u300d\u306b\u4ed8\u3044\u305f\u5730\u70b9\u3060\u3051\u3002\u691c\u7d22\u3084\u30c1\u30e3\u30f3\u30cd\u30eb\u7d5e\u308a\u8fbc\u307f\u3067\u30bf\u30a4\u30eb\u304c\u96a0\u308c\u308c\u3070\u3001\u305d\u306e\u30d4\u30f3\u3082\u5730\u56f3\u304b\u3089\u5916\u308c\u308b\u3002\u30d4\u30f3\u3092\u62bc\u3059\u3068\u3001\u305d\u306e\u52d5\u753b\u306e\u30ab\u30fc\u30c9\u3092\u5730\u56f3\u306e\u4e0a\u306b\u51fa\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5730\u70b9\u306f\u8fd1\u757f\u306e\u5916\u3084\u6d77\u5916\u306b\u3082\u3042\u308b\u3002\u5168\u30d4\u30f3\u306b <code>fitBounds<\/code> \u3059\u308b\u3068\u3001\u898b\u305f\u3044\u5730\u57df\u304c\u7aef\u306e\u5c0f\u3055\u306a\u584a\u306b\u306a\u308b\u3002\u6700\u521d\u306e\u7bc4\u56f2\u306f\u8fd1\u757f\u306e\u304a\u304a\u3088\u305d\u306e\u77e9\u5f62\u306b\u5165\u308b\u70b9\u3060\u3051\u3092\u4f7f\u3046\u3002\u77e9\u5f62\u5185\u306b\u70b9\u304c\u7121\u3044\u3068\u304d\u3060\u3051\u5168\u70b9\u306b\u5e83\u3052\u308b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u4e00\u89a7\u5168\u4f53\u306e MAP\uff08\u3044\u307e\u898b\u3048\u3066\u3044\u308b\u30bf\u30a4\u30eb\u306e\u5730\u70b9\u3060\u3051\uff09\nconst KANSAI = { south: 33.4, west: 134.5, north: 35.8, east: 136.9 };\n\nfunction pickInitialPoints(allPoints) {\n  const inKansai = allPoints.filter((p) =&gt;\n    p.lat &gt;= KANSAI.south &amp;&amp; p.lat &lt;= KANSAI.north &amp;&amp;\n    p.lng &gt;= KANSAI.west &amp;&amp; p.lng &lt;= KANSAI.east\n  );\n  \/\/ \u8fd1\u757f\u306b1\u70b9\u3082\u7121\u3051\u308c\u3070\u5168\u70b9\uff08\u6d77\u5916\u3060\u3051\u3001\u306a\u3069\uff09\n  return inKansai.length &gt; 0 ? inKansai : allPoints;\n}\n\nmap.fitBounds(boundsFrom(pickInitialPoints(allPoints)), 40);\ngoogle.maps.event.addListenerOnce(map, 'idle', () =&gt; {\n  if (map.getZoom() &gt; 16) map.setZoom(16); \/\/ \u8857\u533a\u5c4b\u6839\u307e\u3067\u5bc4\u3089\u306a\u3044\n});<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">MAP \u3092\u958b\u3044\u305f\u76f4\u5f8c\u306e\u5730\u56f3\u7a2e\u5225\u306f <code>ROADMAP<\/code> \u3060\u3002\u30bf\u30a4\u30eb\u304b\u3089\u958b\u304f\u30e2\u30fc\u30c0\u30eb\u304c <code>HYBRID<\/code> \u306a\u306e\u306f\u3001\u300c1\u672c\u306e\u30eb\u30fc\u30c8\u3092\u5730\u5f62\u8fbc\u307f\u3067\u898b\u308b\u300d\u7528\u9014\u3068\u3001\u300c\u30ab\u30bf\u30ed\u30b0\u5168\u4f53\u306e\u5206\u5e03\u3092\u898b\u308b\u300d\u7528\u9014\u3092\u5206\u3051\u305f\u305f\u3081\u3060\u3002\u3069\u3061\u3089\u3082\u9053\u8def\u5730\u56f3 \/ \u885b\u661f\u5199\u771f \/ \u30b9\u30c8\u30ea\u30fc\u30c8\u30d3\u30e5\u30fc\u3092\u5207\u308a\u66ff\u3048\u3089\u308c\u308b\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u5225\u306e\u30ab\u30bf\u30ed\u30b0\u3078\u6301\u3061\u51fa\u3059\u3068\u304d<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u52d5\u753b\u3054\u3068\u306b\u7def\u5ea6\u7d4c\u5ea6\u3092\u8907\u6570\u3001\u9806\u5e8f\u4ed8\u304d\u3067\u4fdd\u5b58\u3059\u308b<\/li>\n\n\n\n<li>\u4fdd\u5b58\u6642\u306b Geocoding API \u3092 <code>language=ja<\/code>\u3001<code>region=jp<\/code> \u3067\u4e00\u5ea6\u3060\u3051\u547c\u3076<\/li>\n\n\n\n<li>\u90fd\u9053\u5e9c\u770c\u30fb\u5e02\u533a\u753a\u6751\u30fb\u753a\u540d\u3092\u7a4d\u307f\u3001\u6700\u521d\u306e\u300c\u6570\u5b57+\u4e01\u76ee\u300d\u4ee5\u964d\u3092\u843d\u3068\u3059<\/li>\n\n\n\n<li>\u77ed\u6587\u3092\u4fdd\u5b58\u3057\u3001\u516c\u958b\u306e\u30bf\u30a4\u30eb\u3068\u5730\u56f3\u306f\u305d\u308c\u3092\u8aad\u3080<\/li>\n\n\n\n<li>\u4e38\u3081\u305f\u7def\u5ea6\u7d4c\u5ea6\u3092\u30ad\u30fc\u306b\u7d50\u679c\u3092\u899a\u3048\u3001\u7a7a\u306e\u7d50\u679c\u3082\u899a\u3048\u308b<\/li>\n\n\n\n<li>\u30bf\u30a4\u30eb\u306e\u4f4f\u6240\u3067\u306f\u305d\u306e\u52d5\u753b\u306e\u5730\u70b9\u3060\u3051\u3092\u756a\u53f7\u4ed8\u304d\u3067\u51fa\u3059\u3002\u5730\u56f3\u7a2e\u5225\u3068\u30b9\u30c8\u30ea\u30fc\u30c8\u30d3\u30e5\u30fc\u3092\u5207\u308a\u66ff\u3048\u308b<\/li>\n\n\n\n<li>\u4e00\u89a7\u5168\u4f53\u306e\u5730\u56f3\u306f\u3001\u898b\u305b\u305f\u3044\u5730\u57df\u306e\u5185\u5074\u306e\u70b9\u3060\u3051\u3067\u521d\u671f\u7bc4\u56f2\u3092\u6c7a\u3081\u308b\u3002\u30ba\u30fc\u30e0\u4e0a\u9650\u3082\u6c7a\u3081\u308b<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e\u77ed\u6587\u306f\u3001\u4e00\u89a7\u3068\u5730\u56f3\u3067\u5834\u6240\u306e\u3042\u305f\u308a\u3092\u793a\u3059\u305f\u3081\u306e\u3082\u306e\u3060\u3002\u914d\u9001\u5148\u3084\u3001\u73fe\u5730\u3067\u756a\u5730\u307e\u3067\u6848\u5185\u3059\u308b\u753b\u9762\u306b\u306f\u3001\u5225\u306e\u6587\u5b57\u5217\u3092\u4f7f\u3046\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This document outlines the implementation steps for adding the Maps JavaScript API and Geocoding API to the GeoRunning YouTube catalog, linking video locations with town name labels and maps.<\/p>","protected":false},"author":2,"featured_media":2416,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2393","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.coppe.jp\/en\/wp-json\/wp\/v2\/posts\/2393","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.coppe.jp\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.coppe.jp\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.coppe.jp\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.coppe.jp\/en\/wp-json\/wp\/v2\/comments?post=2393"}],"version-history":[{"count":12,"href":"https:\/\/blog.coppe.jp\/en\/wp-json\/wp\/v2\/posts\/2393\/revisions"}],"predecessor-version":[{"id":2419,"href":"https:\/\/blog.coppe.jp\/en\/wp-json\/wp\/v2\/posts\/2393\/revisions\/2419"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.coppe.jp\/en\/wp-json\/wp\/v2\/media\/2416"}],"wp:attachment":[{"href":"https:\/\/blog.coppe.jp\/en\/wp-json\/wp\/v2\/media?parent=2393"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.coppe.jp\/en\/wp-json\/wp\/v2\/categories?post=2393"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.coppe.jp\/en\/wp-json\/wp\/v2\/tags?post=2393"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}