<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>山とカンツォーネ</title><link>https://montagna-katokeyci.github.io/oohc/</link><description>Recent content on 山とカンツォーネ</description><generator>Hugo</generator><language>ja-jp</language><lastBuildDate>Sun, 11 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://montagna-katokeyci.github.io/oohc/index.xml" rel="self" type="application/rss+xml"/><item><title>Part 2 : 小雲取谷の道</title><link>https://montagna-katokeyci.github.io/oohc/posts/2026-10-11/</link><pubDate>Sun, 11 Oct 2026 00:00:00 +0000</pubDate><guid>https://montagna-katokeyci.github.io/oohc/posts/2026-10-11/</guid><description>&lt;p&gt;先週打ち切ったco1330mからヒネキカルメ窪と日向窪の二又（co1520）までたどり、中尾根を雲取山荘の巻き道に上がった。&lt;br&gt;
小雲取谷には小径がある。ときに沢筋を見下ろし・ときに水線に下りる細道は険しい。出合いから大滝までは左岸、大滝から二又までは右岸についている。&lt;br&gt;
道の性格や規格が不明なので、小雲取谷径路と呼ばず「小雲取谷の道」とした。撤収路とした中尾根にも道跡が残っている。&lt;/p&gt;
&lt;hr&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;項目&lt;/th&gt;
&lt;th style="text-align: left"&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;記録日&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026年10月11日（日）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;天候&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;晴れ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;パーティ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;モンターニャ単独&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;アクセス&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;西東京バスで東日原バス停&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;行程&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;東日原バス停、日原林道、長沢谷下降点、二軒小屋尾根乗越、ゴンエ尾根、ゴンエ尾根P1560、小雲取谷、小雲取谷の道、大滝、ヨケノ滝、中尾根（ヒネキカルメ窪・日向窪中尾根）、雲取山荘巻き道、石尾根、鴨沢コース、留浦バス停&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="コースタイム"&gt;コースタイム&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;記入中&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="コースマップ"&gt;コースマップ&lt;/h3&gt;
&lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /&gt;
&lt;style&gt;
.gpx-container {
width: 100%;
margin: 1.5rem 0;
border: 1px solid #ccc;
border-radius: 8px;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
font-family: sans-serif;
}
.gpx-map { height: 380px; width: 100%; }
.gpx-summary {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
background: #f8f9fa;
padding: 8px 10px;
border-top: 1px solid #e0e0e0;
border-bottom: 1px solid #e0e0e0;
font-size: 0.8rem;
color: #333;
overflow-x: auto;
white-space: nowrap;
}
.gpx-summary-item {
margin: 0 4px;
}
.gpx-summary-item strong {
color: #007bff;
font-size: 0.95rem;
margin-left: 2px;
}
.gpx-chart-wrapper {
height: 180px;
width: 100%;
padding: 10px;
background: #fafafa;
box-sizing: border-box;
}
.start-marker-icon, .goal-marker-icon {
background: none;
border: none;
font-weight: bold;
font-size: 11px;
color: #ffffff;
text-align: center;
line-height: 18px;
}
&lt;/style&gt;
&lt;div class="gpx-container"&gt;
&lt;div id="map-cde2d6d4" class="gpx-map"&gt;&lt;/div&gt;
&lt;div id="summary-cde2d6d4" class="gpx-summary"&gt;
&lt;div class="gpx-summary-item"&gt;総距離:&lt;strong id="sum-dist-cde2d6d4"&gt;-&lt;/strong&gt; km&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高上り:&lt;strong id="sum-up-cde2d6d4"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高下り:&lt;strong id="sum-down-cde2d6d4"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最高標高:&lt;strong id="sum-max-cde2d6d4"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最低標高:&lt;strong id="sum-min-cde2d6d4"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;/div&gt;
&lt;div class="gpx-chart-wrapper"&gt;
&lt;canvas id="chart-cde2d6d4"&gt;&lt;/canvas&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"&gt;&lt;/script&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-gpx/1.7.0/gpx.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
&lt;script&gt;
window.addEventListener('load', function() {
var gpxUrl = '\/oohc\/posts\/2026-10-11\/20261011_20261011.gpx';
var map = L.map('map-cde2d6d4').setView([0, 0], 10);
L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
attribution: '&lt;a href="https://maps.gsi.go.jp/development/ichiran.html" target="_blank"&gt;国土地理院&lt;/a&gt;',
maxZoom: 18
}).addTo(map);
L.control.scale({
imperial: false,
position: 'bottomleft'
}).addTo(map);
var hoverMarker = null;
var trackPoints = [];
var timeLabels = [];
var ctx = document.getElementById('chart-cde2d6d4').getContext('2d');
var chart = new Chart(ctx, {
type: 'line',
data: {
datasets: [{
label: '標高 (m)',
data: [],
borderColor: '#007bff',
backgroundColor: 'rgba(0, 123, 255, 0.1)',
fill: true,
borderWidth: 1.5,
pointRadius: 0,
pointHoverRadius: 6,
tension: 0.1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
interaction: { mode: 'index', intersect: false },
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
title: function(items) {
var index = items[0].dataIndex;
var timeStr = timeLabels[index] || '';
var distStr = items[0].raw.x.toFixed(2) + ' km';
return timeStr ? '時刻: ' + timeStr + '（距離: ' + distStr + '）' : '距離: ' + distStr;
},
label: function(item) {
return '標高: ' + item.raw.y + ' m';
}
}
}
},
scales: {
x: {
type: 'linear',
display: true,
title: { display: true, text: '距離 (km)', font: { size: 10 } },
ticks: {
font: { size: 10 }
},
grid: { color: 'rgba(0, 0, 0, 0.05)' }
},
y: {
display: true,
title: { display: true, text: '標高 (m)', font: { size: 10 } },
ticks: { font: { size: 10 } },
grid: { color: 'rgba(0, 0, 0, 0.05)' }
}
},
onHover: function(event, activeElements) {
if (activeElements &amp;&amp; activeElements.length &gt; 0) {
var index = activeElements[0].index;
updateHoverMarker(index);
}
}
}
});
function updateHoverMarker(index) {
var pt = trackPoints[index];
if (pt) {
if (!hoverMarker) {
hoverMarker = L.circleMarker([pt.lat, pt.lng], {
radius: 8,
fillColor: '#00ffff',
color: '#ffffff',
weight: 3,
opacity: 1,
fillOpacity: 1
}).addTo(map);
} else {
hoverMarker.setLatLng([pt.lat, pt.lng]);
}
}
}
function extractTrackData(layer) {
var pts = [];
var polylines = [];
if (typeof layer.getLatLngs === 'function') {
var latlngs = layer.getLatLngs();
var flat = Array.isArray(latlngs[0]) ? latlngs.flat(Infinity) : latlngs;
flat.forEach(function(p) {
if (p &amp;&amp; typeof p.lat === 'number') {
pts.push({ lat: p.lat, lng: p.lng });
}
});
if (layer instanceof L.Polyline) {
polylines.push(layer);
}
} else if (typeof layer.eachLayer === 'function') {
layer.eachLayer(function(child) {
var res = extractTrackData(child);
pts = pts.concat(res.pts);
polylines = polylines.concat(res.polylines);
});
}
return { pts: pts, polylines: polylines };
}
fetch(gpxUrl)
.then(function(response) { return response.text(); })
.then(function(xmlText) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlText, "text/xml");
var trkpts = xmlDoc.getElementsByTagName("trkpt");
for (var i = 0; i &lt; trkpts.length; i++) {
var timeNode = trkpts[i].getElementsByTagName("time")[0];
if (timeNode) {
var dateObj = new Date(timeNode.textContent);
var timeStr = dateObj.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
timeLabels.push(timeStr);
} else {
timeLabels.push('');
}
}
})
.catch(function(err) {
console.error("GPX Time Parsing Error:", err);
});
new L.GPX(gpxUrl, {
async: true,
polyline_options: { color: '#ff3300', weight: 5, opacity: 0.8 },
marker_options: { startIconUrl: null, endIconUrl: null, wptIconUrls: null }
}).on('loaded', function(e) {
var gpx = e.target;
map.fitBounds(gpx.getBounds());
var totalDistMeters = gpx.get_distance();
var distKmNum = totalDistMeters / 1000;
var distKmStr = distKmNum.toFixed(2);
var maxEle = Math.round(gpx.get_elevation_max());
var minEle = Math.round(gpx.get_elevation_min());
var gainEle = Math.round(gpx.get_elevation_gain());
var lossEle = Math.round(gpx.get_elevation_loss());
document.getElementById('sum-dist-cde2d6d4').innerText = distKmStr;
document.getElementById('sum-up-cde2d6d4').innerText = gainEle;
document.getElementById('sum-down-cde2d6d4').innerText = lossEle;
document.getElementById('sum-max-cde2d6d4').innerText = maxEle;
document.getElementById('sum-min-cde2d6d4').innerText = minEle;
var eleData = gpx.get_elevation_data();
var chartDataPoints = [];
var extracted = extractTrackData(gpx);
trackPoints = extracted.pts;
if (trackPoints.length &gt; 0) {
var startPt = trackPoints[0];
var endPt = trackPoints[trackPoints.length - 1];
L.circleMarker([startPt.lat, startPt.lng], {
radius: 9,
fillColor: '#28a745',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('スタート', { permanent: false, direction: 'top' });
L.circleMarker([endPt.lat, endPt.lng], {
radius: 9,
fillColor: '#dc3545',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('ゴール', { permanent: false, direction: 'top' });
}
eleData.forEach(function(item) {
var dist = typeof item[0] === 'number' ? item[0] : parseFloat(item[0]);
var ele = Math.round(item[1]);
chartDataPoints.push({
x: parseFloat(dist.toFixed(2)),
y: ele
});
});
var dynamicStepSize = 1.0;
if (distKmNum &lt;= 5) {
dynamicStepSize = 0.5;
} else if (distKmNum &lt;= 20) {
dynamicStepSize = 1.0;
} else if (distKmNum &lt;= 40) {
dynamicStepSize = 5.0;
} else {
dynamicStepSize = 10.0;
}
chart.options.scales.x.max = distKmNum;
var allowedTicks = [];
for (var v = 0; v &lt; distKmNum; v += dynamicStepSize) {
allowedTicks.push(parseFloat(v.toFixed(1)));
}
chart.options.scales.x.ticks.callback = function(value) {
for (var i = 0; i &lt; allowedTicks.length; i++) {
if (Math.abs(value - allowedTicks[i]) &lt; 0.01) {
return value + ' km';
}
}
return '';
};
chart.options.scales.x.afterBuildTicks = function(axis) {
axis.ticks = allowedTicks.map(function(val) {
return { value: val };
});
};
chart.data.datasets[0].data = chartDataPoints;
chart.update();
extracted.polylines.forEach(function(polyline) {
polyline.on('mousemove', function(ev) {
if (!trackPoints.length) return;
var mouseLatLng = ev.latlng;
var closestIndex = 0;
var minDist = Infinity;
for (var i = 0; i &lt; trackPoints.length; i++) {
var d = mouseLatLng.distanceTo(L.latLng(trackPoints[i].lat, trackPoints[i].lng));
if (d &lt; minDist) {
minDist = d;
closestIndex = i;
}
}
updateHoverMarker(closestIndex);
chart.setActiveElements([{ datasetIndex: 0, index: closestIndex }]);
chart.tooltip.setActiveElements([{ datasetIndex: 0, index: closestIndex }], { x: 0, y: 0 });
chart.update();
});
});
}).addTo(map);
});
&lt;/script&gt;
&lt;hr&gt;
&lt;h3 id="山行記録"&gt;山行記録&lt;/h3&gt;
&lt;p&gt;Part1のタイトルをはじめは「小雲取谷」としたが、今回も繋いで歩いて明瞭な踏み跡が続くのを確認した。したがって「小雲取谷の道」と改題した。&lt;/p&gt;</description></item><item><title>Part 1 : 小雲取谷の道</title><link>https://montagna-katokeyci.github.io/oohc/posts/2026-10-03/</link><pubDate>Sat, 03 Oct 2026 00:00:00 +0000</pubDate><guid>https://montagna-katokeyci.github.io/oohc/posts/2026-10-03/</guid><description>&lt;p&gt;天候不順の夏は思うように沢筋を歩けず、やっと晴れ間がのぞくらしいので小雲取谷にチャレンジしたが終日曇天。「記録的な長雨」のあとで水量多く気温が低く、水線沿いを放棄したので中途半端に難しくなった。谷に沿って崖っぷちの踏み跡が続くのは知らなかった。&lt;/p&gt;
&lt;hr&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;項目&lt;/th&gt;
&lt;th style="text-align: left"&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;記録日&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026年10月3日（土）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;天候&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;曇り→小雨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;パーティ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;モンターニャ単独&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;アクセス&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;西東京バスで東日原バス停&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;行程&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;東日原バス停、日原林道、長沢谷下降点、二軒小屋尾根乗越、大ダワ林道、モミソ窪、小雲取谷出合、小雲取谷、ゴンエ尾根、日原林道、東日原バス停&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="コースタイム"&gt;コースタイム&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;08:07～東日原バス停スタート&lt;/li&gt;
&lt;li&gt;10:02〜二軒小屋尾根乗越〜10:15&lt;/li&gt;
&lt;li&gt;11:04～モミソ窪周辺（大ダワ林道より上の踏み跡）～11:23&lt;/li&gt;
&lt;li&gt;11:58〜小雲取谷出合い〜12:15&lt;/li&gt;
&lt;li&gt;14:05～小雲取大滝？下と右岸高みの平場、co1320から40～15:22&lt;/li&gt;
&lt;li&gt;15:42～ゴンエ尾根に上がる&lt;/li&gt;
&lt;li&gt;16:32～二軒小屋尾根乗越&lt;/li&gt;
&lt;li&gt;16:37～長沢谷（洗濯）～16:50&lt;/li&gt;
&lt;li&gt;18:34～東日原バス停フィニッシュ&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="コースマップ"&gt;コースマップ&lt;/h3&gt;
&lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /&gt;
&lt;style&gt;
.gpx-container {
width: 100%;
margin: 1.5rem 0;
border: 1px solid #ccc;
border-radius: 8px;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
font-family: sans-serif;
}
.gpx-map { height: 380px; width: 100%; }
.gpx-summary {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
background: #f8f9fa;
padding: 8px 10px;
border-top: 1px solid #e0e0e0;
border-bottom: 1px solid #e0e0e0;
font-size: 0.8rem;
color: #333;
overflow-x: auto;
white-space: nowrap;
}
.gpx-summary-item {
margin: 0 4px;
}
.gpx-summary-item strong {
color: #007bff;
font-size: 0.95rem;
margin-left: 2px;
}
.gpx-chart-wrapper {
height: 180px;
width: 100%;
padding: 10px;
background: #fafafa;
box-sizing: border-box;
}
.start-marker-icon, .goal-marker-icon {
background: none;
border: none;
font-weight: bold;
font-size: 11px;
color: #ffffff;
text-align: center;
line-height: 18px;
}
&lt;/style&gt;
&lt;div class="gpx-container"&gt;
&lt;div id="map-3e883f9c" class="gpx-map"&gt;&lt;/div&gt;
&lt;div id="summary-3e883f9c" class="gpx-summary"&gt;
&lt;div class="gpx-summary-item"&gt;総距離:&lt;strong id="sum-dist-3e883f9c"&gt;-&lt;/strong&gt; km&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高上り:&lt;strong id="sum-up-3e883f9c"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高下り:&lt;strong id="sum-down-3e883f9c"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最高標高:&lt;strong id="sum-max-3e883f9c"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最低標高:&lt;strong id="sum-min-3e883f9c"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;/div&gt;
&lt;div class="gpx-chart-wrapper"&gt;
&lt;canvas id="chart-3e883f9c"&gt;&lt;/canvas&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"&gt;&lt;/script&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-gpx/1.7.0/gpx.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
&lt;script&gt;
window.addEventListener('load', function() {
var gpxUrl = '\/oohc\/posts\/2026-10-03\/20261003_20261003.gpx';
var map = L.map('map-3e883f9c').setView([0, 0], 10);
L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
attribution: '&lt;a href="https://maps.gsi.go.jp/development/ichiran.html" target="_blank"&gt;国土地理院&lt;/a&gt;',
maxZoom: 18
}).addTo(map);
L.control.scale({
imperial: false,
position: 'bottomleft'
}).addTo(map);
var hoverMarker = null;
var trackPoints = [];
var timeLabels = [];
var ctx = document.getElementById('chart-3e883f9c').getContext('2d');
var chart = new Chart(ctx, {
type: 'line',
data: {
datasets: [{
label: '標高 (m)',
data: [],
borderColor: '#007bff',
backgroundColor: 'rgba(0, 123, 255, 0.1)',
fill: true,
borderWidth: 1.5,
pointRadius: 0,
pointHoverRadius: 6,
tension: 0.1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
interaction: { mode: 'index', intersect: false },
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
title: function(items) {
var index = items[0].dataIndex;
var timeStr = timeLabels[index] || '';
var distStr = items[0].raw.x.toFixed(2) + ' km';
return timeStr ? '時刻: ' + timeStr + '（距離: ' + distStr + '）' : '距離: ' + distStr;
},
label: function(item) {
return '標高: ' + item.raw.y + ' m';
}
}
}
},
scales: {
x: {
type: 'linear',
display: true,
title: { display: true, text: '距離 (km)', font: { size: 10 } },
ticks: {
font: { size: 10 }
},
grid: { color: 'rgba(0, 0, 0, 0.05)' }
},
y: {
display: true,
title: { display: true, text: '標高 (m)', font: { size: 10 } },
ticks: { font: { size: 10 } },
grid: { color: 'rgba(0, 0, 0, 0.05)' }
}
},
onHover: function(event, activeElements) {
if (activeElements &amp;&amp; activeElements.length &gt; 0) {
var index = activeElements[0].index;
updateHoverMarker(index);
}
}
}
});
function updateHoverMarker(index) {
var pt = trackPoints[index];
if (pt) {
if (!hoverMarker) {
hoverMarker = L.circleMarker([pt.lat, pt.lng], {
radius: 8,
fillColor: '#00ffff',
color: '#ffffff',
weight: 3,
opacity: 1,
fillOpacity: 1
}).addTo(map);
} else {
hoverMarker.setLatLng([pt.lat, pt.lng]);
}
}
}
function extractTrackData(layer) {
var pts = [];
var polylines = [];
if (typeof layer.getLatLngs === 'function') {
var latlngs = layer.getLatLngs();
var flat = Array.isArray(latlngs[0]) ? latlngs.flat(Infinity) : latlngs;
flat.forEach(function(p) {
if (p &amp;&amp; typeof p.lat === 'number') {
pts.push({ lat: p.lat, lng: p.lng });
}
});
if (layer instanceof L.Polyline) {
polylines.push(layer);
}
} else if (typeof layer.eachLayer === 'function') {
layer.eachLayer(function(child) {
var res = extractTrackData(child);
pts = pts.concat(res.pts);
polylines = polylines.concat(res.polylines);
});
}
return { pts: pts, polylines: polylines };
}
fetch(gpxUrl)
.then(function(response) { return response.text(); })
.then(function(xmlText) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlText, "text/xml");
var trkpts = xmlDoc.getElementsByTagName("trkpt");
for (var i = 0; i &lt; trkpts.length; i++) {
var timeNode = trkpts[i].getElementsByTagName("time")[0];
if (timeNode) {
var dateObj = new Date(timeNode.textContent);
var timeStr = dateObj.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
timeLabels.push(timeStr);
} else {
timeLabels.push('');
}
}
})
.catch(function(err) {
console.error("GPX Time Parsing Error:", err);
});
new L.GPX(gpxUrl, {
async: true,
polyline_options: { color: '#ff3300', weight: 5, opacity: 0.8 },
marker_options: { startIconUrl: null, endIconUrl: null, wptIconUrls: null }
}).on('loaded', function(e) {
var gpx = e.target;
map.fitBounds(gpx.getBounds());
var totalDistMeters = gpx.get_distance();
var distKmNum = totalDistMeters / 1000;
var distKmStr = distKmNum.toFixed(2);
var maxEle = Math.round(gpx.get_elevation_max());
var minEle = Math.round(gpx.get_elevation_min());
var gainEle = Math.round(gpx.get_elevation_gain());
var lossEle = Math.round(gpx.get_elevation_loss());
document.getElementById('sum-dist-3e883f9c').innerText = distKmStr;
document.getElementById('sum-up-3e883f9c').innerText = gainEle;
document.getElementById('sum-down-3e883f9c').innerText = lossEle;
document.getElementById('sum-max-3e883f9c').innerText = maxEle;
document.getElementById('sum-min-3e883f9c').innerText = minEle;
var eleData = gpx.get_elevation_data();
var chartDataPoints = [];
var extracted = extractTrackData(gpx);
trackPoints = extracted.pts;
if (trackPoints.length &gt; 0) {
var startPt = trackPoints[0];
var endPt = trackPoints[trackPoints.length - 1];
L.circleMarker([startPt.lat, startPt.lng], {
radius: 9,
fillColor: '#28a745',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('スタート', { permanent: false, direction: 'top' });
L.circleMarker([endPt.lat, endPt.lng], {
radius: 9,
fillColor: '#dc3545',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('ゴール', { permanent: false, direction: 'top' });
}
eleData.forEach(function(item) {
var dist = typeof item[0] === 'number' ? item[0] : parseFloat(item[0]);
var ele = Math.round(item[1]);
chartDataPoints.push({
x: parseFloat(dist.toFixed(2)),
y: ele
});
});
var dynamicStepSize = 1.0;
if (distKmNum &lt;= 5) {
dynamicStepSize = 0.5;
} else if (distKmNum &lt;= 20) {
dynamicStepSize = 1.0;
} else if (distKmNum &lt;= 40) {
dynamicStepSize = 5.0;
} else {
dynamicStepSize = 10.0;
}
chart.options.scales.x.max = distKmNum;
var allowedTicks = [];
for (var v = 0; v &lt; distKmNum; v += dynamicStepSize) {
allowedTicks.push(parseFloat(v.toFixed(1)));
}
chart.options.scales.x.ticks.callback = function(value) {
for (var i = 0; i &lt; allowedTicks.length; i++) {
if (Math.abs(value - allowedTicks[i]) &lt; 0.01) {
return value + ' km';
}
}
return '';
};
chart.options.scales.x.afterBuildTicks = function(axis) {
axis.ticks = allowedTicks.map(function(val) {
return { value: val };
});
};
chart.data.datasets[0].data = chartDataPoints;
chart.update();
extracted.polylines.forEach(function(polyline) {
polyline.on('mousemove', function(ev) {
if (!trackPoints.length) return;
var mouseLatLng = ev.latlng;
var closestIndex = 0;
var minDist = Infinity;
for (var i = 0; i &lt; trackPoints.length; i++) {
var d = mouseLatLng.distanceTo(L.latLng(trackPoints[i].lat, trackPoints[i].lng));
if (d &lt; minDist) {
minDist = d;
closestIndex = i;
}
}
updateHoverMarker(closestIndex);
chart.setActiveElements([{ datasetIndex: 0, index: closestIndex }]);
chart.tooltip.setActiveElements([{ datasetIndex: 0, index: closestIndex }], { x: 0, y: 0 });
chart.update();
});
});
}).addTo(map);
});
&lt;/script&gt;
&lt;hr&gt;
&lt;h3 id="山行記録"&gt;山行記録&lt;/h3&gt;
&lt;p&gt;反省点がふたつ。まず、アプローチの大ダワ林道の崩落地点を巻いたあとすぐに林道に復帰せず、この夏にたどった大ダワ林道古道？（→関連する筆者の山行記録）の跡を追ってしまう。モミソ窪を渡ったあとの道がわからず時間をかけた。次いで小雲取谷では沢筋から離れた左岸の高いところに踏み跡をみつけ、追うのに夢中になる。水量多く気温が低かったので、格好の口実にしてしまった。&lt;br&gt;
東日原バス停スタートの日帰りで鴨沢に下りた記録を見たので、「もしかしたら」やれるかなと淡い期待をもったがとても無理。テーマを絞って季節を考えないと。&lt;/p&gt;</description></item><item><title>旧青梅街道</title><link>https://montagna-katokeyci.github.io/oohc/posts/2026-09-27/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0000</pubDate><guid>https://montagna-katokeyci.github.io/oohc/posts/2026-09-27/</guid><description>&lt;p&gt;「旧青梅街道」に違いはない。しかし奥多摩駅のひとつ手前の集落、日向と、氷川（奥多摩駅）を結ぶわずか700mの話である。現在の国道の15ｍ〜20ｍ上に、明治大正までの道が部分的に残っている。&lt;br&gt;
駅前の土産物屋のご主人によれば、「馬車は通れた。うちの祖父さんが馬で炭を運んだ道だよ」とのことだが、いまや歩く人を選ぶ。奥多摩駅からもっとも近い、極悪の廃道になっている。&lt;/p&gt;
&lt;hr&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;項目&lt;/th&gt;
&lt;th style="text-align: left"&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;記録日&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026年9月27日（日）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;天候&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;雨上がりの曇天&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;パーティ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;モンターニャ単独&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;アクセス&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;JR青梅線で奥多摩駅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;行程&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="コースタイム"&gt;コースタイム&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;記入中&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="コースマップ"&gt;コースマップ&lt;/h3&gt;
&lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /&gt;
&lt;style&gt;
.gpx-container {
width: 100%;
margin: 1.5rem 0;
border: 1px solid #ccc;
border-radius: 8px;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
font-family: sans-serif;
}
.gpx-map { height: 380px; width: 100%; }
.gpx-summary {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
background: #f8f9fa;
padding: 8px 10px;
border-top: 1px solid #e0e0e0;
border-bottom: 1px solid #e0e0e0;
font-size: 0.8rem;
color: #333;
overflow-x: auto;
white-space: nowrap;
}
.gpx-summary-item {
margin: 0 4px;
}
.gpx-summary-item strong {
color: #007bff;
font-size: 0.95rem;
margin-left: 2px;
}
.gpx-chart-wrapper {
height: 180px;
width: 100%;
padding: 10px;
background: #fafafa;
box-sizing: border-box;
}
.start-marker-icon, .goal-marker-icon {
background: none;
border: none;
font-weight: bold;
font-size: 11px;
color: #ffffff;
text-align: center;
line-height: 18px;
}
&lt;/style&gt;
&lt;div class="gpx-container"&gt;
&lt;div id="map-7fe9c563" class="gpx-map"&gt;&lt;/div&gt;
&lt;div id="summary-7fe9c563" class="gpx-summary"&gt;
&lt;div class="gpx-summary-item"&gt;総距離:&lt;strong id="sum-dist-7fe9c563"&gt;-&lt;/strong&gt; km&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高上り:&lt;strong id="sum-up-7fe9c563"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高下り:&lt;strong id="sum-down-7fe9c563"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最高標高:&lt;strong id="sum-max-7fe9c563"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最低標高:&lt;strong id="sum-min-7fe9c563"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;/div&gt;
&lt;div class="gpx-chart-wrapper"&gt;
&lt;canvas id="chart-7fe9c563"&gt;&lt;/canvas&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"&gt;&lt;/script&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-gpx/1.7.0/gpx.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
&lt;script&gt;
window.addEventListener('load', function() {
var gpxUrl = '\/oohc\/posts\/2026-09-27\/20260927_20260927.gpx';
var map = L.map('map-7fe9c563').setView([0, 0], 10);
L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
attribution: '&lt;a href="https://maps.gsi.go.jp/development/ichiran.html" target="_blank"&gt;国土地理院&lt;/a&gt;',
maxZoom: 18
}).addTo(map);
L.control.scale({
imperial: false,
position: 'bottomleft'
}).addTo(map);
var hoverMarker = null;
var trackPoints = [];
var timeLabels = [];
var ctx = document.getElementById('chart-7fe9c563').getContext('2d');
var chart = new Chart(ctx, {
type: 'line',
data: {
datasets: [{
label: '標高 (m)',
data: [],
borderColor: '#007bff',
backgroundColor: 'rgba(0, 123, 255, 0.1)',
fill: true,
borderWidth: 1.5,
pointRadius: 0,
pointHoverRadius: 6,
tension: 0.1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
interaction: { mode: 'index', intersect: false },
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
title: function(items) {
var index = items[0].dataIndex;
var timeStr = timeLabels[index] || '';
var distStr = items[0].raw.x.toFixed(2) + ' km';
return timeStr ? '時刻: ' + timeStr + '（距離: ' + distStr + '）' : '距離: ' + distStr;
},
label: function(item) {
return '標高: ' + item.raw.y + ' m';
}
}
}
},
scales: {
x: {
type: 'linear',
display: true,
title: { display: true, text: '距離 (km)', font: { size: 10 } },
ticks: {
font: { size: 10 }
},
grid: { color: 'rgba(0, 0, 0, 0.05)' }
},
y: {
display: true,
title: { display: true, text: '標高 (m)', font: { size: 10 } },
ticks: { font: { size: 10 } },
grid: { color: 'rgba(0, 0, 0, 0.05)' }
}
},
onHover: function(event, activeElements) {
if (activeElements &amp;&amp; activeElements.length &gt; 0) {
var index = activeElements[0].index;
updateHoverMarker(index);
}
}
}
});
function updateHoverMarker(index) {
var pt = trackPoints[index];
if (pt) {
if (!hoverMarker) {
hoverMarker = L.circleMarker([pt.lat, pt.lng], {
radius: 8,
fillColor: '#00ffff',
color: '#ffffff',
weight: 3,
opacity: 1,
fillOpacity: 1
}).addTo(map);
} else {
hoverMarker.setLatLng([pt.lat, pt.lng]);
}
}
}
function extractTrackData(layer) {
var pts = [];
var polylines = [];
if (typeof layer.getLatLngs === 'function') {
var latlngs = layer.getLatLngs();
var flat = Array.isArray(latlngs[0]) ? latlngs.flat(Infinity) : latlngs;
flat.forEach(function(p) {
if (p &amp;&amp; typeof p.lat === 'number') {
pts.push({ lat: p.lat, lng: p.lng });
}
});
if (layer instanceof L.Polyline) {
polylines.push(layer);
}
} else if (typeof layer.eachLayer === 'function') {
layer.eachLayer(function(child) {
var res = extractTrackData(child);
pts = pts.concat(res.pts);
polylines = polylines.concat(res.polylines);
});
}
return { pts: pts, polylines: polylines };
}
fetch(gpxUrl)
.then(function(response) { return response.text(); })
.then(function(xmlText) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlText, "text/xml");
var trkpts = xmlDoc.getElementsByTagName("trkpt");
for (var i = 0; i &lt; trkpts.length; i++) {
var timeNode = trkpts[i].getElementsByTagName("time")[0];
if (timeNode) {
var dateObj = new Date(timeNode.textContent);
var timeStr = dateObj.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
timeLabels.push(timeStr);
} else {
timeLabels.push('');
}
}
})
.catch(function(err) {
console.error("GPX Time Parsing Error:", err);
});
new L.GPX(gpxUrl, {
async: true,
polyline_options: { color: '#ff3300', weight: 5, opacity: 0.8 },
marker_options: { startIconUrl: null, endIconUrl: null, wptIconUrls: null }
}).on('loaded', function(e) {
var gpx = e.target;
map.fitBounds(gpx.getBounds());
var totalDistMeters = gpx.get_distance();
var distKmNum = totalDistMeters / 1000;
var distKmStr = distKmNum.toFixed(2);
var maxEle = Math.round(gpx.get_elevation_max());
var minEle = Math.round(gpx.get_elevation_min());
var gainEle = Math.round(gpx.get_elevation_gain());
var lossEle = Math.round(gpx.get_elevation_loss());
document.getElementById('sum-dist-7fe9c563').innerText = distKmStr;
document.getElementById('sum-up-7fe9c563').innerText = gainEle;
document.getElementById('sum-down-7fe9c563').innerText = lossEle;
document.getElementById('sum-max-7fe9c563').innerText = maxEle;
document.getElementById('sum-min-7fe9c563').innerText = minEle;
var eleData = gpx.get_elevation_data();
var chartDataPoints = [];
var extracted = extractTrackData(gpx);
trackPoints = extracted.pts;
if (trackPoints.length &gt; 0) {
var startPt = trackPoints[0];
var endPt = trackPoints[trackPoints.length - 1];
L.circleMarker([startPt.lat, startPt.lng], {
radius: 9,
fillColor: '#28a745',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('スタート', { permanent: false, direction: 'top' });
L.circleMarker([endPt.lat, endPt.lng], {
radius: 9,
fillColor: '#dc3545',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('ゴール', { permanent: false, direction: 'top' });
}
eleData.forEach(function(item) {
var dist = typeof item[0] === 'number' ? item[0] : parseFloat(item[0]);
var ele = Math.round(item[1]);
chartDataPoints.push({
x: parseFloat(dist.toFixed(2)),
y: ele
});
});
var dynamicStepSize = 1.0;
if (distKmNum &lt;= 5) {
dynamicStepSize = 0.5;
} else if (distKmNum &lt;= 20) {
dynamicStepSize = 1.0;
} else if (distKmNum &lt;= 40) {
dynamicStepSize = 5.0;
} else {
dynamicStepSize = 10.0;
}
chart.options.scales.x.max = distKmNum;
var allowedTicks = [];
for (var v = 0; v &lt; distKmNum; v += dynamicStepSize) {
allowedTicks.push(parseFloat(v.toFixed(1)));
}
chart.options.scales.x.ticks.callback = function(value) {
for (var i = 0; i &lt; allowedTicks.length; i++) {
if (Math.abs(value - allowedTicks[i]) &lt; 0.01) {
return value + ' km';
}
}
return '';
};
chart.options.scales.x.afterBuildTicks = function(axis) {
axis.ticks = allowedTicks.map(function(val) {
return { value: val };
});
};
chart.data.datasets[0].data = chartDataPoints;
chart.update();
extracted.polylines.forEach(function(polyline) {
polyline.on('mousemove', function(ev) {
if (!trackPoints.length) return;
var mouseLatLng = ev.latlng;
var closestIndex = 0;
var minDist = Infinity;
for (var i = 0; i &lt; trackPoints.length; i++) {
var d = mouseLatLng.distanceTo(L.latLng(trackPoints[i].lat, trackPoints[i].lng));
if (d &lt; minDist) {
minDist = d;
closestIndex = i;
}
}
updateHoverMarker(closestIndex);
chart.setActiveElements([{ datasetIndex: 0, index: closestIndex }]);
chart.tooltip.setActiveElements([{ datasetIndex: 0, index: closestIndex }], { x: 0, y: 0 });
chart.update();
});
});
}).addTo(map);
});
&lt;/script&gt;
&lt;hr&gt;
&lt;h3 id="山行記録"&gt;山行記録&lt;/h3&gt;
&lt;h4 id="プロローグ"&gt;プロローグ&lt;/h4&gt;
&lt;p&gt;道を見つけたのは偶然だ。&lt;br&gt;
半日だけ歩くと決めた日曜早朝の青梅線車内で「どこを歩こうか」。ゴンザス尾根から石尾根の範囲を思い浮かべて候補を探す。そういえば、駅近のゴンザス尾根の下の方は、足を向ける機会が少ないな。大氷川の南端から除ヶ野～安寺沢へ向かう日原古道をたどり、分かれる踏み跡があればたどってみようか。&lt;br&gt;
散歩気分で奥多摩駅をスタートする。新氷川トンネルの手前で旧国道に入りもえぎの湯方向へ向かい、しかし大氷川の南に上がる階段を通り過ぎてしまう。直感が働いたといえば誇張で、「ゴンザス尾根の南端はもっと先だから」、もう少し探索してみようと思っただけだ。&lt;br&gt;
氷川隧道をくぐりもえぎの湯の前を通り過ぎ、馬頭さまに通りかかる。拝んでから解説板を読んでみる。&lt;/p&gt;</description></item><item><title>安寺沢から平石橋</title><link>https://montagna-katokeyci.github.io/oohc/posts/2026-09-22/</link><pubDate>Tue, 22 Sep 2026 00:00:00 +0000</pubDate><guid>https://montagna-katokeyci.github.io/oohc/posts/2026-09-22/</guid><description>&lt;p&gt;平石尾根や妙指尾根を登り降りしていると、「安寺沢～平石橋」の道標を見かける。そういえば、大休場尾根経由で本仁田山に上がるさいに横を通る一軒家が、安寺沢の全部ではないだろう。林道を終点までたどり、安寺沢集落の背後から歴史を感じる仕事みちを歩いた。&lt;br&gt;
駅前のみすず堂の女将は「アテラザワ」と発音する。入力すれば「左沢」と出てくる。もう解きほぐせないだろう曰く因縁がありそうだ。&lt;/p&gt;
&lt;hr&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;項目&lt;/th&gt;
&lt;th style="text-align: left"&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;記録日&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026年9月22日（火）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;天候&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;パーティ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;モンターニャ単独&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;アクセス&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;JR青梅線で奥多摩駅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;行程&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="コースタイム"&gt;コースタイム&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;記入中&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="コースマップ"&gt;コースマップ&lt;/h3&gt;
&lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /&gt;
&lt;style&gt;
.gpx-container {
width: 100%;
margin: 1.5rem 0;
border: 1px solid #ccc;
border-radius: 8px;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
font-family: sans-serif;
}
.gpx-map { height: 380px; width: 100%; }
.gpx-summary {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
background: #f8f9fa;
padding: 8px 10px;
border-top: 1px solid #e0e0e0;
border-bottom: 1px solid #e0e0e0;
font-size: 0.8rem;
color: #333;
overflow-x: auto;
white-space: nowrap;
}
.gpx-summary-item {
margin: 0 4px;
}
.gpx-summary-item strong {
color: #007bff;
font-size: 0.95rem;
margin-left: 2px;
}
.gpx-chart-wrapper {
height: 180px;
width: 100%;
padding: 10px;
background: #fafafa;
box-sizing: border-box;
}
.start-marker-icon, .goal-marker-icon {
background: none;
border: none;
font-weight: bold;
font-size: 11px;
color: #ffffff;
text-align: center;
line-height: 18px;
}
&lt;/style&gt;
&lt;div class="gpx-container"&gt;
&lt;div id="map-dc418570" class="gpx-map"&gt;&lt;/div&gt;
&lt;div id="summary-dc418570" class="gpx-summary"&gt;
&lt;div class="gpx-summary-item"&gt;総距離:&lt;strong id="sum-dist-dc418570"&gt;-&lt;/strong&gt; km&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高上り:&lt;strong id="sum-up-dc418570"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高下り:&lt;strong id="sum-down-dc418570"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最高標高:&lt;strong id="sum-max-dc418570"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最低標高:&lt;strong id="sum-min-dc418570"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;/div&gt;
&lt;div class="gpx-chart-wrapper"&gt;
&lt;canvas id="chart-dc418570"&gt;&lt;/canvas&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"&gt;&lt;/script&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-gpx/1.7.0/gpx.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
&lt;script&gt;
window.addEventListener('load', function() {
var gpxUrl = '\/oohc\/posts\/2026-09-22\/20260922_30260922.gpx';
var map = L.map('map-dc418570').setView([0, 0], 10);
L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
attribution: '&lt;a href="https://maps.gsi.go.jp/development/ichiran.html" target="_blank"&gt;国土地理院&lt;/a&gt;',
maxZoom: 18
}).addTo(map);
L.control.scale({
imperial: false,
position: 'bottomleft'
}).addTo(map);
var hoverMarker = null;
var trackPoints = [];
var timeLabels = [];
var ctx = document.getElementById('chart-dc418570').getContext('2d');
var chart = new Chart(ctx, {
type: 'line',
data: {
datasets: [{
label: '標高 (m)',
data: [],
borderColor: '#007bff',
backgroundColor: 'rgba(0, 123, 255, 0.1)',
fill: true,
borderWidth: 1.5,
pointRadius: 0,
pointHoverRadius: 6,
tension: 0.1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
interaction: { mode: 'index', intersect: false },
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
title: function(items) {
var index = items[0].dataIndex;
var timeStr = timeLabels[index] || '';
var distStr = items[0].raw.x.toFixed(2) + ' km';
return timeStr ? '時刻: ' + timeStr + '（距離: ' + distStr + '）' : '距離: ' + distStr;
},
label: function(item) {
return '標高: ' + item.raw.y + ' m';
}
}
}
},
scales: {
x: {
type: 'linear',
display: true,
title: { display: true, text: '距離 (km)', font: { size: 10 } },
ticks: {
font: { size: 10 }
},
grid: { color: 'rgba(0, 0, 0, 0.05)' }
},
y: {
display: true,
title: { display: true, text: '標高 (m)', font: { size: 10 } },
ticks: { font: { size: 10 } },
grid: { color: 'rgba(0, 0, 0, 0.05)' }
}
},
onHover: function(event, activeElements) {
if (activeElements &amp;&amp; activeElements.length &gt; 0) {
var index = activeElements[0].index;
updateHoverMarker(index);
}
}
}
});
function updateHoverMarker(index) {
var pt = trackPoints[index];
if (pt) {
if (!hoverMarker) {
hoverMarker = L.circleMarker([pt.lat, pt.lng], {
radius: 8,
fillColor: '#00ffff',
color: '#ffffff',
weight: 3,
opacity: 1,
fillOpacity: 1
}).addTo(map);
} else {
hoverMarker.setLatLng([pt.lat, pt.lng]);
}
}
}
function extractTrackData(layer) {
var pts = [];
var polylines = [];
if (typeof layer.getLatLngs === 'function') {
var latlngs = layer.getLatLngs();
var flat = Array.isArray(latlngs[0]) ? latlngs.flat(Infinity) : latlngs;
flat.forEach(function(p) {
if (p &amp;&amp; typeof p.lat === 'number') {
pts.push({ lat: p.lat, lng: p.lng });
}
});
if (layer instanceof L.Polyline) {
polylines.push(layer);
}
} else if (typeof layer.eachLayer === 'function') {
layer.eachLayer(function(child) {
var res = extractTrackData(child);
pts = pts.concat(res.pts);
polylines = polylines.concat(res.polylines);
});
}
return { pts: pts, polylines: polylines };
}
fetch(gpxUrl)
.then(function(response) { return response.text(); })
.then(function(xmlText) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlText, "text/xml");
var trkpts = xmlDoc.getElementsByTagName("trkpt");
for (var i = 0; i &lt; trkpts.length; i++) {
var timeNode = trkpts[i].getElementsByTagName("time")[0];
if (timeNode) {
var dateObj = new Date(timeNode.textContent);
var timeStr = dateObj.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
timeLabels.push(timeStr);
} else {
timeLabels.push('');
}
}
})
.catch(function(err) {
console.error("GPX Time Parsing Error:", err);
});
new L.GPX(gpxUrl, {
async: true,
polyline_options: { color: '#ff3300', weight: 5, opacity: 0.8 },
marker_options: { startIconUrl: null, endIconUrl: null, wptIconUrls: null }
}).on('loaded', function(e) {
var gpx = e.target;
map.fitBounds(gpx.getBounds());
var totalDistMeters = gpx.get_distance();
var distKmNum = totalDistMeters / 1000;
var distKmStr = distKmNum.toFixed(2);
var maxEle = Math.round(gpx.get_elevation_max());
var minEle = Math.round(gpx.get_elevation_min());
var gainEle = Math.round(gpx.get_elevation_gain());
var lossEle = Math.round(gpx.get_elevation_loss());
document.getElementById('sum-dist-dc418570').innerText = distKmStr;
document.getElementById('sum-up-dc418570').innerText = gainEle;
document.getElementById('sum-down-dc418570').innerText = lossEle;
document.getElementById('sum-max-dc418570').innerText = maxEle;
document.getElementById('sum-min-dc418570').innerText = minEle;
var eleData = gpx.get_elevation_data();
var chartDataPoints = [];
var extracted = extractTrackData(gpx);
trackPoints = extracted.pts;
if (trackPoints.length &gt; 0) {
var startPt = trackPoints[0];
var endPt = trackPoints[trackPoints.length - 1];
L.circleMarker([startPt.lat, startPt.lng], {
radius: 9,
fillColor: '#28a745',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('スタート', { permanent: false, direction: 'top' });
L.circleMarker([endPt.lat, endPt.lng], {
radius: 9,
fillColor: '#dc3545',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('ゴール', { permanent: false, direction: 'top' });
}
eleData.forEach(function(item) {
var dist = typeof item[0] === 'number' ? item[0] : parseFloat(item[0]);
var ele = Math.round(item[1]);
chartDataPoints.push({
x: parseFloat(dist.toFixed(2)),
y: ele
});
});
var dynamicStepSize = 1.0;
if (distKmNum &lt;= 5) {
dynamicStepSize = 0.5;
} else if (distKmNum &lt;= 20) {
dynamicStepSize = 1.0;
} else if (distKmNum &lt;= 40) {
dynamicStepSize = 5.0;
} else {
dynamicStepSize = 10.0;
}
chart.options.scales.x.max = distKmNum;
var allowedTicks = [];
for (var v = 0; v &lt; distKmNum; v += dynamicStepSize) {
allowedTicks.push(parseFloat(v.toFixed(1)));
}
chart.options.scales.x.ticks.callback = function(value) {
for (var i = 0; i &lt; allowedTicks.length; i++) {
if (Math.abs(value - allowedTicks[i]) &lt; 0.01) {
return value + ' km';
}
}
return '';
};
chart.options.scales.x.afterBuildTicks = function(axis) {
axis.ticks = allowedTicks.map(function(val) {
return { value: val };
});
};
chart.data.datasets[0].data = chartDataPoints;
chart.update();
extracted.polylines.forEach(function(polyline) {
polyline.on('mousemove', function(ev) {
if (!trackPoints.length) return;
var mouseLatLng = ev.latlng;
var closestIndex = 0;
var minDist = Infinity;
for (var i = 0; i &lt; trackPoints.length; i++) {
var d = mouseLatLng.distanceTo(L.latLng(trackPoints[i].lat, trackPoints[i].lng));
if (d &lt; minDist) {
minDist = d;
closestIndex = i;
}
}
updateHoverMarker(closestIndex);
chart.setActiveElements([{ datasetIndex: 0, index: closestIndex }]);
chart.tooltip.setActiveElements([{ datasetIndex: 0, index: closestIndex }], { x: 0, y: 0 });
chart.update();
});
});
}).addTo(map);
});
&lt;/script&gt;
&lt;hr&gt;
&lt;h3 id="山行記録"&gt;山行記録&lt;/h3&gt;
&lt;p&gt;記入中&lt;/p&gt;</description></item><item><title>三ツ又窪</title><link>https://montagna-katokeyci.github.io/oohc/posts/2026-09-19/</link><pubDate>Sat, 19 Sep 2026 00:00:00 +0000</pubDate><guid>https://montagna-katokeyci.github.io/oohc/posts/2026-09-19/</guid><description>&lt;p&gt;日原林道の伊勢橋を渡った地点で北岸に「せっかい」記号が入る。断崖の上部に導水管の吐出部があって滝のように見えるが、水量が一定せずぎこちない流れを作っている。これが三ツ又窪だ。&lt;br&gt;
山行のテーマがあり、「目的地への経路として」タワ尾根から三ツ又窪を下ったが、おそろしく手強くて目的地にたどり着けなかった。&lt;/p&gt;
&lt;hr&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;項目&lt;/th&gt;
&lt;th style="text-align: left"&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;記録日&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026年9月19日（土）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;天候&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;曇天のち13時過ぎから雨が降ったり止んだり&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;パーティ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;モンターニャ単独&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;アクセス&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;西東京バスで東日原バス停&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;行程&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="コースタイム"&gt;コースタイム&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;記入中&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="コースマップ"&gt;コースマップ&lt;/h3&gt;
&lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /&gt;
&lt;style&gt;
.gpx-container {
width: 100%;
margin: 1.5rem 0;
border: 1px solid #ccc;
border-radius: 8px;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
font-family: sans-serif;
}
.gpx-map { height: 380px; width: 100%; }
.gpx-summary {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
background: #f8f9fa;
padding: 8px 10px;
border-top: 1px solid #e0e0e0;
border-bottom: 1px solid #e0e0e0;
font-size: 0.8rem;
color: #333;
overflow-x: auto;
white-space: nowrap;
}
.gpx-summary-item {
margin: 0 4px;
}
.gpx-summary-item strong {
color: #007bff;
font-size: 0.95rem;
margin-left: 2px;
}
.gpx-chart-wrapper {
height: 180px;
width: 100%;
padding: 10px;
background: #fafafa;
box-sizing: border-box;
}
.start-marker-icon, .goal-marker-icon {
background: none;
border: none;
font-weight: bold;
font-size: 11px;
color: #ffffff;
text-align: center;
line-height: 18px;
}
&lt;/style&gt;
&lt;div class="gpx-container"&gt;
&lt;div id="map-653ae321" class="gpx-map"&gt;&lt;/div&gt;
&lt;div id="summary-653ae321" class="gpx-summary"&gt;
&lt;div class="gpx-summary-item"&gt;総距離:&lt;strong id="sum-dist-653ae321"&gt;-&lt;/strong&gt; km&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高上り:&lt;strong id="sum-up-653ae321"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高下り:&lt;strong id="sum-down-653ae321"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最高標高:&lt;strong id="sum-max-653ae321"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最低標高:&lt;strong id="sum-min-653ae321"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;/div&gt;
&lt;div class="gpx-chart-wrapper"&gt;
&lt;canvas id="chart-653ae321"&gt;&lt;/canvas&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"&gt;&lt;/script&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-gpx/1.7.0/gpx.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
&lt;script&gt;
window.addEventListener('load', function() {
var gpxUrl = '\/oohc\/posts\/2026-09-19\/20260919_20260919.gpx';
var map = L.map('map-653ae321').setView([0, 0], 10);
L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
attribution: '&lt;a href="https://maps.gsi.go.jp/development/ichiran.html" target="_blank"&gt;国土地理院&lt;/a&gt;',
maxZoom: 18
}).addTo(map);
L.control.scale({
imperial: false,
position: 'bottomleft'
}).addTo(map);
var hoverMarker = null;
var trackPoints = [];
var timeLabels = [];
var ctx = document.getElementById('chart-653ae321').getContext('2d');
var chart = new Chart(ctx, {
type: 'line',
data: {
datasets: [{
label: '標高 (m)',
data: [],
borderColor: '#007bff',
backgroundColor: 'rgba(0, 123, 255, 0.1)',
fill: true,
borderWidth: 1.5,
pointRadius: 0,
pointHoverRadius: 6,
tension: 0.1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
interaction: { mode: 'index', intersect: false },
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
title: function(items) {
var index = items[0].dataIndex;
var timeStr = timeLabels[index] || '';
var distStr = items[0].raw.x.toFixed(2) + ' km';
return timeStr ? '時刻: ' + timeStr + '（距離: ' + distStr + '）' : '距離: ' + distStr;
},
label: function(item) {
return '標高: ' + item.raw.y + ' m';
}
}
}
},
scales: {
x: {
type: 'linear',
display: true,
title: { display: true, text: '距離 (km)', font: { size: 10 } },
ticks: {
font: { size: 10 }
},
grid: { color: 'rgba(0, 0, 0, 0.05)' }
},
y: {
display: true,
title: { display: true, text: '標高 (m)', font: { size: 10 } },
ticks: { font: { size: 10 } },
grid: { color: 'rgba(0, 0, 0, 0.05)' }
}
},
onHover: function(event, activeElements) {
if (activeElements &amp;&amp; activeElements.length &gt; 0) {
var index = activeElements[0].index;
updateHoverMarker(index);
}
}
}
});
function updateHoverMarker(index) {
var pt = trackPoints[index];
if (pt) {
if (!hoverMarker) {
hoverMarker = L.circleMarker([pt.lat, pt.lng], {
radius: 8,
fillColor: '#00ffff',
color: '#ffffff',
weight: 3,
opacity: 1,
fillOpacity: 1
}).addTo(map);
} else {
hoverMarker.setLatLng([pt.lat, pt.lng]);
}
}
}
function extractTrackData(layer) {
var pts = [];
var polylines = [];
if (typeof layer.getLatLngs === 'function') {
var latlngs = layer.getLatLngs();
var flat = Array.isArray(latlngs[0]) ? latlngs.flat(Infinity) : latlngs;
flat.forEach(function(p) {
if (p &amp;&amp; typeof p.lat === 'number') {
pts.push({ lat: p.lat, lng: p.lng });
}
});
if (layer instanceof L.Polyline) {
polylines.push(layer);
}
} else if (typeof layer.eachLayer === 'function') {
layer.eachLayer(function(child) {
var res = extractTrackData(child);
pts = pts.concat(res.pts);
polylines = polylines.concat(res.polylines);
});
}
return { pts: pts, polylines: polylines };
}
fetch(gpxUrl)
.then(function(response) { return response.text(); })
.then(function(xmlText) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlText, "text/xml");
var trkpts = xmlDoc.getElementsByTagName("trkpt");
for (var i = 0; i &lt; trkpts.length; i++) {
var timeNode = trkpts[i].getElementsByTagName("time")[0];
if (timeNode) {
var dateObj = new Date(timeNode.textContent);
var timeStr = dateObj.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
timeLabels.push(timeStr);
} else {
timeLabels.push('');
}
}
})
.catch(function(err) {
console.error("GPX Time Parsing Error:", err);
});
new L.GPX(gpxUrl, {
async: true,
polyline_options: { color: '#ff3300', weight: 5, opacity: 0.8 },
marker_options: { startIconUrl: null, endIconUrl: null, wptIconUrls: null }
}).on('loaded', function(e) {
var gpx = e.target;
map.fitBounds(gpx.getBounds());
var totalDistMeters = gpx.get_distance();
var distKmNum = totalDistMeters / 1000;
var distKmStr = distKmNum.toFixed(2);
var maxEle = Math.round(gpx.get_elevation_max());
var minEle = Math.round(gpx.get_elevation_min());
var gainEle = Math.round(gpx.get_elevation_gain());
var lossEle = Math.round(gpx.get_elevation_loss());
document.getElementById('sum-dist-653ae321').innerText = distKmStr;
document.getElementById('sum-up-653ae321').innerText = gainEle;
document.getElementById('sum-down-653ae321').innerText = lossEle;
document.getElementById('sum-max-653ae321').innerText = maxEle;
document.getElementById('sum-min-653ae321').innerText = minEle;
var eleData = gpx.get_elevation_data();
var chartDataPoints = [];
var extracted = extractTrackData(gpx);
trackPoints = extracted.pts;
if (trackPoints.length &gt; 0) {
var startPt = trackPoints[0];
var endPt = trackPoints[trackPoints.length - 1];
L.circleMarker([startPt.lat, startPt.lng], {
radius: 9,
fillColor: '#28a745',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('スタート', { permanent: false, direction: 'top' });
L.circleMarker([endPt.lat, endPt.lng], {
radius: 9,
fillColor: '#dc3545',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('ゴール', { permanent: false, direction: 'top' });
}
eleData.forEach(function(item) {
var dist = typeof item[0] === 'number' ? item[0] : parseFloat(item[0]);
var ele = Math.round(item[1]);
chartDataPoints.push({
x: parseFloat(dist.toFixed(2)),
y: ele
});
});
var dynamicStepSize = 1.0;
if (distKmNum &lt;= 5) {
dynamicStepSize = 0.5;
} else if (distKmNum &lt;= 20) {
dynamicStepSize = 1.0;
} else if (distKmNum &lt;= 40) {
dynamicStepSize = 5.0;
} else {
dynamicStepSize = 10.0;
}
chart.options.scales.x.max = distKmNum;
var allowedTicks = [];
for (var v = 0; v &lt; distKmNum; v += dynamicStepSize) {
allowedTicks.push(parseFloat(v.toFixed(1)));
}
chart.options.scales.x.ticks.callback = function(value) {
for (var i = 0; i &lt; allowedTicks.length; i++) {
if (Math.abs(value - allowedTicks[i]) &lt; 0.01) {
return value + ' km';
}
}
return '';
};
chart.options.scales.x.afterBuildTicks = function(axis) {
axis.ticks = allowedTicks.map(function(val) {
return { value: val };
});
};
chart.data.datasets[0].data = chartDataPoints;
chart.update();
extracted.polylines.forEach(function(polyline) {
polyline.on('mousemove', function(ev) {
if (!trackPoints.length) return;
var mouseLatLng = ev.latlng;
var closestIndex = 0;
var minDist = Infinity;
for (var i = 0; i &lt; trackPoints.length; i++) {
var d = mouseLatLng.distanceTo(L.latLng(trackPoints[i].lat, trackPoints[i].lng));
if (d &lt; minDist) {
minDist = d;
closestIndex = i;
}
}
updateHoverMarker(closestIndex);
chart.setActiveElements([{ datasetIndex: 0, index: closestIndex }]);
chart.tooltip.setActiveElements([{ datasetIndex: 0, index: closestIndex }], { x: 0, y: 0 });
chart.update();
});
});
}).addTo(map);
});
&lt;/script&gt;
&lt;hr&gt;
&lt;h3 id="山行記録"&gt;山行記録&lt;/h3&gt;
&lt;p&gt;記入中&lt;/p&gt;</description></item><item><title>カラ沢遡行と不老径路</title><link>https://montagna-katokeyci.github.io/oohc/posts/2026-09-12/</link><pubDate>Sat, 12 Sep 2026 00:00:00 +0000</pubDate><guid>https://montagna-katokeyci.github.io/oohc/posts/2026-09-12/</guid><description>&lt;p&gt;カラ沢を遡行し、石尾根から不老集落に向かい降った。ふたつのテーマに関連はない。「ハイカーの沢歩き」なので沢屋さんの参考にはならない。&lt;br&gt;
カラ沢尾根に取付くさいに横切る地点と、co980mで水流が現れてからの沢筋の印象の違いは、これがおなじ沢かと思われるほどだ。人工物も意外なほど多い。&lt;br&gt;
不老集落への道は、植林に消されてざっと半分もたどれただろうか。日頃、横目にして通り過ぎていた景色のなかに、古の生活道が残る。不思議な懐かしさを感じながら下った。&lt;/p&gt;
&lt;hr&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;項目&lt;/th&gt;
&lt;th style="text-align: left"&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;記録日&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026年9月12日（土）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;天候&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;朝まで雨の残る長雨の合間、曇天＆ガス&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;パーティ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;モンターニャ単独（コンディション：右膝痛と腰部打撲）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;アクセス&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;西東京バスて東日原バス停&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;行程&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;東日原バス停、日原橋、カラ沢、二又（co1060m）、カラ沢の頭、石尾根、石尾根co870m付近、不老林道、将門神社、峰畑集落跡、不老集落、奥多摩駅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="コースタイム"&gt;コースタイム&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;08:28～東日原バス停スタート&lt;/li&gt;
&lt;li&gt;09:14〜カラ沢遡行開始&lt;/li&gt;
&lt;li&gt;10:10～（co900m）～10:33&lt;/li&gt;
&lt;li&gt;10:46〜水流が現れる、co980m&lt;/li&gt;
&lt;li&gt;11:03〜二又を右又に入る&lt;/li&gt;
&lt;li&gt;12:45〜カラ沢の頭〜13:09&lt;/li&gt;
&lt;li&gt;14:35～石尾根co870m（P934の東350m）～14:45&lt;/li&gt;
&lt;li&gt;16:19～将門神社～16:30&lt;/li&gt;
&lt;li&gt;16:34～峰畑集落跡&lt;/li&gt;
&lt;li&gt;17:31～不老集落西端&lt;/li&gt;
&lt;li&gt;17:43～不老バス停フィニッシュ&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="コースマップ"&gt;コースマップ&lt;/h3&gt;
&lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /&gt;
&lt;style&gt;
.gpx-container {
width: 100%;
margin: 1.5rem 0;
border: 1px solid #ccc;
border-radius: 8px;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
font-family: sans-serif;
}
.gpx-map { height: 380px; width: 100%; }
.gpx-summary {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
background: #f8f9fa;
padding: 8px 10px;
border-top: 1px solid #e0e0e0;
border-bottom: 1px solid #e0e0e0;
font-size: 0.8rem;
color: #333;
overflow-x: auto;
white-space: nowrap;
}
.gpx-summary-item {
margin: 0 4px;
}
.gpx-summary-item strong {
color: #007bff;
font-size: 0.95rem;
margin-left: 2px;
}
.gpx-chart-wrapper {
height: 180px;
width: 100%;
padding: 10px;
background: #fafafa;
box-sizing: border-box;
}
.start-marker-icon, .goal-marker-icon {
background: none;
border: none;
font-weight: bold;
font-size: 11px;
color: #ffffff;
text-align: center;
line-height: 18px;
}
&lt;/style&gt;
&lt;div class="gpx-container"&gt;
&lt;div id="map-a71e3601" class="gpx-map"&gt;&lt;/div&gt;
&lt;div id="summary-a71e3601" class="gpx-summary"&gt;
&lt;div class="gpx-summary-item"&gt;総距離:&lt;strong id="sum-dist-a71e3601"&gt;-&lt;/strong&gt; km&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高上り:&lt;strong id="sum-up-a71e3601"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高下り:&lt;strong id="sum-down-a71e3601"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最高標高:&lt;strong id="sum-max-a71e3601"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最低標高:&lt;strong id="sum-min-a71e3601"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;/div&gt;
&lt;div class="gpx-chart-wrapper"&gt;
&lt;canvas id="chart-a71e3601"&gt;&lt;/canvas&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"&gt;&lt;/script&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-gpx/1.7.0/gpx.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
&lt;script&gt;
window.addEventListener('load', function() {
var gpxUrl = '\/oohc\/posts\/2026-09-12\/20260912_20260912.gpx';
var map = L.map('map-a71e3601').setView([0, 0], 10);
L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
attribution: '&lt;a href="https://maps.gsi.go.jp/development/ichiran.html" target="_blank"&gt;国土地理院&lt;/a&gt;',
maxZoom: 18
}).addTo(map);
L.control.scale({
imperial: false,
position: 'bottomleft'
}).addTo(map);
var hoverMarker = null;
var trackPoints = [];
var timeLabels = [];
var ctx = document.getElementById('chart-a71e3601').getContext('2d');
var chart = new Chart(ctx, {
type: 'line',
data: {
datasets: [{
label: '標高 (m)',
data: [],
borderColor: '#007bff',
backgroundColor: 'rgba(0, 123, 255, 0.1)',
fill: true,
borderWidth: 1.5,
pointRadius: 0,
pointHoverRadius: 6,
tension: 0.1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
interaction: { mode: 'index', intersect: false },
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
title: function(items) {
var index = items[0].dataIndex;
var timeStr = timeLabels[index] || '';
var distStr = items[0].raw.x.toFixed(2) + ' km';
return timeStr ? '時刻: ' + timeStr + '（距離: ' + distStr + '）' : '距離: ' + distStr;
},
label: function(item) {
return '標高: ' + item.raw.y + ' m';
}
}
}
},
scales: {
x: {
type: 'linear',
display: true,
title: { display: true, text: '距離 (km)', font: { size: 10 } },
ticks: {
font: { size: 10 }
},
grid: { color: 'rgba(0, 0, 0, 0.05)' }
},
y: {
display: true,
title: { display: true, text: '標高 (m)', font: { size: 10 } },
ticks: { font: { size: 10 } },
grid: { color: 'rgba(0, 0, 0, 0.05)' }
}
},
onHover: function(event, activeElements) {
if (activeElements &amp;&amp; activeElements.length &gt; 0) {
var index = activeElements[0].index;
updateHoverMarker(index);
}
}
}
});
function updateHoverMarker(index) {
var pt = trackPoints[index];
if (pt) {
if (!hoverMarker) {
hoverMarker = L.circleMarker([pt.lat, pt.lng], {
radius: 8,
fillColor: '#00ffff',
color: '#ffffff',
weight: 3,
opacity: 1,
fillOpacity: 1
}).addTo(map);
} else {
hoverMarker.setLatLng([pt.lat, pt.lng]);
}
}
}
function extractTrackData(layer) {
var pts = [];
var polylines = [];
if (typeof layer.getLatLngs === 'function') {
var latlngs = layer.getLatLngs();
var flat = Array.isArray(latlngs[0]) ? latlngs.flat(Infinity) : latlngs;
flat.forEach(function(p) {
if (p &amp;&amp; typeof p.lat === 'number') {
pts.push({ lat: p.lat, lng: p.lng });
}
});
if (layer instanceof L.Polyline) {
polylines.push(layer);
}
} else if (typeof layer.eachLayer === 'function') {
layer.eachLayer(function(child) {
var res = extractTrackData(child);
pts = pts.concat(res.pts);
polylines = polylines.concat(res.polylines);
});
}
return { pts: pts, polylines: polylines };
}
fetch(gpxUrl)
.then(function(response) { return response.text(); })
.then(function(xmlText) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlText, "text/xml");
var trkpts = xmlDoc.getElementsByTagName("trkpt");
for (var i = 0; i &lt; trkpts.length; i++) {
var timeNode = trkpts[i].getElementsByTagName("time")[0];
if (timeNode) {
var dateObj = new Date(timeNode.textContent);
var timeStr = dateObj.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
timeLabels.push(timeStr);
} else {
timeLabels.push('');
}
}
})
.catch(function(err) {
console.error("GPX Time Parsing Error:", err);
});
new L.GPX(gpxUrl, {
async: true,
polyline_options: { color: '#ff3300', weight: 5, opacity: 0.8 },
marker_options: { startIconUrl: null, endIconUrl: null, wptIconUrls: null }
}).on('loaded', function(e) {
var gpx = e.target;
map.fitBounds(gpx.getBounds());
var totalDistMeters = gpx.get_distance();
var distKmNum = totalDistMeters / 1000;
var distKmStr = distKmNum.toFixed(2);
var maxEle = Math.round(gpx.get_elevation_max());
var minEle = Math.round(gpx.get_elevation_min());
var gainEle = Math.round(gpx.get_elevation_gain());
var lossEle = Math.round(gpx.get_elevation_loss());
document.getElementById('sum-dist-a71e3601').innerText = distKmStr;
document.getElementById('sum-up-a71e3601').innerText = gainEle;
document.getElementById('sum-down-a71e3601').innerText = lossEle;
document.getElementById('sum-max-a71e3601').innerText = maxEle;
document.getElementById('sum-min-a71e3601').innerText = minEle;
var eleData = gpx.get_elevation_data();
var chartDataPoints = [];
var extracted = extractTrackData(gpx);
trackPoints = extracted.pts;
if (trackPoints.length &gt; 0) {
var startPt = trackPoints[0];
var endPt = trackPoints[trackPoints.length - 1];
L.circleMarker([startPt.lat, startPt.lng], {
radius: 9,
fillColor: '#28a745',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('スタート', { permanent: false, direction: 'top' });
L.circleMarker([endPt.lat, endPt.lng], {
radius: 9,
fillColor: '#dc3545',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('ゴール', { permanent: false, direction: 'top' });
}
eleData.forEach(function(item) {
var dist = typeof item[0] === 'number' ? item[0] : parseFloat(item[0]);
var ele = Math.round(item[1]);
chartDataPoints.push({
x: parseFloat(dist.toFixed(2)),
y: ele
});
});
var dynamicStepSize = 1.0;
if (distKmNum &lt;= 5) {
dynamicStepSize = 0.5;
} else if (distKmNum &lt;= 20) {
dynamicStepSize = 1.0;
} else if (distKmNum &lt;= 40) {
dynamicStepSize = 5.0;
} else {
dynamicStepSize = 10.0;
}
chart.options.scales.x.max = distKmNum;
var allowedTicks = [];
for (var v = 0; v &lt; distKmNum; v += dynamicStepSize) {
allowedTicks.push(parseFloat(v.toFixed(1)));
}
chart.options.scales.x.ticks.callback = function(value) {
for (var i = 0; i &lt; allowedTicks.length; i++) {
if (Math.abs(value - allowedTicks[i]) &lt; 0.01) {
return value + ' km';
}
}
return '';
};
chart.options.scales.x.afterBuildTicks = function(axis) {
axis.ticks = allowedTicks.map(function(val) {
return { value: val };
});
};
chart.data.datasets[0].data = chartDataPoints;
chart.update();
extracted.polylines.forEach(function(polyline) {
polyline.on('mousemove', function(ev) {
if (!trackPoints.length) return;
var mouseLatLng = ev.latlng;
var closestIndex = 0;
var minDist = Infinity;
for (var i = 0; i &lt; trackPoints.length; i++) {
var d = mouseLatLng.distanceTo(L.latLng(trackPoints[i].lat, trackPoints[i].lng));
if (d &lt; minDist) {
minDist = d;
closestIndex = i;
}
}
updateHoverMarker(closestIndex);
chart.setActiveElements([{ datasetIndex: 0, index: closestIndex }]);
chart.tooltip.setActiveElements([{ datasetIndex: 0, index: closestIndex }], { x: 0, y: 0 });
chart.update();
});
});
}).addTo(map);
});
&lt;/script&gt;
&lt;hr&gt;
&lt;h3 id="山行記録"&gt;山行記録&lt;/h3&gt;
&lt;h4 id="カラ沢遡行"&gt;カラ沢遡行&lt;/h4&gt;
&lt;p&gt;すべてこれから記入します。&lt;/p&gt;</description></item><item><title>Part 6/最終回 : 日原川下流右岸中段道</title><link>https://montagna-katokeyci.github.io/oohc/posts/2026-09-05/</link><pubDate>Sat, 05 Sep 2026 00:00:00 +0000</pubDate><guid>https://montagna-katokeyci.github.io/oohc/posts/2026-09-05/</guid><description>&lt;p&gt;不老林道終点＝オキノ十二天からはじまった廃径をたどる探索行も最終回。ヒカゲザス尾根を越えるあたりから「もしかして……」と意識していた鞘口のクビレにたどり着いた。まさか全行程をたどれるとは思いもよらなかった。鞘口のクビレからは巳ノ戸林道～ヤケト尾根上段径路と続くので、氷川から唐松谷の前窪出合いに至る、山腹を繋ぐ壮大なルートが完成する。&lt;br&gt;
帰りの青梅線車中でハイボールが美味かった。&lt;/p&gt;
&lt;hr&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;項目&lt;/th&gt;
&lt;th style="text-align: left"&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;記録日&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026年9月5日（土）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;天候&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;長雨の合間、小雨のち曇り・ガス&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;パーティ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;モンターニャ単独（コンディション：右膝痛と腰部打撲）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;アクセス&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;西東京バスで東日原バス停&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;行程&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;東日原バス停、ネズミサス尾根、カラ沢の頭、石尾根、城山、コマ尾根、コマ尾根co1260m付近、金左小屋窪、鷹ノ巣谷中尾根、小六谷、カイキ尾根、稲村岩尾根、巳ノ戸沢、鞘口のクビレ、鷹ノ巣尾根、八丁山、巳ノ戸尾根、東日原バス停&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="コースタイム"&gt;コースタイム&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;08:22～東日原バス停スタート&lt;/li&gt;
&lt;li&gt;10:15～カラ沢の頭～10:42&lt;/li&gt;
&lt;li&gt;10:48～城山からコマ尾根の下降開始&lt;/li&gt;
&lt;li&gt;11:26～前回到達地点、コマ尾根co1260m～11:57&lt;/li&gt;
&lt;li&gt;12:45ごろ～金左小屋窪、二又のすぐ上&lt;/li&gt;
&lt;li&gt;13:12～鷹ノ巣谷中尾根～13:35&lt;/li&gt;
&lt;li&gt;14:35～小六谷～14:45&lt;/li&gt;
&lt;li&gt;15:21～カイキ尾根&lt;/li&gt;
&lt;li&gt;15:27～稲村岩尾根&lt;/li&gt;
&lt;li&gt;15:56～巳ノ戸沢&lt;/li&gt;
&lt;li&gt;16:15～鞘口のクビレ～16:30&lt;/li&gt;
&lt;li&gt;17:07～八丁山&lt;/li&gt;
&lt;li&gt;18:20～中日原バス停フィニッシュ&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="コースマップ"&gt;コースマップ&lt;/h3&gt;
&lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /&gt;
&lt;style&gt;
.gpx-container {
width: 100%;
margin: 1.5rem 0;
border: 1px solid #ccc;
border-radius: 8px;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
font-family: sans-serif;
}
.gpx-map { height: 380px; width: 100%; }
.gpx-summary {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
background: #f8f9fa;
padding: 8px 10px;
border-top: 1px solid #e0e0e0;
border-bottom: 1px solid #e0e0e0;
font-size: 0.8rem;
color: #333;
overflow-x: auto;
white-space: nowrap;
}
.gpx-summary-item {
margin: 0 4px;
}
.gpx-summary-item strong {
color: #007bff;
font-size: 0.95rem;
margin-left: 2px;
}
.gpx-chart-wrapper {
height: 180px;
width: 100%;
padding: 10px;
background: #fafafa;
box-sizing: border-box;
}
.start-marker-icon, .goal-marker-icon {
background: none;
border: none;
font-weight: bold;
font-size: 11px;
color: #ffffff;
text-align: center;
line-height: 18px;
}
&lt;/style&gt;
&lt;div class="gpx-container"&gt;
&lt;div id="map-364703c4" class="gpx-map"&gt;&lt;/div&gt;
&lt;div id="summary-364703c4" class="gpx-summary"&gt;
&lt;div class="gpx-summary-item"&gt;総距離:&lt;strong id="sum-dist-364703c4"&gt;-&lt;/strong&gt; km&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高上り:&lt;strong id="sum-up-364703c4"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高下り:&lt;strong id="sum-down-364703c4"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最高標高:&lt;strong id="sum-max-364703c4"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最低標高:&lt;strong id="sum-min-364703c4"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;/div&gt;
&lt;div class="gpx-chart-wrapper"&gt;
&lt;canvas id="chart-364703c4"&gt;&lt;/canvas&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"&gt;&lt;/script&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-gpx/1.7.0/gpx.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
&lt;script&gt;
window.addEventListener('load', function() {
var gpxUrl = '\/oohc\/posts\/2026-09-05\/20260905_20260905_ed.gpx';
var map = L.map('map-364703c4').setView([0, 0], 10);
L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
attribution: '&lt;a href="https://maps.gsi.go.jp/development/ichiran.html" target="_blank"&gt;国土地理院&lt;/a&gt;',
maxZoom: 18
}).addTo(map);
L.control.scale({
imperial: false,
position: 'bottomleft'
}).addTo(map);
var hoverMarker = null;
var trackPoints = [];
var timeLabels = [];
var ctx = document.getElementById('chart-364703c4').getContext('2d');
var chart = new Chart(ctx, {
type: 'line',
data: {
datasets: [{
label: '標高 (m)',
data: [],
borderColor: '#007bff',
backgroundColor: 'rgba(0, 123, 255, 0.1)',
fill: true,
borderWidth: 1.5,
pointRadius: 0,
pointHoverRadius: 6,
tension: 0.1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
interaction: { mode: 'index', intersect: false },
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
title: function(items) {
var index = items[0].dataIndex;
var timeStr = timeLabels[index] || '';
var distStr = items[0].raw.x.toFixed(2) + ' km';
return timeStr ? '時刻: ' + timeStr + '（距離: ' + distStr + '）' : '距離: ' + distStr;
},
label: function(item) {
return '標高: ' + item.raw.y + ' m';
}
}
}
},
scales: {
x: {
type: 'linear',
display: true,
title: { display: true, text: '距離 (km)', font: { size: 10 } },
ticks: {
font: { size: 10 }
},
grid: { color: 'rgba(0, 0, 0, 0.05)' }
},
y: {
display: true,
title: { display: true, text: '標高 (m)', font: { size: 10 } },
ticks: { font: { size: 10 } },
grid: { color: 'rgba(0, 0, 0, 0.05)' }
}
},
onHover: function(event, activeElements) {
if (activeElements &amp;&amp; activeElements.length &gt; 0) {
var index = activeElements[0].index;
updateHoverMarker(index);
}
}
}
});
function updateHoverMarker(index) {
var pt = trackPoints[index];
if (pt) {
if (!hoverMarker) {
hoverMarker = L.circleMarker([pt.lat, pt.lng], {
radius: 8,
fillColor: '#00ffff',
color: '#ffffff',
weight: 3,
opacity: 1,
fillOpacity: 1
}).addTo(map);
} else {
hoverMarker.setLatLng([pt.lat, pt.lng]);
}
}
}
function extractTrackData(layer) {
var pts = [];
var polylines = [];
if (typeof layer.getLatLngs === 'function') {
var latlngs = layer.getLatLngs();
var flat = Array.isArray(latlngs[0]) ? latlngs.flat(Infinity) : latlngs;
flat.forEach(function(p) {
if (p &amp;&amp; typeof p.lat === 'number') {
pts.push({ lat: p.lat, lng: p.lng });
}
});
if (layer instanceof L.Polyline) {
polylines.push(layer);
}
} else if (typeof layer.eachLayer === 'function') {
layer.eachLayer(function(child) {
var res = extractTrackData(child);
pts = pts.concat(res.pts);
polylines = polylines.concat(res.polylines);
});
}
return { pts: pts, polylines: polylines };
}
fetch(gpxUrl)
.then(function(response) { return response.text(); })
.then(function(xmlText) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlText, "text/xml");
var trkpts = xmlDoc.getElementsByTagName("trkpt");
for (var i = 0; i &lt; trkpts.length; i++) {
var timeNode = trkpts[i].getElementsByTagName("time")[0];
if (timeNode) {
var dateObj = new Date(timeNode.textContent);
var timeStr = dateObj.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
timeLabels.push(timeStr);
} else {
timeLabels.push('');
}
}
})
.catch(function(err) {
console.error("GPX Time Parsing Error:", err);
});
new L.GPX(gpxUrl, {
async: true,
polyline_options: { color: '#ff3300', weight: 5, opacity: 0.8 },
marker_options: { startIconUrl: null, endIconUrl: null, wptIconUrls: null }
}).on('loaded', function(e) {
var gpx = e.target;
map.fitBounds(gpx.getBounds());
var totalDistMeters = gpx.get_distance();
var distKmNum = totalDistMeters / 1000;
var distKmStr = distKmNum.toFixed(2);
var maxEle = Math.round(gpx.get_elevation_max());
var minEle = Math.round(gpx.get_elevation_min());
var gainEle = Math.round(gpx.get_elevation_gain());
var lossEle = Math.round(gpx.get_elevation_loss());
document.getElementById('sum-dist-364703c4').innerText = distKmStr;
document.getElementById('sum-up-364703c4').innerText = gainEle;
document.getElementById('sum-down-364703c4').innerText = lossEle;
document.getElementById('sum-max-364703c4').innerText = maxEle;
document.getElementById('sum-min-364703c4').innerText = minEle;
var eleData = gpx.get_elevation_data();
var chartDataPoints = [];
var extracted = extractTrackData(gpx);
trackPoints = extracted.pts;
if (trackPoints.length &gt; 0) {
var startPt = trackPoints[0];
var endPt = trackPoints[trackPoints.length - 1];
L.circleMarker([startPt.lat, startPt.lng], {
radius: 9,
fillColor: '#28a745',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('スタート', { permanent: false, direction: 'top' });
L.circleMarker([endPt.lat, endPt.lng], {
radius: 9,
fillColor: '#dc3545',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('ゴール', { permanent: false, direction: 'top' });
}
eleData.forEach(function(item) {
var dist = typeof item[0] === 'number' ? item[0] : parseFloat(item[0]);
var ele = Math.round(item[1]);
chartDataPoints.push({
x: parseFloat(dist.toFixed(2)),
y: ele
});
});
var dynamicStepSize = 1.0;
if (distKmNum &lt;= 5) {
dynamicStepSize = 0.5;
} else if (distKmNum &lt;= 20) {
dynamicStepSize = 1.0;
} else if (distKmNum &lt;= 40) {
dynamicStepSize = 5.0;
} else {
dynamicStepSize = 10.0;
}
chart.options.scales.x.max = distKmNum;
var allowedTicks = [];
for (var v = 0; v &lt; distKmNum; v += dynamicStepSize) {
allowedTicks.push(parseFloat(v.toFixed(1)));
}
chart.options.scales.x.ticks.callback = function(value) {
for (var i = 0; i &lt; allowedTicks.length; i++) {
if (Math.abs(value - allowedTicks[i]) &lt; 0.01) {
return value + ' km';
}
}
return '';
};
chart.options.scales.x.afterBuildTicks = function(axis) {
axis.ticks = allowedTicks.map(function(val) {
return { value: val };
});
};
chart.data.datasets[0].data = chartDataPoints;
chart.update();
extracted.polylines.forEach(function(polyline) {
polyline.on('mousemove', function(ev) {
if (!trackPoints.length) return;
var mouseLatLng = ev.latlng;
var closestIndex = 0;
var minDist = Infinity;
for (var i = 0; i &lt; trackPoints.length; i++) {
var d = mouseLatLng.distanceTo(L.latLng(trackPoints[i].lat, trackPoints[i].lng));
if (d &lt; minDist) {
minDist = d;
closestIndex = i;
}
}
updateHoverMarker(closestIndex);
chart.setActiveElements([{ datasetIndex: 0, index: closestIndex }]);
chart.tooltip.setActiveElements([{ datasetIndex: 0, index: closestIndex }], { x: 0, y: 0 });
chart.update();
});
});
}).addTo(map);
});
&lt;/script&gt;
&lt;hr&gt;
&lt;h3 id="山行記録"&gt;山行記録&lt;/h3&gt;
&lt;h4 id="最終回日原川下流右岸中段道コマ尾根から鞘口のクビレまで"&gt;（最終回）日原川下流右岸中段道～コマ尾根から鞘口のクビレまで&lt;/h4&gt;
&lt;p&gt;前回最終到達地点のコマ尾根co1260mから、細いが明瞭な踏み跡をスタートする。水流のない金左小屋窪の二又のすぐ上を横断したあと、中尾根の鼻先を回り終えるまで踏み跡が上下に分かれ、道跡を追いにくい。&lt;br&gt;
小六谷へは急斜面を降り対岸を登り返す。崖道をたどる緊張感と、見下ろす小六谷の一直線の流れがハイライトになる。谷を発って300mは引き続きの険路、崖っぷちの木の根に助けられる。&lt;br&gt;
稲村岩尾根からは「鷹ノ巣山北面」エリア、広く薄くザレて道跡探しに苦労する。幸い傾斜は緩んでいる。鞘口のクビレに近づき明瞭な踏み跡に戻ることができた。&lt;/p&gt;</description></item><item><title>プロフィール</title><link>https://montagna-katokeyci.github.io/oohc/profile/</link><pubDate>Tue, 18 Aug 2026 00:00:00 +0000</pubDate><guid>https://montagna-katokeyci.github.io/oohc/profile/</guid><description>&lt;p&gt;筆者：モンターニャ（加藤キーチ）&lt;/p&gt;
&lt;p&gt;お問い合わせは、oxytonbarあっとまーくgmail.com まで。コピペして@に変えてください。&lt;/p&gt;
&lt;p&gt;/&lt;em&gt;重要～最後までお読みください&lt;/em&gt;/&lt;br&gt;
①繰り返しますが、山行記録は案内を意図していません。記録をなぞった結果について責任を負うことはできません。&lt;br&gt;
②古書を読み込み・あるいは断片的な情報を繋ぎ合わせて「失われた径路」や「知られざる径路」を浮き彫りにし、現代の山行記録として再構築する作業には、膨大な時間と経験の蓄積と労力を要しています。筆者のオリジナルの山行記録をなぞるさいには、&lt;br&gt;
1.該当山行記録のリンクを貼り、出展を明記する&lt;br&gt;
2.筆者に連絡を入れる&lt;br&gt;
以上2点を求めます。節度を欠く輩には、マリアさまの天罰が下ります（本当）。&lt;br&gt;
/&lt;em&gt;～ここまで&lt;/em&gt;/&lt;/p&gt;
&lt;p&gt;オフトレイル歩きのデイ・ハイカー、1961年生まれ。犬と暮らす間に長いブランクが生じました。トレランシューズですが走りません（走れません）。2023年から奥多摩の日原川流域 （ゴンザス尾根～石尾根）にエリアを絞って歩いています。&lt;/p&gt;
&lt;p&gt;スタイル：公共交通機関を利用した日帰りのみ。&lt;br&gt;
信条：マリアさま頼みのイチかバチか。&lt;br&gt;
得意：道迷いと忘れ物。入山口で愚図る。&lt;br&gt;
タブー（やらないこと）：ストックを持つ、ロープを使う、山頂で麺類をズルズルすする、汚い格好のまま電車に乗る。&lt;br&gt;
ex-：もとバックパッカー55ヶ国/1年4ヶ月、もと白い犬の飼主、もとバーテンダー、ル・クレジオとカズオ・イシグロのノーベル文学賞的中も宝くじ当たったことなし。&lt;/p&gt;
&lt;p&gt;2019年から再開した山歩きの記録は、「山と渓谷オンライン」に350回ほどupしています。&lt;br&gt;
&lt;a href="https://www.yamakei-online.com/cl_history/?id=307097" target="_blank" rel="noopener noreferrer"&gt;https://www.yamakei-online.com/cl_history/?id=307097&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;筆者の山行データ&lt;br&gt;
総距離 約7,104.6km（平均20.4km）累計349回&lt;br&gt;
累積標高差 上り約788,828m 下り約774,730m&lt;br&gt;
コースタイム 標準52,270分 自己28,637分 倍率0.55&lt;br&gt;
（山と渓谷オンラインから、2019年2月～2026年7月）&lt;/p&gt;</description></item><item><title>倉沢からヨコスズ尾根</title><link>https://montagna-katokeyci.github.io/oohc/posts/2026-08-16/</link><pubDate>Sun, 16 Aug 2026 00:00:00 +0000</pubDate><guid>https://montagna-katokeyci.github.io/oohc/posts/2026-08-16/</guid><description>&lt;p&gt;かつて倉沢集落とヨコスズ尾根を繋いでいた旧径を歩く。これだけ酔狂な山歩きをしながら、今日まで個人の未踏だった。&lt;br&gt;
サインが多い植林の山中、「水色ビニテ」が行程の概略を案内してくれる。案内してくれてはいるのだが間が遠すぎ、「あのー、途中のルートを知りたいんですけど」が3回あった。&lt;/p&gt;
&lt;hr&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;項目&lt;/th&gt;
&lt;th style="text-align: left"&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;記録日&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026年8月16日（日）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;天候&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;曇り&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;パーティ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;モンターニャ単独&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;アクセス&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;西東京バスで倉沢バス停&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;行程&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="コースタイム"&gt;コースタイム&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;記入中&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="コースマップ"&gt;コースマップ&lt;/h3&gt;
&lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /&gt;
&lt;style&gt;
.gpx-container {
width: 100%;
margin: 1.5rem 0;
border: 1px solid #ccc;
border-radius: 8px;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
font-family: sans-serif;
}
.gpx-map { height: 380px; width: 100%; }
.gpx-summary {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
background: #f8f9fa;
padding: 8px 10px;
border-top: 1px solid #e0e0e0;
border-bottom: 1px solid #e0e0e0;
font-size: 0.8rem;
color: #333;
overflow-x: auto;
white-space: nowrap;
}
.gpx-summary-item {
margin: 0 4px;
}
.gpx-summary-item strong {
color: #007bff;
font-size: 0.95rem;
margin-left: 2px;
}
.gpx-chart-wrapper {
height: 180px;
width: 100%;
padding: 10px;
background: #fafafa;
box-sizing: border-box;
}
.start-marker-icon, .goal-marker-icon {
background: none;
border: none;
font-weight: bold;
font-size: 11px;
color: #ffffff;
text-align: center;
line-height: 18px;
}
&lt;/style&gt;
&lt;div class="gpx-container"&gt;
&lt;div id="map-83fc718b" class="gpx-map"&gt;&lt;/div&gt;
&lt;div id="summary-83fc718b" class="gpx-summary"&gt;
&lt;div class="gpx-summary-item"&gt;総距離:&lt;strong id="sum-dist-83fc718b"&gt;-&lt;/strong&gt; km&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高上り:&lt;strong id="sum-up-83fc718b"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高下り:&lt;strong id="sum-down-83fc718b"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最高標高:&lt;strong id="sum-max-83fc718b"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最低標高:&lt;strong id="sum-min-83fc718b"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;/div&gt;
&lt;div class="gpx-chart-wrapper"&gt;
&lt;canvas id="chart-83fc718b"&gt;&lt;/canvas&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"&gt;&lt;/script&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-gpx/1.7.0/gpx.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
&lt;script&gt;
window.addEventListener('load', function() {
var gpxUrl = '\/oohc\/posts\/2026-08-16\/20260816_20260816.gpx';
var map = L.map('map-83fc718b').setView([0, 0], 10);
L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
attribution: '&lt;a href="https://maps.gsi.go.jp/development/ichiran.html" target="_blank"&gt;国土地理院&lt;/a&gt;',
maxZoom: 18
}).addTo(map);
L.control.scale({
imperial: false,
position: 'bottomleft'
}).addTo(map);
var hoverMarker = null;
var trackPoints = [];
var timeLabels = [];
var ctx = document.getElementById('chart-83fc718b').getContext('2d');
var chart = new Chart(ctx, {
type: 'line',
data: {
datasets: [{
label: '標高 (m)',
data: [],
borderColor: '#007bff',
backgroundColor: 'rgba(0, 123, 255, 0.1)',
fill: true,
borderWidth: 1.5,
pointRadius: 0,
pointHoverRadius: 6,
tension: 0.1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
interaction: { mode: 'index', intersect: false },
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
title: function(items) {
var index = items[0].dataIndex;
var timeStr = timeLabels[index] || '';
var distStr = items[0].raw.x.toFixed(2) + ' km';
return timeStr ? '時刻: ' + timeStr + '（距離: ' + distStr + '）' : '距離: ' + distStr;
},
label: function(item) {
return '標高: ' + item.raw.y + ' m';
}
}
}
},
scales: {
x: {
type: 'linear',
display: true,
title: { display: true, text: '距離 (km)', font: { size: 10 } },
ticks: {
font: { size: 10 }
},
grid: { color: 'rgba(0, 0, 0, 0.05)' }
},
y: {
display: true,
title: { display: true, text: '標高 (m)', font: { size: 10 } },
ticks: { font: { size: 10 } },
grid: { color: 'rgba(0, 0, 0, 0.05)' }
}
},
onHover: function(event, activeElements) {
if (activeElements &amp;&amp; activeElements.length &gt; 0) {
var index = activeElements[0].index;
updateHoverMarker(index);
}
}
}
});
function updateHoverMarker(index) {
var pt = trackPoints[index];
if (pt) {
if (!hoverMarker) {
hoverMarker = L.circleMarker([pt.lat, pt.lng], {
radius: 8,
fillColor: '#00ffff',
color: '#ffffff',
weight: 3,
opacity: 1,
fillOpacity: 1
}).addTo(map);
} else {
hoverMarker.setLatLng([pt.lat, pt.lng]);
}
}
}
function extractTrackData(layer) {
var pts = [];
var polylines = [];
if (typeof layer.getLatLngs === 'function') {
var latlngs = layer.getLatLngs();
var flat = Array.isArray(latlngs[0]) ? latlngs.flat(Infinity) : latlngs;
flat.forEach(function(p) {
if (p &amp;&amp; typeof p.lat === 'number') {
pts.push({ lat: p.lat, lng: p.lng });
}
});
if (layer instanceof L.Polyline) {
polylines.push(layer);
}
} else if (typeof layer.eachLayer === 'function') {
layer.eachLayer(function(child) {
var res = extractTrackData(child);
pts = pts.concat(res.pts);
polylines = polylines.concat(res.polylines);
});
}
return { pts: pts, polylines: polylines };
}
fetch(gpxUrl)
.then(function(response) { return response.text(); })
.then(function(xmlText) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlText, "text/xml");
var trkpts = xmlDoc.getElementsByTagName("trkpt");
for (var i = 0; i &lt; trkpts.length; i++) {
var timeNode = trkpts[i].getElementsByTagName("time")[0];
if (timeNode) {
var dateObj = new Date(timeNode.textContent);
var timeStr = dateObj.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
timeLabels.push(timeStr);
} else {
timeLabels.push('');
}
}
})
.catch(function(err) {
console.error("GPX Time Parsing Error:", err);
});
new L.GPX(gpxUrl, {
async: true,
polyline_options: { color: '#ff3300', weight: 5, opacity: 0.8 },
marker_options: { startIconUrl: null, endIconUrl: null, wptIconUrls: null }
}).on('loaded', function(e) {
var gpx = e.target;
map.fitBounds(gpx.getBounds());
var totalDistMeters = gpx.get_distance();
var distKmNum = totalDistMeters / 1000;
var distKmStr = distKmNum.toFixed(2);
var maxEle = Math.round(gpx.get_elevation_max());
var minEle = Math.round(gpx.get_elevation_min());
var gainEle = Math.round(gpx.get_elevation_gain());
var lossEle = Math.round(gpx.get_elevation_loss());
document.getElementById('sum-dist-83fc718b').innerText = distKmStr;
document.getElementById('sum-up-83fc718b').innerText = gainEle;
document.getElementById('sum-down-83fc718b').innerText = lossEle;
document.getElementById('sum-max-83fc718b').innerText = maxEle;
document.getElementById('sum-min-83fc718b').innerText = minEle;
var eleData = gpx.get_elevation_data();
var chartDataPoints = [];
var extracted = extractTrackData(gpx);
trackPoints = extracted.pts;
if (trackPoints.length &gt; 0) {
var startPt = trackPoints[0];
var endPt = trackPoints[trackPoints.length - 1];
L.circleMarker([startPt.lat, startPt.lng], {
radius: 9,
fillColor: '#28a745',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('スタート', { permanent: false, direction: 'top' });
L.circleMarker([endPt.lat, endPt.lng], {
radius: 9,
fillColor: '#dc3545',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('ゴール', { permanent: false, direction: 'top' });
}
eleData.forEach(function(item) {
var dist = typeof item[0] === 'number' ? item[0] : parseFloat(item[0]);
var ele = Math.round(item[1]);
chartDataPoints.push({
x: parseFloat(dist.toFixed(2)),
y: ele
});
});
var dynamicStepSize = 1.0;
if (distKmNum &lt;= 5) {
dynamicStepSize = 0.5;
} else if (distKmNum &lt;= 20) {
dynamicStepSize = 1.0;
} else if (distKmNum &lt;= 40) {
dynamicStepSize = 5.0;
} else {
dynamicStepSize = 10.0;
}
chart.options.scales.x.max = distKmNum;
var allowedTicks = [];
for (var v = 0; v &lt; distKmNum; v += dynamicStepSize) {
allowedTicks.push(parseFloat(v.toFixed(1)));
}
chart.options.scales.x.ticks.callback = function(value) {
for (var i = 0; i &lt; allowedTicks.length; i++) {
if (Math.abs(value - allowedTicks[i]) &lt; 0.01) {
return value + ' km';
}
}
return '';
};
chart.options.scales.x.afterBuildTicks = function(axis) {
axis.ticks = allowedTicks.map(function(val) {
return { value: val };
});
};
chart.data.datasets[0].data = chartDataPoints;
chart.update();
extracted.polylines.forEach(function(polyline) {
polyline.on('mousemove', function(ev) {
if (!trackPoints.length) return;
var mouseLatLng = ev.latlng;
var closestIndex = 0;
var minDist = Infinity;
for (var i = 0; i &lt; trackPoints.length; i++) {
var d = mouseLatLng.distanceTo(L.latLng(trackPoints[i].lat, trackPoints[i].lng));
if (d &lt; minDist) {
minDist = d;
closestIndex = i;
}
}
updateHoverMarker(closestIndex);
chart.setActiveElements([{ datasetIndex: 0, index: closestIndex }]);
chart.tooltip.setActiveElements([{ datasetIndex: 0, index: closestIndex }], { x: 0, y: 0 });
chart.update();
});
});
}).addTo(map);
});
&lt;/script&gt;
&lt;hr&gt;
&lt;h3 id="山行記録"&gt;山行記録&lt;/h3&gt;
&lt;p&gt;記入中&lt;/p&gt;</description></item><item><title>Part 5 : 日原川下流右岸中段道</title><link>https://montagna-katokeyci.github.io/oohc/posts/2026-08-11/</link><pubDate>Tue, 11 Aug 2026 00:00:00 +0000</pubDate><guid>https://montagna-katokeyci.github.io/oohc/posts/2026-08-11/</guid><description>&lt;p&gt;亀の歩みの5回目、なんとかコマ尾根まで回り込めた。ただし、赤ナギ窪を横断する前後でかなり標高を違えてしまう。渡った左岸で振り返っても、右岸に道はない。赤ナギ窪そのものが岩盤をさらしている状態なので、「かつて通っていたルート」の解明は非常に困難だろう。&lt;/p&gt;
&lt;hr&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;項目&lt;/th&gt;
&lt;th style="text-align: left"&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;記録日&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026年8月11日（火）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;天候&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;陽射しの届く薄曇り、風あり→午後風強し、湿気なし&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;パーティ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;モンターニャ単独&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;アクセス&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;西東京バスで東日原バス停&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;行程&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="コースタイム"&gt;コースタイム&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;記入中*&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="コースマップ"&gt;コースマップ&lt;/h3&gt;
&lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /&gt;
&lt;style&gt;
.gpx-container {
width: 100%;
margin: 1.5rem 0;
border: 1px solid #ccc;
border-radius: 8px;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
font-family: sans-serif;
}
.gpx-map { height: 380px; width: 100%; }
.gpx-summary {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
background: #f8f9fa;
padding: 8px 10px;
border-top: 1px solid #e0e0e0;
border-bottom: 1px solid #e0e0e0;
font-size: 0.8rem;
color: #333;
overflow-x: auto;
white-space: nowrap;
}
.gpx-summary-item {
margin: 0 4px;
}
.gpx-summary-item strong {
color: #007bff;
font-size: 0.95rem;
margin-left: 2px;
}
.gpx-chart-wrapper {
height: 180px;
width: 100%;
padding: 10px;
background: #fafafa;
box-sizing: border-box;
}
.start-marker-icon, .goal-marker-icon {
background: none;
border: none;
font-weight: bold;
font-size: 11px;
color: #ffffff;
text-align: center;
line-height: 18px;
}
&lt;/style&gt;
&lt;div class="gpx-container"&gt;
&lt;div id="map-67a2e86c" class="gpx-map"&gt;&lt;/div&gt;
&lt;div id="summary-67a2e86c" class="gpx-summary"&gt;
&lt;div class="gpx-summary-item"&gt;総距離:&lt;strong id="sum-dist-67a2e86c"&gt;-&lt;/strong&gt; km&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高上り:&lt;strong id="sum-up-67a2e86c"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高下り:&lt;strong id="sum-down-67a2e86c"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最高標高:&lt;strong id="sum-max-67a2e86c"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最低標高:&lt;strong id="sum-min-67a2e86c"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;/div&gt;
&lt;div class="gpx-chart-wrapper"&gt;
&lt;canvas id="chart-67a2e86c"&gt;&lt;/canvas&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"&gt;&lt;/script&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-gpx/1.7.0/gpx.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
&lt;script&gt;
window.addEventListener('load', function() {
var gpxUrl = '\/oohc\/posts\/2026-08-11\/20260811_20260811.gpx';
var map = L.map('map-67a2e86c').setView([0, 0], 10);
L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
attribution: '&lt;a href="https://maps.gsi.go.jp/development/ichiran.html" target="_blank"&gt;国土地理院&lt;/a&gt;',
maxZoom: 18
}).addTo(map);
L.control.scale({
imperial: false,
position: 'bottomleft'
}).addTo(map);
var hoverMarker = null;
var trackPoints = [];
var timeLabels = [];
var ctx = document.getElementById('chart-67a2e86c').getContext('2d');
var chart = new Chart(ctx, {
type: 'line',
data: {
datasets: [{
label: '標高 (m)',
data: [],
borderColor: '#007bff',
backgroundColor: 'rgba(0, 123, 255, 0.1)',
fill: true,
borderWidth: 1.5,
pointRadius: 0,
pointHoverRadius: 6,
tension: 0.1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
interaction: { mode: 'index', intersect: false },
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
title: function(items) {
var index = items[0].dataIndex;
var timeStr = timeLabels[index] || '';
var distStr = items[0].raw.x.toFixed(2) + ' km';
return timeStr ? '時刻: ' + timeStr + '（距離: ' + distStr + '）' : '距離: ' + distStr;
},
label: function(item) {
return '標高: ' + item.raw.y + ' m';
}
}
}
},
scales: {
x: {
type: 'linear',
display: true,
title: { display: true, text: '距離 (km)', font: { size: 10 } },
ticks: {
font: { size: 10 }
},
grid: { color: 'rgba(0, 0, 0, 0.05)' }
},
y: {
display: true,
title: { display: true, text: '標高 (m)', font: { size: 10 } },
ticks: { font: { size: 10 } },
grid: { color: 'rgba(0, 0, 0, 0.05)' }
}
},
onHover: function(event, activeElements) {
if (activeElements &amp;&amp; activeElements.length &gt; 0) {
var index = activeElements[0].index;
updateHoverMarker(index);
}
}
}
});
function updateHoverMarker(index) {
var pt = trackPoints[index];
if (pt) {
if (!hoverMarker) {
hoverMarker = L.circleMarker([pt.lat, pt.lng], {
radius: 8,
fillColor: '#00ffff',
color: '#ffffff',
weight: 3,
opacity: 1,
fillOpacity: 1
}).addTo(map);
} else {
hoverMarker.setLatLng([pt.lat, pt.lng]);
}
}
}
function extractTrackData(layer) {
var pts = [];
var polylines = [];
if (typeof layer.getLatLngs === 'function') {
var latlngs = layer.getLatLngs();
var flat = Array.isArray(latlngs[0]) ? latlngs.flat(Infinity) : latlngs;
flat.forEach(function(p) {
if (p &amp;&amp; typeof p.lat === 'number') {
pts.push({ lat: p.lat, lng: p.lng });
}
});
if (layer instanceof L.Polyline) {
polylines.push(layer);
}
} else if (typeof layer.eachLayer === 'function') {
layer.eachLayer(function(child) {
var res = extractTrackData(child);
pts = pts.concat(res.pts);
polylines = polylines.concat(res.polylines);
});
}
return { pts: pts, polylines: polylines };
}
fetch(gpxUrl)
.then(function(response) { return response.text(); })
.then(function(xmlText) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlText, "text/xml");
var trkpts = xmlDoc.getElementsByTagName("trkpt");
for (var i = 0; i &lt; trkpts.length; i++) {
var timeNode = trkpts[i].getElementsByTagName("time")[0];
if (timeNode) {
var dateObj = new Date(timeNode.textContent);
var timeStr = dateObj.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
timeLabels.push(timeStr);
} else {
timeLabels.push('');
}
}
})
.catch(function(err) {
console.error("GPX Time Parsing Error:", err);
});
new L.GPX(gpxUrl, {
async: true,
polyline_options: { color: '#ff3300', weight: 5, opacity: 0.8 },
marker_options: { startIconUrl: null, endIconUrl: null, wptIconUrls: null }
}).on('loaded', function(e) {
var gpx = e.target;
map.fitBounds(gpx.getBounds());
var totalDistMeters = gpx.get_distance();
var distKmNum = totalDistMeters / 1000;
var distKmStr = distKmNum.toFixed(2);
var maxEle = Math.round(gpx.get_elevation_max());
var minEle = Math.round(gpx.get_elevation_min());
var gainEle = Math.round(gpx.get_elevation_gain());
var lossEle = Math.round(gpx.get_elevation_loss());
document.getElementById('sum-dist-67a2e86c').innerText = distKmStr;
document.getElementById('sum-up-67a2e86c').innerText = gainEle;
document.getElementById('sum-down-67a2e86c').innerText = lossEle;
document.getElementById('sum-max-67a2e86c').innerText = maxEle;
document.getElementById('sum-min-67a2e86c').innerText = minEle;
var eleData = gpx.get_elevation_data();
var chartDataPoints = [];
var extracted = extractTrackData(gpx);
trackPoints = extracted.pts;
if (trackPoints.length &gt; 0) {
var startPt = trackPoints[0];
var endPt = trackPoints[trackPoints.length - 1];
L.circleMarker([startPt.lat, startPt.lng], {
radius: 9,
fillColor: '#28a745',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('スタート', { permanent: false, direction: 'top' });
L.circleMarker([endPt.lat, endPt.lng], {
radius: 9,
fillColor: '#dc3545',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('ゴール', { permanent: false, direction: 'top' });
}
eleData.forEach(function(item) {
var dist = typeof item[0] === 'number' ? item[0] : parseFloat(item[0]);
var ele = Math.round(item[1]);
chartDataPoints.push({
x: parseFloat(dist.toFixed(2)),
y: ele
});
});
var dynamicStepSize = 1.0;
if (distKmNum &lt;= 5) {
dynamicStepSize = 0.5;
} else if (distKmNum &lt;= 20) {
dynamicStepSize = 1.0;
} else if (distKmNum &lt;= 40) {
dynamicStepSize = 5.0;
} else {
dynamicStepSize = 10.0;
}
chart.options.scales.x.max = distKmNum;
var allowedTicks = [];
for (var v = 0; v &lt; distKmNum; v += dynamicStepSize) {
allowedTicks.push(parseFloat(v.toFixed(1)));
}
chart.options.scales.x.ticks.callback = function(value) {
for (var i = 0; i &lt; allowedTicks.length; i++) {
if (Math.abs(value - allowedTicks[i]) &lt; 0.01) {
return value + ' km';
}
}
return '';
};
chart.options.scales.x.afterBuildTicks = function(axis) {
axis.ticks = allowedTicks.map(function(val) {
return { value: val };
});
};
chart.data.datasets[0].data = chartDataPoints;
chart.update();
extracted.polylines.forEach(function(polyline) {
polyline.on('mousemove', function(ev) {
if (!trackPoints.length) return;
var mouseLatLng = ev.latlng;
var closestIndex = 0;
var minDist = Infinity;
for (var i = 0; i &lt; trackPoints.length; i++) {
var d = mouseLatLng.distanceTo(L.latLng(trackPoints[i].lat, trackPoints[i].lng));
if (d &lt; minDist) {
minDist = d;
closestIndex = i;
}
}
updateHoverMarker(closestIndex);
chart.setActiveElements([{ datasetIndex: 0, index: closestIndex }]);
chart.tooltip.setActiveElements([{ datasetIndex: 0, index: closestIndex }], { x: 0, y: 0 });
chart.update();
});
});
}).addTo(map);
});
&lt;/script&gt;
&lt;hr&gt;
&lt;h3 id="山行記録"&gt;山行記録&lt;/h3&gt;
&lt;p&gt;記入中です&lt;/p&gt;</description></item><item><title>日向沢林道</title><link>https://montagna-katokeyci.github.io/oohc/posts/2026-08-02/</link><pubDate>Sun, 02 Aug 2026 00:00:00 +0000</pubDate><guid>https://montagna-katokeyci.github.io/oohc/posts/2026-08-02/</guid><description>&lt;p&gt;日向沢林道を終点まで歩いたが、踊平のトンネルから終点まで、すでに道の体をなしていない。前週の疲れが残り、「息抜きの山歩き」コースを選んだつもりが。やたらと汗をかき、激しく疲労した。ここ2年のなかではいちばんの疲れ具合で、熱中症にならぬよう、マリアさまに祈りながらフラフラ歩いた。&lt;/p&gt;
&lt;hr&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;項目&lt;/th&gt;
&lt;th style="text-align: left"&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;記録日&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026年8月2日（日）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;天候&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;雲量多い晴れ→曇り、弱い風あり&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;パーティ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;モンターニャ単独&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;アクセス&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;西東京バスて川乗橋バス停&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;行程&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="コースタイム"&gt;コースタイム&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;08:00～川乗橋バス停スタート&lt;/li&gt;
&lt;li&gt;08:27～川乗山登山口（細倉橋）&lt;/li&gt;
&lt;li&gt;09:19～林道分岐（林道川乗線・林道日向沢線）&lt;/li&gt;
&lt;li&gt;09:29～川乗林道終点付近～09:54&lt;/li&gt;
&lt;li&gt;記入中&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="コースマップ"&gt;コースマップ&lt;/h3&gt;
&lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /&gt;
&lt;style&gt;
.gpx-container {
width: 100%;
margin: 1.5rem 0;
border: 1px solid #ccc;
border-radius: 8px;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
font-family: sans-serif;
}
.gpx-map { height: 380px; width: 100%; }
.gpx-summary {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
background: #f8f9fa;
padding: 8px 10px;
border-top: 1px solid #e0e0e0;
border-bottom: 1px solid #e0e0e0;
font-size: 0.8rem;
color: #333;
overflow-x: auto;
white-space: nowrap;
}
.gpx-summary-item {
margin: 0 4px;
}
.gpx-summary-item strong {
color: #007bff;
font-size: 0.95rem;
margin-left: 2px;
}
.gpx-chart-wrapper {
height: 180px;
width: 100%;
padding: 10px;
background: #fafafa;
box-sizing: border-box;
}
.start-marker-icon, .goal-marker-icon {
background: none;
border: none;
font-weight: bold;
font-size: 11px;
color: #ffffff;
text-align: center;
line-height: 18px;
}
&lt;/style&gt;
&lt;div class="gpx-container"&gt;
&lt;div id="map-7a6a14db" class="gpx-map"&gt;&lt;/div&gt;
&lt;div id="summary-7a6a14db" class="gpx-summary"&gt;
&lt;div class="gpx-summary-item"&gt;総距離:&lt;strong id="sum-dist-7a6a14db"&gt;-&lt;/strong&gt; km&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高上り:&lt;strong id="sum-up-7a6a14db"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高下り:&lt;strong id="sum-down-7a6a14db"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最高標高:&lt;strong id="sum-max-7a6a14db"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最低標高:&lt;strong id="sum-min-7a6a14db"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;/div&gt;
&lt;div class="gpx-chart-wrapper"&gt;
&lt;canvas id="chart-7a6a14db"&gt;&lt;/canvas&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"&gt;&lt;/script&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-gpx/1.7.0/gpx.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
&lt;script&gt;
window.addEventListener('load', function() {
var gpxUrl = '\/oohc\/posts\/2026-08-02\/20260802_20260802.gpx';
var map = L.map('map-7a6a14db').setView([0, 0], 10);
L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
attribution: '&lt;a href="https://maps.gsi.go.jp/development/ichiran.html" target="_blank"&gt;国土地理院&lt;/a&gt;',
maxZoom: 18
}).addTo(map);
L.control.scale({
imperial: false,
position: 'bottomleft'
}).addTo(map);
var hoverMarker = null;
var trackPoints = [];
var timeLabels = [];
var ctx = document.getElementById('chart-7a6a14db').getContext('2d');
var chart = new Chart(ctx, {
type: 'line',
data: {
datasets: [{
label: '標高 (m)',
data: [],
borderColor: '#007bff',
backgroundColor: 'rgba(0, 123, 255, 0.1)',
fill: true,
borderWidth: 1.5,
pointRadius: 0,
pointHoverRadius: 6,
tension: 0.1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
interaction: { mode: 'index', intersect: false },
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
title: function(items) {
var index = items[0].dataIndex;
var timeStr = timeLabels[index] || '';
var distStr = items[0].raw.x.toFixed(2) + ' km';
return timeStr ? '時刻: ' + timeStr + '（距離: ' + distStr + '）' : '距離: ' + distStr;
},
label: function(item) {
return '標高: ' + item.raw.y + ' m';
}
}
}
},
scales: {
x: {
type: 'linear',
display: true,
title: { display: true, text: '距離 (km)', font: { size: 10 } },
ticks: {
font: { size: 10 }
},
grid: { color: 'rgba(0, 0, 0, 0.05)' }
},
y: {
display: true,
title: { display: true, text: '標高 (m)', font: { size: 10 } },
ticks: { font: { size: 10 } },
grid: { color: 'rgba(0, 0, 0, 0.05)' }
}
},
onHover: function(event, activeElements) {
if (activeElements &amp;&amp; activeElements.length &gt; 0) {
var index = activeElements[0].index;
updateHoverMarker(index);
}
}
}
});
function updateHoverMarker(index) {
var pt = trackPoints[index];
if (pt) {
if (!hoverMarker) {
hoverMarker = L.circleMarker([pt.lat, pt.lng], {
radius: 8,
fillColor: '#00ffff',
color: '#ffffff',
weight: 3,
opacity: 1,
fillOpacity: 1
}).addTo(map);
} else {
hoverMarker.setLatLng([pt.lat, pt.lng]);
}
}
}
function extractTrackData(layer) {
var pts = [];
var polylines = [];
if (typeof layer.getLatLngs === 'function') {
var latlngs = layer.getLatLngs();
var flat = Array.isArray(latlngs[0]) ? latlngs.flat(Infinity) : latlngs;
flat.forEach(function(p) {
if (p &amp;&amp; typeof p.lat === 'number') {
pts.push({ lat: p.lat, lng: p.lng });
}
});
if (layer instanceof L.Polyline) {
polylines.push(layer);
}
} else if (typeof layer.eachLayer === 'function') {
layer.eachLayer(function(child) {
var res = extractTrackData(child);
pts = pts.concat(res.pts);
polylines = polylines.concat(res.polylines);
});
}
return { pts: pts, polylines: polylines };
}
fetch(gpxUrl)
.then(function(response) { return response.text(); })
.then(function(xmlText) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlText, "text/xml");
var trkpts = xmlDoc.getElementsByTagName("trkpt");
for (var i = 0; i &lt; trkpts.length; i++) {
var timeNode = trkpts[i].getElementsByTagName("time")[0];
if (timeNode) {
var dateObj = new Date(timeNode.textContent);
var timeStr = dateObj.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
timeLabels.push(timeStr);
} else {
timeLabels.push('');
}
}
})
.catch(function(err) {
console.error("GPX Time Parsing Error:", err);
});
new L.GPX(gpxUrl, {
async: true,
polyline_options: { color: '#ff3300', weight: 5, opacity: 0.8 },
marker_options: { startIconUrl: null, endIconUrl: null, wptIconUrls: null }
}).on('loaded', function(e) {
var gpx = e.target;
map.fitBounds(gpx.getBounds());
var totalDistMeters = gpx.get_distance();
var distKmNum = totalDistMeters / 1000;
var distKmStr = distKmNum.toFixed(2);
var maxEle = Math.round(gpx.get_elevation_max());
var minEle = Math.round(gpx.get_elevation_min());
var gainEle = Math.round(gpx.get_elevation_gain());
var lossEle = Math.round(gpx.get_elevation_loss());
document.getElementById('sum-dist-7a6a14db').innerText = distKmStr;
document.getElementById('sum-up-7a6a14db').innerText = gainEle;
document.getElementById('sum-down-7a6a14db').innerText = lossEle;
document.getElementById('sum-max-7a6a14db').innerText = maxEle;
document.getElementById('sum-min-7a6a14db').innerText = minEle;
var eleData = gpx.get_elevation_data();
var chartDataPoints = [];
var extracted = extractTrackData(gpx);
trackPoints = extracted.pts;
if (trackPoints.length &gt; 0) {
var startPt = trackPoints[0];
var endPt = trackPoints[trackPoints.length - 1];
L.circleMarker([startPt.lat, startPt.lng], {
radius: 9,
fillColor: '#28a745',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('スタート', { permanent: false, direction: 'top' });
L.circleMarker([endPt.lat, endPt.lng], {
radius: 9,
fillColor: '#dc3545',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('ゴール', { permanent: false, direction: 'top' });
}
eleData.forEach(function(item) {
var dist = typeof item[0] === 'number' ? item[0] : parseFloat(item[0]);
var ele = Math.round(item[1]);
chartDataPoints.push({
x: parseFloat(dist.toFixed(2)),
y: ele
});
});
var dynamicStepSize = 1.0;
if (distKmNum &lt;= 5) {
dynamicStepSize = 0.5;
} else if (distKmNum &lt;= 20) {
dynamicStepSize = 1.0;
} else if (distKmNum &lt;= 40) {
dynamicStepSize = 5.0;
} else {
dynamicStepSize = 10.0;
}
chart.options.scales.x.max = distKmNum;
var allowedTicks = [];
for (var v = 0; v &lt; distKmNum; v += dynamicStepSize) {
allowedTicks.push(parseFloat(v.toFixed(1)));
}
chart.options.scales.x.ticks.callback = function(value) {
for (var i = 0; i &lt; allowedTicks.length; i++) {
if (Math.abs(value - allowedTicks[i]) &lt; 0.01) {
return value + ' km';
}
}
return '';
};
chart.options.scales.x.afterBuildTicks = function(axis) {
axis.ticks = allowedTicks.map(function(val) {
return { value: val };
});
};
chart.data.datasets[0].data = chartDataPoints;
chart.update();
extracted.polylines.forEach(function(polyline) {
polyline.on('mousemove', function(ev) {
if (!trackPoints.length) return;
var mouseLatLng = ev.latlng;
var closestIndex = 0;
var minDist = Infinity;
for (var i = 0; i &lt; trackPoints.length; i++) {
var d = mouseLatLng.distanceTo(L.latLng(trackPoints[i].lat, trackPoints[i].lng));
if (d &lt; minDist) {
minDist = d;
closestIndex = i;
}
}
updateHoverMarker(closestIndex);
chart.setActiveElements([{ datasetIndex: 0, index: closestIndex }]);
chart.tooltip.setActiveElements([{ datasetIndex: 0, index: closestIndex }], { x: 0, y: 0 });
chart.update();
});
});
}).addTo(map);
});
&lt;/script&gt;
&lt;hr&gt;
&lt;h3 id="山行記録"&gt;山行記録&lt;/h3&gt;
&lt;p&gt;記入中です&lt;/p&gt;</description></item><item><title>ジャンダルム周回 ver.2026（西穂高岳～奥穂高岳）</title><link>https://montagna-katokeyci.github.io/oohc/posts/2026-07-26/</link><pubDate>Sun, 26 Jul 2026 00:00:00 +0000</pubDate><guid>https://montagna-katokeyci.github.io/oohc/posts/2026-07-26/</guid><description>&lt;p&gt;年に一度の北アルプス詣で、毎度おなじコース、６回目。&lt;br&gt;
今年もなんとかジャンダルム周回コースを歩き通せた。天気予報が悪いほうにハズれてジャンダルムへ向かう途中から濃いガス、奥穂の手前から小雨が降りだし、吊り尾根では雷鳴が轟き稲妻が光る悪天候になってしまった。前穂に上がるのを断念し、岩も鎖もツルツルすべる吊り尾根と重太郎新道を逃げるように下った。&lt;/p&gt;
&lt;hr&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;項目&lt;/th&gt;
&lt;th style="text-align: left"&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;記録日&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026年7月26日（日）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;天候&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;晴れ→曇り→ガスと小雨と雷→ときに本降り&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;パーティ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;モンターニャ単独&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;アクセス&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;前日7月25日、新宿駅10:00（あずさ13号）～12:37松本駅13:29（アルピコ交通上高地線）～13:59新島々駅14:10（アルピコ交通バス）～15:15上高地バスターミナル、西糸屋山荘大部屋宿泊。当日26日、上高地バスターミナル17:15～18:20新島々駅18:41～19:10松本駅20:10（あずさ60号）～22:45新宿駅 ※アルピコ交通バスは予約制&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;行程&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;西穂登山口（上高地田代橋）、西穂山荘、西穂高岳、天狗岳、ジャンダルム、奥穂高岳、吊尾根、紀美子平、重太郎新道、河童橋&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="コースタイム"&gt;コースタイム&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;01:34〜西糸屋山荘スタート&lt;/li&gt;
&lt;li&gt;01:49〜田代橋 西穂高岳登山口〜01:52&lt;/li&gt;
&lt;li&gt;03:19〜西穂山荘〜03:24&lt;/li&gt;
&lt;li&gt;05:09〜西穂高岳&lt;/li&gt;
&lt;li&gt;05:19〜（P1）〜05:34&lt;/li&gt;
&lt;li&gt;05:58〜（間ノ岳手前のピーク）〜06:09&lt;/li&gt;
&lt;li&gt;07:13〜天狗の頭〜07:17&lt;/li&gt;
&lt;li&gt;08:38〜ジャンダルム〜08:44&lt;/li&gt;
&lt;li&gt;09:54〜奥穂高岳〜10:17&lt;/li&gt;
&lt;li&gt;11:38〜紀美子平&lt;/li&gt;
&lt;li&gt;13:25ごろ〜岳沢小屋付近&lt;/li&gt;
&lt;li&gt;14:52〜河童橋フィニッシュ&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="コースマップ"&gt;コースマップ&lt;/h3&gt;
&lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /&gt;
&lt;style&gt;
.gpx-container {
width: 100%;
margin: 1.5rem 0;
border: 1px solid #ccc;
border-radius: 8px;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
font-family: sans-serif;
}
.gpx-map { height: 380px; width: 100%; }
.gpx-summary {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
background: #f8f9fa;
padding: 8px 10px;
border-top: 1px solid #e0e0e0;
border-bottom: 1px solid #e0e0e0;
font-size: 0.8rem;
color: #333;
overflow-x: auto;
white-space: nowrap;
}
.gpx-summary-item {
margin: 0 4px;
}
.gpx-summary-item strong {
color: #007bff;
font-size: 0.95rem;
margin-left: 2px;
}
.gpx-chart-wrapper {
height: 180px;
width: 100%;
padding: 10px;
background: #fafafa;
box-sizing: border-box;
}
.start-marker-icon, .goal-marker-icon {
background: none;
border: none;
font-weight: bold;
font-size: 11px;
color: #ffffff;
text-align: center;
line-height: 18px;
}
&lt;/style&gt;
&lt;div class="gpx-container"&gt;
&lt;div id="map-e738978e" class="gpx-map"&gt;&lt;/div&gt;
&lt;div id="summary-e738978e" class="gpx-summary"&gt;
&lt;div class="gpx-summary-item"&gt;総距離:&lt;strong id="sum-dist-e738978e"&gt;-&lt;/strong&gt; km&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高上り:&lt;strong id="sum-up-e738978e"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高下り:&lt;strong id="sum-down-e738978e"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最高標高:&lt;strong id="sum-max-e738978e"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最低標高:&lt;strong id="sum-min-e738978e"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;/div&gt;
&lt;div class="gpx-chart-wrapper"&gt;
&lt;canvas id="chart-e738978e"&gt;&lt;/canvas&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"&gt;&lt;/script&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-gpx/1.7.0/gpx.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
&lt;script&gt;
window.addEventListener('load', function() {
var gpxUrl = '\/oohc\/posts\/2026-07-26\/20260726_20260726.gpx';
var map = L.map('map-e738978e').setView([0, 0], 10);
L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
attribution: '&lt;a href="https://maps.gsi.go.jp/development/ichiran.html" target="_blank"&gt;国土地理院&lt;/a&gt;',
maxZoom: 18
}).addTo(map);
L.control.scale({
imperial: false,
position: 'bottomleft'
}).addTo(map);
var hoverMarker = null;
var trackPoints = [];
var timeLabels = [];
var ctx = document.getElementById('chart-e738978e').getContext('2d');
var chart = new Chart(ctx, {
type: 'line',
data: {
datasets: [{
label: '標高 (m)',
data: [],
borderColor: '#007bff',
backgroundColor: 'rgba(0, 123, 255, 0.1)',
fill: true,
borderWidth: 1.5,
pointRadius: 0,
pointHoverRadius: 6,
tension: 0.1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
interaction: { mode: 'index', intersect: false },
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
title: function(items) {
var index = items[0].dataIndex;
var timeStr = timeLabels[index] || '';
var distStr = items[0].raw.x.toFixed(2) + ' km';
return timeStr ? '時刻: ' + timeStr + '（距離: ' + distStr + '）' : '距離: ' + distStr;
},
label: function(item) {
return '標高: ' + item.raw.y + ' m';
}
}
}
},
scales: {
x: {
type: 'linear',
display: true,
title: { display: true, text: '距離 (km)', font: { size: 10 } },
ticks: {
font: { size: 10 }
},
grid: { color: 'rgba(0, 0, 0, 0.05)' }
},
y: {
display: true,
title: { display: true, text: '標高 (m)', font: { size: 10 } },
ticks: { font: { size: 10 } },
grid: { color: 'rgba(0, 0, 0, 0.05)' }
}
},
onHover: function(event, activeElements) {
if (activeElements &amp;&amp; activeElements.length &gt; 0) {
var index = activeElements[0].index;
updateHoverMarker(index);
}
}
}
});
function updateHoverMarker(index) {
var pt = trackPoints[index];
if (pt) {
if (!hoverMarker) {
hoverMarker = L.circleMarker([pt.lat, pt.lng], {
radius: 8,
fillColor: '#00ffff',
color: '#ffffff',
weight: 3,
opacity: 1,
fillOpacity: 1
}).addTo(map);
} else {
hoverMarker.setLatLng([pt.lat, pt.lng]);
}
}
}
function extractTrackData(layer) {
var pts = [];
var polylines = [];
if (typeof layer.getLatLngs === 'function') {
var latlngs = layer.getLatLngs();
var flat = Array.isArray(latlngs[0]) ? latlngs.flat(Infinity) : latlngs;
flat.forEach(function(p) {
if (p &amp;&amp; typeof p.lat === 'number') {
pts.push({ lat: p.lat, lng: p.lng });
}
});
if (layer instanceof L.Polyline) {
polylines.push(layer);
}
} else if (typeof layer.eachLayer === 'function') {
layer.eachLayer(function(child) {
var res = extractTrackData(child);
pts = pts.concat(res.pts);
polylines = polylines.concat(res.polylines);
});
}
return { pts: pts, polylines: polylines };
}
fetch(gpxUrl)
.then(function(response) { return response.text(); })
.then(function(xmlText) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlText, "text/xml");
var trkpts = xmlDoc.getElementsByTagName("trkpt");
for (var i = 0; i &lt; trkpts.length; i++) {
var timeNode = trkpts[i].getElementsByTagName("time")[0];
if (timeNode) {
var dateObj = new Date(timeNode.textContent);
var timeStr = dateObj.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
timeLabels.push(timeStr);
} else {
timeLabels.push('');
}
}
})
.catch(function(err) {
console.error("GPX Time Parsing Error:", err);
});
new L.GPX(gpxUrl, {
async: true,
polyline_options: { color: '#ff3300', weight: 5, opacity: 0.8 },
marker_options: { startIconUrl: null, endIconUrl: null, wptIconUrls: null }
}).on('loaded', function(e) {
var gpx = e.target;
map.fitBounds(gpx.getBounds());
var totalDistMeters = gpx.get_distance();
var distKmNum = totalDistMeters / 1000;
var distKmStr = distKmNum.toFixed(2);
var maxEle = Math.round(gpx.get_elevation_max());
var minEle = Math.round(gpx.get_elevation_min());
var gainEle = Math.round(gpx.get_elevation_gain());
var lossEle = Math.round(gpx.get_elevation_loss());
document.getElementById('sum-dist-e738978e').innerText = distKmStr;
document.getElementById('sum-up-e738978e').innerText = gainEle;
document.getElementById('sum-down-e738978e').innerText = lossEle;
document.getElementById('sum-max-e738978e').innerText = maxEle;
document.getElementById('sum-min-e738978e').innerText = minEle;
var eleData = gpx.get_elevation_data();
var chartDataPoints = [];
var extracted = extractTrackData(gpx);
trackPoints = extracted.pts;
if (trackPoints.length &gt; 0) {
var startPt = trackPoints[0];
var endPt = trackPoints[trackPoints.length - 1];
L.circleMarker([startPt.lat, startPt.lng], {
radius: 9,
fillColor: '#28a745',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('スタート', { permanent: false, direction: 'top' });
L.circleMarker([endPt.lat, endPt.lng], {
radius: 9,
fillColor: '#dc3545',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('ゴール', { permanent: false, direction: 'top' });
}
eleData.forEach(function(item) {
var dist = typeof item[0] === 'number' ? item[0] : parseFloat(item[0]);
var ele = Math.round(item[1]);
chartDataPoints.push({
x: parseFloat(dist.toFixed(2)),
y: ele
});
});
var dynamicStepSize = 1.0;
if (distKmNum &lt;= 5) {
dynamicStepSize = 0.5;
} else if (distKmNum &lt;= 20) {
dynamicStepSize = 1.0;
} else if (distKmNum &lt;= 40) {
dynamicStepSize = 5.0;
} else {
dynamicStepSize = 10.0;
}
chart.options.scales.x.max = distKmNum;
var allowedTicks = [];
for (var v = 0; v &lt; distKmNum; v += dynamicStepSize) {
allowedTicks.push(parseFloat(v.toFixed(1)));
}
chart.options.scales.x.ticks.callback = function(value) {
for (var i = 0; i &lt; allowedTicks.length; i++) {
if (Math.abs(value - allowedTicks[i]) &lt; 0.01) {
return value + ' km';
}
}
return '';
};
chart.options.scales.x.afterBuildTicks = function(axis) {
axis.ticks = allowedTicks.map(function(val) {
return { value: val };
});
};
chart.data.datasets[0].data = chartDataPoints;
chart.update();
extracted.polylines.forEach(function(polyline) {
polyline.on('mousemove', function(ev) {
if (!trackPoints.length) return;
var mouseLatLng = ev.latlng;
var closestIndex = 0;
var minDist = Infinity;
for (var i = 0; i &lt; trackPoints.length; i++) {
var d = mouseLatLng.distanceTo(L.latLng(trackPoints[i].lat, trackPoints[i].lng));
if (d &lt; minDist) {
minDist = d;
closestIndex = i;
}
}
updateHoverMarker(closestIndex);
chart.setActiveElements([{ datasetIndex: 0, index: closestIndex }]);
chart.tooltip.setActiveElements([{ datasetIndex: 0, index: closestIndex }], { x: 0, y: 0 });
chart.update();
});
});
}).addTo(map);
});
&lt;/script&gt;
&lt;hr&gt;
&lt;h3 id="山行記録"&gt;山行記録&lt;/h3&gt;
&lt;h4 id="西穂高岳奥穂高岳の稜線の難しさ"&gt;西穂高岳～奥穂高岳の稜線の難しさ&lt;/h4&gt;
&lt;p&gt;筆者の登山スタイルが「アルパインではなくもっぱら（オフトレイル）ハイキング」である点に留意してお読みいただきたい。&lt;br&gt;
西穂から奥穂までのコースタイムを「8時間から10時間」とする記事や記録を見かけるが、危なっかしい記述だなあ、と思っている。&lt;br&gt;
「西穂山荘に泊まって翌朝は早出すれば穂高岳山荘に着ける」と読み取る人は多いだろうし、じっさい山行記録にも「無事に」8時間で歩きとおせた記録がupされる。&lt;/p&gt;</description></item><item><title>石尾根から雲取山</title><link>https://montagna-katokeyci.github.io/oohc/posts/2026-07-19/</link><pubDate>Sun, 19 Jul 2026 00:00:00 +0000</pubDate><guid>https://montagna-katokeyci.github.io/oohc/posts/2026-07-19/</guid><description>&lt;p&gt;トレーニング山行。真夏にやるルートではないのだが、「長めに歩いて雲取山に上がる」「足首を横にひねらない一般登山道を歩き、オフトレイルは抜き」の条件に当てはまるルートを、他に探せなかった。&lt;br&gt;
とにかく汗をかいたが、夏の雲が陽射しを遮る時間が長く、まだマシだったろう。ピーカンだったら鷹ノ巣あたりであきらめていたはずだ。&lt;/p&gt;
&lt;hr&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;項目&lt;/th&gt;
&lt;th style="text-align: left"&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;記録日&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026年7月19日（日）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;天候&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;晴れたり曇ったり2対8、風なし、鷹ノ巣山頂にはトンボがいっぱい&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;パーティ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;モンターニャ単独&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;アクセス&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;JR青梅線で奥多摩駅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;行程&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;奥多摩駅、石尾根、三ノ木戸山、六ツ石山、鷹ノ巣山、日陰名栗山、高丸山、七ツ石山、雲取山、鴨沢ルート、鴨沢バス停&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="コースタイム"&gt;コースタイム&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;07:40〜奥多摩駅スタート&lt;/li&gt;
&lt;li&gt;09:35～六ツ石山&lt;/li&gt;
&lt;li&gt;10:42～鷹ノ巣山～10:51&lt;/li&gt;
&lt;li&gt;12:16～七ツ石山&lt;/li&gt;
&lt;li&gt;13:14～雲取山～13:21&lt;/li&gt;
&lt;li&gt;15:52～鴨沢バス停フィニッシュ&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="コースマップ"&gt;コースマップ&lt;/h3&gt;
&lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /&gt;
&lt;style&gt;
.gpx-container {
width: 100%;
margin: 1.5rem 0;
border: 1px solid #ccc;
border-radius: 8px;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
font-family: sans-serif;
}
.gpx-map { height: 380px; width: 100%; }
.gpx-summary {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
background: #f8f9fa;
padding: 8px 10px;
border-top: 1px solid #e0e0e0;
border-bottom: 1px solid #e0e0e0;
font-size: 0.8rem;
color: #333;
overflow-x: auto;
white-space: nowrap;
}
.gpx-summary-item {
margin: 0 4px;
}
.gpx-summary-item strong {
color: #007bff;
font-size: 0.95rem;
margin-left: 2px;
}
.gpx-chart-wrapper {
height: 180px;
width: 100%;
padding: 10px;
background: #fafafa;
box-sizing: border-box;
}
.start-marker-icon, .goal-marker-icon {
background: none;
border: none;
font-weight: bold;
font-size: 11px;
color: #ffffff;
text-align: center;
line-height: 18px;
}
&lt;/style&gt;
&lt;div class="gpx-container"&gt;
&lt;div id="map-0381d021" class="gpx-map"&gt;&lt;/div&gt;
&lt;div id="summary-0381d021" class="gpx-summary"&gt;
&lt;div class="gpx-summary-item"&gt;総距離:&lt;strong id="sum-dist-0381d021"&gt;-&lt;/strong&gt; km&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高上り:&lt;strong id="sum-up-0381d021"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高下り:&lt;strong id="sum-down-0381d021"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最高標高:&lt;strong id="sum-max-0381d021"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最低標高:&lt;strong id="sum-min-0381d021"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;/div&gt;
&lt;div class="gpx-chart-wrapper"&gt;
&lt;canvas id="chart-0381d021"&gt;&lt;/canvas&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"&gt;&lt;/script&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-gpx/1.7.0/gpx.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
&lt;script&gt;
window.addEventListener('load', function() {
var gpxUrl = '\/oohc\/posts\/2026-07-19\/20260719_20260719.gpx';
var map = L.map('map-0381d021').setView([0, 0], 10);
L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
attribution: '&lt;a href="https://maps.gsi.go.jp/development/ichiran.html" target="_blank"&gt;国土地理院&lt;/a&gt;',
maxZoom: 18
}).addTo(map);
L.control.scale({
imperial: false,
position: 'bottomleft'
}).addTo(map);
var hoverMarker = null;
var trackPoints = [];
var timeLabels = [];
var ctx = document.getElementById('chart-0381d021').getContext('2d');
var chart = new Chart(ctx, {
type: 'line',
data: {
datasets: [{
label: '標高 (m)',
data: [],
borderColor: '#007bff',
backgroundColor: 'rgba(0, 123, 255, 0.1)',
fill: true,
borderWidth: 1.5,
pointRadius: 0,
pointHoverRadius: 6,
tension: 0.1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
interaction: { mode: 'index', intersect: false },
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
title: function(items) {
var index = items[0].dataIndex;
var timeStr = timeLabels[index] || '';
var distStr = items[0].raw.x.toFixed(2) + ' km';
return timeStr ? '時刻: ' + timeStr + '（距離: ' + distStr + '）' : '距離: ' + distStr;
},
label: function(item) {
return '標高: ' + item.raw.y + ' m';
}
}
}
},
scales: {
x: {
type: 'linear',
display: true,
title: { display: true, text: '距離 (km)', font: { size: 10 } },
ticks: {
font: { size: 10 }
},
grid: { color: 'rgba(0, 0, 0, 0.05)' }
},
y: {
display: true,
title: { display: true, text: '標高 (m)', font: { size: 10 } },
ticks: { font: { size: 10 } },
grid: { color: 'rgba(0, 0, 0, 0.05)' }
}
},
onHover: function(event, activeElements) {
if (activeElements &amp;&amp; activeElements.length &gt; 0) {
var index = activeElements[0].index;
updateHoverMarker(index);
}
}
}
});
function updateHoverMarker(index) {
var pt = trackPoints[index];
if (pt) {
if (!hoverMarker) {
hoverMarker = L.circleMarker([pt.lat, pt.lng], {
radius: 8,
fillColor: '#00ffff',
color: '#ffffff',
weight: 3,
opacity: 1,
fillOpacity: 1
}).addTo(map);
} else {
hoverMarker.setLatLng([pt.lat, pt.lng]);
}
}
}
function extractTrackData(layer) {
var pts = [];
var polylines = [];
if (typeof layer.getLatLngs === 'function') {
var latlngs = layer.getLatLngs();
var flat = Array.isArray(latlngs[0]) ? latlngs.flat(Infinity) : latlngs;
flat.forEach(function(p) {
if (p &amp;&amp; typeof p.lat === 'number') {
pts.push({ lat: p.lat, lng: p.lng });
}
});
if (layer instanceof L.Polyline) {
polylines.push(layer);
}
} else if (typeof layer.eachLayer === 'function') {
layer.eachLayer(function(child) {
var res = extractTrackData(child);
pts = pts.concat(res.pts);
polylines = polylines.concat(res.polylines);
});
}
return { pts: pts, polylines: polylines };
}
fetch(gpxUrl)
.then(function(response) { return response.text(); })
.then(function(xmlText) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlText, "text/xml");
var trkpts = xmlDoc.getElementsByTagName("trkpt");
for (var i = 0; i &lt; trkpts.length; i++) {
var timeNode = trkpts[i].getElementsByTagName("time")[0];
if (timeNode) {
var dateObj = new Date(timeNode.textContent);
var timeStr = dateObj.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
timeLabels.push(timeStr);
} else {
timeLabels.push('');
}
}
})
.catch(function(err) {
console.error("GPX Time Parsing Error:", err);
});
new L.GPX(gpxUrl, {
async: true,
polyline_options: { color: '#ff3300', weight: 5, opacity: 0.8 },
marker_options: { startIconUrl: null, endIconUrl: null, wptIconUrls: null }
}).on('loaded', function(e) {
var gpx = e.target;
map.fitBounds(gpx.getBounds());
var totalDistMeters = gpx.get_distance();
var distKmNum = totalDistMeters / 1000;
var distKmStr = distKmNum.toFixed(2);
var maxEle = Math.round(gpx.get_elevation_max());
var minEle = Math.round(gpx.get_elevation_min());
var gainEle = Math.round(gpx.get_elevation_gain());
var lossEle = Math.round(gpx.get_elevation_loss());
document.getElementById('sum-dist-0381d021').innerText = distKmStr;
document.getElementById('sum-up-0381d021').innerText = gainEle;
document.getElementById('sum-down-0381d021').innerText = lossEle;
document.getElementById('sum-max-0381d021').innerText = maxEle;
document.getElementById('sum-min-0381d021').innerText = minEle;
var eleData = gpx.get_elevation_data();
var chartDataPoints = [];
var extracted = extractTrackData(gpx);
trackPoints = extracted.pts;
if (trackPoints.length &gt; 0) {
var startPt = trackPoints[0];
var endPt = trackPoints[trackPoints.length - 1];
L.circleMarker([startPt.lat, startPt.lng], {
radius: 9,
fillColor: '#28a745',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('スタート', { permanent: false, direction: 'top' });
L.circleMarker([endPt.lat, endPt.lng], {
radius: 9,
fillColor: '#dc3545',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('ゴール', { permanent: false, direction: 'top' });
}
eleData.forEach(function(item) {
var dist = typeof item[0] === 'number' ? item[0] : parseFloat(item[0]);
var ele = Math.round(item[1]);
chartDataPoints.push({
x: parseFloat(dist.toFixed(2)),
y: ele
});
});
var dynamicStepSize = 1.0;
if (distKmNum &lt;= 5) {
dynamicStepSize = 0.5;
} else if (distKmNum &lt;= 20) {
dynamicStepSize = 1.0;
} else if (distKmNum &lt;= 40) {
dynamicStepSize = 5.0;
} else {
dynamicStepSize = 10.0;
}
chart.options.scales.x.max = distKmNum;
var allowedTicks = [];
for (var v = 0; v &lt; distKmNum; v += dynamicStepSize) {
allowedTicks.push(parseFloat(v.toFixed(1)));
}
chart.options.scales.x.ticks.callback = function(value) {
for (var i = 0; i &lt; allowedTicks.length; i++) {
if (Math.abs(value - allowedTicks[i]) &lt; 0.01) {
return value + ' km';
}
}
return '';
};
chart.options.scales.x.afterBuildTicks = function(axis) {
axis.ticks = allowedTicks.map(function(val) {
return { value: val };
});
};
chart.data.datasets[0].data = chartDataPoints;
chart.update();
extracted.polylines.forEach(function(polyline) {
polyline.on('mousemove', function(ev) {
if (!trackPoints.length) return;
var mouseLatLng = ev.latlng;
var closestIndex = 0;
var minDist = Infinity;
for (var i = 0; i &lt; trackPoints.length; i++) {
var d = mouseLatLng.distanceTo(L.latLng(trackPoints[i].lat, trackPoints[i].lng));
if (d &lt; minDist) {
minDist = d;
closestIndex = i;
}
}
updateHoverMarker(closestIndex);
chart.setActiveElements([{ datasetIndex: 0, index: closestIndex }]);
chart.tooltip.setActiveElements([{ datasetIndex: 0, index: closestIndex }], { x: 0, y: 0 });
chart.update();
});
});
}).addTo(map);
});
&lt;/script&gt;
&lt;hr&gt;
&lt;h3 id="山行記録"&gt;山行記録&lt;/h3&gt;
&lt;h4 id="石尾根から雲取山トレーニングハイク"&gt; 石尾根から雲取山、トレーニングハイク&lt;/h4&gt;
&lt;p&gt;翌週のジャンダルム周回に備えて2000mまで登っておく。ジャンダルムや奥穂高岳で顔がむくむのは高山病の初期症状ではないかと疑っているが、2000mで効果があるのかどうか。正直心許ない。&lt;br&gt;
メリノウールシャツを選んだのは失敗だった。&lt;/p&gt;</description></item><item><title>Part 4 : 日原川下流右岸中段道</title><link>https://montagna-katokeyci.github.io/oohc/posts/2026-07-11/</link><pubDate>Sat, 11 Jul 2026 00:00:00 +0000</pubDate><guid>https://montagna-katokeyci.github.io/oohc/posts/2026-07-11/</guid><description>&lt;p&gt;日原川下流右岸中段道の4回目は、タル沢尾根co1100mからの西進。毎回カメの歩みのようだが、今回もタル沢尾根を発ちカラ沢尾根までしかたどれなかった。しかし薄い踏み跡が細々と続き、「かつて道があった」のは疑いようがない。&lt;/p&gt;
&lt;hr&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;項目&lt;/th&gt;
&lt;th style="text-align: left"&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;記録日&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026年7月11日（土）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;天候&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;曇り緩い風あり、急に暑くなり虫が張り切りだして参った。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;パーティ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;モンターニャ単独&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;アクセス&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;西東京バスで東日原バス停&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;行程&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;東日原バス停、タル沢尾根、タル沢尾根co1100m付近、日原川下流右岸中段道、カラ沢、カラ沢尾根、カラ沢の頭、石尾根、鷹ノ巣山、石尾根、奥多摩駅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="コースタイム"&gt;コースタイム&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;記入中&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="コースマップ"&gt;コースマップ&lt;/h3&gt;
&lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /&gt;
&lt;style&gt;
.gpx-container {
width: 100%;
margin: 1.5rem 0;
border: 1px solid #ccc;
border-radius: 8px;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
font-family: sans-serif;
}
.gpx-map { height: 380px; width: 100%; }
.gpx-summary {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
background: #f8f9fa;
padding: 8px 10px;
border-top: 1px solid #e0e0e0;
border-bottom: 1px solid #e0e0e0;
font-size: 0.8rem;
color: #333;
overflow-x: auto;
white-space: nowrap;
}
.gpx-summary-item {
margin: 0 4px;
}
.gpx-summary-item strong {
color: #007bff;
font-size: 0.95rem;
margin-left: 2px;
}
.gpx-chart-wrapper {
height: 180px;
width: 100%;
padding: 10px;
background: #fafafa;
box-sizing: border-box;
}
.start-marker-icon, .goal-marker-icon {
background: none;
border: none;
font-weight: bold;
font-size: 11px;
color: #ffffff;
text-align: center;
line-height: 18px;
}
&lt;/style&gt;
&lt;div class="gpx-container"&gt;
&lt;div id="map-d34ee381" class="gpx-map"&gt;&lt;/div&gt;
&lt;div id="summary-d34ee381" class="gpx-summary"&gt;
&lt;div class="gpx-summary-item"&gt;総距離:&lt;strong id="sum-dist-d34ee381"&gt;-&lt;/strong&gt; km&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高上り:&lt;strong id="sum-up-d34ee381"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高下り:&lt;strong id="sum-down-d34ee381"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最高標高:&lt;strong id="sum-max-d34ee381"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最低標高:&lt;strong id="sum-min-d34ee381"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;/div&gt;
&lt;div class="gpx-chart-wrapper"&gt;
&lt;canvas id="chart-d34ee381"&gt;&lt;/canvas&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"&gt;&lt;/script&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-gpx/1.7.0/gpx.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
&lt;script&gt;
window.addEventListener('load', function() {
var gpxUrl = '\/oohc\/posts\/2026-07-11\/20260711_20260711.gpx';
var map = L.map('map-d34ee381').setView([0, 0], 10);
L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
attribution: '&lt;a href="https://maps.gsi.go.jp/development/ichiran.html" target="_blank"&gt;国土地理院&lt;/a&gt;',
maxZoom: 18
}).addTo(map);
L.control.scale({
imperial: false,
position: 'bottomleft'
}).addTo(map);
var hoverMarker = null;
var trackPoints = [];
var timeLabels = [];
var ctx = document.getElementById('chart-d34ee381').getContext('2d');
var chart = new Chart(ctx, {
type: 'line',
data: {
datasets: [{
label: '標高 (m)',
data: [],
borderColor: '#007bff',
backgroundColor: 'rgba(0, 123, 255, 0.1)',
fill: true,
borderWidth: 1.5,
pointRadius: 0,
pointHoverRadius: 6,
tension: 0.1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
interaction: { mode: 'index', intersect: false },
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
title: function(items) {
var index = items[0].dataIndex;
var timeStr = timeLabels[index] || '';
var distStr = items[0].raw.x.toFixed(2) + ' km';
return timeStr ? '時刻: ' + timeStr + '（距離: ' + distStr + '）' : '距離: ' + distStr;
},
label: function(item) {
return '標高: ' + item.raw.y + ' m';
}
}
}
},
scales: {
x: {
type: 'linear',
display: true,
title: { display: true, text: '距離 (km)', font: { size: 10 } },
ticks: {
font: { size: 10 }
},
grid: { color: 'rgba(0, 0, 0, 0.05)' }
},
y: {
display: true,
title: { display: true, text: '標高 (m)', font: { size: 10 } },
ticks: { font: { size: 10 } },
grid: { color: 'rgba(0, 0, 0, 0.05)' }
}
},
onHover: function(event, activeElements) {
if (activeElements &amp;&amp; activeElements.length &gt; 0) {
var index = activeElements[0].index;
updateHoverMarker(index);
}
}
}
});
function updateHoverMarker(index) {
var pt = trackPoints[index];
if (pt) {
if (!hoverMarker) {
hoverMarker = L.circleMarker([pt.lat, pt.lng], {
radius: 8,
fillColor: '#00ffff',
color: '#ffffff',
weight: 3,
opacity: 1,
fillOpacity: 1
}).addTo(map);
} else {
hoverMarker.setLatLng([pt.lat, pt.lng]);
}
}
}
function extractTrackData(layer) {
var pts = [];
var polylines = [];
if (typeof layer.getLatLngs === 'function') {
var latlngs = layer.getLatLngs();
var flat = Array.isArray(latlngs[0]) ? latlngs.flat(Infinity) : latlngs;
flat.forEach(function(p) {
if (p &amp;&amp; typeof p.lat === 'number') {
pts.push({ lat: p.lat, lng: p.lng });
}
});
if (layer instanceof L.Polyline) {
polylines.push(layer);
}
} else if (typeof layer.eachLayer === 'function') {
layer.eachLayer(function(child) {
var res = extractTrackData(child);
pts = pts.concat(res.pts);
polylines = polylines.concat(res.polylines);
});
}
return { pts: pts, polylines: polylines };
}
fetch(gpxUrl)
.then(function(response) { return response.text(); })
.then(function(xmlText) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlText, "text/xml");
var trkpts = xmlDoc.getElementsByTagName("trkpt");
for (var i = 0; i &lt; trkpts.length; i++) {
var timeNode = trkpts[i].getElementsByTagName("time")[0];
if (timeNode) {
var dateObj = new Date(timeNode.textContent);
var timeStr = dateObj.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
timeLabels.push(timeStr);
} else {
timeLabels.push('');
}
}
})
.catch(function(err) {
console.error("GPX Time Parsing Error:", err);
});
new L.GPX(gpxUrl, {
async: true,
polyline_options: { color: '#ff3300', weight: 5, opacity: 0.8 },
marker_options: { startIconUrl: null, endIconUrl: null, wptIconUrls: null }
}).on('loaded', function(e) {
var gpx = e.target;
map.fitBounds(gpx.getBounds());
var totalDistMeters = gpx.get_distance();
var distKmNum = totalDistMeters / 1000;
var distKmStr = distKmNum.toFixed(2);
var maxEle = Math.round(gpx.get_elevation_max());
var minEle = Math.round(gpx.get_elevation_min());
var gainEle = Math.round(gpx.get_elevation_gain());
var lossEle = Math.round(gpx.get_elevation_loss());
document.getElementById('sum-dist-d34ee381').innerText = distKmStr;
document.getElementById('sum-up-d34ee381').innerText = gainEle;
document.getElementById('sum-down-d34ee381').innerText = lossEle;
document.getElementById('sum-max-d34ee381').innerText = maxEle;
document.getElementById('sum-min-d34ee381').innerText = minEle;
var eleData = gpx.get_elevation_data();
var chartDataPoints = [];
var extracted = extractTrackData(gpx);
trackPoints = extracted.pts;
if (trackPoints.length &gt; 0) {
var startPt = trackPoints[0];
var endPt = trackPoints[trackPoints.length - 1];
L.circleMarker([startPt.lat, startPt.lng], {
radius: 9,
fillColor: '#28a745',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('スタート', { permanent: false, direction: 'top' });
L.circleMarker([endPt.lat, endPt.lng], {
radius: 9,
fillColor: '#dc3545',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('ゴール', { permanent: false, direction: 'top' });
}
eleData.forEach(function(item) {
var dist = typeof item[0] === 'number' ? item[0] : parseFloat(item[0]);
var ele = Math.round(item[1]);
chartDataPoints.push({
x: parseFloat(dist.toFixed(2)),
y: ele
});
});
var dynamicStepSize = 1.0;
if (distKmNum &lt;= 5) {
dynamicStepSize = 0.5;
} else if (distKmNum &lt;= 20) {
dynamicStepSize = 1.0;
} else if (distKmNum &lt;= 40) {
dynamicStepSize = 5.0;
} else {
dynamicStepSize = 10.0;
}
chart.options.scales.x.max = distKmNum;
var allowedTicks = [];
for (var v = 0; v &lt; distKmNum; v += dynamicStepSize) {
allowedTicks.push(parseFloat(v.toFixed(1)));
}
chart.options.scales.x.ticks.callback = function(value) {
for (var i = 0; i &lt; allowedTicks.length; i++) {
if (Math.abs(value - allowedTicks[i]) &lt; 0.01) {
return value + ' km';
}
}
return '';
};
chart.options.scales.x.afterBuildTicks = function(axis) {
axis.ticks = allowedTicks.map(function(val) {
return { value: val };
});
};
chart.data.datasets[0].data = chartDataPoints;
chart.update();
extracted.polylines.forEach(function(polyline) {
polyline.on('mousemove', function(ev) {
if (!trackPoints.length) return;
var mouseLatLng = ev.latlng;
var closestIndex = 0;
var minDist = Infinity;
for (var i = 0; i &lt; trackPoints.length; i++) {
var d = mouseLatLng.distanceTo(L.latLng(trackPoints[i].lat, trackPoints[i].lng));
if (d &lt; minDist) {
minDist = d;
closestIndex = i;
}
}
updateHoverMarker(closestIndex);
chart.setActiveElements([{ datasetIndex: 0, index: closestIndex }]);
chart.tooltip.setActiveElements([{ datasetIndex: 0, index: closestIndex }], { x: 0, y: 0 });
chart.update();
});
});
}).addTo(map);
});
&lt;/script&gt;
&lt;hr&gt;
&lt;h3 id="山行記録"&gt;山行記録&lt;/h3&gt;
&lt;p&gt;記入中&lt;/p&gt;</description></item><item><title>Part 2 : 大ダワ林道古道（？）</title><link>https://montagna-katokeyci.github.io/oohc/posts/2026-07-04/</link><pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate><guid>https://montagna-katokeyci.github.io/oohc/posts/2026-07-04/</guid><description>&lt;p&gt;6月6日の続き。長沢谷の踊窪から二軒小屋尾根のP1300下に上がり、トラバースして崩落地手前の窪までたどったのが前回、今回はその続きを狙ったのだが。
緩傾斜で崖っぷちに出会わないぶん、動物の踏み跡だらけで道跡がさっぱりわからない。細かく上下しながら上流へ向かったが、徒労に終わった。&lt;/p&gt;
&lt;hr&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;項目&lt;/th&gt;
&lt;th style="text-align: left"&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;記録日&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026年7月04日（土）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;天候&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;晴れたり曇ったり→小雨→曇り&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;パーティ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;モンターニャ単独&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;アクセス&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;西東京バスで東日原バス停&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;行程&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;東日原バス停、日原林道、長沢谷、二軒小屋尾根、大ダワ林道古道（？）、モミソ窪右岸尾根、二軒小屋尾根、日原林道、東日原バス停&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="コースタイム"&gt;コースタイム&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;記入中&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="コースマップ"&gt;コースマップ&lt;/h3&gt;
&lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /&gt;
&lt;style&gt;
.gpx-container {
width: 100%;
margin: 1.5rem 0;
border: 1px solid #ccc;
border-radius: 8px;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
font-family: sans-serif;
}
.gpx-map { height: 380px; width: 100%; }
.gpx-summary {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
background: #f8f9fa;
padding: 8px 10px;
border-top: 1px solid #e0e0e0;
border-bottom: 1px solid #e0e0e0;
font-size: 0.8rem;
color: #333;
overflow-x: auto;
white-space: nowrap;
}
.gpx-summary-item {
margin: 0 4px;
}
.gpx-summary-item strong {
color: #007bff;
font-size: 0.95rem;
margin-left: 2px;
}
.gpx-chart-wrapper {
height: 180px;
width: 100%;
padding: 10px;
background: #fafafa;
box-sizing: border-box;
}
.start-marker-icon, .goal-marker-icon {
background: none;
border: none;
font-weight: bold;
font-size: 11px;
color: #ffffff;
text-align: center;
line-height: 18px;
}
&lt;/style&gt;
&lt;div class="gpx-container"&gt;
&lt;div id="map-28131025" class="gpx-map"&gt;&lt;/div&gt;
&lt;div id="summary-28131025" class="gpx-summary"&gt;
&lt;div class="gpx-summary-item"&gt;総距離:&lt;strong id="sum-dist-28131025"&gt;-&lt;/strong&gt; km&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高上り:&lt;strong id="sum-up-28131025"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高下り:&lt;strong id="sum-down-28131025"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最高標高:&lt;strong id="sum-max-28131025"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最低標高:&lt;strong id="sum-min-28131025"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;/div&gt;
&lt;div class="gpx-chart-wrapper"&gt;
&lt;canvas id="chart-28131025"&gt;&lt;/canvas&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"&gt;&lt;/script&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-gpx/1.7.0/gpx.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
&lt;script&gt;
window.addEventListener('load', function() {
var gpxUrl = '\/oohc\/posts\/2026-07-04\/20260704_20260704.gpx';
var map = L.map('map-28131025').setView([0, 0], 10);
L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
attribution: '&lt;a href="https://maps.gsi.go.jp/development/ichiran.html" target="_blank"&gt;国土地理院&lt;/a&gt;',
maxZoom: 18
}).addTo(map);
L.control.scale({
imperial: false,
position: 'bottomleft'
}).addTo(map);
var hoverMarker = null;
var trackPoints = [];
var timeLabels = [];
var ctx = document.getElementById('chart-28131025').getContext('2d');
var chart = new Chart(ctx, {
type: 'line',
data: {
datasets: [{
label: '標高 (m)',
data: [],
borderColor: '#007bff',
backgroundColor: 'rgba(0, 123, 255, 0.1)',
fill: true,
borderWidth: 1.5,
pointRadius: 0,
pointHoverRadius: 6,
tension: 0.1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
interaction: { mode: 'index', intersect: false },
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
title: function(items) {
var index = items[0].dataIndex;
var timeStr = timeLabels[index] || '';
var distStr = items[0].raw.x.toFixed(2) + ' km';
return timeStr ? '時刻: ' + timeStr + '（距離: ' + distStr + '）' : '距離: ' + distStr;
},
label: function(item) {
return '標高: ' + item.raw.y + ' m';
}
}
}
},
scales: {
x: {
type: 'linear',
display: true,
title: { display: true, text: '距離 (km)', font: { size: 10 } },
ticks: {
font: { size: 10 }
},
grid: { color: 'rgba(0, 0, 0, 0.05)' }
},
y: {
display: true,
title: { display: true, text: '標高 (m)', font: { size: 10 } },
ticks: { font: { size: 10 } },
grid: { color: 'rgba(0, 0, 0, 0.05)' }
}
},
onHover: function(event, activeElements) {
if (activeElements &amp;&amp; activeElements.length &gt; 0) {
var index = activeElements[0].index;
updateHoverMarker(index);
}
}
}
});
function updateHoverMarker(index) {
var pt = trackPoints[index];
if (pt) {
if (!hoverMarker) {
hoverMarker = L.circleMarker([pt.lat, pt.lng], {
radius: 8,
fillColor: '#00ffff',
color: '#ffffff',
weight: 3,
opacity: 1,
fillOpacity: 1
}).addTo(map);
} else {
hoverMarker.setLatLng([pt.lat, pt.lng]);
}
}
}
function extractTrackData(layer) {
var pts = [];
var polylines = [];
if (typeof layer.getLatLngs === 'function') {
var latlngs = layer.getLatLngs();
var flat = Array.isArray(latlngs[0]) ? latlngs.flat(Infinity) : latlngs;
flat.forEach(function(p) {
if (p &amp;&amp; typeof p.lat === 'number') {
pts.push({ lat: p.lat, lng: p.lng });
}
});
if (layer instanceof L.Polyline) {
polylines.push(layer);
}
} else if (typeof layer.eachLayer === 'function') {
layer.eachLayer(function(child) {
var res = extractTrackData(child);
pts = pts.concat(res.pts);
polylines = polylines.concat(res.polylines);
});
}
return { pts: pts, polylines: polylines };
}
fetch(gpxUrl)
.then(function(response) { return response.text(); })
.then(function(xmlText) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlText, "text/xml");
var trkpts = xmlDoc.getElementsByTagName("trkpt");
for (var i = 0; i &lt; trkpts.length; i++) {
var timeNode = trkpts[i].getElementsByTagName("time")[0];
if (timeNode) {
var dateObj = new Date(timeNode.textContent);
var timeStr = dateObj.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
timeLabels.push(timeStr);
} else {
timeLabels.push('');
}
}
})
.catch(function(err) {
console.error("GPX Time Parsing Error:", err);
});
new L.GPX(gpxUrl, {
async: true,
polyline_options: { color: '#ff3300', weight: 5, opacity: 0.8 },
marker_options: { startIconUrl: null, endIconUrl: null, wptIconUrls: null }
}).on('loaded', function(e) {
var gpx = e.target;
map.fitBounds(gpx.getBounds());
var totalDistMeters = gpx.get_distance();
var distKmNum = totalDistMeters / 1000;
var distKmStr = distKmNum.toFixed(2);
var maxEle = Math.round(gpx.get_elevation_max());
var minEle = Math.round(gpx.get_elevation_min());
var gainEle = Math.round(gpx.get_elevation_gain());
var lossEle = Math.round(gpx.get_elevation_loss());
document.getElementById('sum-dist-28131025').innerText = distKmStr;
document.getElementById('sum-up-28131025').innerText = gainEle;
document.getElementById('sum-down-28131025').innerText = lossEle;
document.getElementById('sum-max-28131025').innerText = maxEle;
document.getElementById('sum-min-28131025').innerText = minEle;
var eleData = gpx.get_elevation_data();
var chartDataPoints = [];
var extracted = extractTrackData(gpx);
trackPoints = extracted.pts;
if (trackPoints.length &gt; 0) {
var startPt = trackPoints[0];
var endPt = trackPoints[trackPoints.length - 1];
L.circleMarker([startPt.lat, startPt.lng], {
radius: 9,
fillColor: '#28a745',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('スタート', { permanent: false, direction: 'top' });
L.circleMarker([endPt.lat, endPt.lng], {
radius: 9,
fillColor: '#dc3545',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('ゴール', { permanent: false, direction: 'top' });
}
eleData.forEach(function(item) {
var dist = typeof item[0] === 'number' ? item[0] : parseFloat(item[0]);
var ele = Math.round(item[1]);
chartDataPoints.push({
x: parseFloat(dist.toFixed(2)),
y: ele
});
});
var dynamicStepSize = 1.0;
if (distKmNum &lt;= 5) {
dynamicStepSize = 0.5;
} else if (distKmNum &lt;= 20) {
dynamicStepSize = 1.0;
} else if (distKmNum &lt;= 40) {
dynamicStepSize = 5.0;
} else {
dynamicStepSize = 10.0;
}
chart.options.scales.x.max = distKmNum;
var allowedTicks = [];
for (var v = 0; v &lt; distKmNum; v += dynamicStepSize) {
allowedTicks.push(parseFloat(v.toFixed(1)));
}
chart.options.scales.x.ticks.callback = function(value) {
for (var i = 0; i &lt; allowedTicks.length; i++) {
if (Math.abs(value - allowedTicks[i]) &lt; 0.01) {
return value + ' km';
}
}
return '';
};
chart.options.scales.x.afterBuildTicks = function(axis) {
axis.ticks = allowedTicks.map(function(val) {
return { value: val };
});
};
chart.data.datasets[0].data = chartDataPoints;
chart.update();
extracted.polylines.forEach(function(polyline) {
polyline.on('mousemove', function(ev) {
if (!trackPoints.length) return;
var mouseLatLng = ev.latlng;
var closestIndex = 0;
var minDist = Infinity;
for (var i = 0; i &lt; trackPoints.length; i++) {
var d = mouseLatLng.distanceTo(L.latLng(trackPoints[i].lat, trackPoints[i].lng));
if (d &lt; minDist) {
minDist = d;
closestIndex = i;
}
}
updateHoverMarker(closestIndex);
chart.setActiveElements([{ datasetIndex: 0, index: closestIndex }]);
chart.tooltip.setActiveElements([{ datasetIndex: 0, index: closestIndex }], { x: 0, y: 0 });
chart.update();
});
});
}).addTo(map);
});
&lt;/script&gt;
&lt;hr&gt;
&lt;h3 id="山行記録"&gt;山行記録&lt;/h3&gt;
&lt;p&gt;記入中&lt;/p&gt;</description></item><item><title>Part 3 : 日原川下流右岸中段道</title><link>https://montagna-katokeyci.github.io/oohc/posts/2026-06-28/</link><pubDate>Sun, 28 Jun 2026 00:00:00 +0000</pubDate><guid>https://montagna-katokeyci.github.io/oohc/posts/2026-06-28/</guid><description>&lt;p&gt;まだ名前をつけられない径路の3回目。不老林道終点のオキノ十二天から続く道なので初回は不老径路、2回目は山ノ神尾根1100径路としたが。要は、日原川下流域の石尾根北面を辿る山腹道が、いつの時代かあったらしい、という仮説の検証である。&lt;br&gt;
今日は山ノ神尾根から樽沢を渡りタル沢尾根までを歩いたが、急斜面の岩尾根を乗越しながら続く山腹道は、意外なほど明瞭に残っている。ザレの影響が少ないためか。&lt;br&gt;
2週続きの雨降りだが、持ち時間の少ない年寄りには天候を言い訳にしているヒマがない。&lt;/p&gt;
&lt;p&gt;/追記～タイトル変更/
はじめ本記録のタイトルを「山ノ神尾根co1100m径路」としたが、その先も西進を続ける径路のタイトルとしてふさわしくないと判断し変更した。&lt;/p&gt;
&lt;hr&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;項目&lt;/th&gt;
&lt;th style="text-align: left"&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;記録日&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026年6月28日（日）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;天候&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;終日小雨でガスの中、ときどき止む&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;パーティ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;モンターニャ単独&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;アクセス&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;西東京バスで大沢バス停&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;行程&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;大沢バス停、山ノ神尾根、山ノ神尾根co1090m地点、〇日原川下流右岸中段道 ✕山ノ神尾根co1100m径路（不老径路）、樽沢、タル沢尾根、東日原バス停&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="コースタイム"&gt;コースタイム&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;記入中&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="コースマップ"&gt;コースマップ&lt;/h3&gt;
&lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /&gt;
&lt;style&gt;
.gpx-container {
width: 100%;
margin: 1.5rem 0;
border: 1px solid #ccc;
border-radius: 8px;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
font-family: sans-serif;
}
.gpx-map { height: 380px; width: 100%; }
.gpx-summary {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
background: #f8f9fa;
padding: 8px 10px;
border-top: 1px solid #e0e0e0;
border-bottom: 1px solid #e0e0e0;
font-size: 0.8rem;
color: #333;
overflow-x: auto;
white-space: nowrap;
}
.gpx-summary-item {
margin: 0 4px;
}
.gpx-summary-item strong {
color: #007bff;
font-size: 0.95rem;
margin-left: 2px;
}
.gpx-chart-wrapper {
height: 180px;
width: 100%;
padding: 10px;
background: #fafafa;
box-sizing: border-box;
}
.start-marker-icon, .goal-marker-icon {
background: none;
border: none;
font-weight: bold;
font-size: 11px;
color: #ffffff;
text-align: center;
line-height: 18px;
}
&lt;/style&gt;
&lt;div class="gpx-container"&gt;
&lt;div id="map-bfbf9460" class="gpx-map"&gt;&lt;/div&gt;
&lt;div id="summary-bfbf9460" class="gpx-summary"&gt;
&lt;div class="gpx-summary-item"&gt;総距離:&lt;strong id="sum-dist-bfbf9460"&gt;-&lt;/strong&gt; km&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高上り:&lt;strong id="sum-up-bfbf9460"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高下り:&lt;strong id="sum-down-bfbf9460"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最高標高:&lt;strong id="sum-max-bfbf9460"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最低標高:&lt;strong id="sum-min-bfbf9460"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;/div&gt;
&lt;div class="gpx-chart-wrapper"&gt;
&lt;canvas id="chart-bfbf9460"&gt;&lt;/canvas&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"&gt;&lt;/script&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-gpx/1.7.0/gpx.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
&lt;script&gt;
window.addEventListener('load', function() {
var gpxUrl = '\/oohc\/posts\/2026-06-28\/20260628_20260628.gpx';
var map = L.map('map-bfbf9460').setView([0, 0], 10);
L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
attribution: '&lt;a href="https://maps.gsi.go.jp/development/ichiran.html" target="_blank"&gt;国土地理院&lt;/a&gt;',
maxZoom: 18
}).addTo(map);
L.control.scale({
imperial: false,
position: 'bottomleft'
}).addTo(map);
var hoverMarker = null;
var trackPoints = [];
var timeLabels = [];
var ctx = document.getElementById('chart-bfbf9460').getContext('2d');
var chart = new Chart(ctx, {
type: 'line',
data: {
datasets: [{
label: '標高 (m)',
data: [],
borderColor: '#007bff',
backgroundColor: 'rgba(0, 123, 255, 0.1)',
fill: true,
borderWidth: 1.5,
pointRadius: 0,
pointHoverRadius: 6,
tension: 0.1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
interaction: { mode: 'index', intersect: false },
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
title: function(items) {
var index = items[0].dataIndex;
var timeStr = timeLabels[index] || '';
var distStr = items[0].raw.x.toFixed(2) + ' km';
return timeStr ? '時刻: ' + timeStr + '（距離: ' + distStr + '）' : '距離: ' + distStr;
},
label: function(item) {
return '標高: ' + item.raw.y + ' m';
}
}
}
},
scales: {
x: {
type: 'linear',
display: true,
title: { display: true, text: '距離 (km)', font: { size: 10 } },
ticks: {
font: { size: 10 }
},
grid: { color: 'rgba(0, 0, 0, 0.05)' }
},
y: {
display: true,
title: { display: true, text: '標高 (m)', font: { size: 10 } },
ticks: { font: { size: 10 } },
grid: { color: 'rgba(0, 0, 0, 0.05)' }
}
},
onHover: function(event, activeElements) {
if (activeElements &amp;&amp; activeElements.length &gt; 0) {
var index = activeElements[0].index;
updateHoverMarker(index);
}
}
}
});
function updateHoverMarker(index) {
var pt = trackPoints[index];
if (pt) {
if (!hoverMarker) {
hoverMarker = L.circleMarker([pt.lat, pt.lng], {
radius: 8,
fillColor: '#00ffff',
color: '#ffffff',
weight: 3,
opacity: 1,
fillOpacity: 1
}).addTo(map);
} else {
hoverMarker.setLatLng([pt.lat, pt.lng]);
}
}
}
function extractTrackData(layer) {
var pts = [];
var polylines = [];
if (typeof layer.getLatLngs === 'function') {
var latlngs = layer.getLatLngs();
var flat = Array.isArray(latlngs[0]) ? latlngs.flat(Infinity) : latlngs;
flat.forEach(function(p) {
if (p &amp;&amp; typeof p.lat === 'number') {
pts.push({ lat: p.lat, lng: p.lng });
}
});
if (layer instanceof L.Polyline) {
polylines.push(layer);
}
} else if (typeof layer.eachLayer === 'function') {
layer.eachLayer(function(child) {
var res = extractTrackData(child);
pts = pts.concat(res.pts);
polylines = polylines.concat(res.polylines);
});
}
return { pts: pts, polylines: polylines };
}
fetch(gpxUrl)
.then(function(response) { return response.text(); })
.then(function(xmlText) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlText, "text/xml");
var trkpts = xmlDoc.getElementsByTagName("trkpt");
for (var i = 0; i &lt; trkpts.length; i++) {
var timeNode = trkpts[i].getElementsByTagName("time")[0];
if (timeNode) {
var dateObj = new Date(timeNode.textContent);
var timeStr = dateObj.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
timeLabels.push(timeStr);
} else {
timeLabels.push('');
}
}
})
.catch(function(err) {
console.error("GPX Time Parsing Error:", err);
});
new L.GPX(gpxUrl, {
async: true,
polyline_options: { color: '#ff3300', weight: 5, opacity: 0.8 },
marker_options: { startIconUrl: null, endIconUrl: null, wptIconUrls: null }
}).on('loaded', function(e) {
var gpx = e.target;
map.fitBounds(gpx.getBounds());
var totalDistMeters = gpx.get_distance();
var distKmNum = totalDistMeters / 1000;
var distKmStr = distKmNum.toFixed(2);
var maxEle = Math.round(gpx.get_elevation_max());
var minEle = Math.round(gpx.get_elevation_min());
var gainEle = Math.round(gpx.get_elevation_gain());
var lossEle = Math.round(gpx.get_elevation_loss());
document.getElementById('sum-dist-bfbf9460').innerText = distKmStr;
document.getElementById('sum-up-bfbf9460').innerText = gainEle;
document.getElementById('sum-down-bfbf9460').innerText = lossEle;
document.getElementById('sum-max-bfbf9460').innerText = maxEle;
document.getElementById('sum-min-bfbf9460').innerText = minEle;
var eleData = gpx.get_elevation_data();
var chartDataPoints = [];
var extracted = extractTrackData(gpx);
trackPoints = extracted.pts;
if (trackPoints.length &gt; 0) {
var startPt = trackPoints[0];
var endPt = trackPoints[trackPoints.length - 1];
L.circleMarker([startPt.lat, startPt.lng], {
radius: 9,
fillColor: '#28a745',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('スタート', { permanent: false, direction: 'top' });
L.circleMarker([endPt.lat, endPt.lng], {
radius: 9,
fillColor: '#dc3545',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('ゴール', { permanent: false, direction: 'top' });
}
eleData.forEach(function(item) {
var dist = typeof item[0] === 'number' ? item[0] : parseFloat(item[0]);
var ele = Math.round(item[1]);
chartDataPoints.push({
x: parseFloat(dist.toFixed(2)),
y: ele
});
});
var dynamicStepSize = 1.0;
if (distKmNum &lt;= 5) {
dynamicStepSize = 0.5;
} else if (distKmNum &lt;= 20) {
dynamicStepSize = 1.0;
} else if (distKmNum &lt;= 40) {
dynamicStepSize = 5.0;
} else {
dynamicStepSize = 10.0;
}
chart.options.scales.x.max = distKmNum;
var allowedTicks = [];
for (var v = 0; v &lt; distKmNum; v += dynamicStepSize) {
allowedTicks.push(parseFloat(v.toFixed(1)));
}
chart.options.scales.x.ticks.callback = function(value) {
for (var i = 0; i &lt; allowedTicks.length; i++) {
if (Math.abs(value - allowedTicks[i]) &lt; 0.01) {
return value + ' km';
}
}
return '';
};
chart.options.scales.x.afterBuildTicks = function(axis) {
axis.ticks = allowedTicks.map(function(val) {
return { value: val };
});
};
chart.data.datasets[0].data = chartDataPoints;
chart.update();
extracted.polylines.forEach(function(polyline) {
polyline.on('mousemove', function(ev) {
if (!trackPoints.length) return;
var mouseLatLng = ev.latlng;
var closestIndex = 0;
var minDist = Infinity;
for (var i = 0; i &lt; trackPoints.length; i++) {
var d = mouseLatLng.distanceTo(L.latLng(trackPoints[i].lat, trackPoints[i].lng));
if (d &lt; minDist) {
minDist = d;
closestIndex = i;
}
}
updateHoverMarker(closestIndex);
chart.setActiveElements([{ datasetIndex: 0, index: closestIndex }]);
chart.tooltip.setActiveElements([{ datasetIndex: 0, index: closestIndex }], { x: 0, y: 0 });
chart.update();
});
});
}).addTo(map);
});
&lt;/script&gt;
&lt;hr&gt;
&lt;h3 id="山行記録"&gt;山行記録&lt;/h3&gt;
&lt;p&gt;記入中&lt;/p&gt;</description></item><item><title>Part 2 : 日原川下流右岸中段道</title><link>https://montagna-katokeyci.github.io/oohc/posts/2026-06-20/</link><pubDate>Sat, 20 Jun 2026 00:00:00 +0000</pubDate><guid>https://montagna-katokeyci.github.io/oohc/posts/2026-06-20/</guid><description>&lt;p&gt;いきなりのPart 2 は（笑、前週の「不老径路」の模様替え。適当な名前を思いつくまで、時間を要するかもしれない。&lt;br&gt;
前の土曜は不老林道終点（＝オキノ十二天）からヒカゲザス尾根のP1080まで。今日は続きを狩鞍沢、地理院地図に載る小屋跡、山ノ神尾根と繋いだ。この道がどこまで続くのか興味津々。雨降りなので短く歩いた。&lt;br&gt;
概略は本文を、詳細は写真のキャプションを参照。&lt;/p&gt;
&lt;p&gt;/追記～タイトル変更/
はじめ本記録のタイトルを「山ノ神尾根co1100m径路」としたが、その先も西進を続ける径路のタイトルとしてふさわしくないと判断し変更した。&lt;/p&gt;
&lt;hr&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;項目&lt;/th&gt;
&lt;th style="text-align: left"&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;記録日&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026年6月20日（土）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;天候&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ガスのち昼から雨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;パーティ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;モンターニャ単独&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;アクセス&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;JR青梅線で奥多摩駅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;行程&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;奥多摩駅、大沢、ヒカゲザス尾根、P1080、日原川下流右岸中段道、狩鞍沢、山ノ神尾根、狩倉山、石尾根、奥多摩駅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="コースタイム"&gt;コースタイム&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;07:18〜奥多摩駅スタート&lt;/li&gt;
&lt;li&gt;07:57〜大沢駐車場付近〜08:21&lt;/li&gt;
&lt;li&gt;09:49〜ヒカゲザス尾根P1080付近〜10:31&lt;/li&gt;
&lt;li&gt;10:36～山腹道（日原川下流右岸中段道）に入る、co1090m&lt;/li&gt;
&lt;li&gt;11:14～狩鞍沢～11:24&lt;/li&gt;
&lt;li&gt;12:00～小屋跡、山ノ神尾根co1170m東南尾根のco1070m～12:08&lt;/li&gt;
&lt;li&gt;12:19～山ノ神尾根、co1090m～12:25&lt;/li&gt;
&lt;li&gt;13:09～狩倉山～13:15&lt;/li&gt;
&lt;li&gt;14:53〜奥多摩駅フィニッシュ&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="コースマップ"&gt;コースマップ&lt;/h3&gt;
&lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /&gt;
&lt;style&gt;
.gpx-container {
width: 100%;
margin: 1.5rem 0;
border: 1px solid #ccc;
border-radius: 8px;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
font-family: sans-serif;
}
.gpx-map { height: 380px; width: 100%; }
.gpx-summary {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
background: #f8f9fa;
padding: 8px 10px;
border-top: 1px solid #e0e0e0;
border-bottom: 1px solid #e0e0e0;
font-size: 0.8rem;
color: #333;
overflow-x: auto;
white-space: nowrap;
}
.gpx-summary-item {
margin: 0 4px;
}
.gpx-summary-item strong {
color: #007bff;
font-size: 0.95rem;
margin-left: 2px;
}
.gpx-chart-wrapper {
height: 180px;
width: 100%;
padding: 10px;
background: #fafafa;
box-sizing: border-box;
}
.start-marker-icon, .goal-marker-icon {
background: none;
border: none;
font-weight: bold;
font-size: 11px;
color: #ffffff;
text-align: center;
line-height: 18px;
}
&lt;/style&gt;
&lt;div class="gpx-container"&gt;
&lt;div id="map-d4d23bd2" class="gpx-map"&gt;&lt;/div&gt;
&lt;div id="summary-d4d23bd2" class="gpx-summary"&gt;
&lt;div class="gpx-summary-item"&gt;総距離:&lt;strong id="sum-dist-d4d23bd2"&gt;-&lt;/strong&gt; km&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高上り:&lt;strong id="sum-up-d4d23bd2"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高下り:&lt;strong id="sum-down-d4d23bd2"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最高標高:&lt;strong id="sum-max-d4d23bd2"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最低標高:&lt;strong id="sum-min-d4d23bd2"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;/div&gt;
&lt;div class="gpx-chart-wrapper"&gt;
&lt;canvas id="chart-d4d23bd2"&gt;&lt;/canvas&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"&gt;&lt;/script&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-gpx/1.7.0/gpx.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
&lt;script&gt;
window.addEventListener('load', function() {
var gpxUrl = '\/oohc\/posts\/2026-06-20\/20260620_20260620.gpx';
var map = L.map('map-d4d23bd2').setView([0, 0], 10);
L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
attribution: '&lt;a href="https://maps.gsi.go.jp/development/ichiran.html" target="_blank"&gt;国土地理院&lt;/a&gt;',
maxZoom: 18
}).addTo(map);
L.control.scale({
imperial: false,
position: 'bottomleft'
}).addTo(map);
var hoverMarker = null;
var trackPoints = [];
var timeLabels = [];
var ctx = document.getElementById('chart-d4d23bd2').getContext('2d');
var chart = new Chart(ctx, {
type: 'line',
data: {
datasets: [{
label: '標高 (m)',
data: [],
borderColor: '#007bff',
backgroundColor: 'rgba(0, 123, 255, 0.1)',
fill: true,
borderWidth: 1.5,
pointRadius: 0,
pointHoverRadius: 6,
tension: 0.1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
interaction: { mode: 'index', intersect: false },
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
title: function(items) {
var index = items[0].dataIndex;
var timeStr = timeLabels[index] || '';
var distStr = items[0].raw.x.toFixed(2) + ' km';
return timeStr ? '時刻: ' + timeStr + '（距離: ' + distStr + '）' : '距離: ' + distStr;
},
label: function(item) {
return '標高: ' + item.raw.y + ' m';
}
}
}
},
scales: {
x: {
type: 'linear',
display: true,
title: { display: true, text: '距離 (km)', font: { size: 10 } },
ticks: {
font: { size: 10 }
},
grid: { color: 'rgba(0, 0, 0, 0.05)' }
},
y: {
display: true,
title: { display: true, text: '標高 (m)', font: { size: 10 } },
ticks: { font: { size: 10 } },
grid: { color: 'rgba(0, 0, 0, 0.05)' }
}
},
onHover: function(event, activeElements) {
if (activeElements &amp;&amp; activeElements.length &gt; 0) {
var index = activeElements[0].index;
updateHoverMarker(index);
}
}
}
});
function updateHoverMarker(index) {
var pt = trackPoints[index];
if (pt) {
if (!hoverMarker) {
hoverMarker = L.circleMarker([pt.lat, pt.lng], {
radius: 8,
fillColor: '#00ffff',
color: '#ffffff',
weight: 3,
opacity: 1,
fillOpacity: 1
}).addTo(map);
} else {
hoverMarker.setLatLng([pt.lat, pt.lng]);
}
}
}
function extractTrackData(layer) {
var pts = [];
var polylines = [];
if (typeof layer.getLatLngs === 'function') {
var latlngs = layer.getLatLngs();
var flat = Array.isArray(latlngs[0]) ? latlngs.flat(Infinity) : latlngs;
flat.forEach(function(p) {
if (p &amp;&amp; typeof p.lat === 'number') {
pts.push({ lat: p.lat, lng: p.lng });
}
});
if (layer instanceof L.Polyline) {
polylines.push(layer);
}
} else if (typeof layer.eachLayer === 'function') {
layer.eachLayer(function(child) {
var res = extractTrackData(child);
pts = pts.concat(res.pts);
polylines = polylines.concat(res.polylines);
});
}
return { pts: pts, polylines: polylines };
}
fetch(gpxUrl)
.then(function(response) { return response.text(); })
.then(function(xmlText) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlText, "text/xml");
var trkpts = xmlDoc.getElementsByTagName("trkpt");
for (var i = 0; i &lt; trkpts.length; i++) {
var timeNode = trkpts[i].getElementsByTagName("time")[0];
if (timeNode) {
var dateObj = new Date(timeNode.textContent);
var timeStr = dateObj.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
timeLabels.push(timeStr);
} else {
timeLabels.push('');
}
}
})
.catch(function(err) {
console.error("GPX Time Parsing Error:", err);
});
new L.GPX(gpxUrl, {
async: true,
polyline_options: { color: '#ff3300', weight: 5, opacity: 0.8 },
marker_options: { startIconUrl: null, endIconUrl: null, wptIconUrls: null }
}).on('loaded', function(e) {
var gpx = e.target;
map.fitBounds(gpx.getBounds());
var totalDistMeters = gpx.get_distance();
var distKmNum = totalDistMeters / 1000;
var distKmStr = distKmNum.toFixed(2);
var maxEle = Math.round(gpx.get_elevation_max());
var minEle = Math.round(gpx.get_elevation_min());
var gainEle = Math.round(gpx.get_elevation_gain());
var lossEle = Math.round(gpx.get_elevation_loss());
document.getElementById('sum-dist-d4d23bd2').innerText = distKmStr;
document.getElementById('sum-up-d4d23bd2').innerText = gainEle;
document.getElementById('sum-down-d4d23bd2').innerText = lossEle;
document.getElementById('sum-max-d4d23bd2').innerText = maxEle;
document.getElementById('sum-min-d4d23bd2').innerText = minEle;
var eleData = gpx.get_elevation_data();
var chartDataPoints = [];
var extracted = extractTrackData(gpx);
trackPoints = extracted.pts;
if (trackPoints.length &gt; 0) {
var startPt = trackPoints[0];
var endPt = trackPoints[trackPoints.length - 1];
L.circleMarker([startPt.lat, startPt.lng], {
radius: 9,
fillColor: '#28a745',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('スタート', { permanent: false, direction: 'top' });
L.circleMarker([endPt.lat, endPt.lng], {
radius: 9,
fillColor: '#dc3545',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('ゴール', { permanent: false, direction: 'top' });
}
eleData.forEach(function(item) {
var dist = typeof item[0] === 'number' ? item[0] : parseFloat(item[0]);
var ele = Math.round(item[1]);
chartDataPoints.push({
x: parseFloat(dist.toFixed(2)),
y: ele
});
});
var dynamicStepSize = 1.0;
if (distKmNum &lt;= 5) {
dynamicStepSize = 0.5;
} else if (distKmNum &lt;= 20) {
dynamicStepSize = 1.0;
} else if (distKmNum &lt;= 40) {
dynamicStepSize = 5.0;
} else {
dynamicStepSize = 10.0;
}
chart.options.scales.x.max = distKmNum;
var allowedTicks = [];
for (var v = 0; v &lt; distKmNum; v += dynamicStepSize) {
allowedTicks.push(parseFloat(v.toFixed(1)));
}
chart.options.scales.x.ticks.callback = function(value) {
for (var i = 0; i &lt; allowedTicks.length; i++) {
if (Math.abs(value - allowedTicks[i]) &lt; 0.01) {
return value + ' km';
}
}
return '';
};
chart.options.scales.x.afterBuildTicks = function(axis) {
axis.ticks = allowedTicks.map(function(val) {
return { value: val };
});
};
chart.data.datasets[0].data = chartDataPoints;
chart.update();
extracted.polylines.forEach(function(polyline) {
polyline.on('mousemove', function(ev) {
if (!trackPoints.length) return;
var mouseLatLng = ev.latlng;
var closestIndex = 0;
var minDist = Infinity;
for (var i = 0; i &lt; trackPoints.length; i++) {
var d = mouseLatLng.distanceTo(L.latLng(trackPoints[i].lat, trackPoints[i].lng));
if (d &lt; minDist) {
minDist = d;
closestIndex = i;
}
}
updateHoverMarker(closestIndex);
chart.setActiveElements([{ datasetIndex: 0, index: closestIndex }]);
chart.tooltip.setActiveElements([{ datasetIndex: 0, index: closestIndex }], { x: 0, y: 0 });
chart.update();
});
});
}).addTo(map);
});
&lt;/script&gt;
&lt;hr&gt;
&lt;h3 id="山行記録"&gt;山行記録&lt;/h3&gt;
&lt;h4 id="ヒカゲザス尾根"&gt;  ヒカゲザス尾根&lt;/h4&gt;
&lt;p&gt;本レポートのメインテーマではないが、少し触れておきたい。
記録者のなかでは、ヒカゲザス尾根はかなり特徴的な位置づけになりつつある。
まず、何か所かある露岩の急斜面が登りにくい。「岩崖」ほどではないのでハイカーでもたどれるが、難度はけっこう高い。露岩の斜面を回避する踏み跡も目につく。ルート取りであれこれ考えさせられ、「次は別のラインで上がってみようか」の気分にさせられる尾根は、多くはない。
そして、その険しい尾根の周辺で見かける植林エリアが、とても丁寧に手入れされている。通いにくい山奥の山林を守る労力は、並大抵のものではないだろう。ただ頭が下がるばかりだ。―― 性懲りもなく「いったいどうやって通うのだろう」の疑問がワンセットで湧いてくるのは、呆れて許していただきたいが。&lt;/p&gt;</description></item><item><title>Part 1 : 日原川下流右岸中段道</title><link>https://montagna-katokeyci.github.io/oohc/posts/2026-06-13/</link><pubDate>Sat, 13 Jun 2026 00:00:00 +0000</pubDate><guid>https://montagna-katokeyci.github.io/oohc/posts/2026-06-13/</guid><description>&lt;p&gt;昨年夏に家入沢を下降したさい、右岸に農大の小屋を見た。オキノ十二天までの不老林道と標高が合うので、道が繋がっているだろう。&lt;br&gt;
問題はその先で、「家入沢でおしまい」のはずもない。記録も情報もなく、直感だけが頼りの径路探索だったが、道跡をたどりなんとかヒカゲザス尾根へ回り込むことができた。道中、乗越す尾根がことごとく岩尾根で厄介だ。&lt;br&gt;
道の由来だが、現在・近過去をひっくるめて、農大の作業道をたどったのではないか。無論、元々は樵道だ。「不老径路」は、うまいネーミングも思いつかずの苦し紛れw&lt;/p&gt;
&lt;p&gt;/追記～タイトル変更/&lt;br&gt;
はじめ本記録のタイトルを「不老径路」としたが、その先も西進を続ける径路のタイトルとしてふさわしくないと判断し変更した。&lt;/p&gt;
&lt;hr&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;項目&lt;/th&gt;
&lt;th style="text-align: left"&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;記録日&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026年6月13日（土）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;天候&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;曇り→14時半から雨→16時前に上がる、虫が多くて長袖の上から何か所も刺される&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;パーティ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;モンターニャ単独&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;アクセス&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;JR青梅線で奥多摩駅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;行程&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;奥多摩駅、不老林道、オキノ十二天、〇日原川下流右岸中段道 ✕不老径路、家入沢、ヒカゲザス尾根、狩倉山、石尾根、奥多摩駅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="コースタイム"&gt;コースタイム&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;記入中&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="コースマップ"&gt;コースマップ&lt;/h3&gt;
&lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /&gt;
&lt;style&gt;
.gpx-container {
width: 100%;
margin: 1.5rem 0;
border: 1px solid #ccc;
border-radius: 8px;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
font-family: sans-serif;
}
.gpx-map { height: 380px; width: 100%; }
.gpx-summary {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
background: #f8f9fa;
padding: 8px 10px;
border-top: 1px solid #e0e0e0;
border-bottom: 1px solid #e0e0e0;
font-size: 0.8rem;
color: #333;
overflow-x: auto;
white-space: nowrap;
}
.gpx-summary-item {
margin: 0 4px;
}
.gpx-summary-item strong {
color: #007bff;
font-size: 0.95rem;
margin-left: 2px;
}
.gpx-chart-wrapper {
height: 180px;
width: 100%;
padding: 10px;
background: #fafafa;
box-sizing: border-box;
}
.start-marker-icon, .goal-marker-icon {
background: none;
border: none;
font-weight: bold;
font-size: 11px;
color: #ffffff;
text-align: center;
line-height: 18px;
}
&lt;/style&gt;
&lt;div class="gpx-container"&gt;
&lt;div id="map-b30192ac" class="gpx-map"&gt;&lt;/div&gt;
&lt;div id="summary-b30192ac" class="gpx-summary"&gt;
&lt;div class="gpx-summary-item"&gt;総距離:&lt;strong id="sum-dist-b30192ac"&gt;-&lt;/strong&gt; km&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高上り:&lt;strong id="sum-up-b30192ac"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高下り:&lt;strong id="sum-down-b30192ac"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最高標高:&lt;strong id="sum-max-b30192ac"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最低標高:&lt;strong id="sum-min-b30192ac"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;/div&gt;
&lt;div class="gpx-chart-wrapper"&gt;
&lt;canvas id="chart-b30192ac"&gt;&lt;/canvas&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"&gt;&lt;/script&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-gpx/1.7.0/gpx.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
&lt;script&gt;
window.addEventListener('load', function() {
var gpxUrl = '\/oohc\/posts\/2026-06-13\/20260613_20260613.gpx';
var map = L.map('map-b30192ac').setView([0, 0], 10);
L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
attribution: '&lt;a href="https://maps.gsi.go.jp/development/ichiran.html" target="_blank"&gt;国土地理院&lt;/a&gt;',
maxZoom: 18
}).addTo(map);
L.control.scale({
imperial: false,
position: 'bottomleft'
}).addTo(map);
var hoverMarker = null;
var trackPoints = [];
var timeLabels = [];
var ctx = document.getElementById('chart-b30192ac').getContext('2d');
var chart = new Chart(ctx, {
type: 'line',
data: {
datasets: [{
label: '標高 (m)',
data: [],
borderColor: '#007bff',
backgroundColor: 'rgba(0, 123, 255, 0.1)',
fill: true,
borderWidth: 1.5,
pointRadius: 0,
pointHoverRadius: 6,
tension: 0.1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
interaction: { mode: 'index', intersect: false },
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
title: function(items) {
var index = items[0].dataIndex;
var timeStr = timeLabels[index] || '';
var distStr = items[0].raw.x.toFixed(2) + ' km';
return timeStr ? '時刻: ' + timeStr + '（距離: ' + distStr + '）' : '距離: ' + distStr;
},
label: function(item) {
return '標高: ' + item.raw.y + ' m';
}
}
}
},
scales: {
x: {
type: 'linear',
display: true,
title: { display: true, text: '距離 (km)', font: { size: 10 } },
ticks: {
font: { size: 10 }
},
grid: { color: 'rgba(0, 0, 0, 0.05)' }
},
y: {
display: true,
title: { display: true, text: '標高 (m)', font: { size: 10 } },
ticks: { font: { size: 10 } },
grid: { color: 'rgba(0, 0, 0, 0.05)' }
}
},
onHover: function(event, activeElements) {
if (activeElements &amp;&amp; activeElements.length &gt; 0) {
var index = activeElements[0].index;
updateHoverMarker(index);
}
}
}
});
function updateHoverMarker(index) {
var pt = trackPoints[index];
if (pt) {
if (!hoverMarker) {
hoverMarker = L.circleMarker([pt.lat, pt.lng], {
radius: 8,
fillColor: '#00ffff',
color: '#ffffff',
weight: 3,
opacity: 1,
fillOpacity: 1
}).addTo(map);
} else {
hoverMarker.setLatLng([pt.lat, pt.lng]);
}
}
}
function extractTrackData(layer) {
var pts = [];
var polylines = [];
if (typeof layer.getLatLngs === 'function') {
var latlngs = layer.getLatLngs();
var flat = Array.isArray(latlngs[0]) ? latlngs.flat(Infinity) : latlngs;
flat.forEach(function(p) {
if (p &amp;&amp; typeof p.lat === 'number') {
pts.push({ lat: p.lat, lng: p.lng });
}
});
if (layer instanceof L.Polyline) {
polylines.push(layer);
}
} else if (typeof layer.eachLayer === 'function') {
layer.eachLayer(function(child) {
var res = extractTrackData(child);
pts = pts.concat(res.pts);
polylines = polylines.concat(res.polylines);
});
}
return { pts: pts, polylines: polylines };
}
fetch(gpxUrl)
.then(function(response) { return response.text(); })
.then(function(xmlText) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlText, "text/xml");
var trkpts = xmlDoc.getElementsByTagName("trkpt");
for (var i = 0; i &lt; trkpts.length; i++) {
var timeNode = trkpts[i].getElementsByTagName("time")[0];
if (timeNode) {
var dateObj = new Date(timeNode.textContent);
var timeStr = dateObj.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
timeLabels.push(timeStr);
} else {
timeLabels.push('');
}
}
})
.catch(function(err) {
console.error("GPX Time Parsing Error:", err);
});
new L.GPX(gpxUrl, {
async: true,
polyline_options: { color: '#ff3300', weight: 5, opacity: 0.8 },
marker_options: { startIconUrl: null, endIconUrl: null, wptIconUrls: null }
}).on('loaded', function(e) {
var gpx = e.target;
map.fitBounds(gpx.getBounds());
var totalDistMeters = gpx.get_distance();
var distKmNum = totalDistMeters / 1000;
var distKmStr = distKmNum.toFixed(2);
var maxEle = Math.round(gpx.get_elevation_max());
var minEle = Math.round(gpx.get_elevation_min());
var gainEle = Math.round(gpx.get_elevation_gain());
var lossEle = Math.round(gpx.get_elevation_loss());
document.getElementById('sum-dist-b30192ac').innerText = distKmStr;
document.getElementById('sum-up-b30192ac').innerText = gainEle;
document.getElementById('sum-down-b30192ac').innerText = lossEle;
document.getElementById('sum-max-b30192ac').innerText = maxEle;
document.getElementById('sum-min-b30192ac').innerText = minEle;
var eleData = gpx.get_elevation_data();
var chartDataPoints = [];
var extracted = extractTrackData(gpx);
trackPoints = extracted.pts;
if (trackPoints.length &gt; 0) {
var startPt = trackPoints[0];
var endPt = trackPoints[trackPoints.length - 1];
L.circleMarker([startPt.lat, startPt.lng], {
radius: 9,
fillColor: '#28a745',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('スタート', { permanent: false, direction: 'top' });
L.circleMarker([endPt.lat, endPt.lng], {
radius: 9,
fillColor: '#dc3545',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('ゴール', { permanent: false, direction: 'top' });
}
eleData.forEach(function(item) {
var dist = typeof item[0] === 'number' ? item[0] : parseFloat(item[0]);
var ele = Math.round(item[1]);
chartDataPoints.push({
x: parseFloat(dist.toFixed(2)),
y: ele
});
});
var dynamicStepSize = 1.0;
if (distKmNum &lt;= 5) {
dynamicStepSize = 0.5;
} else if (distKmNum &lt;= 20) {
dynamicStepSize = 1.0;
} else if (distKmNum &lt;= 40) {
dynamicStepSize = 5.0;
} else {
dynamicStepSize = 10.0;
}
chart.options.scales.x.max = distKmNum;
var allowedTicks = [];
for (var v = 0; v &lt; distKmNum; v += dynamicStepSize) {
allowedTicks.push(parseFloat(v.toFixed(1)));
}
chart.options.scales.x.ticks.callback = function(value) {
for (var i = 0; i &lt; allowedTicks.length; i++) {
if (Math.abs(value - allowedTicks[i]) &lt; 0.01) {
return value + ' km';
}
}
return '';
};
chart.options.scales.x.afterBuildTicks = function(axis) {
axis.ticks = allowedTicks.map(function(val) {
return { value: val };
});
};
chart.data.datasets[0].data = chartDataPoints;
chart.update();
extracted.polylines.forEach(function(polyline) {
polyline.on('mousemove', function(ev) {
if (!trackPoints.length) return;
var mouseLatLng = ev.latlng;
var closestIndex = 0;
var minDist = Infinity;
for (var i = 0; i &lt; trackPoints.length; i++) {
var d = mouseLatLng.distanceTo(L.latLng(trackPoints[i].lat, trackPoints[i].lng));
if (d &lt; minDist) {
minDist = d;
closestIndex = i;
}
}
updateHoverMarker(closestIndex);
chart.setActiveElements([{ datasetIndex: 0, index: closestIndex }]);
chart.tooltip.setActiveElements([{ datasetIndex: 0, index: closestIndex }], { x: 0, y: 0 });
chart.update();
});
});
}).addTo(map);
});
&lt;/script&gt;
&lt;hr&gt;
&lt;h3 id="山行記録"&gt;山行記録&lt;/h3&gt;
&lt;p&gt;記入中&lt;/p&gt;</description></item><item><title>Part 1 : 大ダワ林道古道（？）</title><link>https://montagna-katokeyci.github.io/oohc/posts/2026-06-06/</link><pubDate>Sat, 06 Jun 2026 00:00:00 +0000</pubDate><guid>https://montagna-katokeyci.github.io/oohc/posts/2026-06-06/</guid><description>&lt;p&gt;きっかけは2つ。&lt;/p&gt;
&lt;p&gt;① 4月25日に小雲取谷出合いから撤収するさい、大ダワ林道をたどった。一度ならず死亡事故の起きている崩落地を高巻く最中、下流＝二軒小屋尾根方向へ続くハッキリした踏み跡に乗る※1。訝しみながらも、踏み跡から外れ窪を下降して大ダワ林道に戻った。&lt;br&gt;
② 近年までの地理院地図には、長沢谷左岸から長沢谷を渡り二軒小屋尾根に上がるルートが、現在より上を回るように描かれている。二軒小屋尾根を発つ標高も高いから、横に延びる道筋は（現在の）崩落地の上を通る。&lt;br&gt;
そもそも長沢谷への下降点が現在よりもずっと先で、対岸は踊窪（登山詳細図）付近と推測される。この点についても、3月に大ブナ別れから長沢谷下降点までたどったさい、現代の下降点を左下に見ながらまだ先に延びる道を見ている（※2の写真35）。&lt;/p&gt;
&lt;p&gt;小雲取谷出合いからの帰り道①、出会ったのはもしかしてこの経路②ではないか。&lt;br&gt;
今回も、疑問を解消するために実地に歩いてみた。&lt;br&gt;
撤収後にP1726まで上がっているのはトレーニングのためで、大ダワ林道とは関係ない。&lt;/p&gt;
&lt;hr&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;項目&lt;/th&gt;
&lt;th style="text-align: left"&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;記録日&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026年6月6日（日）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;天候&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;雨上がりで路面ウエットの晴れたり曇ったり、気温上がらず湿度高い、虫がわんさか湧いていた&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;パーティ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;モンターニャ単独&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;アクセス&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;西東京バスで東日原バス停&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;行程&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;東日原バス停、日原林道、長沢谷下降点、長沢谷、踊窪、（古径）大ダワ道、二軒小屋尾根、（古径）大ダワ道、二軒小屋尾根、モミソの頭、P1726、二軒小屋尾根乗越し、長沢谷、日原林道、中日原バス停&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="コースタイム"&gt;コースタイム&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;08:13～東日原バス停スタート&lt;/li&gt;
&lt;li&gt;08:50～八丁橋～08:55&lt;/li&gt;
&lt;li&gt;09:59～長沢谷下降点～10:27&lt;/li&gt;
&lt;li&gt;/&lt;em&gt;林道上の踏み跡をたどる&lt;/em&gt;/&lt;/li&gt;
&lt;li&gt;10:58～林道に戻る&lt;/li&gt;
&lt;li&gt;11:12～ナギ谷への踏み跡&lt;/li&gt;
&lt;li&gt;11:20～ナギ谷右岸尾根～11:30&lt;/li&gt;
&lt;li&gt;11:47～踊窪～12:01&lt;/li&gt;
&lt;li&gt;13:00～二軒小屋尾根に上がる、co1280m～13:05&lt;/li&gt;
&lt;li&gt;13:19～（P1300真西のco1250m）～13:39&lt;/li&gt;
&lt;li&gt;13:44～（カジ小屋窪手前の窪）～13:50&lt;/li&gt;
&lt;li&gt;14:03～二軒小屋尾根&lt;/li&gt;
&lt;li&gt;14:48～P1726&lt;/li&gt;
&lt;li&gt;15:48～日原林道長沢谷下降点&lt;/li&gt;
&lt;li&gt;17:21～東日原バス停フィニッシュ&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="コースマップ"&gt;コースマップ&lt;/h3&gt;
&lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /&gt;
&lt;style&gt;
.gpx-container {
width: 100%;
margin: 1.5rem 0;
border: 1px solid #ccc;
border-radius: 8px;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
font-family: sans-serif;
}
.gpx-map { height: 380px; width: 100%; }
.gpx-summary {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
background: #f8f9fa;
padding: 8px 10px;
border-top: 1px solid #e0e0e0;
border-bottom: 1px solid #e0e0e0;
font-size: 0.8rem;
color: #333;
overflow-x: auto;
white-space: nowrap;
}
.gpx-summary-item {
margin: 0 4px;
}
.gpx-summary-item strong {
color: #007bff;
font-size: 0.95rem;
margin-left: 2px;
}
.gpx-chart-wrapper {
height: 180px;
width: 100%;
padding: 10px;
background: #fafafa;
box-sizing: border-box;
}
.start-marker-icon, .goal-marker-icon {
background: none;
border: none;
font-weight: bold;
font-size: 11px;
color: #ffffff;
text-align: center;
line-height: 18px;
}
&lt;/style&gt;
&lt;div class="gpx-container"&gt;
&lt;div id="map-7291b016" class="gpx-map"&gt;&lt;/div&gt;
&lt;div id="summary-7291b016" class="gpx-summary"&gt;
&lt;div class="gpx-summary-item"&gt;総距離:&lt;strong id="sum-dist-7291b016"&gt;-&lt;/strong&gt; km&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高上り:&lt;strong id="sum-up-7291b016"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高下り:&lt;strong id="sum-down-7291b016"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最高標高:&lt;strong id="sum-max-7291b016"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最低標高:&lt;strong id="sum-min-7291b016"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;/div&gt;
&lt;div class="gpx-chart-wrapper"&gt;
&lt;canvas id="chart-7291b016"&gt;&lt;/canvas&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"&gt;&lt;/script&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-gpx/1.7.0/gpx.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
&lt;script&gt;
window.addEventListener('load', function() {
var gpxUrl = '\/oohc\/posts\/2026-06-06\/20260606_20260606.gpx';
var map = L.map('map-7291b016').setView([0, 0], 10);
L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
attribution: '&lt;a href="https://maps.gsi.go.jp/development/ichiran.html" target="_blank"&gt;国土地理院&lt;/a&gt;',
maxZoom: 18
}).addTo(map);
L.control.scale({
imperial: false,
position: 'bottomleft'
}).addTo(map);
var hoverMarker = null;
var trackPoints = [];
var timeLabels = [];
var ctx = document.getElementById('chart-7291b016').getContext('2d');
var chart = new Chart(ctx, {
type: 'line',
data: {
datasets: [{
label: '標高 (m)',
data: [],
borderColor: '#007bff',
backgroundColor: 'rgba(0, 123, 255, 0.1)',
fill: true,
borderWidth: 1.5,
pointRadius: 0,
pointHoverRadius: 6,
tension: 0.1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
interaction: { mode: 'index', intersect: false },
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
title: function(items) {
var index = items[0].dataIndex;
var timeStr = timeLabels[index] || '';
var distStr = items[0].raw.x.toFixed(2) + ' km';
return timeStr ? '時刻: ' + timeStr + '（距離: ' + distStr + '）' : '距離: ' + distStr;
},
label: function(item) {
return '標高: ' + item.raw.y + ' m';
}
}
}
},
scales: {
x: {
type: 'linear',
display: true,
title: { display: true, text: '距離 (km)', font: { size: 10 } },
ticks: {
font: { size: 10 }
},
grid: { color: 'rgba(0, 0, 0, 0.05)' }
},
y: {
display: true,
title: { display: true, text: '標高 (m)', font: { size: 10 } },
ticks: { font: { size: 10 } },
grid: { color: 'rgba(0, 0, 0, 0.05)' }
}
},
onHover: function(event, activeElements) {
if (activeElements &amp;&amp; activeElements.length &gt; 0) {
var index = activeElements[0].index;
updateHoverMarker(index);
}
}
}
});
function updateHoverMarker(index) {
var pt = trackPoints[index];
if (pt) {
if (!hoverMarker) {
hoverMarker = L.circleMarker([pt.lat, pt.lng], {
radius: 8,
fillColor: '#00ffff',
color: '#ffffff',
weight: 3,
opacity: 1,
fillOpacity: 1
}).addTo(map);
} else {
hoverMarker.setLatLng([pt.lat, pt.lng]);
}
}
}
function extractTrackData(layer) {
var pts = [];
var polylines = [];
if (typeof layer.getLatLngs === 'function') {
var latlngs = layer.getLatLngs();
var flat = Array.isArray(latlngs[0]) ? latlngs.flat(Infinity) : latlngs;
flat.forEach(function(p) {
if (p &amp;&amp; typeof p.lat === 'number') {
pts.push({ lat: p.lat, lng: p.lng });
}
});
if (layer instanceof L.Polyline) {
polylines.push(layer);
}
} else if (typeof layer.eachLayer === 'function') {
layer.eachLayer(function(child) {
var res = extractTrackData(child);
pts = pts.concat(res.pts);
polylines = polylines.concat(res.polylines);
});
}
return { pts: pts, polylines: polylines };
}
fetch(gpxUrl)
.then(function(response) { return response.text(); })
.then(function(xmlText) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlText, "text/xml");
var trkpts = xmlDoc.getElementsByTagName("trkpt");
for (var i = 0; i &lt; trkpts.length; i++) {
var timeNode = trkpts[i].getElementsByTagName("time")[0];
if (timeNode) {
var dateObj = new Date(timeNode.textContent);
var timeStr = dateObj.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
timeLabels.push(timeStr);
} else {
timeLabels.push('');
}
}
})
.catch(function(err) {
console.error("GPX Time Parsing Error:", err);
});
new L.GPX(gpxUrl, {
async: true,
polyline_options: { color: '#ff3300', weight: 5, opacity: 0.8 },
marker_options: { startIconUrl: null, endIconUrl: null, wptIconUrls: null }
}).on('loaded', function(e) {
var gpx = e.target;
map.fitBounds(gpx.getBounds());
var totalDistMeters = gpx.get_distance();
var distKmNum = totalDistMeters / 1000;
var distKmStr = distKmNum.toFixed(2);
var maxEle = Math.round(gpx.get_elevation_max());
var minEle = Math.round(gpx.get_elevation_min());
var gainEle = Math.round(gpx.get_elevation_gain());
var lossEle = Math.round(gpx.get_elevation_loss());
document.getElementById('sum-dist-7291b016').innerText = distKmStr;
document.getElementById('sum-up-7291b016').innerText = gainEle;
document.getElementById('sum-down-7291b016').innerText = lossEle;
document.getElementById('sum-max-7291b016').innerText = maxEle;
document.getElementById('sum-min-7291b016').innerText = minEle;
var eleData = gpx.get_elevation_data();
var chartDataPoints = [];
var extracted = extractTrackData(gpx);
trackPoints = extracted.pts;
if (trackPoints.length &gt; 0) {
var startPt = trackPoints[0];
var endPt = trackPoints[trackPoints.length - 1];
L.circleMarker([startPt.lat, startPt.lng], {
radius: 9,
fillColor: '#28a745',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('スタート', { permanent: false, direction: 'top' });
L.circleMarker([endPt.lat, endPt.lng], {
radius: 9,
fillColor: '#dc3545',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('ゴール', { permanent: false, direction: 'top' });
}
eleData.forEach(function(item) {
var dist = typeof item[0] === 'number' ? item[0] : parseFloat(item[0]);
var ele = Math.round(item[1]);
chartDataPoints.push({
x: parseFloat(dist.toFixed(2)),
y: ele
});
});
var dynamicStepSize = 1.0;
if (distKmNum &lt;= 5) {
dynamicStepSize = 0.5;
} else if (distKmNum &lt;= 20) {
dynamicStepSize = 1.0;
} else if (distKmNum &lt;= 40) {
dynamicStepSize = 5.0;
} else {
dynamicStepSize = 10.0;
}
chart.options.scales.x.max = distKmNum;
var allowedTicks = [];
for (var v = 0; v &lt; distKmNum; v += dynamicStepSize) {
allowedTicks.push(parseFloat(v.toFixed(1)));
}
chart.options.scales.x.ticks.callback = function(value) {
for (var i = 0; i &lt; allowedTicks.length; i++) {
if (Math.abs(value - allowedTicks[i]) &lt; 0.01) {
return value + ' km';
}
}
return '';
};
chart.options.scales.x.afterBuildTicks = function(axis) {
axis.ticks = allowedTicks.map(function(val) {
return { value: val };
});
};
chart.data.datasets[0].data = chartDataPoints;
chart.update();
extracted.polylines.forEach(function(polyline) {
polyline.on('mousemove', function(ev) {
if (!trackPoints.length) return;
var mouseLatLng = ev.latlng;
var closestIndex = 0;
var minDist = Infinity;
for (var i = 0; i &lt; trackPoints.length; i++) {
var d = mouseLatLng.distanceTo(L.latLng(trackPoints[i].lat, trackPoints[i].lng));
if (d &lt; minDist) {
minDist = d;
closestIndex = i;
}
}
updateHoverMarker(closestIndex);
chart.setActiveElements([{ datasetIndex: 0, index: closestIndex }]);
chart.tooltip.setActiveElements([{ datasetIndex: 0, index: closestIndex }], { x: 0, y: 0 });
chart.update();
});
});
}).addTo(map);
});
&lt;/script&gt;
&lt;hr&gt;
&lt;h3 id="山行記録"&gt;山行記録&lt;/h3&gt;
&lt;p&gt;記入中&lt;/p&gt;</description></item><item><title>（やりなおし）悪谷〜ゴンパ尾根経路</title><link>https://montagna-katokeyci.github.io/oohc/posts/2026-05-30/</link><pubDate>Sat, 30 May 2026 00:00:00 +0000</pubDate><guid>https://montagna-katokeyci.github.io/oohc/posts/2026-05-30/</guid><description>&lt;p&gt;先週、悪谷の右岸をつたってカツラの巨木からゴンパ尾根に上がり、昔の地理院地図に載る古径をたどったつもりでいたが。帰ってきて2-3日、どうもしっくりこない。古地図を再確認すれば、道は「左岸」にあったようだw&lt;br&gt;
やりなお〜し！&lt;br&gt;
右岸の現代の踏み跡に比べれば、左岸の道跡は格段にカラい。のんびりできる場面の少ない、崖っぷちの連なる道跡を久しぶりに歩いた。&lt;/p&gt;
&lt;hr&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;項目&lt;/th&gt;
&lt;th style="text-align: left"&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;記録日&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026年5月30日（土）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;天候&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;晴れのち曇り 弱い風あるも暑い メマトイ多し&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;パーティ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;モンターニャ単独&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;アクセス&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;西東京バスで東日原バス停&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;行程&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;東日原バス停、小川谷林道、終点広場、三又、悪谷（ワル谷、割谷、ワリ谷）、ゴンパ尾根、県境尾根、ヨコスズ尾根、東日原バス停&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="コースタイム"&gt;コースタイム&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;記入中&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="コースマップ"&gt;コースマップ&lt;/h3&gt;
&lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /&gt;
&lt;style&gt;
.gpx-container {
width: 100%;
margin: 1.5rem 0;
border: 1px solid #ccc;
border-radius: 8px;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
font-family: sans-serif;
}
.gpx-map { height: 380px; width: 100%; }
.gpx-summary {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
background: #f8f9fa;
padding: 8px 10px;
border-top: 1px solid #e0e0e0;
border-bottom: 1px solid #e0e0e0;
font-size: 0.8rem;
color: #333;
overflow-x: auto;
white-space: nowrap;
}
.gpx-summary-item {
margin: 0 4px;
}
.gpx-summary-item strong {
color: #007bff;
font-size: 0.95rem;
margin-left: 2px;
}
.gpx-chart-wrapper {
height: 180px;
width: 100%;
padding: 10px;
background: #fafafa;
box-sizing: border-box;
}
.start-marker-icon, .goal-marker-icon {
background: none;
border: none;
font-weight: bold;
font-size: 11px;
color: #ffffff;
text-align: center;
line-height: 18px;
}
&lt;/style&gt;
&lt;div class="gpx-container"&gt;
&lt;div id="map-c4404337" class="gpx-map"&gt;&lt;/div&gt;
&lt;div id="summary-c4404337" class="gpx-summary"&gt;
&lt;div class="gpx-summary-item"&gt;総距離:&lt;strong id="sum-dist-c4404337"&gt;-&lt;/strong&gt; km&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高上り:&lt;strong id="sum-up-c4404337"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高下り:&lt;strong id="sum-down-c4404337"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最高標高:&lt;strong id="sum-max-c4404337"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最低標高:&lt;strong id="sum-min-c4404337"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;/div&gt;
&lt;div class="gpx-chart-wrapper"&gt;
&lt;canvas id="chart-c4404337"&gt;&lt;/canvas&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"&gt;&lt;/script&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-gpx/1.7.0/gpx.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
&lt;script&gt;
window.addEventListener('load', function() {
var gpxUrl = '\/oohc\/posts\/2026-05-30\/20260530_20260530.gpx';
var map = L.map('map-c4404337').setView([0, 0], 10);
L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
attribution: '&lt;a href="https://maps.gsi.go.jp/development/ichiran.html" target="_blank"&gt;国土地理院&lt;/a&gt;',
maxZoom: 18
}).addTo(map);
L.control.scale({
imperial: false,
position: 'bottomleft'
}).addTo(map);
var hoverMarker = null;
var trackPoints = [];
var timeLabels = [];
var ctx = document.getElementById('chart-c4404337').getContext('2d');
var chart = new Chart(ctx, {
type: 'line',
data: {
datasets: [{
label: '標高 (m)',
data: [],
borderColor: '#007bff',
backgroundColor: 'rgba(0, 123, 255, 0.1)',
fill: true,
borderWidth: 1.5,
pointRadius: 0,
pointHoverRadius: 6,
tension: 0.1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
interaction: { mode: 'index', intersect: false },
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
title: function(items) {
var index = items[0].dataIndex;
var timeStr = timeLabels[index] || '';
var distStr = items[0].raw.x.toFixed(2) + ' km';
return timeStr ? '時刻: ' + timeStr + '（距離: ' + distStr + '）' : '距離: ' + distStr;
},
label: function(item) {
return '標高: ' + item.raw.y + ' m';
}
}
}
},
scales: {
x: {
type: 'linear',
display: true,
title: { display: true, text: '距離 (km)', font: { size: 10 } },
ticks: {
font: { size: 10 }
},
grid: { color: 'rgba(0, 0, 0, 0.05)' }
},
y: {
display: true,
title: { display: true, text: '標高 (m)', font: { size: 10 } },
ticks: { font: { size: 10 } },
grid: { color: 'rgba(0, 0, 0, 0.05)' }
}
},
onHover: function(event, activeElements) {
if (activeElements &amp;&amp; activeElements.length &gt; 0) {
var index = activeElements[0].index;
updateHoverMarker(index);
}
}
}
});
function updateHoverMarker(index) {
var pt = trackPoints[index];
if (pt) {
if (!hoverMarker) {
hoverMarker = L.circleMarker([pt.lat, pt.lng], {
radius: 8,
fillColor: '#00ffff',
color: '#ffffff',
weight: 3,
opacity: 1,
fillOpacity: 1
}).addTo(map);
} else {
hoverMarker.setLatLng([pt.lat, pt.lng]);
}
}
}
function extractTrackData(layer) {
var pts = [];
var polylines = [];
if (typeof layer.getLatLngs === 'function') {
var latlngs = layer.getLatLngs();
var flat = Array.isArray(latlngs[0]) ? latlngs.flat(Infinity) : latlngs;
flat.forEach(function(p) {
if (p &amp;&amp; typeof p.lat === 'number') {
pts.push({ lat: p.lat, lng: p.lng });
}
});
if (layer instanceof L.Polyline) {
polylines.push(layer);
}
} else if (typeof layer.eachLayer === 'function') {
layer.eachLayer(function(child) {
var res = extractTrackData(child);
pts = pts.concat(res.pts);
polylines = polylines.concat(res.polylines);
});
}
return { pts: pts, polylines: polylines };
}
fetch(gpxUrl)
.then(function(response) { return response.text(); })
.then(function(xmlText) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlText, "text/xml");
var trkpts = xmlDoc.getElementsByTagName("trkpt");
for (var i = 0; i &lt; trkpts.length; i++) {
var timeNode = trkpts[i].getElementsByTagName("time")[0];
if (timeNode) {
var dateObj = new Date(timeNode.textContent);
var timeStr = dateObj.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
timeLabels.push(timeStr);
} else {
timeLabels.push('');
}
}
})
.catch(function(err) {
console.error("GPX Time Parsing Error:", err);
});
new L.GPX(gpxUrl, {
async: true,
polyline_options: { color: '#ff3300', weight: 5, opacity: 0.8 },
marker_options: { startIconUrl: null, endIconUrl: null, wptIconUrls: null }
}).on('loaded', function(e) {
var gpx = e.target;
map.fitBounds(gpx.getBounds());
var totalDistMeters = gpx.get_distance();
var distKmNum = totalDistMeters / 1000;
var distKmStr = distKmNum.toFixed(2);
var maxEle = Math.round(gpx.get_elevation_max());
var minEle = Math.round(gpx.get_elevation_min());
var gainEle = Math.round(gpx.get_elevation_gain());
var lossEle = Math.round(gpx.get_elevation_loss());
document.getElementById('sum-dist-c4404337').innerText = distKmStr;
document.getElementById('sum-up-c4404337').innerText = gainEle;
document.getElementById('sum-down-c4404337').innerText = lossEle;
document.getElementById('sum-max-c4404337').innerText = maxEle;
document.getElementById('sum-min-c4404337').innerText = minEle;
var eleData = gpx.get_elevation_data();
var chartDataPoints = [];
var extracted = extractTrackData(gpx);
trackPoints = extracted.pts;
if (trackPoints.length &gt; 0) {
var startPt = trackPoints[0];
var endPt = trackPoints[trackPoints.length - 1];
L.circleMarker([startPt.lat, startPt.lng], {
radius: 9,
fillColor: '#28a745',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('スタート', { permanent: false, direction: 'top' });
L.circleMarker([endPt.lat, endPt.lng], {
radius: 9,
fillColor: '#dc3545',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('ゴール', { permanent: false, direction: 'top' });
}
eleData.forEach(function(item) {
var dist = typeof item[0] === 'number' ? item[0] : parseFloat(item[0]);
var ele = Math.round(item[1]);
chartDataPoints.push({
x: parseFloat(dist.toFixed(2)),
y: ele
});
});
var dynamicStepSize = 1.0;
if (distKmNum &lt;= 5) {
dynamicStepSize = 0.5;
} else if (distKmNum &lt;= 20) {
dynamicStepSize = 1.0;
} else if (distKmNum &lt;= 40) {
dynamicStepSize = 5.0;
} else {
dynamicStepSize = 10.0;
}
chart.options.scales.x.max = distKmNum;
var allowedTicks = [];
for (var v = 0; v &lt; distKmNum; v += dynamicStepSize) {
allowedTicks.push(parseFloat(v.toFixed(1)));
}
chart.options.scales.x.ticks.callback = function(value) {
for (var i = 0; i &lt; allowedTicks.length; i++) {
if (Math.abs(value - allowedTicks[i]) &lt; 0.01) {
return value + ' km';
}
}
return '';
};
chart.options.scales.x.afterBuildTicks = function(axis) {
axis.ticks = allowedTicks.map(function(val) {
return { value: val };
});
};
chart.data.datasets[0].data = chartDataPoints;
chart.update();
extracted.polylines.forEach(function(polyline) {
polyline.on('mousemove', function(ev) {
if (!trackPoints.length) return;
var mouseLatLng = ev.latlng;
var closestIndex = 0;
var minDist = Infinity;
for (var i = 0; i &lt; trackPoints.length; i++) {
var d = mouseLatLng.distanceTo(L.latLng(trackPoints[i].lat, trackPoints[i].lng));
if (d &lt; minDist) {
minDist = d;
closestIndex = i;
}
}
updateHoverMarker(closestIndex);
chart.setActiveElements([{ datasetIndex: 0, index: closestIndex }]);
chart.tooltip.setActiveElements([{ datasetIndex: 0, index: closestIndex }], { x: 0, y: 0 });
chart.update();
});
});
}).addTo(map);
});
&lt;/script&gt;
&lt;hr&gt;
&lt;h3 id="山行記録"&gt;山行記録&lt;/h3&gt;
&lt;p&gt;記入中&lt;/p&gt;</description></item><item><title>（廃径）悪谷〜ゴンパ尾根経路</title><link>https://montagna-katokeyci.github.io/oohc/posts/2026-05-23/</link><pubDate>Sat, 23 May 2026 00:00:00 +0000</pubDate><guid>https://montagna-katokeyci.github.io/oohc/posts/2026-05-23/</guid><description>&lt;p&gt;むかしの地理院地図を眺めていたら、小川谷三又から妙な破線が悪谷〜ゴンパ尾根と延びているのに気づいた。&lt;br&gt;
同年代の地図に破線が多いわけではない。大ダワ林道をはじめとする「現代でも、かつて道があったことが知られている径路」ばかりだ。なのに、悪谷からゴンパ尾根？&lt;br&gt;
興味津々で出かけてみた。&lt;/p&gt;
&lt;hr&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;項目&lt;/th&gt;
&lt;th style="text-align: left"&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;記録日&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026年5月23日（土）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;天候&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;厚い曇、午後からガスと霧雨、晩秋の体感温度、雨上がりで路面はウエット&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;パーティ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;モンターニャ単独&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;アクセス&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;西東京バスで東日原バス停&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;行程&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;東日原バス停、小川谷林道、終点広場、三又、悪谷（ワル谷、割谷、ワリ谷）、ゴンパ尾根、七跳山、県境尾根、ヨコスズ尾根、東日原バス停&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="コースタイム"&gt;コースタイム&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;記入中&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="コースマップ"&gt;コースマップ&lt;/h3&gt;
&lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /&gt;
&lt;style&gt;
.gpx-container {
width: 100%;
margin: 1.5rem 0;
border: 1px solid #ccc;
border-radius: 8px;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
font-family: sans-serif;
}
.gpx-map { height: 380px; width: 100%; }
.gpx-summary {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
background: #f8f9fa;
padding: 8px 10px;
border-top: 1px solid #e0e0e0;
border-bottom: 1px solid #e0e0e0;
font-size: 0.8rem;
color: #333;
overflow-x: auto;
white-space: nowrap;
}
.gpx-summary-item {
margin: 0 4px;
}
.gpx-summary-item strong {
color: #007bff;
font-size: 0.95rem;
margin-left: 2px;
}
.gpx-chart-wrapper {
height: 180px;
width: 100%;
padding: 10px;
background: #fafafa;
box-sizing: border-box;
}
.start-marker-icon, .goal-marker-icon {
background: none;
border: none;
font-weight: bold;
font-size: 11px;
color: #ffffff;
text-align: center;
line-height: 18px;
}
&lt;/style&gt;
&lt;div class="gpx-container"&gt;
&lt;div id="map-cb713630" class="gpx-map"&gt;&lt;/div&gt;
&lt;div id="summary-cb713630" class="gpx-summary"&gt;
&lt;div class="gpx-summary-item"&gt;総距離:&lt;strong id="sum-dist-cb713630"&gt;-&lt;/strong&gt; km&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高上り:&lt;strong id="sum-up-cb713630"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高下り:&lt;strong id="sum-down-cb713630"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最高標高:&lt;strong id="sum-max-cb713630"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最低標高:&lt;strong id="sum-min-cb713630"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;/div&gt;
&lt;div class="gpx-chart-wrapper"&gt;
&lt;canvas id="chart-cb713630"&gt;&lt;/canvas&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"&gt;&lt;/script&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-gpx/1.7.0/gpx.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
&lt;script&gt;
window.addEventListener('load', function() {
var gpxUrl = '\/oohc\/posts\/2026-05-23\/20260523_20260523.gpx';
var map = L.map('map-cb713630').setView([0, 0], 10);
L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
attribution: '&lt;a href="https://maps.gsi.go.jp/development/ichiran.html" target="_blank"&gt;国土地理院&lt;/a&gt;',
maxZoom: 18
}).addTo(map);
L.control.scale({
imperial: false,
position: 'bottomleft'
}).addTo(map);
var hoverMarker = null;
var trackPoints = [];
var timeLabels = [];
var ctx = document.getElementById('chart-cb713630').getContext('2d');
var chart = new Chart(ctx, {
type: 'line',
data: {
datasets: [{
label: '標高 (m)',
data: [],
borderColor: '#007bff',
backgroundColor: 'rgba(0, 123, 255, 0.1)',
fill: true,
borderWidth: 1.5,
pointRadius: 0,
pointHoverRadius: 6,
tension: 0.1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
interaction: { mode: 'index', intersect: false },
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
title: function(items) {
var index = items[0].dataIndex;
var timeStr = timeLabels[index] || '';
var distStr = items[0].raw.x.toFixed(2) + ' km';
return timeStr ? '時刻: ' + timeStr + '（距離: ' + distStr + '）' : '距離: ' + distStr;
},
label: function(item) {
return '標高: ' + item.raw.y + ' m';
}
}
}
},
scales: {
x: {
type: 'linear',
display: true,
title: { display: true, text: '距離 (km)', font: { size: 10 } },
ticks: {
font: { size: 10 }
},
grid: { color: 'rgba(0, 0, 0, 0.05)' }
},
y: {
display: true,
title: { display: true, text: '標高 (m)', font: { size: 10 } },
ticks: { font: { size: 10 } },
grid: { color: 'rgba(0, 0, 0, 0.05)' }
}
},
onHover: function(event, activeElements) {
if (activeElements &amp;&amp; activeElements.length &gt; 0) {
var index = activeElements[0].index;
updateHoverMarker(index);
}
}
}
});
function updateHoverMarker(index) {
var pt = trackPoints[index];
if (pt) {
if (!hoverMarker) {
hoverMarker = L.circleMarker([pt.lat, pt.lng], {
radius: 8,
fillColor: '#00ffff',
color: '#ffffff',
weight: 3,
opacity: 1,
fillOpacity: 1
}).addTo(map);
} else {
hoverMarker.setLatLng([pt.lat, pt.lng]);
}
}
}
function extractTrackData(layer) {
var pts = [];
var polylines = [];
if (typeof layer.getLatLngs === 'function') {
var latlngs = layer.getLatLngs();
var flat = Array.isArray(latlngs[0]) ? latlngs.flat(Infinity) : latlngs;
flat.forEach(function(p) {
if (p &amp;&amp; typeof p.lat === 'number') {
pts.push({ lat: p.lat, lng: p.lng });
}
});
if (layer instanceof L.Polyline) {
polylines.push(layer);
}
} else if (typeof layer.eachLayer === 'function') {
layer.eachLayer(function(child) {
var res = extractTrackData(child);
pts = pts.concat(res.pts);
polylines = polylines.concat(res.polylines);
});
}
return { pts: pts, polylines: polylines };
}
fetch(gpxUrl)
.then(function(response) { return response.text(); })
.then(function(xmlText) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlText, "text/xml");
var trkpts = xmlDoc.getElementsByTagName("trkpt");
for (var i = 0; i &lt; trkpts.length; i++) {
var timeNode = trkpts[i].getElementsByTagName("time")[0];
if (timeNode) {
var dateObj = new Date(timeNode.textContent);
var timeStr = dateObj.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
timeLabels.push(timeStr);
} else {
timeLabels.push('');
}
}
})
.catch(function(err) {
console.error("GPX Time Parsing Error:", err);
});
new L.GPX(gpxUrl, {
async: true,
polyline_options: { color: '#ff3300', weight: 5, opacity: 0.8 },
marker_options: { startIconUrl: null, endIconUrl: null, wptIconUrls: null }
}).on('loaded', function(e) {
var gpx = e.target;
map.fitBounds(gpx.getBounds());
var totalDistMeters = gpx.get_distance();
var distKmNum = totalDistMeters / 1000;
var distKmStr = distKmNum.toFixed(2);
var maxEle = Math.round(gpx.get_elevation_max());
var minEle = Math.round(gpx.get_elevation_min());
var gainEle = Math.round(gpx.get_elevation_gain());
var lossEle = Math.round(gpx.get_elevation_loss());
document.getElementById('sum-dist-cb713630').innerText = distKmStr;
document.getElementById('sum-up-cb713630').innerText = gainEle;
document.getElementById('sum-down-cb713630').innerText = lossEle;
document.getElementById('sum-max-cb713630').innerText = maxEle;
document.getElementById('sum-min-cb713630').innerText = minEle;
var eleData = gpx.get_elevation_data();
var chartDataPoints = [];
var extracted = extractTrackData(gpx);
trackPoints = extracted.pts;
if (trackPoints.length &gt; 0) {
var startPt = trackPoints[0];
var endPt = trackPoints[trackPoints.length - 1];
L.circleMarker([startPt.lat, startPt.lng], {
radius: 9,
fillColor: '#28a745',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('スタート', { permanent: false, direction: 'top' });
L.circleMarker([endPt.lat, endPt.lng], {
radius: 9,
fillColor: '#dc3545',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('ゴール', { permanent: false, direction: 'top' });
}
eleData.forEach(function(item) {
var dist = typeof item[0] === 'number' ? item[0] : parseFloat(item[0]);
var ele = Math.round(item[1]);
chartDataPoints.push({
x: parseFloat(dist.toFixed(2)),
y: ele
});
});
var dynamicStepSize = 1.0;
if (distKmNum &lt;= 5) {
dynamicStepSize = 0.5;
} else if (distKmNum &lt;= 20) {
dynamicStepSize = 1.0;
} else if (distKmNum &lt;= 40) {
dynamicStepSize = 5.0;
} else {
dynamicStepSize = 10.0;
}
chart.options.scales.x.max = distKmNum;
var allowedTicks = [];
for (var v = 0; v &lt; distKmNum; v += dynamicStepSize) {
allowedTicks.push(parseFloat(v.toFixed(1)));
}
chart.options.scales.x.ticks.callback = function(value) {
for (var i = 0; i &lt; allowedTicks.length; i++) {
if (Math.abs(value - allowedTicks[i]) &lt; 0.01) {
return value + ' km';
}
}
return '';
};
chart.options.scales.x.afterBuildTicks = function(axis) {
axis.ticks = allowedTicks.map(function(val) {
return { value: val };
});
};
chart.data.datasets[0].data = chartDataPoints;
chart.update();
extracted.polylines.forEach(function(polyline) {
polyline.on('mousemove', function(ev) {
if (!trackPoints.length) return;
var mouseLatLng = ev.latlng;
var closestIndex = 0;
var minDist = Infinity;
for (var i = 0; i &lt; trackPoints.length; i++) {
var d = mouseLatLng.distanceTo(L.latLng(trackPoints[i].lat, trackPoints[i].lng));
if (d &lt; minDist) {
minDist = d;
closestIndex = i;
}
}
updateHoverMarker(closestIndex);
chart.setActiveElements([{ datasetIndex: 0, index: closestIndex }]);
chart.tooltip.setActiveElements([{ datasetIndex: 0, index: closestIndex }], { x: 0, y: 0 });
chart.update();
});
});
}).addTo(map);
});
&lt;/script&gt;
&lt;hr&gt;
&lt;h3 id="山行記録"&gt;山行記録&lt;/h3&gt;
&lt;p&gt;記入中&lt;/p&gt;</description></item><item><title>三ノ木戸から石尾根北面への道</title><link>https://montagna-katokeyci.github.io/oohc/posts/2026-05-09/</link><pubDate>Sat, 09 May 2026 00:00:00 +0000</pubDate><guid>https://montagna-katokeyci.github.io/oohc/posts/2026-05-09/</guid><description>&lt;p&gt;「ここに道がなかったはずがない」シリーズ（笑）の3回目。カロー谷左岸の「滝入ノ道」、ゴンエ尾根から小雲取谷出合への捷路に続くのは、三ノ木戸集落から石尾根北面への仕事道。これも、無いはずが無い。&lt;br&gt;
果たして、比較すれば時代が下ったと思われる明瞭な道型に出合う。しかし途中の窪の大崩落で道が付け替えられた様子だ。一往復して窪を渡ったあとは崖っぷちの踏み跡が待つ。スリリングな廃道を狩鞍沢の炭焼き窯跡までたどった。&lt;/p&gt;
&lt;hr&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;項目&lt;/th&gt;
&lt;th style="text-align: left"&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;記録日&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026年5月9日（土）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;天候&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;晴れのち曇り、無風&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;パーティ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;モンターニャ単独&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;アクセス&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;JR青梅線で奥多摩駅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;行程&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;奥多摩駅、城、三ノ木戸、石尾根縦走路三ノ木戸分岐、（三ノ木戸から石尾根北面の道）、家入沢、ヒカゲザス尾根、狩鞍沢、狩倉山、石尾根縦走路、奥多摩駅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="コースタイム"&gt;コースタイム&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;07:43～奥多摩駅スタート&lt;/li&gt;
&lt;li&gt;08:33～城集落～08:46&lt;/li&gt;
&lt;li&gt;09:03～三ノ木戸集落&lt;/li&gt;
&lt;li&gt;09:57～三ノ木戸分岐@石尾根～10:25&lt;/li&gt;
&lt;li&gt;11:08～規模の大きなトタン場@家入沢&lt;/li&gt;
&lt;li&gt;11:33～崩落窪、小松ヶタワの窪とヒカゲザス窪のあいだ&lt;/li&gt;
&lt;li&gt;11:47～崩落最上端～12:12&lt;/li&gt;
&lt;li&gt;12:23～バックして11:08のトタン場に戻る&lt;/li&gt;
&lt;li&gt;12:32～崩落最上端に戻る&lt;/li&gt;
&lt;li&gt;13:18～ヒカゲザス窪・小松ヶタワの窪中尾根&lt;/li&gt;
&lt;li&gt;13:32ごろ～ヒカゲザス窪&lt;/li&gt;
&lt;li&gt;13:38～ヒカゲザス尾根～13:43&lt;/li&gt;
&lt;li&gt;14:03～狩鞍沢の炭焼き窯跡&lt;/li&gt;
&lt;li&gt;14:10～山ノ神尾根～15:16&lt;/li&gt;
&lt;li&gt;15:26～狩倉山～15:46&lt;/li&gt;
&lt;li&gt;17:11～奥多摩駅フィニッシュ&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="コースマップ"&gt;コースマップ&lt;/h3&gt;
&lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /&gt;
&lt;style&gt;
.gpx-container {
width: 100%;
margin: 1.5rem 0;
border: 1px solid #ccc;
border-radius: 8px;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
font-family: sans-serif;
}
.gpx-map { height: 380px; width: 100%; }
.gpx-summary {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
background: #f8f9fa;
padding: 8px 10px;
border-top: 1px solid #e0e0e0;
border-bottom: 1px solid #e0e0e0;
font-size: 0.8rem;
color: #333;
overflow-x: auto;
white-space: nowrap;
}
.gpx-summary-item {
margin: 0 4px;
}
.gpx-summary-item strong {
color: #007bff;
font-size: 0.95rem;
margin-left: 2px;
}
.gpx-chart-wrapper {
height: 180px;
width: 100%;
padding: 10px;
background: #fafafa;
box-sizing: border-box;
}
.start-marker-icon, .goal-marker-icon {
background: none;
border: none;
font-weight: bold;
font-size: 11px;
color: #ffffff;
text-align: center;
line-height: 18px;
}
&lt;/style&gt;
&lt;div class="gpx-container"&gt;
&lt;div id="map-a94201a3" class="gpx-map"&gt;&lt;/div&gt;
&lt;div id="summary-a94201a3" class="gpx-summary"&gt;
&lt;div class="gpx-summary-item"&gt;総距離:&lt;strong id="sum-dist-a94201a3"&gt;-&lt;/strong&gt; km&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高上り:&lt;strong id="sum-up-a94201a3"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高下り:&lt;strong id="sum-down-a94201a3"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最高標高:&lt;strong id="sum-max-a94201a3"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最低標高:&lt;strong id="sum-min-a94201a3"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;/div&gt;
&lt;div class="gpx-chart-wrapper"&gt;
&lt;canvas id="chart-a94201a3"&gt;&lt;/canvas&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"&gt;&lt;/script&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-gpx/1.7.0/gpx.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
&lt;script&gt;
window.addEventListener('load', function() {
var gpxUrl = '\/oohc\/posts\/2026-05-09\/20260509_20260509.gpx';
var map = L.map('map-a94201a3').setView([0, 0], 10);
L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
attribution: '&lt;a href="https://maps.gsi.go.jp/development/ichiran.html" target="_blank"&gt;国土地理院&lt;/a&gt;',
maxZoom: 18
}).addTo(map);
L.control.scale({
imperial: false,
position: 'bottomleft'
}).addTo(map);
var hoverMarker = null;
var trackPoints = [];
var timeLabels = [];
var ctx = document.getElementById('chart-a94201a3').getContext('2d');
var chart = new Chart(ctx, {
type: 'line',
data: {
datasets: [{
label: '標高 (m)',
data: [],
borderColor: '#007bff',
backgroundColor: 'rgba(0, 123, 255, 0.1)',
fill: true,
borderWidth: 1.5,
pointRadius: 0,
pointHoverRadius: 6,
tension: 0.1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
interaction: { mode: 'index', intersect: false },
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
title: function(items) {
var index = items[0].dataIndex;
var timeStr = timeLabels[index] || '';
var distStr = items[0].raw.x.toFixed(2) + ' km';
return timeStr ? '時刻: ' + timeStr + '（距離: ' + distStr + '）' : '距離: ' + distStr;
},
label: function(item) {
return '標高: ' + item.raw.y + ' m';
}
}
}
},
scales: {
x: {
type: 'linear',
display: true,
title: { display: true, text: '距離 (km)', font: { size: 10 } },
ticks: {
font: { size: 10 }
},
grid: { color: 'rgba(0, 0, 0, 0.05)' }
},
y: {
display: true,
title: { display: true, text: '標高 (m)', font: { size: 10 } },
ticks: { font: { size: 10 } },
grid: { color: 'rgba(0, 0, 0, 0.05)' }
}
},
onHover: function(event, activeElements) {
if (activeElements &amp;&amp; activeElements.length &gt; 0) {
var index = activeElements[0].index;
updateHoverMarker(index);
}
}
}
});
function updateHoverMarker(index) {
var pt = trackPoints[index];
if (pt) {
if (!hoverMarker) {
hoverMarker = L.circleMarker([pt.lat, pt.lng], {
radius: 8,
fillColor: '#00ffff',
color: '#ffffff',
weight: 3,
opacity: 1,
fillOpacity: 1
}).addTo(map);
} else {
hoverMarker.setLatLng([pt.lat, pt.lng]);
}
}
}
function extractTrackData(layer) {
var pts = [];
var polylines = [];
if (typeof layer.getLatLngs === 'function') {
var latlngs = layer.getLatLngs();
var flat = Array.isArray(latlngs[0]) ? latlngs.flat(Infinity) : latlngs;
flat.forEach(function(p) {
if (p &amp;&amp; typeof p.lat === 'number') {
pts.push({ lat: p.lat, lng: p.lng });
}
});
if (layer instanceof L.Polyline) {
polylines.push(layer);
}
} else if (typeof layer.eachLayer === 'function') {
layer.eachLayer(function(child) {
var res = extractTrackData(child);
pts = pts.concat(res.pts);
polylines = polylines.concat(res.polylines);
});
}
return { pts: pts, polylines: polylines };
}
fetch(gpxUrl)
.then(function(response) { return response.text(); })
.then(function(xmlText) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlText, "text/xml");
var trkpts = xmlDoc.getElementsByTagName("trkpt");
for (var i = 0; i &lt; trkpts.length; i++) {
var timeNode = trkpts[i].getElementsByTagName("time")[0];
if (timeNode) {
var dateObj = new Date(timeNode.textContent);
var timeStr = dateObj.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
timeLabels.push(timeStr);
} else {
timeLabels.push('');
}
}
})
.catch(function(err) {
console.error("GPX Time Parsing Error:", err);
});
new L.GPX(gpxUrl, {
async: true,
polyline_options: { color: '#ff3300', weight: 5, opacity: 0.8 },
marker_options: { startIconUrl: null, endIconUrl: null, wptIconUrls: null }
}).on('loaded', function(e) {
var gpx = e.target;
map.fitBounds(gpx.getBounds());
var totalDistMeters = gpx.get_distance();
var distKmNum = totalDistMeters / 1000;
var distKmStr = distKmNum.toFixed(2);
var maxEle = Math.round(gpx.get_elevation_max());
var minEle = Math.round(gpx.get_elevation_min());
var gainEle = Math.round(gpx.get_elevation_gain());
var lossEle = Math.round(gpx.get_elevation_loss());
document.getElementById('sum-dist-a94201a3').innerText = distKmStr;
document.getElementById('sum-up-a94201a3').innerText = gainEle;
document.getElementById('sum-down-a94201a3').innerText = lossEle;
document.getElementById('sum-max-a94201a3').innerText = maxEle;
document.getElementById('sum-min-a94201a3').innerText = minEle;
var eleData = gpx.get_elevation_data();
var chartDataPoints = [];
var extracted = extractTrackData(gpx);
trackPoints = extracted.pts;
if (trackPoints.length &gt; 0) {
var startPt = trackPoints[0];
var endPt = trackPoints[trackPoints.length - 1];
L.circleMarker([startPt.lat, startPt.lng], {
radius: 9,
fillColor: '#28a745',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('スタート', { permanent: false, direction: 'top' });
L.circleMarker([endPt.lat, endPt.lng], {
radius: 9,
fillColor: '#dc3545',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('ゴール', { permanent: false, direction: 'top' });
}
eleData.forEach(function(item) {
var dist = typeof item[0] === 'number' ? item[0] : parseFloat(item[0]);
var ele = Math.round(item[1]);
chartDataPoints.push({
x: parseFloat(dist.toFixed(2)),
y: ele
});
});
var dynamicStepSize = 1.0;
if (distKmNum &lt;= 5) {
dynamicStepSize = 0.5;
} else if (distKmNum &lt;= 20) {
dynamicStepSize = 1.0;
} else if (distKmNum &lt;= 40) {
dynamicStepSize = 5.0;
} else {
dynamicStepSize = 10.0;
}
chart.options.scales.x.max = distKmNum;
var allowedTicks = [];
for (var v = 0; v &lt; distKmNum; v += dynamicStepSize) {
allowedTicks.push(parseFloat(v.toFixed(1)));
}
chart.options.scales.x.ticks.callback = function(value) {
for (var i = 0; i &lt; allowedTicks.length; i++) {
if (Math.abs(value - allowedTicks[i]) &lt; 0.01) {
return value + ' km';
}
}
return '';
};
chart.options.scales.x.afterBuildTicks = function(axis) {
axis.ticks = allowedTicks.map(function(val) {
return { value: val };
});
};
chart.data.datasets[0].data = chartDataPoints;
chart.update();
extracted.polylines.forEach(function(polyline) {
polyline.on('mousemove', function(ev) {
if (!trackPoints.length) return;
var mouseLatLng = ev.latlng;
var closestIndex = 0;
var minDist = Infinity;
for (var i = 0; i &lt; trackPoints.length; i++) {
var d = mouseLatLng.distanceTo(L.latLng(trackPoints[i].lat, trackPoints[i].lng));
if (d &lt; minDist) {
minDist = d;
closestIndex = i;
}
}
updateHoverMarker(closestIndex);
chart.setActiveElements([{ datasetIndex: 0, index: closestIndex }]);
chart.tooltip.setActiveElements([{ datasetIndex: 0, index: closestIndex }], { x: 0, y: 0 });
chart.update();
});
});
}).addTo(map);
});
&lt;/script&gt;
&lt;hr&gt;
&lt;h3 id="山行記録"&gt;山行記録&lt;/h3&gt;
&lt;h4 id="三ノ木戸から石尾根北面への道"&gt;三ノ木戸から石尾根北面への道&lt;/h4&gt;
&lt;p&gt;この径路は難しい。狩倉山に直接突き上げる窪のトタン場までは薄く、岩記号に接する北の窪の大崩落の上を巻いたあとは岩尾根の崖っぷちをゆく。その先、ヒカゲザス尾根までは比較的明瞭だが、尾根の北面に回りこみ狩鞍沢の炭焼き窯跡まではごく薄い。&lt;br&gt;
炭焼き窯跡付近が緩斜面で山ノ神尾根へ上がる道跡を探せず、今回の探索では北面にどのように続くのか、そもそも続きがあるのかは不明に終わった。&lt;/p&gt;</description></item><item><title>タワ尾根〜天祖山表参道</title><link>https://montagna-katokeyci.github.io/oohc/posts/2026-05-05/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><guid>https://montagna-katokeyci.github.io/oohc/posts/2026-05-05/</guid><description>&lt;p&gt;沢を遡り・ついでに隣の沢を下降するプランを立てたが、どう逆立ちしてもその日に帰れなそうにない。机上の計算では「05時の日の出には日原林道終点から長沢谷のオンマワシ付近に下りている」のがスタートの条件になるらしい。&lt;br&gt;
だいぶ温んできたから決行するか。2-3日前から睡眠の時間と長さを調整し、久しぶりに車を運転して東日原の駐車場へ来てみれば。夜間の気温は10℃まで下がり風がとても強い。02時半に起き出す気分にはまったくなれずアラームとプランをぜんぶキャンセルする。ふて寝した後に立て直した「とにかく歩こう」が本日のログになる。&lt;br&gt;
アックスは車内に残しチェーンスパイクはザックに放り込んだまま使用せず。&lt;/p&gt;
&lt;hr&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;項目&lt;/th&gt;
&lt;th style="text-align: left"&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;記録日&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026年5月5日（火）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;天候&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;風薫る快晴&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;パーティ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;モンターニャ単独&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;アクセス&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;車で東日原駐車場&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;行程&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;東日原、一石山神社、タワ尾根、ウトウの頭、県境尾根、表参道分岐（水松山の南）、天祖山、表参道、東日原&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="コースタイム"&gt;コースタイム&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;記入中&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="コースマップ"&gt;コースマップ&lt;/h3&gt;
&lt;link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /&gt;
&lt;style&gt;
.gpx-container {
width: 100%;
margin: 1.5rem 0;
border: 1px solid #ccc;
border-radius: 8px;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
font-family: sans-serif;
}
.gpx-map { height: 380px; width: 100%; }
.gpx-summary {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
background: #f8f9fa;
padding: 8px 10px;
border-top: 1px solid #e0e0e0;
border-bottom: 1px solid #e0e0e0;
font-size: 0.8rem;
color: #333;
overflow-x: auto;
white-space: nowrap;
}
.gpx-summary-item {
margin: 0 4px;
}
.gpx-summary-item strong {
color: #007bff;
font-size: 0.95rem;
margin-left: 2px;
}
.gpx-chart-wrapper {
height: 180px;
width: 100%;
padding: 10px;
background: #fafafa;
box-sizing: border-box;
}
.start-marker-icon, .goal-marker-icon {
background: none;
border: none;
font-weight: bold;
font-size: 11px;
color: #ffffff;
text-align: center;
line-height: 18px;
}
&lt;/style&gt;
&lt;div class="gpx-container"&gt;
&lt;div id="map-6ac6f08d" class="gpx-map"&gt;&lt;/div&gt;
&lt;div id="summary-6ac6f08d" class="gpx-summary"&gt;
&lt;div class="gpx-summary-item"&gt;総距離:&lt;strong id="sum-dist-6ac6f08d"&gt;-&lt;/strong&gt; km&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高上り:&lt;strong id="sum-up-6ac6f08d"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;累積標高下り:&lt;strong id="sum-down-6ac6f08d"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最高標高:&lt;strong id="sum-max-6ac6f08d"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;div class="gpx-summary-item"&gt;最低標高:&lt;strong id="sum-min-6ac6f08d"&gt;-&lt;/strong&gt; m&lt;/div&gt;
&lt;/div&gt;
&lt;div class="gpx-chart-wrapper"&gt;
&lt;canvas id="chart-6ac6f08d"&gt;&lt;/canvas&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"&gt;&lt;/script&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-gpx/1.7.0/gpx.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
&lt;script&gt;
window.addEventListener('load', function() {
var gpxUrl = '\/oohc\/posts\/2026-05-05\/20260505_20260505.gpx';
var map = L.map('map-6ac6f08d').setView([0, 0], 10);
L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
attribution: '&lt;a href="https://maps.gsi.go.jp/development/ichiran.html" target="_blank"&gt;国土地理院&lt;/a&gt;',
maxZoom: 18
}).addTo(map);
L.control.scale({
imperial: false,
position: 'bottomleft'
}).addTo(map);
var hoverMarker = null;
var trackPoints = [];
var timeLabels = [];
var ctx = document.getElementById('chart-6ac6f08d').getContext('2d');
var chart = new Chart(ctx, {
type: 'line',
data: {
datasets: [{
label: '標高 (m)',
data: [],
borderColor: '#007bff',
backgroundColor: 'rgba(0, 123, 255, 0.1)',
fill: true,
borderWidth: 1.5,
pointRadius: 0,
pointHoverRadius: 6,
tension: 0.1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
interaction: { mode: 'index', intersect: false },
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
title: function(items) {
var index = items[0].dataIndex;
var timeStr = timeLabels[index] || '';
var distStr = items[0].raw.x.toFixed(2) + ' km';
return timeStr ? '時刻: ' + timeStr + '（距離: ' + distStr + '）' : '距離: ' + distStr;
},
label: function(item) {
return '標高: ' + item.raw.y + ' m';
}
}
}
},
scales: {
x: {
type: 'linear',
display: true,
title: { display: true, text: '距離 (km)', font: { size: 10 } },
ticks: {
font: { size: 10 }
},
grid: { color: 'rgba(0, 0, 0, 0.05)' }
},
y: {
display: true,
title: { display: true, text: '標高 (m)', font: { size: 10 } },
ticks: { font: { size: 10 } },
grid: { color: 'rgba(0, 0, 0, 0.05)' }
}
},
onHover: function(event, activeElements) {
if (activeElements &amp;&amp; activeElements.length &gt; 0) {
var index = activeElements[0].index;
updateHoverMarker(index);
}
}
}
});
function updateHoverMarker(index) {
var pt = trackPoints[index];
if (pt) {
if (!hoverMarker) {
hoverMarker = L.circleMarker([pt.lat, pt.lng], {
radius: 8,
fillColor: '#00ffff',
color: '#ffffff',
weight: 3,
opacity: 1,
fillOpacity: 1
}).addTo(map);
} else {
hoverMarker.setLatLng([pt.lat, pt.lng]);
}
}
}
function extractTrackData(layer) {
var pts = [];
var polylines = [];
if (typeof layer.getLatLngs === 'function') {
var latlngs = layer.getLatLngs();
var flat = Array.isArray(latlngs[0]) ? latlngs.flat(Infinity) : latlngs;
flat.forEach(function(p) {
if (p &amp;&amp; typeof p.lat === 'number') {
pts.push({ lat: p.lat, lng: p.lng });
}
});
if (layer instanceof L.Polyline) {
polylines.push(layer);
}
} else if (typeof layer.eachLayer === 'function') {
layer.eachLayer(function(child) {
var res = extractTrackData(child);
pts = pts.concat(res.pts);
polylines = polylines.concat(res.polylines);
});
}
return { pts: pts, polylines: polylines };
}
fetch(gpxUrl)
.then(function(response) { return response.text(); })
.then(function(xmlText) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlText, "text/xml");
var trkpts = xmlDoc.getElementsByTagName("trkpt");
for (var i = 0; i &lt; trkpts.length; i++) {
var timeNode = trkpts[i].getElementsByTagName("time")[0];
if (timeNode) {
var dateObj = new Date(timeNode.textContent);
var timeStr = dateObj.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
timeLabels.push(timeStr);
} else {
timeLabels.push('');
}
}
})
.catch(function(err) {
console.error("GPX Time Parsing Error:", err);
});
new L.GPX(gpxUrl, {
async: true,
polyline_options: { color: '#ff3300', weight: 5, opacity: 0.8 },
marker_options: { startIconUrl: null, endIconUrl: null, wptIconUrls: null }
}).on('loaded', function(e) {
var gpx = e.target;
map.fitBounds(gpx.getBounds());
var totalDistMeters = gpx.get_distance();
var distKmNum = totalDistMeters / 1000;
var distKmStr = distKmNum.toFixed(2);
var maxEle = Math.round(gpx.get_elevation_max());
var minEle = Math.round(gpx.get_elevation_min());
var gainEle = Math.round(gpx.get_elevation_gain());
var lossEle = Math.round(gpx.get_elevation_loss());
document.getElementById('sum-dist-6ac6f08d').innerText = distKmStr;
document.getElementById('sum-up-6ac6f08d').innerText = gainEle;
document.getElementById('sum-down-6ac6f08d').innerText = lossEle;
document.getElementById('sum-max-6ac6f08d').innerText = maxEle;
document.getElementById('sum-min-6ac6f08d').innerText = minEle;
var eleData = gpx.get_elevation_data();
var chartDataPoints = [];
var extracted = extractTrackData(gpx);
trackPoints = extracted.pts;
if (trackPoints.length &gt; 0) {
var startPt = trackPoints[0];
var endPt = trackPoints[trackPoints.length - 1];
L.circleMarker([startPt.lat, startPt.lng], {
radius: 9,
fillColor: '#28a745',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('スタート', { permanent: false, direction: 'top' });
L.circleMarker([endPt.lat, endPt.lng], {
radius: 9,
fillColor: '#dc3545',
color: '#ffffff',
weight: 2,
opacity: 1,
fillOpacity: 0.9
}).addTo(map).bindTooltip('ゴール', { permanent: false, direction: 'top' });
}
eleData.forEach(function(item) {
var dist = typeof item[0] === 'number' ? item[0] : parseFloat(item[0]);
var ele = Math.round(item[1]);
chartDataPoints.push({
x: parseFloat(dist.toFixed(2)),
y: ele
});
});
var dynamicStepSize = 1.0;
if (distKmNum &lt;= 5) {
dynamicStepSize = 0.5;
} else if (distKmNum &lt;= 20) {
dynamicStepSize = 1.0;
} else if (distKmNum &lt;= 40) {
dynamicStepSize = 5.0;
} else {
dynamicStepSize = 10.0;
}
chart.options.scales.x.max = distKmNum;
var allowedTicks = [];
for (var v = 0; v &lt; distKmNum; v += dynamicStepSize) {
allowedTicks.push(parseFloat(v.toFixed(1)));
}
chart.options.scales.x.ticks.callback = function(value) {
for (var i = 0; i &lt; allowedTicks.length; i++) {
if (Math.abs(value - allowedTicks[i]) &lt; 0.01) {
return value + ' km';
}
}
return '';
};
chart.options.scales.x.afterBuildTicks = function(axis) {
axis.ticks = allowedTicks.map(function(val) {
return { value: val };
});
};
chart.data.datasets[0].data = chartDataPoints;
chart.update();
extracted.polylines.forEach(function(polyline) {
polyline.on('mousemove', function(ev) {
if (!trackPoints.length) return;
var mouseLatLng = ev.latlng;
var closestIndex = 0;
var minDist = Infinity;
for (var i = 0; i &lt; trackPoints.length; i++) {
var d = mouseLatLng.distanceTo(L.latLng(trackPoints[i].lat, trackPoints[i].lng));
if (d &lt; minDist) {
minDist = d;
closestIndex = i;
}
}
updateHoverMarker(closestIndex);
chart.setActiveElements([{ datasetIndex: 0, index: closestIndex }]);
chart.tooltip.setActiveElements([{ datasetIndex: 0, index: closestIndex }], { x: 0, y: 0 });
chart.update();
});
});
}).addTo(map);
});
&lt;/script&gt;
&lt;hr&gt;
&lt;h3 id="山行記録"&gt;山行記録&lt;/h3&gt;
&lt;p&gt;記入中&lt;/p&gt;</description></item><item><title>雑感のテスト記事</title><link>https://montagna-katokeyci.github.io/oohc/posts/zakkan001/</link><pubDate>Wed, 01 Apr 2026 19:00:00 +0900</pubDate><guid>https://montagna-katokeyci.github.io/oohc/posts/zakkan001/</guid><description>&lt;p&gt;まだ投稿がありません。&lt;/p&gt;</description></item><item><title>カンツォーネのテスト記事</title><link>https://montagna-katokeyci.github.io/oohc/posts/musica001/</link><pubDate>Wed, 01 Apr 2026 10:02:00 +0900</pubDate><guid>https://montagna-katokeyci.github.io/oohc/posts/musica001/</guid><description>&lt;p&gt;まだ投稿がありません。&lt;/p&gt;</description></item></channel></rss>