From bc39455cfe853b47bed21a96591b2166414f8bcc Mon Sep 17 00:00:00 2001 From: Mikkeli Date: Thu, 17 Sep 2026 09:40:53 +0900 Subject: [PATCH 1/7] feat(274): transect composition synced to the lyric MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Song274Transect draws Route 274 in its true shape (the "Ground" view of song-274/route/274-transect.html) and plays it along with the song. - data.ts: reads song-274/route/ at load time (lyrics index, roster, route and the optional east/west stubs); nothing is copied into the code. Only sung nodes are shown; districts and 東に続く light nothing. - progress.ts: a "covered so far" paint over the dimmed road. Its head is pinned to each sung object's km as that line starts and glides between pins on a monotone cubic, so it never runs backwards. After 東に続く it runs out along the east stub; the west stub is always painted. - camera.ts: fixed close zoom during each narration part (lines under 20 s apart), following a Gaussian-smoothed head; pull back to frame the covered road plus some road ahead during breaks, and to the full map after the lyric. - nodeAnimation.ts: lightUp / switchOff as reusable functions over a NodeLook, with long lines switching off after MAX_LIT_S. - palette.ts: every colour as a named token (dark default, light alongside), including shrine and railway families. remotion.config.ts sets song-274/ as the public dir so staticFile() reaches the song's audio/ and route/ in place. Verified: eslint + tsc clean; stills checked across parts, breaks and the ending. Render with --muted and add audio with ffmpeg: Remotion's own AAC lands 42.75 ms late. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01PLt25nCVMsoroKALYUBu6u --- remotion.config.ts | 3 + src/Root.tsx | 2 + src/song-274/Composition.tsx | 32 +++++ src/song-274/Transect.tsx | 184 +++++++++++++++++++++++++++++ src/song-274/camera.ts | 167 ++++++++++++++++++++++++++ src/song-274/data.ts | 213 ++++++++++++++++++++++++++++++++++ src/song-274/layout.ts | 68 +++++++++++ src/song-274/nodeAnimation.ts | 80 +++++++++++++ src/song-274/palette.ts | 66 +++++++++++ src/song-274/progress.ts | 154 ++++++++++++++++++++++++ 10 files changed, 969 insertions(+) create mode 100644 src/song-274/Composition.tsx create mode 100644 src/song-274/Transect.tsx create mode 100644 src/song-274/camera.ts create mode 100644 src/song-274/data.ts create mode 100644 src/song-274/layout.ts create mode 100644 src/song-274/nodeAnimation.ts create mode 100644 src/song-274/palette.ts create mode 100644 src/song-274/progress.ts diff --git a/remotion.config.ts b/remotion.config.ts index 694eafb..cab3912 100644 --- a/remotion.config.ts +++ b/remotion.config.ts @@ -12,3 +12,6 @@ Config.setRspack(true); Config.setVideoImageFormat("jpeg"); Config.setOverwriteOutput(true); Config.overrideBundlerConfig(enableTailwind); +// Song branch: staticFile() paths resolve inside the song folder, so compositions +// read audio/, fonts/ and route/ where they already live instead of a copy. +Config.setPublicDir("song-274"); diff --git a/src/Root.tsx b/src/Root.tsx index 2be4c12..b0ab2a5 100644 --- a/src/Root.tsx +++ b/src/Root.tsx @@ -1,10 +1,12 @@ import "./index.css"; import { MyComposition } from "./Composition"; +import { Song274Transect } from "./song-274/Composition"; export const RemotionRoot: React.FC = () => { return ( <> + ); }; diff --git a/src/song-274/Composition.tsx b/src/song-274/Composition.tsx new file mode 100644 index 0000000..373149c --- /dev/null +++ b/src/song-274/Composition.tsx @@ -0,0 +1,32 @@ +import React from "react"; +import { CalculateMetadataFunction, Composition } from "remotion"; +import { loadTransectData } from "./data"; +import { darkPalette } from "./palette"; +import { Transect, type TransectProps } from "./Transect"; + +const FPS = 30; +/** Length of song-274/audio/274_release2.wav (see BOM.md). */ +const AUDIO_DURATION_S = 619.270083; + +const calculateMetadata: CalculateMetadataFunction = async ({ + props, +}) => ({ + props: { ...props, data: await loadTransectData() }, +}); + +export const Song274Transect: React.FC = () => ( + +); diff --git a/src/song-274/Transect.tsx b/src/song-274/Transect.tsx new file mode 100644 index 0000000..c4e70f2 --- /dev/null +++ b/src/song-274/Transect.tsx @@ -0,0 +1,184 @@ +import React, { useMemo } from "react"; +import { + AbsoluteFill, + Html5Audio, + staticFile, + useCurrentFrame, + useVideoConfig, +} from "remotion"; +import { + blendViews, + followView, + narrationParts, + overviewLeadKm, + overviewView, + overviewWeight, + smoothedFocus, + toCamera, + type Frame, +} from "./camera"; +import type { Cue, RosterItem, TransectData } from "./data"; +import { extendBounds, GROUND, prefixBounds, projectGround, routePath } from "./layout"; +import { isAwake, nodeLookAt } from "./nodeAnimation"; +import type { TransectPalette } from "./palette"; +import { + coveredRoute, + monotoneCurve, + paintableRoute, + progressKeyframes, + routeAtKm, +} from "./progress"; + +export type TransectProps = { + palette: TransectPalette; + /** Path under the public dir (song-274/). */ + audio: string; + /** Filled in by calculateMetadata from song-274/route/. */ + data: TransectData | null; +}; + +/** Road stroke widths in map units; they grow with zoom like everything else. */ +const ROAD_AHEAD_WIDTH = 1.4; +const ROAD_COVERED_WIDTH = 2.4; + +/** Each object's cues in time order; most nodes are sung exactly once. */ +const cuesByObject = (cues: Cue[]): Map => { + const map = new Map(); + for (const cue of cues) { + for (const object of cue.objects) { + const list = map.get(object) ?? []; + list.push(cue); + map.set(object, list); + } + } + return map; +}; + +/** The cue that governs an object at `t`: the latest one to have started. */ +const currentCue = (list: Cue[] | undefined, t: number): Cue | undefined => { + let current: Cue | undefined; + for (const cue of list ?? []) { + if (cue.startS <= t) { + current = cue; + } + } + return current; +}; + +export const Transect: React.FC = ({ palette, audio, data }) => { + const frame = useCurrentFrame(); + const { fps, width, height } = useVideoConfig(); + const projection = useMemo(() => (data ? projectGround(data.route) : null), [data]); + const fullRoad = useMemo( + () => (data && projection ? routePath(data.route, projection) : ""), + [data, projection], + ); + const bounds = useMemo( + () => (data && projection ? prefixBounds(data.route, projection) : []), + [data, projection], + ); + const kmAt = useMemo(() => (data ? monotoneCurve(progressKeyframes(data)) : null), [data]); + // The paint may run past the main road into the east continuation; the camera + // and overview stay on the main road, so that run leaves the screen. + const paintRoute = useMemo(() => (data ? paintableRoute(data) : []), [data]); + const westRoad = useMemo( + () => + data && projection && data.routeWest.length > 1 + ? routePath(data.routeWest, projection) + : "", + [data, projection], + ); + const parts = useMemo(() => narrationParts(data ? data.lines : []), [data]); + const cueMap = useMemo(() => cuesByObject(data ? data.cues : []), [data]); + + if (!data || !projection || !kmAt) { + return ; + } + + const t = frame / fps; + const headAt = (time: number) => { + const km = kmAt(time); + const pos = routeAtKm(data.route, km); + return { km, index: pos.index, x: projection.x(pos.lon), y: projection.y(pos.lat) }; + }; + const head = headAt(t); + const routeStartKm = data.route[0][0]; + const routeEndKm = data.route[data.route.length - 1][0]; + const lead = routeAtKm( + data.route, + Math.min(routeEndKm, head.km + overviewLeadKm(head.km - routeStartKm)), + ); + + const view: Frame = { + worldWidth: GROUND.width, + worldHeight: projection.height, + frameWidth: width, + frameHeight: height, + }; + const camera = toCamera( + blendViews( + followView(smoothedFocus(headAt, t)), + overviewView( + extendBounds(bounds[lead.index], projection.x(lead.lon), projection.y(lead.lat)), + view, + ), + overviewWeight(parts, t), + ), + view, + ); + + const nodes = data.items.map((item: RosterItem) => ({ + item, + look: nodeLookAt(currentCue(cueMap.get(item.object), t), t), + })); + + const draw = ({ item, look }: (typeof nodes)[number]) => ( + + ); + + return ( + + + + + + {/* The road arriving from the west: already travelled, so always painted. */} + {westRoad ? ( + + ) : null} + + {/* Animating nodes last so they sit on top of their neighbours. */} + {nodes.filter((n) => !isAwake(n.look)).map(draw)} + {nodes.filter((n) => isAwake(n.look)).map(draw)} + + + + ); +}; diff --git a/src/song-274/camera.ts b/src/song-274/camera.ts new file mode 100644 index 0000000..f56b9e3 --- /dev/null +++ b/src/song-274/camera.ts @@ -0,0 +1,167 @@ +import type { Bounds } from "./layout"; + +/** + * Where the map sits on screen. + * + * The song narrates the road in parts separated by long instrumental breaks. + * During a part the camera holds a fixed close zoom and follows the head of the + * covered road. When a part ends it pulls back to frame everything covered so + * far, and just before the next part it closes in on the head again, arriving + * as the first line starts. After the last part it pulls back for good, which + * by then frames the whole route. + * + * Views are described in map units ({zoom, centre}); `toCamera` turns one into + * the scale and origin the drawing uses: screen = map unit × scale + origin. + */ + +/** Zoom while following, relative to the whole route fitting the frame width. */ +export const FOLLOW_ZOOM = 4; +/** Lines closer together than this belong to the same narration part. */ +export const PART_GAP_S = 20; +/** Pull-back after a part ends, and close-in before the next one starts. */ +export const ZOOM_OUT_S = 3; +export const ZOOM_IN_S = 3; +/** + * The camera follows a Gaussian-weighted average of the head's position, so a + * road zigzagging under a nearly straight run of objects does not shake it. + * This is the standard deviation, in seconds; the window spans ±3 of these. + */ +export const FOLLOW_SMOOTH_S = 0.6; +/** + * An overview frames the covered road plus some road ahead of the head, so the + * head does not sit against the frame edge: this fraction of the distance + * covered so far, but never less than the minimum. + */ +export const OVERVIEW_LEAD = 0.25; +export const OVERVIEW_LEAD_MIN_KM = 3; +/** Frame pixels kept clear around an overview. */ +export const MARGIN_X = 80; +export const MARGIN_Y = 80; + +export type Span = { startS: number; endS: number }; +export type Point = { x: number; y: number }; +export type View = { zoom: number; centreX: number; centreY: number }; +export type Camera = { scale: number; originX: number; originY: number }; + +export type Frame = { + worldWidth: number; + worldHeight: number; + frameWidth: number; + frameHeight: number; +}; + +const clamp01 = (v: number) => Math.min(1, Math.max(0, v)); + +const easeInOutCubic = (p: number) => + p < 0.5 ? 4 * p * p * p : 1 - Math.pow(-2 * p + 2, 3) / 2; + +/** Merge lyric lines into narration parts wherever the gap is short. */ +export const narrationParts = (lines: { startS: number; stopS: number }[]): Span[] => { + const sorted = lines.slice().sort((a, b) => a.startS - b.startS); + const parts: Span[] = []; + for (const line of sorted) { + const last = parts[parts.length - 1]; + if (last && line.startS - last.endS <= PART_GAP_S) { + last.endS = Math.max(last.endS, line.stopS); + } else { + parts.push({ startS: line.startS, endS: line.stopS }); + } + } + return parts; +}; + +/** + * 0 while following the head, 1 while showing everything covered so far. + * The intro before the first part counts as following. + */ +export const overviewWeight = (parts: Span[], t: number): number => { + for (let i = 0; i < parts.length; i++) { + const part = parts[i]; + if (t < part.startS) { + if (i === 0) { + return 0; + } + const out = clamp01((t - parts[i - 1].endS) / ZOOM_OUT_S); + const into = clamp01((part.startS - t) / ZOOM_IN_S); + return easeInOutCubic(Math.min(out, into)); + } + if (t <= part.endS) { + return 0; + } + } + const lastPart = parts[parts.length - 1]; + return lastPart ? easeInOutCubic(clamp01((t - lastPart.endS) / ZOOM_OUT_S)) : 0; +}; + +/** The head's position averaged over a Gaussian window around `t`. */ +export const smoothedFocus = (focusAt: (t: number) => Point, t: number): Point => { + const step = 1 / 30; + const reach = 3 * FOLLOW_SMOOTH_S; + let sumX = 0; + let sumY = 0; + let sumW = 0; + for (let dt = -reach; dt <= reach + 1e-9; dt += step) { + const w = Math.exp(-(dt * dt) / (2 * FOLLOW_SMOOTH_S * FOLLOW_SMOOTH_S)); + const p = focusAt(t + dt); + sumX += p.x * w; + sumY += p.y * w; + sumW += w; + } + return { x: sumX / sumW, y: sumY / sumW }; +}; + +const fitScale = (frame: Frame) => (frame.frameWidth - 2 * MARGIN_X) / frame.worldWidth; + +/** How much road beyond the head (km) an overview includes. */ +export const overviewLeadKm = (coveredKm: number): number => + Math.max(OVERVIEW_LEAD_MIN_KM, coveredKm * OVERVIEW_LEAD); + +export const followView = (focus: Point): View => ({ + zoom: FOLLOW_ZOOM, + centreX: focus.x, + centreY: focus.y, +}); + +/** Frame `bounds` with margins, never closer than following nor wider than the full map. */ +export const overviewView = (bounds: Bounds, frame: Frame): View => { + const base = fitScale(frame); + const width = Math.max(bounds.maxX - bounds.minX, 1e-6); + const height = Math.max(bounds.maxY - bounds.minY, 1e-6); + const zoom = Math.min( + (frame.frameWidth - 2 * MARGIN_X) / (width * base), + (frame.frameHeight - 2 * MARGIN_Y) / (height * base), + ); + return { + zoom: Math.min(FOLLOW_ZOOM, Math.max(1, zoom)), + centreX: (bounds.minX + bounds.maxX) / 2, + centreY: (bounds.minY + bounds.maxY) / 2, + }; +}; + +/** Blend two views; zoom on a log scale so zooming in and out feel even. */ +export const blendViews = (a: View, b: View, w: number): View => ({ + zoom: Math.exp(Math.log(a.zoom) + (Math.log(b.zoom) - Math.log(a.zoom)) * w), + centreX: a.centreX + (b.centreX - a.centreX) * w, + centreY: a.centreY + (b.centreY - a.centreY) * w, +}); + +/** + * Centre on `focus`, but never scroll past the map's ends: once the map is + * smaller than the view, centre the map itself. + */ +const clampAxis = (focus: number, worldSize: number, halfView: number, scale: number) => { + const low = halfView / scale; + const high = worldSize - halfView / scale; + return low >= high ? worldSize / 2 : Math.min(high, Math.max(low, focus)); +}; + +export const toCamera = (view: View, frame: Frame): Camera => { + const scale = fitScale(frame) * view.zoom; + const centreX = clampAxis(view.centreX, frame.worldWidth, frame.frameWidth / 2 - MARGIN_X, scale); + const centreY = clampAxis(view.centreY, frame.worldHeight, frame.frameHeight / 2, scale); + return { + scale, + originX: frame.frameWidth / 2 - centreX * scale, + originY: frame.frameHeight / 2 - centreY * scale, + }; +}; diff --git a/src/song-274/data.ts b/src/song-274/data.ts new file mode 100644 index 0000000..98f2f52 --- /dev/null +++ b/src/song-274/data.ts @@ -0,0 +1,213 @@ +import { staticFile } from "remotion"; +import type { FeatureFamily } from "./palette"; + +/** + * Loads the route data straight from `song-274/route/` (the public dir), so the + * video never holds its own copy that could drift from the wiki. See that + * folder's README for what each file is. + */ + +export type RosterItem = { + object: string; + kind: string; + family: FeatureFamily; + lat: number; + lon: number; +}; + +/** `[km, lat, lon]` along the road, in order of km. */ +export type RoutePoint = [number, number, number]; + +/** One sung line: the roster entries it lights, where they are, and when. */ +export type Cue = { + startS: number; + stopS: number; + /** Distance along the road; the nearest road point for off-road objects. */ + km: number; + objects: string[]; +}; + +export type TransectData = { + route: RoutePoint[]; + /** + * The road carrying on past the eastern cutoff (274-route-east.json), painted + * only after 東に続く. Empty if the file is absent. + */ + routeEast: RoutePoint[]; + /** + * The road arriving before the western cutoff (274-route-west.json), always + * drawn as covered. Empty if the file is absent. + */ + routeWest: RoutePoint[]; + /** When 東に続く (the closing line) starts, or null if the index has none. */ + closingStartS: number | null; + /** Only the entries the song names; nothing else is drawn. */ + items: RosterItem[]; + cues: Cue[]; + /** Every lyric line, districts and 東に続く included: when words are sung. */ + lines: { startS: number; stopS: number }[]; + /** When the last lyric line (東に続く included) ends. */ + lyricsEndS: number; +}; + +/** + * The page's famOf() grouping, plus shrines and railway. Railway goes by name as + * well as kind: some 信号場 are in the roster as `place (locality)`. + */ +const familyOf = (kind: string, object: string): FeatureFamily => { + if ( + kind === "railway station" || + kind === "railway signal post" || + /信号場$/.test(object) + ) { + return "railway"; + } + if ( + kind === "bridge" || + kind === "tunnel" || + kind === "shed" || + kind === "watercourse" + ) { + return kind; + } else if ( + kind === "Shinto shrine" + ) { + return "shrine"; + } + return kind.indexOf("place") === 0 ? "place" : "other"; +}; + +/** RFC 4180 CSV into header-keyed rows. Quoted fields may hold commas. */ +const parseCsv = (text: string): Record[] => { + const rows: string[][] = []; + let row: string[] = []; + let field = ""; + let quoted = false; + const src = text.charCodeAt(0) === 0xfeff ? text.slice(1) : text; + + for (let i = 0; i < src.length; i++) { + const c = src[i]; + if (quoted) { + if (c !== '"') { + field += c; + } else if (src[i + 1] === '"') { + field += '"'; + i++; + } else { + quoted = false; + } + } else if (c === '"') { + quoted = true; + } else if (c === ",") { + row.push(field); + field = ""; + } else if (c === "\n" || c === "\r") { + if (c === "\r" && src[i + 1] === "\n") { + i++; + } + row.push(field); + rows.push(row); + row = []; + field = ""; + } else { + field += c; + } + } + if (field !== "" || row.length > 0) { + row.push(field); + rows.push(row); + } + + const [header, ...body] = rows.filter((r) => r.length > 1 || r[0] !== ""); + return body.map((r) => { + const record: Record = {}; + header.forEach((key, j) => { + record[key] = r[j] === undefined ? "" : r[j]; + }); + return record; + }); +}; + +const fetchText = async (path: string): Promise => { + const res = await fetch(staticFile(path)); + if (!res.ok) { + throw new Error(`Could not load ${path}: HTTP ${res.status}`); + } + return res.text(); +}; + +/** Like fetchText, but a missing file (404) is not an error: returns null. */ +const fetchOptionalText = async (path: string): Promise => { + const res = await fetch(staticFile(path)); + if (res.status === 404) { + return null; + } + if (!res.ok) { + throw new Error(`Could not load ${path}: HTTP ${res.status}`); + } + return res.text(); +}; + +export const loadTransectData = async (): Promise => { + const [routeJson, routeEastJson, routeWestJson, lookupCsv, indexCsv] = await Promise.all([ + fetchText("route/274-route.json"), + fetchOptionalText("route/274-route-east.json"), + fetchOptionalText("route/274-route-west.json"), + fetchText("route/274-lookup.csv"), + fetchText("route/274-lyrics-index.csv"), + ]); + + const roster = new Map(); + for (const r of parseCsv(lookupCsv)) { + roster.set(r.object, { + object: r.object, + kind: r.kind, + family: familyOf(r.kind, r.object), + lat: Number(r.lat), + lon: Number(r.lon), + }); + } + + const items: RosterItem[] = []; + const cues: Cue[] = []; + const lines: TransectData["lines"] = []; + let lyricsEndS = 0; + let closingStartS: number | null = null; + for (const r of parseCsv(indexCsv)) { + lyricsEndS = Math.max(lyricsEndS, Number(r.stop_s)); + lines.push({ startS: Number(r.start_s), stopS: Number(r.stop_s) }); + if (r.kind === "closing") { + closingStartS = Number(r.start_s); + } + // Address headers and the closing line have no single node to light. + if (r.kind === "district" || r.kind === "closing") { + continue; + } + const item = roster.get(r.object); + if (!item) { + throw new Error(`Lyrics index names ${r.object}, which is not in the roster`); + } + items.push(item); + + const startS = Number(r.start_s); + const stopS = Number(r.stop_s); + const last = cues[cues.length - 1]; + // モトツ橋にモトツシェルター emits two rows sharing one timing: light both. + if (last && last.startS === startS && last.stopS === stopS) { + last.objects.push(r.object); + continue; + } + cues.push({ startS, stopS, km: Number(r.km), objects: [r.object] }); + } + + return { + route: JSON.parse(routeJson) as RoutePoint[], + routeEast: routeEastJson ? (JSON.parse(routeEastJson) as RoutePoint[]) : [], + routeWest: routeWestJson ? (JSON.parse(routeWestJson) as RoutePoint[]) : [], + closingStartS, + items, + cues, + lines, + lyricsEndS, + }; +}; diff --git a/src/song-274/layout.ts b/src/song-274/layout.ts new file mode 100644 index 0000000..dee8ee8 --- /dev/null +++ b/src/song-274/layout.ts @@ -0,0 +1,68 @@ +import type { RoutePoint } from "./data"; + +/** + * The "Ground — true shape" projection of `274-transect.html`, in the page's + * own units: an equirectangular plot with longitude shrunk by cos(lat), so + * distances read true east–west and north–south. camera.ts decides how these + * units land on screen. + */ +export const GROUND = { + width: 1200, + pad: 34, +} as const; + +export type Projection = { + height: number; + x: (lon: number) => number; + y: (lat: number) => number; +}; + +export const projectGround = (route: RoutePoint[]): Projection => { + const lats = route.map((p) => p[1]); + const lons = route.map((p) => p[2]); + const la0 = Math.min(...lats); + const la1 = Math.max(...lats); + const lo0 = Math.min(...lons); + const lo1 = Math.max(...lons); + + const kx = Math.cos((((la0 + la1) / 2) * Math.PI) / 180); + const sx = (lo1 - lo0) * kx; + const sy = la1 - la0; + const iw = GROUND.width - 2 * GROUND.pad; + const ih = (iw * sy) / sx; + + return { + height: ih + 2 * GROUND.pad, + x: (lon) => GROUND.pad + (((lon - lo0) * kx) / sx) * iw, + y: (lat) => GROUND.pad + ih - ((lat - la0) / sy) * ih, + }; +}; + +export type Bounds = { minX: number; minY: number; maxX: number; maxY: number }; + +/** Bounds of the projected route from its start up to each point, inclusive. */ +export const prefixBounds = (route: RoutePoint[], proj: Projection): Bounds[] => { + const out: Bounds[] = []; + for (const p of route) { + const x = proj.x(p[2]); + const y = proj.y(p[1]); + const prev = out[out.length - 1]; + out.push(prev ? extendBounds(prev, x, y) : { minX: x, minY: y, maxX: x, maxY: y }); + } + return out; +}; + +export const extendBounds = (b: Bounds, x: number, y: number): Bounds => ({ + minX: Math.min(b.minX, x), + minY: Math.min(b.minY, y), + maxX: Math.max(b.maxX, x), + maxY: Math.max(b.maxY, y), +}); + +export const routePath = (points: RoutePoint[], proj: Projection): string => + points + .map( + (p, i) => + `${i ? "L" : "M"}${proj.x(p[2]).toFixed(2)} ${proj.y(p[1]).toFixed(2)}`, + ) + .join(""); diff --git a/src/song-274/nodeAnimation.ts b/src/song-274/nodeAnimation.ts new file mode 100644 index 0000000..17913d3 --- /dev/null +++ b/src/song-274/nodeAnimation.ts @@ -0,0 +1,80 @@ +import type { Cue } from "./data"; + +/** + * How one node looks at one instant. The animation functions below produce + * these, and Transect.tsx only draws them, so adding a property here (a colour, + * a stroke, a glow) is the only change the drawing needs to follow. + */ +export type NodeLook = { + radius: number; + opacity: number; +}; + +/** + * A node that is not being sung. Radius is in map units (the page's pixels), + * so nodes grow with the camera's zoom. (The page itself uses 3 at 0.85.) + */ +export const RESTING: NodeLook = { radius: 2.5, opacity: 0.9 }; +/** A node while its line is sung: the page's selected mark. */ +export const LIT: NodeLook = { radius: 7, opacity: 1 }; + +const clamp01 = (v: number) => Math.min(1, Math.max(0, v)); + +/** Slightly slower lighting up and switching off. Relatively slower decay. */ +const LIGHT_UP_S = 0.12; +const SWITCH_OFF_S = 0.5; + + +/** Blend two looks; p = 0 is `from`, p = 1 is `to`. */ +export const mixLooks = (from: NodeLook, to: NodeLook, p: number): NodeLook => ({ + radius: from.radius + (to.radius - from.radius) * p, + opacity: from.opacity + (to.opacity - from.opacity) * p, +}); + +/** + * A node being switched on. + * @param elapsedS seconds since its line started (0 at the lyric timestamp) + * @param from the look it starts from + */ +export const lightUp = (elapsedS: number, from: NodeLook = RESTING): NodeLook => + mixLooks(from, LIT, clamp01(elapsedS / LIGHT_UP_S)); + +/** + * A node being switched off. + * @param elapsedS seconds since its line ended (0 at the next lyric timestamp) + * @param from the look it had when it was switched off + */ +export const switchOff = (elapsedS: number, from: NodeLook = LIT): NodeLook => + mixLooks(from, RESTING, clamp01(elapsedS / SWITCH_OFF_S)); + +/** Longest a node holds fully lit, after lighting up, before it switches off. */ +export const MAX_LIT_S = 0.9; + +/** + * When a cue's nodes start switching off: when the line ends, or once they have + * lit up and held for MAX_LIT_S, whichever comes first, so a long line does not + * keep a node lit for too long. + */ +export const switchOffAt = (cue: Cue): number => + Math.min(cue.stopS, cue.startS + LIGHT_UP_S + MAX_LIT_S); + +/** + * The look of a node at time `t`, given the cue that lights it (or none). + * Before the line: resting. Then lighting up until switchOffAt(). After that: + * switching off, starting from however far the light-up got, so a short line + * never jumps. + */ +export const nodeLookAt = (cue: Cue | undefined, t: number): NodeLook => { + if (!cue || t < cue.startS) { + return RESTING; + } + const offS = switchOffAt(cue); + if (t < offS) { + return lightUp(t - cue.startS); + } + return switchOff(t - offS, lightUp(offS - cue.startS)); +}; + +/** Whether a look is anything other than resting (drawn on top if so). */ +export const isAwake = (look: NodeLook): boolean => + look.radius !== RESTING.radius || look.opacity !== RESTING.opacity; diff --git a/src/song-274/palette.ts b/src/song-274/palette.ts new file mode 100644 index 0000000..405b358 --- /dev/null +++ b/src/song-274/palette.ts @@ -0,0 +1,66 @@ +/** + * Every colour the 274 transect video draws, named by what it is for rather than + * what it looks like. Change values here, or override `palette` in the Studio's + * input props, without touching the drawing code. + * + * The dark palette is the video's own, grown from the dark palette of + * `song-274/route/274-transect.html`; comments name the page's CSS variable each + * token corresponds to. The light palette is the page's, extended with the + * tokens the video added (shrine, railway). + */ +export type TransectPalette = { + /** Frame background. */ + background: string; + /** The whole road, before the song has covered it. */ + roadAhead: string; + /** The road the song has covered so far. */ + roadCovered: string; + /** Node fill per feature family, as on the page's legend. */ + bridge: string; + tunnel: string; + shed: string; + watercourse: string; + place: string; + /** Stations and every 信号場, whatever their roster kind. */ + railway: string; + shrine: string; + other: string; +}; + +export type FeatureFamily = + | "bridge" + | "tunnel" + | "shed" + | "watercourse" + | "place" + | "railway" + | "shrine" + | "other"; + +export const darkPalette: TransectPalette = { + background: "#28323d", // --paper + roadAhead: "#49565f", // --rule + roadCovered: "#9dcde4", // --road + bridge: "#79d1c5", // --bridge + tunnel: "#b6c5c1", // --tunnel + shed: "#eba9eb", // --shed + watercourse: "#5FB6D6", // --water + place: "#129252", // --place + railway: "#129252", // --railway + shrine: "#b32c2c", // --shrine + other: "#ff9900", // --util +}; + +export const lightPalette: TransectPalette = { + background: "#E7ECEE", + roadAhead: "#C0CCD2", + roadCovered: "#2E4A5A", + bridge: "#116B62", + tunnel: "#3A4650", + shed: "#7A5AA6", + watercourse: "#2F7E9E", + place: "#8A6D1F", + railway: "#1F6E43", + shrine: "#9B2C2C", + other: "#5B6B75", +}; diff --git a/src/song-274/progress.ts b/src/song-274/progress.ts new file mode 100644 index 0000000..8de0e90 --- /dev/null +++ b/src/song-274/progress.ts @@ -0,0 +1,154 @@ +import type { RoutePoint, TransectData } from "./data"; + +/** + * How far along the road (km) the song has got at any moment: the head of the + * "covered so far" paint, and what the camera follows. + * + * The head is pinned to each sung object's km at the instant its line starts, + * and glides between those pins on a monotone cubic curve: it passes through + * every pin exactly, never runs backwards, and changes speed smoothly rather + * than lurching at each object. + */ + +export type Keyframe = { t: number; km: number }; + +/** How long the paint takes to run the east continuation once 東に続く starts. */ +export const EAST_RUN_S = 4; + +/** + * Pins, in time order: the start of the route at 0 s and each sung line's + * object. Then the end of the main road as 東に続く starts, and the end of the + * east continuation EAST_RUN_S later. Without a closing line or an east + * continuation, the main road simply ends as the last lyric line ends. + */ +export const progressKeyframes = (data: TransectData): Keyframe[] => { + const { route, routeEast, closingStartS, cues, lyricsEndS } = data; + const keys: Keyframe[] = [{ t: 0, km: route[0][0] }]; + // Keep time strictly increasing and km never decreasing. + const pin = (t: number, km: number) => { + const last = keys[keys.length - 1]; + if (t <= last.t) { + last.km = Math.max(last.km, km); + } else { + keys.push({ t, km: Math.max(last.km, km) }); + } + }; + + for (const cue of cues) { + pin(cue.startS, cue.km); + } + const mainEndKm = route[route.length - 1][0]; + if (closingStartS !== null && routeEast.length > 0) { + pin(closingStartS, mainEndKm); + pin(closingStartS + EAST_RUN_S, routeEast[routeEast.length - 1][0]); + } else { + pin(lyricsEndS, mainEndKm); + } + return keys; +}; + +/** + * The road the paint can travel: the main route, then the east continuation + * from where it passes the main route's end (the two overlap slightly). + */ +export const paintableRoute = (data: TransectData): RoutePoint[] => { + const mainEndKm = data.route[data.route.length - 1][0]; + return data.route.concat(data.routeEast.filter((p) => p[0] > mainEndKm)); +}; + +/** + * Fritsch–Carlson monotone cubic Hermite interpolation through `keys`. + * Returns km as a function of time, held flat before the first and after the + * last keyframe. + */ +export const monotoneCurve = (keys: Keyframe[]): ((t: number) => number) => { + const n = keys.length; + if (n === 1) { + return () => keys[0].km; + } + const secant: number[] = []; + for (let i = 0; i < n - 1; i++) { + secant.push((keys[i + 1].km - keys[i].km) / (keys[i + 1].t - keys[i].t)); + } + const tangent: number[] = [secant[0]]; + for (let i = 1; i < n - 1; i++) { + tangent.push(secant[i - 1] * secant[i] <= 0 ? 0 : (secant[i - 1] + secant[i]) / 2); + } + tangent.push(secant[n - 2]); + for (let i = 0; i < n - 1; i++) { + if (secant[i] === 0) { + tangent[i] = 0; + tangent[i + 1] = 0; + continue; + } + const a = tangent[i] / secant[i]; + const b = tangent[i + 1] / secant[i]; + const h = a * a + b * b; + if (h > 9) { + const tau = 3 / Math.sqrt(h); + tangent[i] = tau * a * secant[i]; + tangent[i + 1] = tau * b * secant[i]; + } + } + + return (t) => { + if (t <= keys[0].t) { + return keys[0].km; + } + if (t >= keys[n - 1].t) { + return keys[n - 1].km; + } + let i = 0; + while (keys[i + 1].t < t) { + i++; + } + const h = keys[i + 1].t - keys[i].t; + const s = (t - keys[i].t) / h; + const s2 = s * s; + const s3 = s2 * s; + return ( + (2 * s3 - 3 * s2 + 1) * keys[i].km + + (s3 - 2 * s2 + s) * h * tangent[i] + + (-2 * s3 + 3 * s2) * keys[i + 1].km + + (s3 - s2) * h * tangent[i + 1] + ); + }; +}; + +export type RoutePosition = { + /** Last route point at or before this km. */ + index: number; + lat: number; + lon: number; +}; + +/** The point on the road at `km`, interpolated between route points. */ +export const routeAtKm = (route: RoutePoint[], km: number): RoutePosition => { + const lastIndex = route.length - 1; + if (km <= route[0][0]) { + return { index: 0, lat: route[0][1], lon: route[0][2] }; + } + if (km >= route[lastIndex][0]) { + return { index: lastIndex, lat: route[lastIndex][1], lon: route[lastIndex][2] }; + } + let low = 0; + let high = lastIndex; + while (high - low > 1) { + const mid = (low + high) >> 1; + if (route[mid][0] <= km) { + low = mid; + } else { + high = mid; + } + } + const [k0, lat0, lon0] = route[low]; + const [k1, lat1, lon1] = route[high]; + const p = k1 === k0 ? 0 : (km - k0) / (k1 - k0); + return { index: low, lat: lat0 + (lat1 - lat0) * p, lon: lon0 + (lon1 - lon0) * p }; +}; + +/** The covered stretch of road: every route point up to the head, then the head. */ +export const coveredRoute = (route: RoutePoint[], km: number): RoutePoint[] => { + const head = routeAtKm(route, km); + return [...route.slice(0, head.index + 1), [km, head.lat, head.lon]]; +}; -- 2.52.0 From 5ad82b1b98e6f0b1bdce4fb7cc5a115c1fabdd3b Mon Sep 17 00:00:00 2001 From: Mikkeli Date: Thu, 17 Sep 2026 09:44:46 +0900 Subject: [PATCH 2/7] chore(274): record the release2 master in the BOM 274_release2.wav (2026-09-17) supersedes 274_release1.wav and is the master used by the white/lyrics renders and Song274Transect. Same length, 10:19. Co-Authored-By: Claude Opus 5 --- song-274/BOM.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/song-274/BOM.md b/song-274/BOM.md index 31210d7..d455598 100644 --- a/song-274/BOM.md +++ b/song-274/BOM.md @@ -1,12 +1,13 @@ # Bill of materials — 274 -4 file(s), 238.8 MiB. Generated by `scripts/bom_gen.py`. +5 file(s), 465.6 MiB. Generated by `scripts/bom_gen.py`. ## audio file size hash description ------------------------- --------- -------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------- -`audio/274_release1.wav` 226.8 MiB `4287774b506177d282b8a035` Release master of "274" (updated 2026-09-16, replaces 274_release.wav) — stereo, 48 kHz, 32-bit float PCM, 10:19 (619.27 s). Peak -0.4 dBFS, mean -12.4 dBFS. +------------------------ --------- -------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +`audio/274_release1.wav` 226.8 MiB `4287774b506177d282b8a035` Release master of "274" (2026-09-16), superseded by 274_release2.wav — stereo, 48 kHz, 32-bit float PCM, 10:19 (619.27 s). Peak -0.4 dBFS, mean -12.4 dBFS. +`audio/274_release2.wav` 226.8 MiB `834aad4988f387dd9871d099` Release master of "274" (updated 2026-09-17, replaces 274_release1.wav; used by the white/lyrics renders and Song274Transect) — stereo, 48 kHz, 32-bit float PCM, 10:19 (619.27 s). Float peak +0.25 dBFS (1.0297; 25 samples beyond full scale), mean -13.1 dBFS. ## images -- 2.52.0 From c965fbf5fe459ad317fd315c18fe0500158a16a3 Mon Sep 17 00:00:00 2001 From: Mikkeli Date: Thu, 17 Sep 2026 09:44:46 +0900 Subject: [PATCH 3/7] feat(274): route data for the transect; lyric fixes the transect exposed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Building the transect visualisation (Song274Transect) is what exposed problems in the lyric and its index: syncing nodes to the lyric showed 紅葉山橋 lighting up although it is not on this road (it is on R452), 下福山橋 and オロロップ橋 sitting at the wrong km, and lines timed against the wrong stretch. They were fixed upstream in the wiki (ncmr-songs 7af0f48, "274: drop 紅葉山橋, fix オロロップ橋 and 下福山橋, re-timed lyric"), and the lyric deliverables here follow. 274.lrc — byte-identical copy of the wiki LRC at 7af0f48: 紅葉山橋 removed; 紅楓橋 through 楓信号場 re-timed (1:35.24–1:55.54) with 夕張市楓 at 1:45.77; 登川トンネル at 2:05.23 and its section end at 2:06.62; 稲里トンネル's section end at 4:25.27. 下福山橋 and オロロップ橋 keep their timing; their km were corrected in the roster and index. 274.srt — regenerated with scripts/lrc2srt.py, 116 cues. 274.ass — events follow the LRC: district headers as transparent_title spanning their section, 東に続く as transparent_lyrics_jp, spacers as empty events, the final line held 5 s. The Aegisub header and all 17 styles are untouched. 117 events -> 116. route/ — copied from novoyuuparosk-wiki/ncmr-songs wip/274, where it is generated; read-only here, and its README says so. src/song-274/data.ts loads 274-route.json, 274-lookup.csv and 274-lyrics-index.csv, plus the two approach stubs: 274-route-west.json (always drawn as covered) and 274-route-east.json (painted after 東に続く). Also carries the district bands, the GeoJSON and the reference page. The route shapes are single clean polylines: no second-carriageway points in the divided sections, km strictly increasing. Verified: all 116 ASS events and SRT cues match the LRC's order, text and timestamps; every sung node in the index joins to the roster at matching km. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01PLt25nCVMsoroKALYUBu6u --- song-274/274.ass | 43 ++-- song-274/274.lrc | 32 +-- song-274/274.srt | 214 +++++++++-------- song-274/route/274-districts.json | 186 +++++++++++++++ song-274/route/274-lookup.csv | 132 +++++++++++ song-274/route/274-lookup.geojson | 1 + song-274/route/274-lyrics-index.csv | 99 ++++++++ song-274/route/274-route-east.json | 1 + song-274/route/274-route-west.json | 1 + song-274/route/274-route.json | 1 + song-274/route/274-transect.html | 341 ++++++++++++++++++++++++++++ song-274/route/README.md | 74 ++++++ 12 files changed, 978 insertions(+), 147 deletions(-) create mode 100644 song-274/route/274-districts.json create mode 100644 song-274/route/274-lookup.csv create mode 100644 song-274/route/274-lookup.geojson create mode 100644 song-274/route/274-lyrics-index.csv create mode 100644 song-274/route/274-route-east.json create mode 100644 song-274/route/274-route-west.json create mode 100644 song-274/route/274-route.json create mode 100644 song-274/route/274-transect.html create mode 100644 song-274/route/README.md diff --git a/song-274/274.ass b/song-274/274.ass index 0141637..5d32879 100644 --- a/song-274/274.ass +++ b/song-274/274.ass @@ -62,7 +62,7 @@ Dialogue: 0,0:00:59.95,0:01:03.47,transparent_lyrics_en,,0,0,0,,滝の上発電 Dialogue: 0,0:01:03.47,0:01:06.94,transparent_lyrics_en,,0,0,0,,滝ノ上信号場 Dialogue: 0,0:01:06.94,0:01:08.78,transparent_lyrics_en,,0,0,0,,滝ノ上神社 Dialogue: 0,0:01:08.78,0:01:10.50,transparent_lyrics_en,,0,0,0,, -Dialogue: 0,0:01:10.50,0:01:46.47,transparent_title,,0,0,0,,夕張市紅葉山 +Dialogue: 0,0:01:10.50,0:01:45.03,transparent_title,,0,0,0,,夕張市紅葉山 Dialogue: 0,0:01:12.05,0:01:13.86,transparent_lyrics_en,,0,0,0,,十三里信号場 Dialogue: 0,0:01:13.86,0:01:16.44,transparent_lyrics_en,,0,0,0,,十三里橋 Dialogue: 0,0:01:16.44,0:01:18.78,transparent_lyrics_en,,0,0,0,,紅葉山駐車帯 @@ -71,27 +71,26 @@ Dialogue: 0,0:01:21.06,0:01:24.44,transparent_lyrics_en,,0,0,0,,セブンイレ Dialogue: 0,0:01:24.44,0:01:27.06,transparent_lyrics_en,,0,0,0,,新夕張駅 Dialogue: 0,0:01:27.06,0:01:30.02,transparent_lyrics_en,,0,0,0,,紅葉山郵便局 Dialogue: 0,0:01:30.02,0:01:32.30,transparent_lyrics_en,,0,0,0,,紅葉山神社 -Dialogue: 0,0:01:32.30,0:01:35.42,transparent_lyrics_en,,0,0,0,,セイコーマートもみじやま店 -Dialogue: 0,0:01:35.42,0:01:37.92,transparent_lyrics_en,,0,0,0,,紅葉山橋 -Dialogue: 0,0:01:37.92,0:01:39.46,transparent_lyrics_en,,0,0,0,,紅楓橋 -Dialogue: 0,0:01:39.46,0:01:41.54,transparent_lyrics_en,,0,0,0,,ポン久留喜橋 -Dialogue: 0,0:01:41.54,0:01:43.84,transparent_lyrics_en,,0,0,0,,久留喜橋 -Dialogue: 0,0:01:43.84,0:01:45.05,transparent_lyrics_en,,0,0,0,,楓橋 -Dialogue: 0,0:01:45.05,0:01:46.47,transparent_lyrics_en,,0,0,0,,桂橋 -Dialogue: 0,0:01:46.47,0:01:46.84,transparent_lyrics_en,,0,0,0,, -Dialogue: 0,0:01:46.84,0:02:00.74,transparent_title,,0,0,0,,夕張市楓 -Dialogue: 0,0:01:48.90,0:01:50.84,transparent_lyrics_en,,0,0,0,,千紫橋 -Dialogue: 0,0:01:50.84,0:01:52.07,transparent_lyrics_en,,0,0,0,,楓駐車帯 -Dialogue: 0,0:01:52.07,0:01:53.93,transparent_lyrics_en,,0,0,0,,万紅橋 -Dialogue: 0,0:01:53.93,0:01:55.61,transparent_lyrics_en,,0,0,0,,登川神社 -Dialogue: 0,0:01:55.61,0:01:57.32,transparent_lyrics_en,,0,0,0,,楓信号場 +Dialogue: 0,0:01:32.30,0:01:35.24,transparent_lyrics_en,,0,0,0,,セイコーマートもみじやま店 +Dialogue: 0,0:01:35.24,0:01:38.48,transparent_lyrics_en,,0,0,0,,紅楓橋 +Dialogue: 0,0:01:38.48,0:01:40.25,transparent_lyrics_en,,0,0,0,,ポン久留喜橋 +Dialogue: 0,0:01:40.25,0:01:42.44,transparent_lyrics_en,,0,0,0,,久留喜橋 +Dialogue: 0,0:01:42.44,0:01:43.79,transparent_lyrics_en,,0,0,0,,楓橋 +Dialogue: 0,0:01:43.79,0:01:45.03,transparent_lyrics_en,,0,0,0,,桂橋 +Dialogue: 0,0:01:45.03,0:01:45.77,transparent_lyrics_en,,0,0,0,, +Dialogue: 0,0:01:45.77,0:02:00.74,transparent_title,,0,0,0,,夕張市楓 +Dialogue: 0,0:01:49.12,0:01:50.76,transparent_lyrics_en,,0,0,0,,千紫橋 +Dialogue: 0,0:01:50.76,0:01:52.51,transparent_lyrics_en,,0,0,0,,楓駐車帯 +Dialogue: 0,0:01:52.51,0:01:53.80,transparent_lyrics_en,,0,0,0,,万紅橋 +Dialogue: 0,0:01:53.80,0:01:55.54,transparent_lyrics_en,,0,0,0,,登川神社 +Dialogue: 0,0:01:55.54,0:01:57.32,transparent_lyrics_en,,0,0,0,,楓信号場 Dialogue: 0,0:01:57.32,0:01:59.00,transparent_lyrics_en,,0,0,0,,登川橋 Dialogue: 0,0:01:59.00,0:02:00.74,transparent_lyrics_en,,0,0,0,,登川郵便局 Dialogue: 0,0:02:00.74,0:02:01.26,transparent_lyrics_en,,0,0,0,, -Dialogue: 0,0:02:01.26,0:02:06.63,transparent_title,,0,0,0,,夕張市登川 -Dialogue: 0,0:02:02.93,0:02:04.87,transparent_lyrics_en,,0,0,0,,花園橋 -Dialogue: 0,0:02:04.87,0:02:06.63,transparent_lyrics_en,,0,0,0,,登川トンネル -Dialogue: 0,0:02:06.63,0:03:30.80,transparent_lyrics_en,,0,0,0,, +Dialogue: 0,0:02:01.26,0:02:06.62,transparent_title,,0,0,0,,夕張市登川 +Dialogue: 0,0:02:02.93,0:02:05.23,transparent_lyrics_en,,0,0,0,,花園橋 +Dialogue: 0,0:02:05.23,0:02:06.62,transparent_lyrics_en,,0,0,0,,登川トンネル +Dialogue: 0,0:02:06.62,0:03:30.80,transparent_lyrics_en,,0,0,0,, Dialogue: 0,0:03:30.80,0:03:39.41,transparent_title,,0,0,0,,勇払郡むかわ町穂別長和 Dialogue: 0,0:03:34.55,0:03:36.77,transparent_lyrics_en,,0,0,0,,オマナイ橋 Dialogue: 0,0:03:36.77,0:03:39.41,transparent_lyrics_en,,0,0,0,,桂木橋 @@ -107,13 +106,13 @@ Dialogue: 0,0:03:57.78,0:04:01.08,transparent_lyrics_en,,0,0,0,,稲里簡易郵 Dialogue: 0,0:04:01.08,0:04:03.50,transparent_lyrics_en,,0,0,0,,佐主橋 Dialogue: 0,0:04:03.50,0:04:05.59,transparent_lyrics_en,,0,0,0,,穂別ダム神社 Dialogue: 0,0:04:05.59,0:04:05.96,transparent_lyrics_en,,0,0,0,, -Dialogue: 0,0:04:05.96,0:04:24.97,transparent_title,,0,0,0,,勇払郡むかわ町穂別長和 +Dialogue: 0,0:04:05.96,0:04:25.27,transparent_title,,0,0,0,,勇払郡むかわ町穂別長和 Dialogue: 0,0:04:10.08,0:04:13.02,transparent_lyrics_en,,0,0,0,,長和トンネル Dialogue: 0,0:04:13.02,0:04:15.39,transparent_lyrics_en,,0,0,0,,穂別大橋 Dialogue: 0,0:04:15.39,0:04:18.81,transparent_lyrics_en,,0,0,0,,山水橋 Dialogue: 0,0:04:18.81,0:04:23.20,transparent_lyrics_en,,0,0,0,,沼の沢橋 -Dialogue: 0,0:04:23.20,0:04:24.97,transparent_lyrics_en,,0,0,0,,稲里トンネル -Dialogue: 0,0:04:24.97,0:04:26.00,transparent_lyrics_en,,0,0,0,, +Dialogue: 0,0:04:23.20,0:04:25.27,transparent_lyrics_en,,0,0,0,,稲里トンネル +Dialogue: 0,0:04:25.27,0:04:26.00,transparent_lyrics_en,,0,0,0,, Dialogue: 0,0:04:26.00,0:04:55.52,transparent_title,,0,0,0,,勇払郡むかわ町穂別福山 Dialogue: 0,0:04:29.74,0:04:31.50,transparent_lyrics_en,,0,0,0,,ペンケ橋 Dialogue: 0,0:04:31.50,0:04:33.62,transparent_lyrics_en,,0,0,0,,下福山橋 diff --git a/song-274/274.lrc b/song-274/274.lrc index 132f7c3..2d6ef7a 100644 --- a/song-274/274.lrc +++ b/song-274/274.lrc @@ -2,6 +2,7 @@ [ar:Northwich committee of magic researches] [al:Shirakaba Express Service] + [00:14.54]夕張郡由仁町川端 [00:17.89]川端橋 [00:19.67] @@ -33,26 +34,25 @@ [01:27.06]紅葉山郵便局 [01:30.02]紅葉山神社 [01:32.30]セイコーマートもみじやま店 -[01:35.42]紅葉山橋 -[01:37.92]紅楓橋 -[01:39.46]ポン久留喜橋 -[01:41.54]久留喜橋 -[01:43.84]楓橋 -[01:45.05]桂橋 -[01:46.47] -[01:46.84]夕張市楓 -[01:48.90]千紫橋 -[01:50.84]楓駐車帯 -[01:52.07]万紅橋 -[01:53.93]登川神社 -[01:55.61]楓信号場 +[01:35.24]紅楓橋 +[01:38.48]ポン久留喜橋 +[01:40.25]久留喜橋 +[01:42.44]楓橋 +[01:43.79]桂橋 +[01:45.03] +[01:45.77]夕張市楓 +[01:49.12]千紫橋 +[01:50.76]楓駐車帯 +[01:52.51]万紅橋 +[01:53.80]登川神社 +[01:55.54]楓信号場 [01:57.32]登川橋 [01:59.00]登川郵便局 [02:00.74] [02:01.26]夕張市登川 [02:02.93]花園橋 -[02:04.87]登川トンネル -[02:06.63] +[02:05.23]登川トンネル +[02:06.62] [03:30.80]勇払郡むかわ町穂別長和 [03:34.55]オマナイ橋 [03:36.77]桂木橋 @@ -74,7 +74,7 @@ [04:15.39]山水橋 [04:18.81]沼の沢橋 [04:23.20]稲里トンネル -[04:24.97] +[04:25.27] [04:26.00]勇払郡むかわ町穂別福山 [04:29.74]ペンケ橋 [04:31.50]下福山橋 diff --git a/song-274/274.srt b/song-274/274.srt index b385dc8..197dbe2 100644 --- a/song-274/274.srt +++ b/song-274/274.srt @@ -119,349 +119,345 @@ 紅葉山神社 31 -00:01:32,300 --> 00:01:35,420 +00:01:32,300 --> 00:01:35,240 セイコーマートもみじやま店 32 -00:01:35,420 --> 00:01:37,920 -紅葉山橋 - -33 -00:01:37,920 --> 00:01:39,460 +00:01:35,240 --> 00:01:38,480 紅楓橋 -34 -00:01:39,460 --> 00:01:41,540 +33 +00:01:38,480 --> 00:01:40,250 ポン久留喜橋 -35 -00:01:41,540 --> 00:01:43,840 +34 +00:01:40,250 --> 00:01:42,440 久留喜橋 -36 -00:01:43,840 --> 00:01:45,050 +35 +00:01:42,440 --> 00:01:43,790 楓橋 -37 -00:01:45,050 --> 00:01:46,470 +36 +00:01:43,790 --> 00:01:45,030 桂橋 +37 +00:01:45,030 --> 00:01:45,770 + + 38 -00:01:46,470 --> 00:01:46,970 - - -39 -00:01:46,840 --> 00:01:48,900 +00:01:45,770 --> 00:01:49,120 夕張市楓 -40 -00:01:48,900 --> 00:01:50,840 +39 +00:01:49,120 --> 00:01:50,760 千紫橋 -41 -00:01:50,840 --> 00:01:52,070 +40 +00:01:50,760 --> 00:01:52,510 楓駐車帯 -42 -00:01:52,070 --> 00:01:53,930 +41 +00:01:52,510 --> 00:01:53,800 万紅橋 -43 -00:01:53,930 --> 00:01:55,610 +42 +00:01:53,800 --> 00:01:55,540 登川神社 -44 -00:01:55,610 --> 00:01:57,320 +43 +00:01:55,540 --> 00:01:57,320 楓信号場 -45 +44 00:01:57,320 --> 00:01:59,000 登川橋 -46 +45 00:01:59,000 --> 00:02:00,740 登川郵便局 -47 +46 00:02:00,740 --> 00:02:01,260 -48 +47 00:02:01,260 --> 00:02:02,930 夕張市登川 -49 -00:02:02,930 --> 00:02:04,870 +48 +00:02:02,930 --> 00:02:05,230 花園橋 -50 -00:02:04,870 --> 00:02:06,630 +49 +00:02:05,230 --> 00:02:06,620 登川トンネル +50 +00:02:06,620 --> 00:03:30,800 + + 51 -00:02:06,630 --> 00:03:30,800 - - -52 00:03:30,800 --> 00:03:34,550 勇払郡むかわ町穂別長和 -53 +52 00:03:34,550 --> 00:03:36,770 オマナイ橋 -54 +53 00:03:36,770 --> 00:03:39,410 桂木橋 -55 +54 00:03:39,410 --> 00:03:41,130 -56 +55 00:03:41,130 --> 00:03:44,620 勇払郡むかわ町穂別稲里 -57 +56 00:03:44,620 --> 00:03:46,670 大和橋 -58 +57 00:03:46,670 --> 00:03:48,380 豊進橋 -59 +58 00:03:48,380 --> 00:03:51,610 豊進神社 -60 +59 00:03:51,610 --> 00:03:53,140 豊里橋 -61 +60 00:03:53,140 --> 00:03:55,520 稲豊橋 -62 +61 00:03:55,520 --> 00:03:57,780 稲里橋 -63 +62 00:03:57,780 --> 00:04:01,080 稲里簡易郵便局 -64 +63 00:04:01,080 --> 00:04:03,500 佐主橋 -65 +64 00:04:03,500 --> 00:04:05,590 穂別ダム神社 -66 +65 00:04:05,590 --> 00:04:06,090 -67 +66 00:04:05,960 --> 00:04:10,080 勇払郡むかわ町穂別長和 -68 +67 00:04:10,080 --> 00:04:13,020 長和トンネル -69 +68 00:04:13,020 --> 00:04:15,390 穂別大橋 -70 +69 00:04:15,390 --> 00:04:18,810 山水橋 -71 +70 00:04:18,810 --> 00:04:23,200 沼の沢橋 -72 -00:04:23,200 --> 00:04:24,970 +71 +00:04:23,200 --> 00:04:25,270 稲里トンネル +72 +00:04:25,270 --> 00:04:26,000 + + 73 -00:04:24,970 --> 00:04:26,000 - - -74 00:04:26,000 --> 00:04:29,740 勇払郡むかわ町穂別福山 -75 +74 00:04:29,740 --> 00:04:31,500 ペンケ橋 -76 +75 00:04:31,500 --> 00:04:33,620 下福山橋 -77 +76 00:04:33,620 --> 00:04:35,020 オロロップ橋 -78 +77 00:04:35,020 --> 00:04:37,070 福山橋 -79 +78 00:04:37,070 --> 00:04:38,700 福山神社 -80 +79 00:04:38,700 --> 00:04:41,020 福山大橋 -81 +80 00:04:41,020 --> 00:04:43,290 千坂橋 -82 +81 00:04:43,290 --> 00:04:45,120 オコタン橋 -83 +82 00:04:45,120 --> 00:04:46,220 モトツトンネル -84 +83 00:04:46,220 --> 00:04:48,980 モトツ橋にモトツシェルター -85 +84 00:04:48,980 --> 00:04:51,390 福山トンネル -86 +85 00:04:51,390 --> 00:04:53,610 福穂橋 -87 +86 00:04:53,610 --> 00:04:55,520 穂高トンネル -88 +87 00:04:55,520 --> 00:05:22,600 -89 +88 00:05:22,600 --> 00:05:25,760 勇払郡占冠村中央 -90 +89 00:05:25,760 --> 00:05:28,880 穂高橋 -91 +90 00:05:28,880 --> 00:05:31,520 高翠橋 -92 +91 00:05:31,520 --> 00:05:34,950 占翠橋 -93 +92 00:05:34,950 --> 00:05:38,080 名石駐車場 -94 +93 00:05:38,080 --> 00:05:40,990 名石橋 -95 +94 00:05:40,990 --> 00:05:43,960 赤岩大橋 -96 +95 00:05:43,960 --> 00:05:48,620 渓流大橋 -97 +96 00:05:48,620 --> 00:05:50,730 日高トンネル -98 +97 00:05:50,730 --> 00:07:11,390 -99 +98 00:07:11,390 --> 00:07:14,140 沙流郡日高町日高 -100 +99 00:07:14,140 --> 00:07:16,380 日夕橋 -101 +100 00:07:16,380 --> 00:07:28,850 -102 +101 00:07:28,850 --> 00:07:31,680 沙流郡日高町宮下町 -103 +102 00:07:31,680 --> 00:07:34,090 日高神社 -104 +103 00:07:34,090 --> 00:07:42,900 -105 +104 00:07:42,900 --> 00:07:45,510 沙流郡日高町本町東 -106 +105 00:07:45,510 --> 00:07:49,880 新川橋 -107 +106 00:07:49,880 --> 00:07:52,760 セイコーマート日高道の駅店 -108 +107 00:07:52,760 --> 00:07:55,110 日高郵便局 -109 +108 00:07:55,110 --> 00:07:56,690 -110 +109 00:07:56,690 --> 00:07:59,360 沙流郡日高町千栄 -111 +110 00:07:59,360 --> 00:08:02,150 北電日高発電所 -112 +111 00:08:02,150 --> 00:08:03,900 -113 +112 00:08:03,900 --> 00:08:06,380 沙流郡日高町日高 -114 +113 00:08:06,380 --> 00:08:09,440 右左府発電所 -115 +114 00:08:09,440 --> 00:08:10,930 -116 +115 00:08:10,930 --> 00:08:12,660 東に続く -117 +116 00:08:12,660 --> 00:08:17,660 diff --git a/song-274/route/274-districts.json b/song-274/route/274-districts.json new file mode 100644 index 0000000..de6294f --- /dev/null +++ b/song-274/route/274-districts.json @@ -0,0 +1,186 @@ +[ + { + "frm": 36.5, + "to": 38.25, + "code": "01427", + "city": "夕張郡由仁町", + "lv": "川端", + "kana": "かわばた" + }, + { + "frm": 38.5, + "to": 42.0, + "code": "01429", + "city": "夕張郡栗山町", + "lv": "字滝下", + "kana": "たきした" + }, + { + "frm": 42.25, + "to": 43.0, + "code": "01427", + "city": "夕張郡由仁町", + "lv": "川端", + "kana": "かわばた" + }, + { + "frm": 43.25, + "to": 44.0, + "code": "01429", + "city": "夕張郡栗山町", + "lv": "字滝下", + "kana": "たきした" + }, + { + "frm": 44.25, + "to": 48.25, + "code": "01209", + "city": "夕張市", + "lv": "滝ノ上", + "kana": "たきのうえ" + }, + { + "frm": 48.5, + "to": 55.5, + "code": "01209", + "city": "夕張市", + "lv": "紅葉山", + "kana": "もみじやま" + }, + { + "frm": 55.75, + "to": 57.75, + "code": "01209", + "city": "夕張市", + "lv": "楓", + "kana": "かえで" + }, + { + "frm": 58.0, + "to": 61.0, + "code": "01209", + "city": "夕張市", + "lv": "登川", + "kana": "のぼりかわ" + }, + { + "frm": 61.25, + "to": 62.75, + "code": "01586", + "city": "勇払郡むかわ町", + "lv": "穂別長和", + "kana": "ほべつおさわ" + }, + { + "frm": 63.0, + "to": 72.0, + "code": "01586", + "city": "勇払郡むかわ町", + "lv": "穂別稲里", + "kana": "ほべついなさと" + }, + { + "frm": 72.25, + "to": 76.0, + "code": "01586", + "city": "勇払郡むかわ町", + "lv": "穂別長和", + "kana": "ほべつおさわ" + }, + { + "frm": 76.25, + "to": 88.75, + "code": "01586", + "city": "勇払郡むかわ町", + "lv": "穂別福山", + "kana": "ほべつふくやま" + }, + { + "frm": 89.0, + "to": 96.75, + "code": "01463", + "city": "勇払郡占冠村", + "lv": "字中央", + "kana": "ちゅうおう" + }, + { + "frm": 97.0, + "to": 101.75, + "code": "01601", + "city": "沙流郡日高町", + "lv": "字日高", + "kana": "ひだか(1く)" + }, + { + "frm": 102.0, + "to": 102.5, + "code": "01601", + "city": "沙流郡日高町", + "lv": "新町三丁目", + "kana": "しんまち" + }, + { + "frm": 102.75, + "to": 102.75, + "code": "01601", + "city": "沙流郡日高町", + "lv": "新町一丁目", + "kana": "しんまち" + }, + { + "frm": 103.0, + "to": 103.0, + "code": "01601", + "city": "沙流郡日高町", + "lv": "栄町東一丁目", + "kana": "さかえまちひがし" + }, + { + "frm": 103.25, + "to": 103.5, + "code": "01601", + "city": "沙流郡日高町", + "lv": "本町東一丁目", + "kana": "ほんちょうひがし" + }, + { + "frm": 103.75, + "to": 103.75, + "code": "01601", + "city": "沙流郡日高町", + "lv": "本町東二丁目", + "kana": "ほんちょうひがし" + }, + { + "frm": 104.0, + "to": 104.0, + "code": "01601", + "city": "沙流郡日高町", + "lv": "松風町一丁目", + "kana": "まつかぜちょう" + }, + { + "frm": 104.25, + "to": 104.25, + "code": "01601", + "city": "沙流郡日高町", + "lv": "山手町一丁目", + "kana": "やまてちょう" + }, + { + "frm": 104.5, + "to": 107.0, + "code": "01601", + "city": "沙流郡日高町", + "lv": "字日高", + "kana": "ひだか(1く)" + }, + { + "frm": 107.25, + "to": 107.75, + "code": "01601", + "city": "沙流郡日高町", + "lv": "字千栄", + "kana": "ちさか" + } +] \ No newline at end of file diff --git a/song-274/route/274-lookup.csv b/song-274/route/274-lookup.csv new file mode 100644 index 0000000..4db6517 --- /dev/null +++ b/song-274/route/274-lookup.csv @@ -0,0 +1,132 @@ +km,name,object,kana,romaji,kind,offset_m,lat,lon,length_m,built,grade,oaza,address,address_kana,location +37.27,川端,川端,かわばた,Kawabata,place (neighbourhood),32,42.91538,141.89568,,,,川端,夕張郡由仁町川端,ゆうばりぐんゆにちょうかわばた, +38.41,川端,川端橋,かわばたはし,Kawabata hashi,bridge,0,42.91715,141.90896,255,1991,Ⅰ,川端,夕張郡由仁町川端,ゆうばりぐんゆにちょうかわばた,由仁町 +39.80,川端,北海道企業局 川端発電所,,,power station,451,42.91197,141.91642,,,,滝下,夕張郡栗山町滝下,ゆうばりぐんくりやまちょうたきした, +39.80,川端,川端ダム,,,dam,523,42.91140,141.91590,,,,滝下,夕張郡栗山町滝下,ゆうばりぐんくりやまちょうたきした, +40.16,滝下,滝下八幡神社,たきしたはちまんじんじゃ,Takishitahachiman jinja,Shinto shrine,98,42.91183,141.92472,,,,滝下,夕張郡栗山町滝下,ゆうばりぐんくりやまちょうたきした, +40.57,滝ノ下,滝ノ下信号場,たきのした,Takinoshita,place (locality),400,42.90630,141.92320,,,,滝下,夕張郡栗山町滝下,ゆうばりぐんくりやまちょうたきした, +41.02,クオーベツ,クオーベツダム,くおーぺつ,Kuoopetsu,dam,1798,42.89310,141.93874,,,,川端,夕張郡由仁町川端,ゆうばりぐんゆにちょうかわばた, +41.02,滝下川端,滝下川端連絡線,,,power line,75,42.90857,141.93273,,,,滝下,夕張郡栗山町滝下,ゆうばりぐんくりやまちょうたきした, +41.02,砂金,砂金川,,,watercourse,58,42.90889,141.93222,,,,滝下,夕張郡栗山町滝下,ゆうばりぐんくりやまちょうたきした,石狩川水系 +41.86,雨霧橋,雨霧橋,あまぎりはし,Amagiri hashi,bridge,0,42.91003,141.94197,280.7,1974,Ⅱ,滝下,夕張郡栗山町滝下,ゆうばりぐんくりやまちょうたきした,栗山町 +43.03,竜仙橋,竜仙橋,りゅうせんばし,Ryuusen bashi,bridge,0,42.91604,141.95220,178,1972,Ⅱ,川端,夕張郡由仁町川端,ゆうばりぐんゆにちょうかわばた,由仁町 +43.07,滝下,北海道企業局 滝下発電所,たきのしたはつでんしょ,Takinoshita hatsudensho,power station,210,42.91801,141.95218,,,,滝下,夕張郡栗山町滝下,ゆうばりぐんくりやまちょうたきした, +43.30,滝下,滝下,たきした,Takishita,place (neighbourhood),1636,42.93155,141.95583,,,,滝下,夕張郡栗山町滝下,ゆうばりぐんくりやまちょうたきした, +43.64,草木,草木川,そうもく,Soumoku,watercourse,84,42.91577,141.96022,,,,滝下,夕張郡栗山町滝下,ゆうばりぐんくりやまちょうたきした,石狩川水系 +44.00,草木,草木橋,そうもくはし,Soumoku hashi,bridge,0,42.91449,141.96321,24.1,1979,Ⅲ,滝下,夕張郡栗山町滝下,ゆうばりぐんくりやまちょうたきした,栗山町 +44.00,滝の上,滝の上こ線橋,たきのうえこせんきょう,Takinoue kosenkyou,bridge,0,42.91449,141.96321,47.6,1975,Ⅲ,滝下,夕張郡栗山町滝下,ゆうばりぐんくりやまちょうたきした,夕張市 +44.00,草木舞,草木舞沢川,そうもくまいさわ,Soumokumaisawa,watercourse,21,42.91436,141.96339,,,,滝下,夕張郡栗山町滝下,ゆうばりぐんくりやまちょうたきした,石狩川水系 +44.62,滝の上,北海道企業局 滝の上発電所,,,power station,142,42.91152,141.97021,,,,滝ノ上,夕張市滝ノ上,ゆうばりしたきのうえ, +44.62,滝の上,滝の上公園,,,park,69,42.91225,141.97000,,,,滝ノ上,夕張市滝ノ上,ゆうばりしたきのうえ, +45.21,カミ,カミの沢川,,,watercourse,40,42.91059,141.97704,,,,滝ノ上,夕張市滝ノ上,ゆうばりしたきのうえ,石狩川水系 +45.21,滝の上,滝ノ上信号場,たきのうえしんごうじょう,Takinoue shingoujou,railway signal post,43,42.91000,141.97642,,,,滝ノ上,夕張市滝ノ上,ゆうばりしたきのうえ, +45.29,滝の上,滝ノ上神社,たきのうえじんじゃ,Takinoue jinja,Shinto shrine,100,42.90979,141.97873,,,,滝ノ上,夕張市滝ノ上,ゆうばりしたきのうえ, +47.66,滝の上,滝ノ上,たきのうえ,Takinoue,place (neighbourhood),52,42.90347,142.00470,,,,滝ノ上,夕張市滝ノ上,ゆうばりしたきのうえ, +48.18,チョポツナイ,チョポツナイ川,ちょぽつない,Chopotsunai,watercourse,63,42.90575,142.01006,,,,滝ノ上,夕張市滝ノ上,ゆうばりしたきのうえ,石狩川水系 +49.71,十三里,十三里信号場,とみさとしんごうじょう,Tomisato shingoujou,place (locality),39,42.91482,142.02439,,,,紅葉山,夕張市紅葉山,ゆうばりしもみじやま, +50.28,カライケ,カライケの沢川,からいけ,Karaike,watercourse,132,42.91674,142.03132,,,,紅葉山,夕張市紅葉山,ゆうばりしもみじやま,石狩川水系 +50.28,十三里,十三里橋,とみさとはし,Tomisato hashi,bridge,0,42.91772,142.03043,122,1997,Ⅰ,紅葉山,夕張市紅葉山,ゆうばりしもみじやま,夕張市 +50.52,紅葉山,紅葉山駐車帯,もみじやまちゅうしゃたい,Momijiyama chuushatai,parking,41,42.91840,142.03331,,,,紅葉山,夕張市紅葉山,ゆうばりしもみじやま, +52.11,瑞穂,瑞穂橋,みずほはし,Mizuho hashi,bridge,0,42.93244,142.03548,155,1968,,紅葉山,夕張市紅葉山,ゆうばりしもみじやま,夕張市 +52.11,夕張,夕張川,,,watercourse,16,42.93257,142.03538,,,,紅葉山,夕張市紅葉山,ゆうばりしもみじやま,石狩川水系 +52.47,セブン-イレブン,セブンイレブン夕張紅葉山店,せぶんいれぶんゆうばりもみじやまてん,Sebun'irebun'yuubarimomijiyama ten,convenience store,73,42.93507,142.03683,,,,紅葉山,夕張市紅葉山,ゆうばりしもみじやま, +52.54,新夕張,新夕張駅,しんゆうばり,Shin'yuubari,railway station,173,42.93670,142.03648,,,,紅葉山,夕張市紅葉山,ゆうばりしもみじやま, +52.61,紅葉山,紅葉山郵便局,もみじやまゆうびんきょく,Momijiyama yuubinkyoku,post office,54,42.93642,142.03925,,,,紅葉山,夕張市紅葉山,ゆうばりしもみじやま, +52.85,紅葉山,紅葉山神社,もみじやまじんじゃ,Momijiyama jinja,Shinto shrine,67,42.93788,142.03956,,,,紅葉山,夕張市紅葉山,ゆうばりしもみじやま, +52.99,セイコーマート,セイコーマートもみじやま店,せいこーまーともみじやまてん,Seikoomaatomomijiyama ten,convenience store,31,42.93910,142.04167,,,,紅葉山,夕張市紅葉山,ゆうばりしもみじやま, +53.13,紅楓,紅楓橋,こうふうばし,Koufuu bashi,bridge,0,42.93855,142.04317,102.5,1958,Ⅱ,紅葉山,夕張市紅葉山,ゆうばりしもみじやま,夕張市 +53.69,久留喜,ポン久留喜橋,ぽんくるきはし,Ponkuruki hashi,bridge,0,42.93697,142.04976,12.7,1984,Ⅰ,紅葉山,夕張市紅葉山,ゆうばりしもみじやま,夕張市 +53.69,久留喜,ポンクルキ川,,,watercourse,16,42.93695,142.04995,,,,紅葉山,夕張市紅葉山,ゆうばりしもみじやま,石狩川水系 +53.69,久留喜,久留喜橋,くるきはし,Kuruki hashi,bridge,0,42.93697,142.04976,34,1962,,紅葉山,夕張市紅葉山,ゆうばりしもみじやま,夕張市 +55.14,シイタルキ,シイタルキ川,,,watercourse,143,42.92706,142.06277,,,,紅葉山,夕張市紅葉山,ゆうばりしもみじやま,石狩川水系 +55.41,楓,楓橋,かえでばし,Kaede bashi,bridge,0,42.92957,142.06562,32,1968,Ⅲ,紅葉山,夕張市紅葉山,ゆうばりしもみじやま,夕張市 +55.60,桂,桂橋,かつらはし,Katsura hashi,bridge,0,42.93026,142.06775,48.3,1987,Ⅰ,紅葉山,夕張市紅葉山,ゆうばりしもみじやま,夕張市 +56.60,千紫,千紫橋,せんしばし,Senshi bashi,bridge,0,42.93414,142.07860,31.4,1988,Ⅰ,楓,夕張市楓,ゆうばりしかえで,夕張市 +56.88,楓,楓,かえで,Kaede,place (neighbourhood),711,42.94002,142.08407,,,,楓,夕張市楓,ゆうばりしかえで, +57.08,楓,楓駐車帯,かえでちゅうしゃたい,Kaede chuushatai,parking,39,42.93352,142.08412,,,,楓,夕張市楓,ゆうばりしかえで, +57.25,万紅,万紅橋,ばんこうばし,Bankou bashi,bridge,0,42.93274,142.08627,27.6,1988,Ⅰ,楓,夕張市楓,ゆうばりしかえで,夕張市 +57.44,登川,登川神社,のぼりかわじんじゃ,Noborikawa jinja,Shinto shrine,164,42.93395,142.08819,,,,楓,夕張市楓,ゆうばりしかえで, +57.76,楓,楓信号場,かえでしんごうじょう,Kaede shingoujou,railway signal post,47,42.93157,142.09230,,,,楓,夕張市楓,ゆうばりしかえで, +57.84,登川,登川橋,のぼりかわばし,Noborikawa bashi,bridge,0,42.93167,142.09327,21,1988,Ⅰ,楓,夕張市楓,ゆうばりしかえで,夕張市 +57.84,登川,登川郵便局,のぼりかわゆうびんきょく,Noborikawa yuubinkyoku,post office,21,42.93185,142.09335,,,,楓,夕張市楓,ゆうばりしかえで, +58.23,花園,花園橋,はなぞのばし,Hanazono bashi,bridge,0,42.92922,142.09647,58.6,1971,Ⅱ,登川,夕張市登川,ゆうばりしのぼりかわ,夕張市 +58.26,ホルカクルキ,ホルカクルキ川,,,watercourse,9,42.92920,142.09685,,,,登川,夕張市登川,ゆうばりしのぼりかわ,石狩川水系 +58.56,滝沢川,滝沢川,,,watercourse,52,42.92962,142.10029,,,,登川,夕張市登川,ゆうばりしのぼりかわ,石狩川水系 +59.54,松竹沢,松竹沢川,,,watercourse,58,42.93047,142.11198,,,,登川,夕張市登川,ゆうばりしのぼりかわ,石狩川水系 +59.66,登川,登川,のぼりかわ,Noborikawa,place (neighbourhood),1208,42.93831,142.12137,,,,登川,夕張市登川,ゆうばりしのぼりかわ, +60.29,登川,登川トンネル,のぼりかわとんねる,Noborikawa tonneru,tunnel,0,42.92478,142.11599,348,1978,,登川,夕張市登川,ゆうばりしのぼりかわ,夕張市 +62.36,オマナイ,オマナイ橋,おまないはし,Omanai hashi,bridge,0,42.90892,142.12482,174.2,1988,Ⅲ,穂別長和,勇払郡むかわ町穂別長和,ゆうふつぐんむかわちょうほべつおさわ,むかわ町 +62.94,桂木,桂木橋,かつらぎはし,Katsuragi hashi,bridge,0,42.90434,142.12726,129.6,1986,Ⅲ,穂別長和,勇払郡むかわ町穂別長和,ゆうふつぐんむかわちょうほべつおさわ,むかわ町 +64.44,大和,大和橋,やまとはし,Yamato hashi,bridge,0,42.89157,142.12305,16,1967,Ⅲ,穂別稲里,勇払郡むかわ町穂別稲里,ゆうふつぐんむかわちょうほべついなさと,むかわ町 +66.69,豊進,豊進橋,ほうしんばし,Houshin bashi,bridge,0,42.87371,142.13048,16,1967,Ⅲ,穂別稲里,勇払郡むかわ町穂別稲里,ゆうふつぐんむかわちょうほべついなさと,むかわ町 +66.78,豊進,豊進神社,ほうしんじんじゃ,Houshin jinja,Shinto shrine,49,42.87318,142.13135,,,,穂別稲里,勇払郡むかわ町穂別稲里,ゆうふつぐんむかわちょうほべついなさと, +66.83,穂別,穂別キャンプ場,,,campsite,66,42.87222,142.13061,,,,穂別稲里,勇払郡むかわ町穂別稲里,ゆうふつぐんむかわちょうほべついなさと, +66.86,石山,石山の沢川,,,watercourse,161,42.87125,142.13037,,,,穂別稲里,勇払郡むかわ町穂別稲里,ゆうふつぐんむかわちょうほべついなさと,鵡川水系 +67.05,狩勝,狩勝幹線,,,power line,414,42.86806,142.13398,,,,穂別稲里,勇払郡むかわ町穂別稲里,ゆうふつぐんむかわちょうほべついなさと, +67.48,豊里,豊里橋,とよさとはし,Toyosato hashi,bridge,0,42.87311,142.13854,27,1966,Ⅰ,穂別稲里,勇払郡むかわ町穂別稲里,ゆうふつぐんむかわちょうほべついなさと,むかわ町 +67.60,稲豊,稲豊橋,いなとよはし,Inatoyo hashi,bridge,0,42.87313,142.14000,27,1966,Ⅰ,穂別稲里,勇払郡むかわ町穂別稲里,ゆうふつぐんむかわちょうほべついなさと,むかわ町 +67.62,サヌシュッペ,サヌシュッペ川,,,watercourse,5,42.87304,142.14032,,,,穂別稲里,勇払郡むかわ町穂別稲里,ゆうふつぐんむかわちょうほべついなさと,鵡川水系 +68.63,稲里,稲里橋,いなさとはし,Inasato hashi,bridge,0,42.87144,142.15164,31,1988,Ⅱ,穂別稲里,勇払郡むかわ町穂別稲里,ゆうふつぐんむかわちょうほべついなさと,むかわ町 +69.29,稲里,稲里簡易郵便局,いなさとかんいゆうびんきょく,Inasatokan'i yuubinkyoku,post office,161,42.86734,142.15774,,,,穂別稲里,勇払郡むかわ町穂別稲里,ゆうふつぐんむかわちょうほべついなさと, +69.48,佐主,佐主橋,さぬしばし,Sanushi bashi,bridge,0,42.86894,142.16085,85,1973,Ⅲ,穂別稲里,勇払郡むかわ町穂別稲里,ゆうふつぐんむかわちょうほべついなさと,むかわ町 +70.22,穂別,穂別川,,,watercourse,32,42.87408,142.16642,,,,穂別稲里,勇払郡むかわ町穂別稲里,ゆうふつぐんむかわちょうほべついなさと,鵡川水系 +71.86,穂別,穂別ダム神社,ほべつだむじんじゃ,Hobetsudamu jinja,Shinto shrine,18,42.88475,142.17737,,,,穂別稲里,勇払郡むかわ町穂別稲里,ゆうふつぐんむかわちょうほべついなさと, +71.90,穂別,穂別ダム,,,dam,166,42.88502,142.17937,,,,穂別稲里,勇払郡むかわ町穂別稲里,ゆうふつぐんむかわちょうほべついなさと, +72.02,長和,長和トンネル,おさわとんねる,Osawa tonneru,tunnel,0,42.88619,142.17748,281,1983,,穂別長和,勇払郡むかわ町穂別長和,ゆうふつぐんむかわちょうほべつおさわ,むかわ町 +72.29,穂別,穂別大橋,ほべつおおはし,Hobetsu oohashi,bridge,0,42.88820,142.17918,506.2,1979,Ⅲ,穂別長和,勇払郡むかわ町穂別長和,ゆうふつぐんむかわちょうほべつおさわ,むかわ町 +72.90,山水,山水橋,さんすいばし,Sansui bashi,bridge,0,42.89187,142.18476,53.5,1979,Ⅰ,穂別長和,勇払郡むかわ町穂別長和,ゆうふつぐんむかわちょうほべつおさわ,むかわ町 +72.93,高西,高西の沢川,,,watercourse,9,42.89195,142.18498,,,,穂別長和,勇払郡むかわ町穂別長和,ゆうふつぐんむかわちょうほべつおさわ,鵡川水系 +74.31,沼の沢,沼の沢橋,ぬまのさわはし,Numanosawa hashi,bridge,0,42.88830,142.20015,188,1983,Ⅲ,穂別長和,勇払郡むかわ町穂別長和,ゆうふつぐんむかわちょうほべつおさわ,むかわ町 +75.28,稲里,稲里トンネル,いなさととんねる,Inasato tonneru,tunnel,0,42.88343,142.20951,1441,1985,Ⅲ,穂別長和,勇払郡むかわ町穂別長和,ゆうふつぐんむかわちょうほべつおさわ,むかわ町 +76.97,ペンケ橋,ペンケ橋,ぺんけばし,Penke bashi,bridge,0,42.87802,142.22782,120.7,1985,Ⅲ,穂別福山,勇払郡むかわ町穂別福山,ゆうふつぐんむかわちょうほべつふくやま,むかわ町 +77.05,オロロップ,オロロップ沢川,,,watercourse,15,42.87849,142.22885,,,,穂別福山,勇払郡むかわ町穂別福山,ゆうふつぐんむかわちょうほべつふくやま,鵡川水系 +78.03,下福山,下福山橋,しもふくやまはし,Shimofukuyama hashi,bridge,0,42.88572,142.23487,129.9,1982,Ⅰ,穂別福山,勇払郡むかわ町穂別福山,ゆうふつぐんむかわちょうほべつふくやま,むかわ町 +78.31,オロロップ,オロロップ橋,おろろっぷはし,Ororoppu hashi,bridge,0,42.88721,142.23759,205.9,1983,Ⅱ,穂別福山,勇払郡むかわ町穂別福山,ゆうふつぐんむかわちょうほべつふくやま,むかわ町 +79.11,福山,福山橋,ふくやまはし,Fukuyama hashi,bridge,0,42.89249,142.24390,134.7,1984,Ⅲ,穂別福山,勇払郡むかわ町穂別福山,ゆうふつぐんむかわちょうほべつふくやま,むかわ町 +79.67,福山,福山神社,ふくやまじんじゃ,Fukuyama jinja,Shinto shrine,184,42.89114,142.25175,,,,穂別福山,勇払郡むかわ町穂別福山,ゆうふつぐんむかわちょうほべつふくやま, +79.81,福山第1ゲート,福山第1ゲート,,,gate,71,42.89003,142.25118,,,,穂別福山,勇払郡むかわ町穂別福山,ゆうふつぐんむかわちょうほべつふくやま, +79.86,福山第2ゲート,福山第2ゲート,,,gate,47,42.88890,142.25072,,,,穂別福山,勇払郡むかわ町穂別福山,ゆうふつぐんむかわちょうほべつふくやま, +80.01,穂別福山 (穂別 + 福山),穂別福山,ほべつふくやま,Hobetsufukuyama,place (neighbourhood),172,42.88942,142.25385,,,,穂別福山,勇払郡むかわ町穂別福山,ゆうふつぐんむかわちょうほべつふくやま, +80.24,鵡川,鵡川,,,watercourse,68,42.88740,142.25421,,,,穂別福山,勇払郡むかわ町穂別福山,ゆうふつぐんむかわちょうほべつふくやま,鵡川水系 +80.24,福山,福山大橋,ふくやまおおはし,Fukuyama oohashi,bridge,0,42.88678,142.25416,160,1968,Ⅲ,穂別福山,勇払郡むかわ町穂別福山,ゆうふつぐんむかわちょうほべつふくやま,むかわ町 +85.40,千坂,千坂橋,ちさかはし,Chisaka hashi,bridge,0,42.88901,142.29725,138.7,1975,Ⅱ,穂別福山,勇払郡むかわ町穂別福山,ゆうふつぐんむかわちょうほべつふくやま,むかわ町 +85.87,オコタン,オコタン橋,おこたんばし,Okotan bashi,bridge,0,42.89179,142.30059,338,1985,Ⅰ,穂別福山,勇払郡むかわ町穂別福山,ゆうふつぐんむかわちょうほべつふくやま,むかわ町 +86.16,パンケモトツ,パンケモトツ沢川,,,watercourse,10,42.89278,142.30394,,,,穂別福山,勇払郡むかわ町穂別福山,ゆうふつぐんむかわちょうほべつふくやま,鵡川水系 +86.24,モトツ,モトツトンネル,もとつとんねる,Mototsu tonneru,tunnel,0,42.89321,142.30463,924,1991,Ⅱ,穂別福山,勇払郡むかわ町穂別福山,ゆうふつぐんむかわちょうほべつふくやま,むかわ町 +87.12,モトツ,モトツ橋,もとつばし,Mototsu bashi,bridge,0,42.89931,142.31156,62,1988,Ⅱ,穂別福山,勇払郡むかわ町穂別福山,ゆうふつぐんむかわちょうほべつふくやま,むかわ町 +87.12,モトツ,モトツシェルター,もとつしぇるたー,Mototsu sherutaa,shed,0,42.89931,142.31156,62,1990,Ⅲ,穂別福山,勇払郡むかわ町穂別福山,ゆうふつぐんむかわちょうほべつふくやま,むかわ町 +87.21,福山,福山トンネル,,,tunnel,0,42.89988,142.31229,839,1991,,穂別福山,勇払郡むかわ町穂別福山,ゆうふつぐんむかわちょうほべつふくやま,むかわ町 +88.04,ペンケモトツ,ペンケモトツ沢川,,,watercourse,26,42.90332,142.32161,,,,穂別福山,勇払郡むかわ町穂別福山,ゆうふつぐんむかわちょうほべつふくやま,鵡川水系 +88.04,福穂,福穂橋,ふくすいはし,Fukusui hashi,bridge,0,42.90322,142.32132,210,1990,Ⅰ,穂別福山,勇払郡むかわ町穂別福山,ゆうふつぐんむかわちょうほべつふくやま,むかわ町 +88.25,穂高,穂高トンネル,ほだかとんねる,Hodaka tonneru,tunnel,0,42.90398,142.32368,1991,1991,Ⅱ,穂別福山,勇払郡むかわ町穂別福山,ゆうふつぐんむかわちょうほべつふくやま,むかわ町 +90.58,穂高,穂高橋,ほだかはし,Hodaka hashi,bridge,0,42.90958,142.35128,140.6,1988,Ⅱ,中央,勇払郡占冠村中央,ゆうふつぐんしむかっぷむらちゅうおう,占冠村 +90.90,高翠,高翠橋,こうすいばし,Kousui bashi,bridge,0,42.90889,142.35485,114,1988,Ⅰ,中央,勇払郡占冠村中央,ゆうふつぐんしむかっぷむらちゅうおう,占冠村 +91.14,占翠,占翠橋,せんすいばし,Sensui bashi,bridge,0,42.90869,142.35768,167,1989,Ⅰ,中央,勇払郡占冠村中央,ゆうふつぐんしむかっぷむらちゅうおう,占冠村 +93.58,名石,名石駐車場,めいせきちゅうしゃじょう,Meiseki chuushajou,parking,32,42.90980,142.36986,,,,中央,勇払郡占冠村中央,ゆうふつぐんしむかっぷむらちゅうおう, +93.67,名石,名石橋,めいせきばし,Meiseki bashi,bridge,0,42.91029,142.37052,39.6,1970,Ⅰ,中央,勇払郡占冠村中央,ゆうふつぐんしむかっぷむらちゅうおう,占冠村 +93.73,ニセイパオマナイ,ニセイパオマナイ川,,,watercourse,30,42.91045,142.37087,,,,中央,勇払郡占冠村中央,ゆうふつぐんしむかっぷむらちゅうおう,鵡川水系 +94.35,赤岩,赤岩大橋,あかいわおおはし,Akaiwa oohashi,bridge,0,42.91317,142.37731,157.4,1970,Ⅱ,中央,勇払郡占冠村中央,ゆうふつぐんしむかっぷむらちゅうおう,占冠村 +95.37,一の沢川,一の沢川,,,watercourse,44,42.91532,142.38713,,,,中央,勇払郡占冠村中央,ゆうふつぐんしむかっぷむらちゅうおう,鵡川水系 +95.37,渓流,渓流大橋,けいりゅうおおはし,Keiryuu oohashi,bridge,0,42.91502,142.38677,153.7,1974,Ⅲ,中央,勇払郡占冠村中央,ゆうふつぐんしむかっぷむらちゅうおう,占冠村 +96.43,日高,日高トンネル,ひだかとんねる,Hidaka tonneru,tunnel,0,42.91588,142.39911,730,1972,Ⅲ,中央,勇払郡占冠村中央,ゆうふつぐんしむかっぷむらちゅうおう,占冠村 +99.93,右の沢川,右の沢川,,,watercourse,145,42.89623,142.41771,,,,日高,沙流郡日高町日高,さるぐんひだかちょうひだか,沙流川水系 +99.98,ホロカワウシャップ,ホロカワウシャップ川,,,watercourse,79,42.89623,142.41942,,,,日高,沙流郡日高町日高,さるぐんひだかちょうひだか,沙流川水系 +100.60,日夕,日夕橋,にちゆうばし,Nichiyuu bashi,bridge,0,42.89710,142.42716,30,1968,Ⅰ,日高,沙流郡日高町日高,さるぐんひだかちょうひだか,日高町 +100.66,パンケウシャップ,パンケウシャップ川,,,watercourse,21,42.89691,142.42766,,,,日高,沙流郡日高町日高,さるぐんひだかちょうひだか,沙流川水系 +100.90,日高,日高,,,place (neighbourhood),373,42.89635,142.43448,,,,日高,沙流郡日高町日高,さるぐんひだかちょうひだか, +102.18,新町,新町三丁目,しんまち3ちょうめ,Shinmachi 3-choume,place (neighbourhood),13,42.88427,142.43237,,,,新町,沙流郡日高町新町,さるぐんひだかちょうしんまち, +102.36,日高,日高神社,ひだかじんじゃ,Hidaka jinja,Shinto shrine,221,42.88427,142.43553,,,,宮下町,沙流郡日高町宮下町,さるぐんひだかちょうみやしたちょう, +102.72,kanamoto,kanamoto,かなもと,Kanamoto,shop,42,42.88086,142.43687,,,,宮下町,沙流郡日高町宮下町,さるぐんひだかちょうみやしたちょう, +103.12,新川,新川橋,しんかわはし,Shinkawa hashi,bridge,0,42.87791,142.44001,3.6,1993,Ⅰ,本町東,沙流郡日高町本町東,さるぐんひだかちょうほんちょうひがし,日高町 +103.12,新川,新川,にいかわ,Niikawa,watercourse,23,42.87811,142.43992,,,,本町東,沙流郡日高町本町東,さるぐんひだかちょうほんちょうひがし,沙流川水系 +103.29,日高,日高郵便局,ひだかゆうびんきょく,Hidaka yuubinkyoku,post office,85,42.87748,142.44195,,,,本町東,沙流郡日高町本町東,さるぐんひだかちょうほんちょうひがし, +103.29,セイコーマート,セイコーマート日高道の駅店,せいこーまーとひだかみちのえきてん,Seikoomaatohidakamichinoeki ten,convenience store,85,42.87734,142.44216,,,,本町東,沙流郡日高町本町東,さるぐんひだかちょうほんちょうひがし, +104.39,ウシャップ,ペンケウシャップ川,,,watercourse,15,42.88146,142.45211,,,,日高,沙流郡日高町日高,さるぐんひだかちょうひだか,沙流川水系 +104.52,日高,北海道電力 日高発電所,ひだかはつでんしょ,Hidaka hatsudensho,power station,666,42.87724,142.45788,,,,千栄,沙流郡日高町千栄,さるぐんひだかちょうちさか, +105.67,沙流川,沙流川,,,watercourse,272,42.88829,142.46766,,,,千栄,沙流郡日高町千栄,さるぐんひだかちょうちさか,沙流川水系 +105.99,ユウケシュオマナイ,パンケユウケシュオマナイ川,,,watercourse,181,42.88869,142.46778,,,,日高,沙流郡日高町日高,さるぐんひだかちょうひだか,沙流川水系 +106.22,右左府,右左府発電所,うさっぷはつでんしょ,Usappu hatsudensho,power station,244,42.89314,142.46755,,,,日高,沙流郡日高町日高,さるぐんひだかちょうひだか, +106.22,右左府,右左府変電所,,,substation,245,42.89280,142.46713,,,,日高,沙流郡日高町日高,さるぐんひだかちょうひだか, +106.47,オワイタカ,オワイタカ沢川,,,watercourse,52,42.89254,142.47167,,,,日高,沙流郡日高町日高,さるぐんひだかちょうひだか,沙流川水系 +107.29,滝の沢川,滝の沢川,,,watercourse,18,42.89575,142.48126,,,,千栄,沙流郡日高町千栄,さるぐんひだかちょうちさか,沙流川水系 +107.83,ルウケシオマナイ,ルウケシオマナイ川,,,watercourse,134,42.89400,142.48842,,,,千栄,沙流郡日高町千栄,さるぐんひだかちょうちさか,沙流川水系 diff --git a/song-274/route/274-lookup.geojson b/song-274/route/274-lookup.geojson new file mode 100644 index 0000000..d55491d --- /dev/null +++ b/song-274/route/274-lookup.geojson @@ -0,0 +1 @@ +{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"LineString","coordinates":[[141.83538,42.94898],[141.83573,42.94902],[141.84224,42.94975],[141.84383,42.94995],[141.8457,42.95011],[141.84585,42.95013],[141.84667,42.95022],[141.8468,42.95024],[141.84692,42.95025],[141.84859,42.95043],[141.84968,42.95055],[141.84996,42.95058],[141.85004,42.95059],[141.85073,42.95067],[141.85357,42.95099],[141.85397,42.95103],[141.85441,42.95104],[141.8547,42.95104],[141.85489,42.95102],[141.85514,42.951],[141.85538,42.95095],[141.85564,42.95088],[141.8559,42.95079],[141.85614,42.95069],[141.85636,42.95059],[141.85658,42.95046],[141.8569,42.95025],[141.85715,42.95007],[141.85737,42.9499],[141.85746,42.94983],[141.85815,42.94927],[141.85865,42.94884],[141.85875,42.94875],[141.85978,42.94783],[141.86004,42.9476],[141.86067,42.94705],[141.86234,42.94561],[141.86256,42.94542],[141.86292,42.94512],[141.86399,42.94418],[141.8653,42.94303],[141.86678,42.94176],[141.86873,42.94012],[141.87077,42.93834],[141.87193,42.93738],[141.87214,42.93717],[141.87331,42.93617],[141.87554,42.93429],[141.87686,42.93312],[141.87888,42.9314],[141.88036,42.93012],[141.8815,42.92915],[141.88237,42.92841],[141.88304,42.92783]]},"properties":{"name":"国道274号","kind":"route-west","km_from":30.456,"km_to":35.527}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[141.88304,42.92783],[141.88541,42.92577],[141.89326,42.91884],[141.89362,42.91848],[141.89469,42.91721],[141.89479,42.91709],[141.89487,42.91692],[141.8949,42.91681],[141.89497,42.91632],[141.8951,42.91552],[141.89512,42.91538],[141.89529,42.9154],[141.89665,42.91551],[141.89787,42.91559],[141.89912,42.91568],[141.90026,42.91577],[141.90275,42.91595],[141.90493,42.91613],[141.90571,42.91618],[141.90663,42.91627],[141.90684,42.9163],[141.90704,42.91635],[141.90761,42.9165],[141.90783,42.91657],[141.90803,42.91665],[141.90827,42.91675],[141.9085,42.91686],[141.90896,42.91715],[141.91059,42.91822],[141.91124,42.91864],[141.91172,42.91892],[141.91189,42.91901],[141.91205,42.91908],[141.91235,42.9192],[141.9126,42.91928],[141.9129,42.91938],[141.9133,42.91948],[141.91368,42.91955],[141.91395,42.91959],[141.91429,42.91963],[141.91469,42.91965],[141.91507,42.91965],[141.91535,42.91964],[141.91574,42.9196],[141.91607,42.91954],[141.91651,42.91941],[141.9169,42.91928],[141.91727,42.91909],[141.91755,42.91891],[141.91784,42.9187],[141.91805,42.91849],[141.91823,42.91827],[141.91843,42.91801],[141.91861,42.91773],[141.91903,42.91696],[141.91944,42.91624],[141.91973,42.91576],[141.91997,42.91542],[141.92036,42.91495],[141.92062,42.91465],[141.9209,42.91436],[141.92175,42.91355],[141.92352,42.91178],[141.92554,42.90983],[141.92615,42.90925],[141.92668,42.90884],[141.92711,42.90861],[141.92763,42.9084],[141.92806,42.90828],[141.92845,42.9082],[141.92889,42.90814],[141.92931,42.90812],[141.92969,42.90812],[141.93001,42.90814],[141.9305,42.9082],[141.93182,42.90845],[141.93546,42.90912],[141.93725,42.90946],[141.93784,42.90957],[141.93845,42.90965],[141.9408,42.90991],[141.94197,42.91003],[141.94314,42.91015],[141.94422,42.91027],[141.94457,42.91031],[141.94482,42.91037],[141.94507,42.91044],[141.94532,42.91055],[141.94566,42.91073],[141.94585,42.91088],[141.94608,42.9111],[141.9463,42.91137],[141.94683,42.91211],[141.94713,42.91259],[141.94744,42.91317],[141.94789,42.91412],[141.94806,42.91439],[141.94824,42.91464],[141.94846,42.91487],[141.94875,42.9151],[141.94897,42.91525],[141.94924,42.9154],[141.94952,42.91553],[141.94988,42.91566],[141.95028,42.91577],[141.95066,42.91583],[141.95188,42.91597],[141.9522,42.91604],[141.95257,42.91614],[141.9542,42.91668],[141.95441,42.91674],[141.95464,42.91679],[141.95465,42.91679],[141.95494,42.91683],[141.95526,42.91684],[141.95555,42.91682],[141.95579,42.9168],[141.95601,42.91677],[141.9563,42.91671],[141.95755,42.91632],[141.95919,42.9158],[141.96174,42.915],[141.96256,42.91473],[141.96321,42.91449],[141.96371,42.91429],[141.96421,42.9141],[141.96479,42.91385],[141.96521,42.9137],[141.9657,42.91355],[141.96627,42.91342],[141.96789,42.91317],[141.96967,42.91291],[141.97043,42.91279],[141.97099,42.91268],[141.97134,42.9126],[141.97171,42.91248],[141.97184,42.91243],[141.97302,42.91193],[141.9744,42.91134],[141.9752,42.91099],[141.97557,42.91084],[141.9765,42.91042],[141.97674,42.91031],[141.97752,42.90994],[141.97978,42.90888],[141.98009,42.90873],[141.98146,42.9081],[141.98223,42.90774],[141.98251,42.90763],[141.98277,42.90755],[141.98303,42.90748],[141.9833,42.90743],[141.98355,42.9074],[141.9838,42.90738],[141.98412,42.90739],[141.98482,42.90745],[141.98663,42.90767],[141.98712,42.90771],[141.98737,42.9077],[141.98761,42.90768],[141.98782,42.90764],[141.98802,42.90758],[141.98825,42.90751],[141.98851,42.90741],[141.98902,42.90718],[141.98947,42.90697],[141.98974,42.90687],[141.98995,42.90681],[141.99014,42.90675],[141.99045,42.90668],[141.9911,42.90657],[141.99179,42.90644],[141.99223,42.90634],[141.99323,42.90608],[141.99351,42.906],[141.99432,42.9058],[141.99537,42.90552],[141.99732,42.90502],[141.99797,42.90485],[141.99895,42.90459],[142.00154,42.90392],[142.00209,42.90382],[142.00253,42.90378],[142.00297,42.90376],[142.00323,42.90376],[142.00342,42.90377],[142.00373,42.90379],[142.00406,42.90383],[142.00463,42.90393],[142.00522,42.9041],[142.00603,42.90444],[142.00842,42.90557],[142.00935,42.906],[142.01012,42.90631],[142.01161,42.90672],[142.01287,42.90716],[142.01366,42.90752],[142.01454,42.90803],[142.01539,42.90861],[142.01746,42.90995],[142.01961,42.91135],[142.02029,42.91179],[142.02166,42.91268],[142.02248,42.91321],[142.02412,42.91423],[142.02484,42.9147],[142.02625,42.91567],[142.02791,42.91669],[142.02833,42.9169],[142.02884,42.91714],[142.02938,42.91735],[142.03043,42.91772],[142.03209,42.91829],[142.03235,42.91839],[142.03279,42.91856],[142.03309,42.91873],[142.03333,42.9189],[142.03357,42.91912],[142.03388,42.91948],[142.03429,42.92004],[142.03437,42.92034],[142.0344,42.92076],[142.03442,42.92097],[142.03439,42.92123],[142.03433,42.92157],[142.03414,42.92285],[142.03411,42.92382],[142.03418,42.92424],[142.03432,42.92471],[142.03441,42.92499],[142.03449,42.92531],[142.03462,42.92576],[142.03531,42.92712],[142.03572,42.92785],[142.03585,42.92814],[142.03594,42.92848],[142.03603,42.92947],[142.03602,42.92985],[142.03594,42.93009],[142.03583,42.93036],[142.0357,42.93067],[142.03554,42.93101],[142.03551,42.93111],[142.03545,42.93127],[142.0354,42.93158],[142.0354,42.93191],[142.03541,42.93216],[142.03548,42.93244],[142.03557,42.93275],[142.03575,42.9331],[142.036,42.93343],[142.03614,42.93359],[142.03684,42.93433],[142.0377,42.93524],[142.03816,42.93574],[142.03841,42.93599],[142.03865,42.93624],[142.03949,42.93714],[142.04035,42.93805],[142.04072,42.93846],[142.04086,42.93858],[142.04098,42.93866],[142.04113,42.93873],[142.04137,42.9388],[142.04158,42.93883],[142.04186,42.93882],[142.04216,42.93877],[142.04317,42.93855],[142.04462,42.93823],[142.04709,42.93769],[142.04868,42.9373],[142.04931,42.93713],[142.04956,42.93704],[142.04969,42.937],[142.04976,42.93697],[142.05022,42.93675],[142.05098,42.93635],[142.05214,42.9357],[142.0525,42.93546],[142.05288,42.93519],[142.05313,42.93499],[142.05344,42.93475],[142.05383,42.93449],[142.05498,42.93383],[142.05614,42.93315],[142.05708,42.93261],[142.05743,42.93242],[142.05782,42.93218],[142.05832,42.93187],[142.05866,42.93161],[142.05915,42.93116],[142.05967,42.93065],[142.06054,42.92983],[142.06137,42.92898],[142.06152,42.92886],[142.06169,42.92873],[142.06187,42.92861],[142.06204,42.92853],[142.0622,42.92847],[142.06243,42.9284],[142.06266,42.92836],[142.06288,42.92835],[142.06318,42.92836],[142.06341,42.92838],[142.06362,42.92843],[142.06384,42.92851],[142.06405,42.9286],[142.06428,42.92874],[142.06486,42.92913],[142.0651,42.92929],[142.06532,42.92941],[142.06562,42.92957],[142.06626,42.92985],[142.06775,42.93026],[142.06828,42.93039],[142.06864,42.93052],[142.06904,42.93068],[142.06948,42.9309],[142.07042,42.93141],[142.07075,42.93158],[142.0715,42.93197],[142.07268,42.9326],[142.07321,42.93286],[142.07375,42.93307],[142.07427,42.93324],[142.07598,42.93377],[142.07677,42.934],[142.07707,42.93408],[142.07731,42.93412],[142.07751,42.93415],[142.07773,42.93415],[142.07805,42.93415],[142.0786,42.93414],[142.07937,42.93411],[142.07962,42.9341],[142.08019,42.93407],[142.08057,42.93403],[142.0809,42.934],[142.08121,42.93395],[142.082,42.93381],[142.08272,42.93363],[142.08426,42.93318],[142.0849,42.93299],[142.08526,42.9329],[142.08559,42.93283],[142.08627,42.93274],[142.08692,42.93265],[142.08855,42.9325],[142.09009,42.93235],[142.0912,42.93222],[142.09157,42.93218],[142.09193,42.93211],[142.09224,42.93204],[142.09245,42.93197],[142.0929,42.9318],[142.09327,42.93167],[142.09361,42.93154],[142.09386,42.93142],[142.09399,42.93135],[142.0941,42.93127],[142.0942,42.93118],[142.0943,42.93104],[142.09435,42.93094],[142.09449,42.93067],[142.09462,42.93044],[142.09479,42.9302],[142.09501,42.92999],[142.09515,42.92986],[142.0952,42.92982],[142.09546,42.92959],[142.09563,42.9295],[142.0958,42.92942],[142.09616,42.92931],[142.09627,42.92928],[142.09647,42.92922],[142.09686,42.92912],[142.09719,42.92907],[142.09751,42.92904],[142.09784,42.92903],[142.0983,42.92903],[142.09881,42.92906],[142.09954,42.92911],[142.09995,42.92914],[142.10049,42.92917],[142.10097,42.92918],[142.10152,42.92917],[142.10207,42.92913],[142.10291,42.92907],[142.10473,42.92894],[142.10527,42.9289],[142.10595,42.92887],[142.10632,42.92888],[142.10652,42.92892],[142.10672,42.92897],[142.10691,42.92904],[142.1071,42.92915],[142.10727,42.92927],[142.10759,42.92956],[142.10792,42.9299],[142.10809,42.93005],[142.1083,42.93021],[142.10853,42.93035],[142.10875,42.93045],[142.10897,42.93052],[142.1092,42.93057],[142.10944,42.9306],[142.1097,42.93061],[142.10998,42.93059],[142.11021,42.93055],[142.11049,42.9305],[142.11077,42.93041],[142.11105,42.93031],[142.11144,42.93013],[142.11268,42.9295],[142.11367,42.929],[142.11388,42.92888],[142.11424,42.92862],[142.11449,42.92841],[142.11476,42.92816],[142.11494,42.92794],[142.11517,42.92767],[142.11532,42.92746],[142.11547,42.92721],[142.11563,42.92687],[142.11572,42.92664],[142.11584,42.92628],[142.11591,42.92596],[142.11594,42.9257],[142.11597,42.92522],[142.11599,42.92478],[142.11611,42.92152],[142.11612,42.92114],[142.11616,42.92078],[142.11621,42.92045],[142.11628,42.92022],[142.11639,42.91994],[142.11652,42.91969],[142.11667,42.91946],[142.11689,42.91926],[142.11727,42.91898],[142.11806,42.91857],[142.1188,42.91821],[142.11902,42.9181],[142.11946,42.91784],[142.11989,42.91751],[142.12034,42.91707],[142.1207,42.9167],[142.12096,42.91638],[142.12111,42.91615],[142.12126,42.91586],[142.12137,42.91553],[142.12138,42.91525],[142.12137,42.91491],[142.1213,42.91443],[142.12124,42.91408],[142.12119,42.91379],[142.12119,42.91352],[142.12126,42.91264],[142.12138,42.91164],[142.12149,42.91109],[142.12156,42.91084],[142.12171,42.91061],[142.122,42.91024],[142.12231,42.90997],[142.12286,42.90969],[142.12387,42.90927],[142.12471,42.90897],[142.12482,42.90892],[142.1252,42.90875],[142.1255,42.90862],[142.12589,42.90838],[142.12612,42.9082],[142.12637,42.90795],[142.12645,42.90783],[142.12656,42.9076],[142.12666,42.90733],[142.12671,42.90707],[142.12673,42.90683],[142.12675,42.90647],[142.12673,42.90634],[142.12669,42.90597],[142.12672,42.90568],[142.12677,42.90537],[142.12687,42.90513],[142.12704,42.90469],[142.12726,42.90434],[142.12746,42.90395],[142.12763,42.90365],[142.12769,42.90346],[142.12774,42.90319],[142.12775,42.90297],[142.12774,42.90267],[142.12766,42.9024],[142.12672,42.90044],[142.12657,42.90011],[142.12648,42.89993],[142.12636,42.89968],[142.12615,42.89917],[142.12593,42.89879],[142.12585,42.89859],[142.12581,42.8984],[142.1258,42.89815],[142.12584,42.89737],[142.12586,42.89694],[142.12587,42.89667],[142.12583,42.89645],[142.12576,42.89621],[142.12562,42.89584],[142.12536,42.89522],[142.12489,42.89428],[142.1246,42.89373],[142.12431,42.89327],[142.12388,42.89274],[142.1235,42.89227],[142.12335,42.89208],[142.12317,42.89179],[142.12305,42.89157],[142.12293,42.89123],[142.1228,42.89074],[142.12275,42.89017],[142.12277,42.88986],[142.12281,42.88953],[142.12283,42.88922],[142.12278,42.88897],[142.12269,42.88875],[142.12247,42.88836],[142.12237,42.88813],[142.12227,42.88786],[142.12223,42.88761],[142.12222,42.88722],[142.12223,42.887],[142.12228,42.88663],[142.12241,42.88618],[142.12261,42.88589],[142.1234,42.88497],[142.12356,42.88471],[142.12367,42.88455],[142.12376,42.88432],[142.12385,42.88409],[142.12388,42.88373],[142.12388,42.88348],[142.12386,42.88325],[142.12381,42.88296],[142.12372,42.88262],[142.12365,42.88228],[142.1236,42.88203],[142.12359,42.88178],[142.12362,42.88151],[142.12367,42.88126],[142.1237,42.88119],[142.1238,42.88095],[142.12392,42.88073],[142.12408,42.88042],[142.12423,42.8801],[142.12444,42.8798],[142.12474,42.87949],[142.12517,42.87924],[142.12677,42.87866],[142.12732,42.87846],[142.12777,42.87828],[142.12801,42.87813],[142.12817,42.87803],[142.12834,42.87785],[142.12846,42.8777],[142.12856,42.87753],[142.12927,42.87627],[142.12967,42.87554],[142.12993,42.8751],[142.13017,42.87462],[142.1303,42.87429],[142.13035,42.87409],[142.13048,42.87371],[142.13055,42.87353],[142.13065,42.87327],[142.13073,42.87313],[142.13084,42.87294],[142.13104,42.87273],[142.13128,42.87256],[142.13156,42.8724],[142.13174,42.87233],[142.13265,42.87202],[142.13313,42.87188],[142.13341,42.87182],[142.13371,42.87178],[142.13401,42.87178],[142.13427,42.87181],[142.13453,42.87188],[142.13481,42.87199],[142.13505,42.87213],[142.13545,42.87233],[142.13582,42.87254],[142.13622,42.87273],[142.13659,42.87283],[142.13719,42.87293],[142.13854,42.87311],[142.13898,42.87316],[142.1391,42.87316],[142.13937,42.87316],[142.13962,42.87316],[142.14,42.87313],[142.14027,42.87308],[142.14057,42.87301],[142.14099,42.87291],[142.14136,42.87282],[142.1417,42.8727],[142.14202,42.87258],[142.14278,42.87222],[142.14306,42.8721],[142.14336,42.872],[142.14363,42.87196],[142.1439,42.87194],[142.1442,42.87195],[142.14451,42.872],[142.14496,42.87206],[142.14623,42.87237],[142.14761,42.87269],[142.14801,42.87275],[142.14835,42.87275],[142.14867,42.87271],[142.14903,42.87264],[142.14935,42.87254],[142.14968,42.87239],[142.15112,42.8717],[142.15164,42.87144],[142.15211,42.8712],[142.15306,42.87073],[142.1542,42.87017],[142.15459,42.87],[142.15492,42.86987],[142.15683,42.86924],[142.15794,42.86886],[142.15866,42.86862],[142.15884,42.86857],[142.15901,42.86853],[142.15917,42.86851],[142.15932,42.86849],[142.1595,42.86849],[142.1597,42.8685],[142.15988,42.86853],[142.16005,42.86857],[142.16021,42.86862],[142.16036,42.86867],[142.16047,42.86873],[142.1607,42.86885],[142.16085,42.86894],[142.1617,42.86957],[142.16226,42.86996],[142.16247,42.87014],[142.1628,42.87051],[142.1632,42.87122],[142.16352,42.87173],[142.16385,42.8722],[142.16421,42.87258],[142.16466,42.87302],[142.16558,42.8738],[142.16616,42.8743],[142.16665,42.87466],[142.16717,42.875],[142.16745,42.87516],[142.16773,42.87532],[142.16824,42.87558],[142.16862,42.87583],[142.16888,42.87615],[142.16898,42.87647],[142.16894,42.87693],[142.16874,42.87739],[142.16851,42.87792],[142.16847,42.87819],[142.16847,42.87861],[142.16864,42.87904],[142.16894,42.87962],[142.16922,42.88018],[142.16931,42.88036],[142.16962,42.8808],[142.16996,42.8812],[142.1704,42.88161],[142.17089,42.882],[142.17137,42.88236],[142.17219,42.88299],[142.1726,42.88322],[142.17304,42.88342],[142.1735,42.88355],[142.17409,42.88367],[142.17497,42.88379],[142.17573,42.8839],[142.17615,42.88401],[142.1764,42.88412],[142.17662,42.88425],[142.17681,42.88438],[142.17701,42.88457],[142.17715,42.88476],[142.17727,42.88495],[142.17734,42.88515],[142.17738,42.88539],[142.17743,42.88587],[142.17748,42.88619],[142.1776,42.88665],[142.1779,42.8871],[142.17853,42.88771],[142.179,42.88807],[142.17918,42.8882],[142.18404,42.89144],[142.18427,42.89157],[142.18476,42.89187],[142.18506,42.892],[142.18536,42.89209],[142.18563,42.89215],[142.18601,42.89222],[142.18694,42.89231],[142.18753,42.89234],[142.18989,42.89246],[142.1903,42.89246],[142.19075,42.89244],[142.19118,42.89234],[142.19161,42.89218],[142.19197,42.89203],[142.19226,42.89185],[142.19266,42.89152],[142.19309,42.89122],[142.19348,42.89102],[142.19395,42.89089],[142.19444,42.89085],[142.19492,42.89081],[142.19554,42.89069],[142.19622,42.89044],[142.19955,42.88869],[142.20015,42.8883],[142.20181,42.8871],[142.20264,42.88651],[142.20305,42.88631],[142.20359,42.88615],[142.20429,42.88604],[142.20506,42.886],[142.20565,42.88594],[142.20588,42.88585],[142.2062,42.88571],[142.20645,42.88556],[142.20671,42.88527],[142.20717,42.88466],[142.20738,42.88445],[142.20798,42.88409],[142.20951,42.88343],[142.21237,42.88208],[142.21623,42.88028],[142.21975,42.87867],[142.22073,42.8783],[142.22209,42.87791],[142.22342,42.87756],[142.22462,42.87739],[142.22558,42.87744],[142.22564,42.87744],[142.22596,42.87748],[142.22631,42.87753],[142.22662,42.87761],[142.22697,42.87769],[142.22734,42.87783],[142.22782,42.87802],[142.22824,42.87821],[142.22868,42.8785],[142.22921,42.87896],[142.23039,42.87996],[142.23109,42.88045],[142.23152,42.88083],[142.2317,42.88113],[142.23178,42.8815],[142.23185,42.88198],[142.23193,42.88238],[142.23203,42.88262],[142.23217,42.88284],[142.23284,42.88368],[142.23333,42.88434],[142.23377,42.88491],[142.23381,42.88496],[142.23406,42.88521],[142.23442,42.88549],[142.23487,42.88572],[142.23599,42.88619],[142.23677,42.88651],[142.23706,42.88668],[142.23739,42.88695],[142.23759,42.88721],[142.23799,42.88792],[142.2382,42.88816],[142.23857,42.88863],[142.23891,42.88903],[142.23946,42.88956],[142.24004,42.89007],[142.24047,42.89044],[142.24075,42.89063],[142.24138,42.89086],[142.242,42.8911],[142.24238,42.8913],[142.2427,42.89156],[142.24324,42.89207],[142.24333,42.89214],[142.2435,42.89226],[142.24366,42.89237],[142.24378,42.89243],[142.2439,42.89249],[142.24406,42.89256],[142.24422,42.89261],[142.24437,42.89265],[142.2445,42.89268],[142.24466,42.8927],[142.24482,42.89272],[142.245,42.89272],[142.24517,42.89272],[142.24535,42.89271],[142.24555,42.89268],[142.24584,42.89262],[142.24624,42.89252],[142.24752,42.89218],[142.24785,42.89209],[142.24815,42.89198],[142.24846,42.89184],[142.24868,42.8917],[142.24885,42.89158],[142.24894,42.89151],[142.24909,42.89138],[142.24917,42.89129],[142.24925,42.8912],[142.24936,42.89105],[142.24946,42.89089],[142.2496,42.89062],[142.24979,42.89029],[142.2499,42.89015],[142.25002,42.89001],[142.25021,42.88984],[142.25056,42.88958],[142.25102,42.88926],[142.25132,42.88907],[142.25147,42.88896],[142.25179,42.88874],[142.25229,42.88837],[142.25254,42.88819],[142.25285,42.88794],[142.25416,42.88678],[142.2546,42.88644],[142.25492,42.88618],[142.25507,42.88609],[142.25525,42.88598],[142.25542,42.8859],[142.25561,42.88584],[142.2558,42.88578],[142.25596,42.88575],[142.25613,42.88573],[142.25629,42.88572],[142.25644,42.88572],[142.25662,42.88573],[142.25676,42.88574],[142.25693,42.88578],[142.25707,42.88581],[142.25722,42.88586],[142.25736,42.88592],[142.25754,42.886],[142.25774,42.88611],[142.25823,42.88638],[142.25838,42.88646],[142.25854,42.88654],[142.25874,42.88664],[142.25898,42.88674],[142.25917,42.88681],[142.25936,42.88687],[142.25952,42.88691],[142.25969,42.88695],[142.25988,42.88697],[142.26006,42.88699],[142.26023,42.887],[142.26042,42.887],[142.2606,42.88699],[142.26075,42.88697],[142.26091,42.88695],[142.26107,42.88692],[142.26124,42.88688],[142.26138,42.88684],[142.26153,42.88678],[142.26165,42.88674],[142.26181,42.88667],[142.26194,42.88659],[142.26206,42.88652],[142.26222,42.88641],[142.26234,42.88631],[142.26246,42.88621],[142.26259,42.88609],[142.2627,42.88597],[142.26337,42.88512],[142.26346,42.88503],[142.26356,42.88494],[142.26365,42.88486],[142.26375,42.88479],[142.26387,42.88472],[142.264,42.88465],[142.26414,42.8846],[142.26428,42.88455],[142.26441,42.88452],[142.26454,42.88449],[142.26466,42.88448],[142.26479,42.88447],[142.26497,42.88446],[142.26522,42.88445],[142.26587,42.88445],[142.26609,42.88445],[142.26629,42.88445],[142.26647,42.88444],[142.26664,42.88442],[142.26684,42.8844],[142.267,42.88438],[142.26718,42.88435],[142.26738,42.8843],[142.26761,42.88424],[142.26783,42.88417],[142.26818,42.88406],[142.2684,42.88399],[142.26861,42.88393],[142.26878,42.88388],[142.26899,42.88383],[142.2692,42.88378],[142.26943,42.88373],[142.26967,42.88368],[142.26984,42.88365],[142.27002,42.88363],[142.27038,42.88358],[142.27085,42.88356],[142.27382,42.8834],[142.27413,42.88337],[142.27445,42.88333],[142.2749,42.88324],[142.27558,42.88299],[142.2761,42.88274],[142.27702,42.88215],[142.2776,42.88186],[142.27867,42.88153],[142.27916,42.88142],[142.28047,42.88119],[142.28112,42.8811],[142.2813,42.88107],[142.28147,42.88102],[142.28165,42.88097],[142.28232,42.88073],[142.28246,42.88069],[142.2826,42.88066],[142.28275,42.88062],[142.28288,42.88061],[142.28304,42.8806],[142.28317,42.88061],[142.2833,42.88063],[142.28344,42.88066],[142.28356,42.88071],[142.28368,42.88075],[142.28378,42.88081],[142.28387,42.88088],[142.28394,42.88096],[142.28401,42.88103],[142.28407,42.88112],[142.28411,42.88121],[142.28415,42.88131],[142.28416,42.8814],[142.28416,42.88149],[142.28415,42.88159],[142.28412,42.88167],[142.28407,42.88178],[142.28401,42.88187],[142.28393,42.88196],[142.28384,42.88205],[142.28371,42.88213],[142.28355,42.88221],[142.28338,42.88228],[142.28019,42.8834],[142.27999,42.88348],[142.2798,42.88356],[142.27969,42.88362],[142.27958,42.88369],[142.27948,42.88376],[142.27939,42.88384],[142.2793,42.88393],[142.27923,42.88403],[142.27918,42.88413],[142.27915,42.88422],[142.27913,42.88434],[142.27912,42.88444],[142.27913,42.88453],[142.27917,42.88464],[142.27921,42.88475],[142.27928,42.88486],[142.27936,42.88496],[142.27945,42.88504],[142.27959,42.88513],[142.27972,42.88521],[142.27988,42.88527],[142.28006,42.88532],[142.2802,42.88534],[142.28034,42.88536],[142.28049,42.88535],[142.28064,42.88534],[142.28076,42.88532],[142.28089,42.88529],[142.28104,42.88524],[142.28121,42.88516],[142.28135,42.88509],[142.28153,42.88499],[142.28219,42.88456],[142.28231,42.88449],[142.28243,42.88443],[142.28254,42.88438],[142.28266,42.88434],[142.2828,42.88429],[142.28297,42.88425],[142.2831,42.88422],[142.28325,42.8842],[142.28341,42.88418],[142.28357,42.88418],[142.28374,42.88418],[142.2839,42.8842],[142.28407,42.88422],[142.28422,42.88424],[142.28437,42.88428],[142.28475,42.88439],[142.28584,42.88469],[142.28813,42.88541],[142.28869,42.88558],[142.28909,42.88576],[142.28946,42.88596],[142.28968,42.88615],[142.28986,42.88639],[142.29004,42.88664],[142.29021,42.88714],[142.29022,42.88717],[142.29038,42.88757],[142.29055,42.88786],[142.29081,42.88818],[142.29103,42.88834],[142.29131,42.8885],[142.29157,42.88863],[142.29186,42.88876],[142.29213,42.88886],[142.29244,42.88892],[142.29274,42.88896],[142.29305,42.88899],[142.29363,42.88899],[142.29725,42.88901],[142.29763,42.88901],[142.29785,42.88905],[142.29808,42.88913],[142.29826,42.88922],[142.29844,42.88933],[142.29856,42.88944],[142.29863,42.88954],[142.29869,42.88973],[142.29876,42.89006],[142.29877,42.89028],[142.2988,42.89047],[142.29882,42.89077],[142.2989,42.89096],[142.29903,42.89122],[142.29922,42.89138],[142.2994,42.89149],[142.29962,42.89157],[142.29984,42.89164],[142.30059,42.89179],[142.3032,42.89235],[142.30348,42.89246],[142.30374,42.89258],[142.30395,42.89269],[142.30414,42.89279],[142.30431,42.89294],[142.30446,42.89306],[142.30463,42.89321],[142.30684,42.89523],[142.30906,42.89714],[142.31071,42.89857],[142.31156,42.89931],[142.31229,42.89988],[142.31296,42.90029],[142.31355,42.90057],[142.31435,42.90089],[142.31625,42.90155],[142.31879,42.9024],[142.32117,42.90317],[142.32132,42.90322],[142.32359,42.90395],[142.32368,42.90398],[142.32552,42.90451],[142.32896,42.90526],[142.3335,42.90618],[142.34709,42.90883],[142.35128,42.90958],[142.35161,42.90962],[142.35195,42.90965],[142.35231,42.90968],[142.35259,42.90968],[142.35293,42.90964],[142.35318,42.90959],[142.35352,42.90951],[142.3539,42.90938],[142.35432,42.90916],[142.35485,42.90889],[142.35509,42.90878],[142.35534,42.90868],[142.35568,42.90855],[142.35611,42.90845],[142.35643,42.90844],[142.35678,42.90845],[142.35703,42.90849],[142.35728,42.90855],[142.35754,42.90863],[142.35768,42.90869],[142.35785,42.90876],[142.35803,42.90886],[142.35821,42.90898],[142.3592,42.90972],[142.3615,42.91145],[142.36193,42.91174],[142.3624,42.91209],[142.36255,42.91219],[142.36273,42.91229],[142.36289,42.91237],[142.36304,42.91243],[142.36319,42.91247],[142.36337,42.91252],[142.36356,42.91255],[142.36374,42.91257],[142.36393,42.91257],[142.36415,42.91256],[142.36432,42.91254],[142.36447,42.91251],[142.36463,42.91247],[142.36483,42.91241],[142.36503,42.91232],[142.36519,42.91224],[142.3653,42.91217],[142.36541,42.91208],[142.36551,42.912],[142.36559,42.91191],[142.36568,42.9118],[142.36576,42.91169],[142.36581,42.91159],[142.36586,42.91147],[142.3659,42.91134],[142.36592,42.91123],[142.36593,42.9111],[142.36592,42.91097],[142.36589,42.91083],[142.36584,42.91068],[142.36579,42.91056],[142.36571,42.91043],[142.3656,42.91028],[142.36549,42.91017],[142.36536,42.91006],[142.36518,42.90994],[142.36504,42.90987],[142.36487,42.90978],[142.36467,42.90969],[142.36183,42.90851],[142.36164,42.90843],[142.36145,42.90833],[142.3613,42.90823],[142.3612,42.90815],[142.3611,42.90805],[142.36103,42.90797],[142.36097,42.90788],[142.36093,42.90779],[142.3609,42.90771],[142.36088,42.90761],[142.36087,42.90752],[142.36087,42.90742],[142.36088,42.90731],[142.36091,42.90721],[142.36096,42.9071],[142.36101,42.90701],[142.36108,42.90691],[142.36117,42.90683],[142.36127,42.90675],[142.36137,42.90668],[142.36151,42.90661],[142.36164,42.90656],[142.36179,42.90651],[142.3619,42.90649],[142.36206,42.90646],[142.3622,42.90645],[142.36235,42.90645],[142.3625,42.90647],[142.36266,42.90649],[142.36281,42.90653],[142.36299,42.90659],[142.36318,42.90668],[142.36351,42.90685],[142.36401,42.90715],[142.36855,42.90953],[142.36917,42.90982],[142.36955,42.90998],[142.36996,42.91012],[142.3703,42.91024],[142.37052,42.91029],[142.37124,42.91045],[142.37237,42.91066],[142.37325,42.91083],[142.3735,42.91087],[142.37376,42.91094],[142.37404,42.91102],[142.37426,42.91112],[142.37452,42.91125],[142.37476,42.91141],[142.37496,42.91157],[142.37513,42.91174],[142.37527,42.9119],[142.37539,42.91209],[142.3757,42.91261],[142.37583,42.91277],[142.37598,42.9129],[142.37616,42.91301],[142.37639,42.91311],[142.3766,42.91315],[142.37682,42.91317],[142.37708,42.91318],[142.37731,42.91317],[142.37771,42.91316],[142.37796,42.9132],[142.37813,42.91324],[142.37829,42.91331],[142.37845,42.91341],[142.3786,42.91353],[142.3787,42.91366],[142.37876,42.91377],[142.37882,42.91391],[142.379,42.91482],[142.37908,42.91521],[142.37915,42.9154],[142.37923,42.91554],[142.37932,42.91566],[142.37943,42.91578],[142.37959,42.91591],[142.37975,42.91601],[142.37993,42.91611],[142.38017,42.91619],[142.38042,42.91626],[142.38063,42.9163],[142.38088,42.91632],[142.38111,42.91631],[142.38133,42.91629],[142.38162,42.91623],[142.38227,42.91605],[142.38322,42.9158],[142.38424,42.91554],[142.38546,42.9152],[142.38576,42.91513],[142.38602,42.91508],[142.38627,42.91505],[142.38653,42.91503],[142.38677,42.91502],[142.38851,42.91512],[142.39016,42.91523],[142.39054,42.91525],[142.39083,42.91525],[142.39109,42.91524],[142.39135,42.91521],[142.39161,42.91515],[142.39191,42.91507],[142.39273,42.91484],[142.39296,42.91479],[142.39316,42.91477],[142.39335,42.91477],[142.39352,42.91479],[142.39369,42.91482],[142.39385,42.91488],[142.39401,42.91495],[142.39419,42.91506],[142.39457,42.91534],[142.39475,42.91546],[142.3949,42.91555],[142.39504,42.91562],[142.3952,42.91569],[142.39542,42.91578],[142.39565,42.91584],[142.39589,42.9159],[142.39612,42.91594],[142.39637,42.91598],[142.39664,42.91599],[142.39693,42.91599],[142.39749,42.91595],[142.39821,42.9159],[142.39911,42.91588],[142.40766,42.91567],[142.40793,42.91565],[142.40833,42.91559],[142.40869,42.91549],[142.40897,42.91537],[142.40922,42.9152],[142.40943,42.91497],[142.40955,42.91472],[142.40961,42.91449],[142.40963,42.91424],[142.40966,42.91371],[142.4097,42.91348],[142.40972,42.91335],[142.40978,42.91321],[142.40984,42.91311],[142.40992,42.91301],[142.41004,42.91291],[142.4102,42.91281],[142.41058,42.91258],[142.41075,42.91247],[142.41087,42.91238],[142.41097,42.91228],[142.41105,42.91215],[142.41109,42.91201],[142.41112,42.91186],[142.41113,42.91174],[142.41114,42.91129],[142.41116,42.91111],[142.41119,42.91093],[142.41125,42.91075],[142.41131,42.91064],[142.41138,42.91051],[142.41147,42.91039],[142.41158,42.91027],[142.41173,42.91016],[142.41222,42.90987],[142.41272,42.90958],[142.41316,42.90934],[142.41368,42.90903],[142.41393,42.90891],[142.41414,42.90884],[142.41437,42.90879],[142.41462,42.90876],[142.41492,42.90875],[142.41515,42.90878],[142.41585,42.90889],[142.41615,42.90892],[142.4164,42.90892],[142.41663,42.9089],[142.41688,42.90884],[142.41708,42.90877],[142.4173,42.90866],[142.41745,42.90855],[142.41761,42.9084],[142.41773,42.90827],[142.41799,42.90786],[142.41811,42.90766],[142.41834,42.90734],[142.41874,42.90666],[142.41889,42.90633],[142.41894,42.90616],[142.41908,42.90528],[142.41915,42.90497],[142.41921,42.90488],[142.41936,42.90469],[142.41959,42.90445],[142.41984,42.90428],[142.42008,42.90416],[142.42036,42.90407],[142.42086,42.90394],[142.42116,42.90386],[142.42139,42.90376],[142.42158,42.90365],[142.42173,42.90349],[142.42184,42.90334],[142.42188,42.9032],[142.42189,42.90305],[142.42188,42.90294],[142.42185,42.9028],[142.42178,42.90266],[142.42166,42.9025],[142.42097,42.90184],[142.42091,42.90169],[142.42091,42.90147],[142.42095,42.90128],[142.42107,42.90085],[142.42107,42.90054],[142.42104,42.90019],[142.42096,42.89992],[142.4208,42.89967],[142.42054,42.89945],[142.41964,42.89872],[142.41902,42.89818],[142.41889,42.89799],[142.41883,42.89788],[142.41879,42.89775],[142.41878,42.89766],[142.41879,42.89758],[142.41881,42.8975],[142.41884,42.89741],[142.4189,42.89732],[142.41896,42.89725],[142.41904,42.89719],[142.41912,42.89714],[142.41922,42.89709],[142.41932,42.89704],[142.41944,42.89701],[142.41956,42.89698],[142.4197,42.89697],[142.41987,42.89698],[142.42028,42.89701],[142.42317,42.89742],[142.42398,42.89752],[142.4243,42.89755],[142.42463,42.89756],[142.42496,42.89755],[142.42526,42.89751],[142.42557,42.89746],[142.4259,42.89739],[142.42716,42.8971],[142.42792,42.89695],[142.42861,42.89679],[142.42904,42.89664],[142.42938,42.89646],[142.42968,42.89625],[142.42979,42.89609],[142.42988,42.89591],[142.43,42.89565],[142.43007,42.89539],[142.43081,42.89234],[142.43125,42.89031],[142.43152,42.88904],[142.43224,42.88566],[142.43243,42.88476],[142.43252,42.88429],[142.43264,42.88401],[142.43275,42.88376],[142.43294,42.88349],[142.43327,42.88312],[142.43358,42.88289],[142.4337,42.88279],[142.43464,42.88202],[142.43484,42.88188],[142.435,42.88176],[142.43519,42.88162],[142.4353,42.88155],[142.43628,42.88078],[142.43636,42.88072],[142.43659,42.88054],[142.43727,42.88001],[142.43757,42.87979],[142.43766,42.87971],[142.43777,42.87963],[142.43807,42.8794],[142.43885,42.87879],[142.43919,42.87854],[142.44001,42.87791],[142.4401,42.87783],[142.44065,42.87742],[142.44073,42.87736],[142.44081,42.8773],[142.44137,42.87685],[142.44148,42.87677],[142.44225,42.87618],[142.44242,42.87602],[142.44262,42.87614],[142.44289,42.87629],[142.44297,42.87633],[142.44342,42.87659],[142.44389,42.87682],[142.44485,42.87737],[142.44511,42.87752],[142.44561,42.8778],[142.44604,42.87804],[142.44612,42.87809],[142.44701,42.8786],[142.44721,42.87872],[142.44759,42.87894],[142.44766,42.87898],[142.44771,42.879],[142.44815,42.87926],[142.44831,42.87935],[142.44896,42.87971],[142.45041,42.88053],[142.45137,42.88112],[142.45193,42.88143],[142.45223,42.88159],[142.45316,42.88213],[142.45671,42.88417],[142.46206,42.88723],[142.46433,42.88852],[142.46741,42.8903],[142.46958,42.89153],[142.472,42.89294],[142.47284,42.89336],[142.47471,42.89391],[142.47608,42.89431],[142.48008,42.89544],[142.48052,42.89555],[142.48075,42.89559],[142.48105,42.8956],[142.48134,42.8956],[142.48288,42.89561],[142.48392,42.89559],[142.4844,42.89558],[142.48471,42.89555],[142.48509,42.89551],[142.4855,42.89544],[142.48661,42.89525],[142.48739,42.89516],[142.48794,42.89516],[142.48936,42.89517],[142.49636,42.89525],[142.49683,42.89528],[142.49736,42.89539],[142.49787,42.89556],[142.49842,42.89571],[142.4989,42.89578]]},"properties":{"name":"国道274号","kind":"route","km_from":35.527,"km_to":108.736}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[142.49683,42.89528],[142.49736,42.89539],[142.49787,42.89556],[142.49842,42.89571],[142.4989,42.89578],[142.49962,42.89581],[142.50016,42.89571],[142.50142,42.89545],[142.5041,42.89489],[142.5064,42.89434],[142.50743,42.8942],[142.5082,42.89412],[142.51541,42.89351],[142.51768,42.89332],[142.51963,42.89317],[142.51995,42.89315],[142.52107,42.89305],[142.52306,42.89288],[142.5266,42.89258],[142.52694,42.89255],[142.53014,42.89229],[142.53031,42.89227],[142.53062,42.89224],[142.53064,42.89224],[142.53233,42.89212],[142.53269,42.89209],[142.53353,42.89201],[142.53444,42.89194],[142.53619,42.89181],[142.53653,42.89182],[142.5368,42.89177],[142.53794,42.89168],[142.53924,42.89155],[142.53954,42.89153],[142.53981,42.89153],[142.54013,42.89155],[142.54045,42.89159],[142.54083,42.89167],[142.54243,42.89204],[142.5466,42.89295],[142.54994,42.89375],[142.55082,42.89392],[142.55194,42.89417],[142.55262,42.89435],[142.55295,42.89444],[142.55338,42.89459],[142.55384,42.89478],[142.55467,42.8952],[142.55508,42.8954],[142.55566,42.89569],[142.55874,42.89718],[142.55911,42.89736],[142.55933,42.89747],[142.56073,42.89814]]},"properties":{"name":"国道274号","kind":"route-east","km_from":108.557,"km_to":113.987}},{"type":"Feature","geometry":null,"properties":{"kind":"district","oaza":"川端","kana":"かわばた","city":"夕張郡由仁町","km_from":36.5,"km_to":38.25}},{"type":"Feature","geometry":null,"properties":{"kind":"district","oaza":"字滝下","kana":"たきした","city":"夕張郡栗山町","km_from":38.5,"km_to":42.0}},{"type":"Feature","geometry":null,"properties":{"kind":"district","oaza":"川端","kana":"かわばた","city":"夕張郡由仁町","km_from":42.25,"km_to":43.0}},{"type":"Feature","geometry":null,"properties":{"kind":"district","oaza":"字滝下","kana":"たきした","city":"夕張郡栗山町","km_from":43.25,"km_to":44.0}},{"type":"Feature","geometry":null,"properties":{"kind":"district","oaza":"滝ノ上","kana":"たきのうえ","city":"夕張市","km_from":44.25,"km_to":48.25}},{"type":"Feature","geometry":null,"properties":{"kind":"district","oaza":"紅葉山","kana":"もみじやま","city":"夕張市","km_from":48.5,"km_to":55.5}},{"type":"Feature","geometry":null,"properties":{"kind":"district","oaza":"楓","kana":"かえで","city":"夕張市","km_from":55.75,"km_to":57.75}},{"type":"Feature","geometry":null,"properties":{"kind":"district","oaza":"登川","kana":"のぼりかわ","city":"夕張市","km_from":58.0,"km_to":61.0}},{"type":"Feature","geometry":null,"properties":{"kind":"district","oaza":"穂別長和","kana":"ほべつおさわ","city":"勇払郡むかわ町","km_from":61.25,"km_to":62.75}},{"type":"Feature","geometry":null,"properties":{"kind":"district","oaza":"穂別稲里","kana":"ほべついなさと","city":"勇払郡むかわ町","km_from":63.0,"km_to":72.0}},{"type":"Feature","geometry":null,"properties":{"kind":"district","oaza":"穂別長和","kana":"ほべつおさわ","city":"勇払郡むかわ町","km_from":72.25,"km_to":76.0}},{"type":"Feature","geometry":null,"properties":{"kind":"district","oaza":"穂別福山","kana":"ほべつふくやま","city":"勇払郡むかわ町","km_from":76.25,"km_to":88.75}},{"type":"Feature","geometry":null,"properties":{"kind":"district","oaza":"字中央","kana":"ちゅうおう","city":"勇払郡占冠村","km_from":89.0,"km_to":96.75}},{"type":"Feature","geometry":null,"properties":{"kind":"district","oaza":"字日高","kana":"ひだか(1く)","city":"沙流郡日高町","km_from":97.0,"km_to":101.75}},{"type":"Feature","geometry":null,"properties":{"kind":"district","oaza":"新町三丁目","kana":"しんまち","city":"沙流郡日高町","km_from":102.0,"km_to":102.5}},{"type":"Feature","geometry":null,"properties":{"kind":"district","oaza":"新町一丁目","kana":"しんまち","city":"沙流郡日高町","km_from":102.75,"km_to":102.75}},{"type":"Feature","geometry":null,"properties":{"kind":"district","oaza":"栄町東一丁目","kana":"さかえまちひがし","city":"沙流郡日高町","km_from":103.0,"km_to":103.0}},{"type":"Feature","geometry":null,"properties":{"kind":"district","oaza":"本町東一丁目","kana":"ほんちょうひがし","city":"沙流郡日高町","km_from":103.25,"km_to":103.5}},{"type":"Feature","geometry":null,"properties":{"kind":"district","oaza":"本町東二丁目","kana":"ほんちょうひがし","city":"沙流郡日高町","km_from":103.75,"km_to":103.75}},{"type":"Feature","geometry":null,"properties":{"kind":"district","oaza":"松風町一丁目","kana":"まつかぜちょう","city":"沙流郡日高町","km_from":104.0,"km_to":104.0}},{"type":"Feature","geometry":null,"properties":{"kind":"district","oaza":"山手町一丁目","kana":"やまてちょう","city":"沙流郡日高町","km_from":104.25,"km_to":104.25}},{"type":"Feature","geometry":null,"properties":{"kind":"district","oaza":"字日高","kana":"ひだか(1く)","city":"沙流郡日高町","km_from":104.5,"km_to":107.0}},{"type":"Feature","geometry":null,"properties":{"kind":"district","oaza":"字千栄","kana":"ちさか","city":"沙流郡日高町","km_from":107.25,"km_to":107.75}},{"type":"Feature","geometry":{"type":"Point","coordinates":[141.89568,42.91538]},"properties":{"name":"川端","object":"川端","kana":"かわばた","romaji":"Kawabata","kind":"place (neighbourhood)","km":37.27,"offset_m":32.0,"length_m":"","built":"","grade":"","oaza":"川端","address":"夕張郡由仁町川端","address_kana":"ゆうばりぐんゆにちょうかわばた"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[141.90896,42.91715]},"properties":{"name":"川端","object":"川端橋","kana":"かわばたはし","romaji":"Kawabata hashi","kind":"bridge","km":38.41,"offset_m":0.0,"length_m":"255","built":"1991","grade":"Ⅰ","oaza":"川端","address":"夕張郡由仁町川端","address_kana":"ゆうばりぐんゆにちょうかわばた"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[141.91642,42.91197]},"properties":{"name":"川端","object":"北海道企業局 川端発電所","kana":"","romaji":"","kind":"power station","km":39.8,"offset_m":451.0,"length_m":"","built":"","grade":"","oaza":"滝下","address":"夕張郡栗山町滝下","address_kana":"ゆうばりぐんくりやまちょうたきした"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[141.9159,42.9114]},"properties":{"name":"川端","object":"川端ダム","kana":"","romaji":"","kind":"dam","km":39.8,"offset_m":523.0,"length_m":"","built":"","grade":"","oaza":"滝下","address":"夕張郡栗山町滝下","address_kana":"ゆうばりぐんくりやまちょうたきした"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[141.92472,42.91183]},"properties":{"name":"滝下","object":"滝下八幡神社","kana":"たきしたはちまんじんじゃ","romaji":"Takishitahachiman jinja","kind":"Shinto shrine","km":40.16,"offset_m":98.0,"length_m":"","built":"","grade":"","oaza":"滝下","address":"夕張郡栗山町滝下","address_kana":"ゆうばりぐんくりやまちょうたきした"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[141.9232,42.9063]},"properties":{"name":"滝ノ下","object":"滝ノ下信号場","kana":"たきのした","romaji":"Takinoshita","kind":"place (locality)","km":40.57,"offset_m":400.0,"length_m":"","built":"","grade":"","oaza":"滝下","address":"夕張郡栗山町滝下","address_kana":"ゆうばりぐんくりやまちょうたきした"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[141.93874,42.8931]},"properties":{"name":"クオーベツ","object":"クオーベツダム","kana":"くおーぺつ","romaji":"Kuoopetsu","kind":"dam","km":41.02,"offset_m":1798.0,"length_m":"","built":"","grade":"","oaza":"川端","address":"夕張郡由仁町川端","address_kana":"ゆうばりぐんゆにちょうかわばた"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[141.93273,42.90857]},"properties":{"name":"滝下川端","object":"滝下川端連絡線","kana":"","romaji":"","kind":"power line","km":41.02,"offset_m":75.0,"length_m":"","built":"","grade":"","oaza":"滝下","address":"夕張郡栗山町滝下","address_kana":"ゆうばりぐんくりやまちょうたきした"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[141.93222,42.90889]},"properties":{"name":"砂金","object":"砂金川","kana":"","romaji":"","kind":"watercourse","km":41.02,"offset_m":58.0,"length_m":"","built":"","grade":"","oaza":"滝下","address":"夕張郡栗山町滝下","address_kana":"ゆうばりぐんくりやまちょうたきした"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[141.94197,42.91003]},"properties":{"name":"雨霧橋","object":"雨霧橋","kana":"あまぎりはし","romaji":"Amagiri hashi","kind":"bridge","km":41.86,"offset_m":0.0,"length_m":"280.7","built":"1974","grade":"Ⅱ","oaza":"滝下","address":"夕張郡栗山町滝下","address_kana":"ゆうばりぐんくりやまちょうたきした"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[141.9522,42.91604]},"properties":{"name":"竜仙橋","object":"竜仙橋","kana":"りゅうせんばし","romaji":"Ryuusen bashi","kind":"bridge","km":43.03,"offset_m":0.0,"length_m":"178","built":"1972","grade":"Ⅱ","oaza":"川端","address":"夕張郡由仁町川端","address_kana":"ゆうばりぐんゆにちょうかわばた"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[141.95218,42.91801]},"properties":{"name":"滝下","object":"北海道企業局 滝下発電所","kana":"たきのしたはつでんしょ","romaji":"Takinoshita hatsudensho","kind":"power station","km":43.07,"offset_m":210.0,"length_m":"","built":"","grade":"","oaza":"滝下","address":"夕張郡栗山町滝下","address_kana":"ゆうばりぐんくりやまちょうたきした"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[141.95583,42.93155]},"properties":{"name":"滝下","object":"滝下","kana":"たきした","romaji":"Takishita","kind":"place (neighbourhood)","km":43.3,"offset_m":1636.0,"length_m":"","built":"","grade":"","oaza":"滝下","address":"夕張郡栗山町滝下","address_kana":"ゆうばりぐんくりやまちょうたきした"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[141.96022,42.91577]},"properties":{"name":"草木","object":"草木川","kana":"そうもく","romaji":"Soumoku","kind":"watercourse","km":43.64,"offset_m":84.0,"length_m":"","built":"","grade":"","oaza":"滝下","address":"夕張郡栗山町滝下","address_kana":"ゆうばりぐんくりやまちょうたきした"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[141.96321,42.91449]},"properties":{"name":"草木","object":"草木橋","kana":"そうもくはし","romaji":"Soumoku hashi","kind":"bridge","km":44.0,"offset_m":0.0,"length_m":"24.1","built":"1979","grade":"Ⅲ","oaza":"滝下","address":"夕張郡栗山町滝下","address_kana":"ゆうばりぐんくりやまちょうたきした"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[141.96321,42.91449]},"properties":{"name":"滝の上","object":"滝の上こ線橋","kana":"たきのうえこせんきょう","romaji":"Takinoue kosenkyou","kind":"bridge","km":44.0,"offset_m":0.0,"length_m":"47.6","built":"1975","grade":"Ⅲ","oaza":"滝下","address":"夕張郡栗山町滝下","address_kana":"ゆうばりぐんくりやまちょうたきした"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[141.96339,42.91436]},"properties":{"name":"草木舞","object":"草木舞沢川","kana":"そうもくまいさわ","romaji":"Soumokumaisawa","kind":"watercourse","km":44.0,"offset_m":21.0,"length_m":"","built":"","grade":"","oaza":"滝下","address":"夕張郡栗山町滝下","address_kana":"ゆうばりぐんくりやまちょうたきした"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[141.97021,42.91152]},"properties":{"name":"滝の上","object":"北海道企業局 滝の上発電所","kana":"","romaji":"","kind":"power station","km":44.62,"offset_m":142.0,"length_m":"","built":"","grade":"","oaza":"滝ノ上","address":"夕張市滝ノ上","address_kana":"ゆうばりしたきのうえ"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[141.97,42.91225]},"properties":{"name":"滝の上","object":"滝の上公園","kana":"","romaji":"","kind":"park","km":44.62,"offset_m":69.0,"length_m":"","built":"","grade":"","oaza":"滝ノ上","address":"夕張市滝ノ上","address_kana":"ゆうばりしたきのうえ"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[141.97704,42.91059]},"properties":{"name":"カミ","object":"カミの沢川","kana":"","romaji":"","kind":"watercourse","km":45.21,"offset_m":40.0,"length_m":"","built":"","grade":"","oaza":"滝ノ上","address":"夕張市滝ノ上","address_kana":"ゆうばりしたきのうえ"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[141.97642,42.91]},"properties":{"name":"滝の上","object":"滝ノ上信号場","kana":"たきのうえしんごうじょう","romaji":"Takinoue shingoujou","kind":"railway signal post","km":45.21,"offset_m":43.0,"length_m":"","built":"","grade":"","oaza":"滝ノ上","address":"夕張市滝ノ上","address_kana":"ゆうばりしたきのうえ"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[141.97873,42.90979]},"properties":{"name":"滝の上","object":"滝ノ上神社","kana":"たきのうえじんじゃ","romaji":"Takinoue jinja","kind":"Shinto shrine","km":45.29,"offset_m":100.0,"length_m":"","built":"","grade":"","oaza":"滝ノ上","address":"夕張市滝ノ上","address_kana":"ゆうばりしたきのうえ"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.0047,42.90347]},"properties":{"name":"滝の上","object":"滝ノ上","kana":"たきのうえ","romaji":"Takinoue","kind":"place (neighbourhood)","km":47.66,"offset_m":52.0,"length_m":"","built":"","grade":"","oaza":"滝ノ上","address":"夕張市滝ノ上","address_kana":"ゆうばりしたきのうえ"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.01006,42.90575]},"properties":{"name":"チョポツナイ","object":"チョポツナイ川","kana":"ちょぽつない","romaji":"Chopotsunai","kind":"watercourse","km":48.18,"offset_m":63.0,"length_m":"","built":"","grade":"","oaza":"滝ノ上","address":"夕張市滝ノ上","address_kana":"ゆうばりしたきのうえ"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.02439,42.91482]},"properties":{"name":"十三里","object":"十三里信号場","kana":"とみさとしんごうじょう","romaji":"Tomisato shingoujou","kind":"place (locality)","km":49.71,"offset_m":39.0,"length_m":"","built":"","grade":"","oaza":"紅葉山","address":"夕張市紅葉山","address_kana":"ゆうばりしもみじやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.03132,42.91674]},"properties":{"name":"カライケ","object":"カライケの沢川","kana":"からいけ","romaji":"Karaike","kind":"watercourse","km":50.28,"offset_m":132.0,"length_m":"","built":"","grade":"","oaza":"紅葉山","address":"夕張市紅葉山","address_kana":"ゆうばりしもみじやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.03043,42.91772]},"properties":{"name":"十三里","object":"十三里橋","kana":"とみさとはし","romaji":"Tomisato hashi","kind":"bridge","km":50.28,"offset_m":0.0,"length_m":"122","built":"1997","grade":"Ⅰ","oaza":"紅葉山","address":"夕張市紅葉山","address_kana":"ゆうばりしもみじやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.03331,42.9184]},"properties":{"name":"紅葉山","object":"紅葉山駐車帯","kana":"もみじやまちゅうしゃたい","romaji":"Momijiyama chuushatai","kind":"parking","km":50.52,"offset_m":41.0,"length_m":"","built":"","grade":"","oaza":"紅葉山","address":"夕張市紅葉山","address_kana":"ゆうばりしもみじやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.03548,42.93244]},"properties":{"name":"瑞穂","object":"瑞穂橋","kana":"みずほはし","romaji":"Mizuho hashi","kind":"bridge","km":52.11,"offset_m":0.0,"length_m":"155","built":"1968","grade":"","oaza":"紅葉山","address":"夕張市紅葉山","address_kana":"ゆうばりしもみじやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.03538,42.93257]},"properties":{"name":"夕張","object":"夕張川","kana":"","romaji":"","kind":"watercourse","km":52.11,"offset_m":16.0,"length_m":"","built":"","grade":"","oaza":"紅葉山","address":"夕張市紅葉山","address_kana":"ゆうばりしもみじやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.03683,42.93507]},"properties":{"name":"セブン-イレブン","object":"セブンイレブン夕張紅葉山店","kana":"せぶんいれぶんゆうばりもみじやまてん","romaji":"Sebun'irebun'yuubarimomijiyama ten","kind":"convenience store","km":52.47,"offset_m":73.0,"length_m":"","built":"","grade":"","oaza":"紅葉山","address":"夕張市紅葉山","address_kana":"ゆうばりしもみじやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.03648,42.9367]},"properties":{"name":"新夕張","object":"新夕張駅","kana":"しんゆうばり","romaji":"Shin'yuubari","kind":"railway station","km":52.54,"offset_m":173.0,"length_m":"","built":"","grade":"","oaza":"紅葉山","address":"夕張市紅葉山","address_kana":"ゆうばりしもみじやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.03925,42.93642]},"properties":{"name":"紅葉山","object":"紅葉山郵便局","kana":"もみじやまゆうびんきょく","romaji":"Momijiyama yuubinkyoku","kind":"post office","km":52.61,"offset_m":54.0,"length_m":"","built":"","grade":"","oaza":"紅葉山","address":"夕張市紅葉山","address_kana":"ゆうばりしもみじやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.03956,42.93788]},"properties":{"name":"紅葉山","object":"紅葉山神社","kana":"もみじやまじんじゃ","romaji":"Momijiyama jinja","kind":"Shinto shrine","km":52.85,"offset_m":67.0,"length_m":"","built":"","grade":"","oaza":"紅葉山","address":"夕張市紅葉山","address_kana":"ゆうばりしもみじやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.04167,42.9391]},"properties":{"name":"セイコーマート","object":"セイコーマートもみじやま店","kana":"せいこーまーともみじやまてん","romaji":"Seikoomaatomomijiyama ten","kind":"convenience store","km":52.99,"offset_m":31.0,"length_m":"","built":"","grade":"","oaza":"紅葉山","address":"夕張市紅葉山","address_kana":"ゆうばりしもみじやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.04317,42.93855]},"properties":{"name":"紅楓","object":"紅楓橋","kana":"こうふうばし","romaji":"Koufuu bashi","kind":"bridge","km":53.13,"offset_m":0.0,"length_m":"102.5","built":"1958","grade":"Ⅱ","oaza":"紅葉山","address":"夕張市紅葉山","address_kana":"ゆうばりしもみじやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.04976,42.93697]},"properties":{"name":"久留喜","object":"ポン久留喜橋","kana":"ぽんくるきはし","romaji":"Ponkuruki hashi","kind":"bridge","km":53.69,"offset_m":0.0,"length_m":"12.7","built":"1984","grade":"Ⅰ","oaza":"紅葉山","address":"夕張市紅葉山","address_kana":"ゆうばりしもみじやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.04995,42.93695]},"properties":{"name":"久留喜","object":"ポンクルキ川","kana":"","romaji":"","kind":"watercourse","km":53.69,"offset_m":16.0,"length_m":"","built":"","grade":"","oaza":"紅葉山","address":"夕張市紅葉山","address_kana":"ゆうばりしもみじやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.04976,42.93697]},"properties":{"name":"久留喜","object":"久留喜橋","kana":"くるきはし","romaji":"Kuruki hashi","kind":"bridge","km":53.69,"offset_m":0.0,"length_m":"34","built":"1962","grade":"","oaza":"紅葉山","address":"夕張市紅葉山","address_kana":"ゆうばりしもみじやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.06277,42.92706]},"properties":{"name":"シイタルキ","object":"シイタルキ川","kana":"","romaji":"","kind":"watercourse","km":55.14,"offset_m":143.0,"length_m":"","built":"","grade":"","oaza":"紅葉山","address":"夕張市紅葉山","address_kana":"ゆうばりしもみじやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.06562,42.92957]},"properties":{"name":"楓","object":"楓橋","kana":"かえでばし","romaji":"Kaede bashi","kind":"bridge","km":55.41,"offset_m":0.0,"length_m":"32","built":"1968","grade":"Ⅲ","oaza":"紅葉山","address":"夕張市紅葉山","address_kana":"ゆうばりしもみじやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.06775,42.93026]},"properties":{"name":"桂","object":"桂橋","kana":"かつらはし","romaji":"Katsura hashi","kind":"bridge","km":55.6,"offset_m":0.0,"length_m":"48.3","built":"1987","grade":"Ⅰ","oaza":"紅葉山","address":"夕張市紅葉山","address_kana":"ゆうばりしもみじやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.0786,42.93414]},"properties":{"name":"千紫","object":"千紫橋","kana":"せんしばし","romaji":"Senshi bashi","kind":"bridge","km":56.6,"offset_m":0.0,"length_m":"31.4","built":"1988","grade":"Ⅰ","oaza":"楓","address":"夕張市楓","address_kana":"ゆうばりしかえで"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.08407,42.94002]},"properties":{"name":"楓","object":"楓","kana":"かえで","romaji":"Kaede","kind":"place (neighbourhood)","km":56.88,"offset_m":711.0,"length_m":"","built":"","grade":"","oaza":"楓","address":"夕張市楓","address_kana":"ゆうばりしかえで"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.08412,42.93352]},"properties":{"name":"楓","object":"楓駐車帯","kana":"かえでちゅうしゃたい","romaji":"Kaede chuushatai","kind":"parking","km":57.08,"offset_m":39.0,"length_m":"","built":"","grade":"","oaza":"楓","address":"夕張市楓","address_kana":"ゆうばりしかえで"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.08627,42.93274]},"properties":{"name":"万紅","object":"万紅橋","kana":"ばんこうばし","romaji":"Bankou bashi","kind":"bridge","km":57.25,"offset_m":0.0,"length_m":"27.6","built":"1988","grade":"Ⅰ","oaza":"楓","address":"夕張市楓","address_kana":"ゆうばりしかえで"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.08819,42.93395]},"properties":{"name":"登川","object":"登川神社","kana":"のぼりかわじんじゃ","romaji":"Noborikawa jinja","kind":"Shinto shrine","km":57.44,"offset_m":164.0,"length_m":"","built":"","grade":"","oaza":"楓","address":"夕張市楓","address_kana":"ゆうばりしかえで"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.0923,42.93157]},"properties":{"name":"楓","object":"楓信号場","kana":"かえでしんごうじょう","romaji":"Kaede shingoujou","kind":"railway signal post","km":57.76,"offset_m":47.0,"length_m":"","built":"","grade":"","oaza":"楓","address":"夕張市楓","address_kana":"ゆうばりしかえで"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.09327,42.93167]},"properties":{"name":"登川","object":"登川橋","kana":"のぼりかわばし","romaji":"Noborikawa bashi","kind":"bridge","km":57.84,"offset_m":0.0,"length_m":"21","built":"1988","grade":"Ⅰ","oaza":"楓","address":"夕張市楓","address_kana":"ゆうばりしかえで"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.09335,42.93185]},"properties":{"name":"登川","object":"登川郵便局","kana":"のぼりかわゆうびんきょく","romaji":"Noborikawa yuubinkyoku","kind":"post office","km":57.84,"offset_m":21.0,"length_m":"","built":"","grade":"","oaza":"楓","address":"夕張市楓","address_kana":"ゆうばりしかえで"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.09647,42.92922]},"properties":{"name":"花園","object":"花園橋","kana":"はなぞのばし","romaji":"Hanazono bashi","kind":"bridge","km":58.23,"offset_m":0.0,"length_m":"58.6","built":"1971","grade":"Ⅱ","oaza":"登川","address":"夕張市登川","address_kana":"ゆうばりしのぼりかわ"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.09685,42.9292]},"properties":{"name":"ホルカクルキ","object":"ホルカクルキ川","kana":"","romaji":"","kind":"watercourse","km":58.26,"offset_m":9.0,"length_m":"","built":"","grade":"","oaza":"登川","address":"夕張市登川","address_kana":"ゆうばりしのぼりかわ"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.10029,42.92962]},"properties":{"name":"滝沢川","object":"滝沢川","kana":"","romaji":"","kind":"watercourse","km":58.56,"offset_m":52.0,"length_m":"","built":"","grade":"","oaza":"登川","address":"夕張市登川","address_kana":"ゆうばりしのぼりかわ"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.11198,42.93047]},"properties":{"name":"松竹沢","object":"松竹沢川","kana":"","romaji":"","kind":"watercourse","km":59.54,"offset_m":58.0,"length_m":"","built":"","grade":"","oaza":"登川","address":"夕張市登川","address_kana":"ゆうばりしのぼりかわ"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.12137,42.93831]},"properties":{"name":"登川","object":"登川","kana":"のぼりかわ","romaji":"Noborikawa","kind":"place (neighbourhood)","km":59.66,"offset_m":1208.0,"length_m":"","built":"","grade":"","oaza":"登川","address":"夕張市登川","address_kana":"ゆうばりしのぼりかわ"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.11599,42.92478]},"properties":{"name":"登川","object":"登川トンネル","kana":"のぼりかわとんねる","romaji":"Noborikawa tonneru","kind":"tunnel","km":60.29,"offset_m":0.0,"length_m":"348","built":"1978","grade":"","oaza":"登川","address":"夕張市登川","address_kana":"ゆうばりしのぼりかわ"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.12482,42.90892]},"properties":{"name":"オマナイ","object":"オマナイ橋","kana":"おまないはし","romaji":"Omanai hashi","kind":"bridge","km":62.36,"offset_m":0.0,"length_m":"174.2","built":"1988","grade":"Ⅲ","oaza":"穂別長和","address":"勇払郡むかわ町穂別長和","address_kana":"ゆうふつぐんむかわちょうほべつおさわ"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.12726,42.90434]},"properties":{"name":"桂木","object":"桂木橋","kana":"かつらぎはし","romaji":"Katsuragi hashi","kind":"bridge","km":62.94,"offset_m":0.0,"length_m":"129.6","built":"1986","grade":"Ⅲ","oaza":"穂別長和","address":"勇払郡むかわ町穂別長和","address_kana":"ゆうふつぐんむかわちょうほべつおさわ"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.12305,42.89157]},"properties":{"name":"大和","object":"大和橋","kana":"やまとはし","romaji":"Yamato hashi","kind":"bridge","km":64.44,"offset_m":0.0,"length_m":"16","built":"1967","grade":"Ⅲ","oaza":"穂別稲里","address":"勇払郡むかわ町穂別稲里","address_kana":"ゆうふつぐんむかわちょうほべついなさと"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.13048,42.87371]},"properties":{"name":"豊進","object":"豊進橋","kana":"ほうしんばし","romaji":"Houshin bashi","kind":"bridge","km":66.69,"offset_m":0.0,"length_m":"16","built":"1967","grade":"Ⅲ","oaza":"穂別稲里","address":"勇払郡むかわ町穂別稲里","address_kana":"ゆうふつぐんむかわちょうほべついなさと"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.13135,42.87318]},"properties":{"name":"豊進","object":"豊進神社","kana":"ほうしんじんじゃ","romaji":"Houshin jinja","kind":"Shinto shrine","km":66.78,"offset_m":49.0,"length_m":"","built":"","grade":"","oaza":"穂別稲里","address":"勇払郡むかわ町穂別稲里","address_kana":"ゆうふつぐんむかわちょうほべついなさと"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.13061,42.87222]},"properties":{"name":"穂別","object":"穂別キャンプ場","kana":"","romaji":"","kind":"campsite","km":66.83,"offset_m":66.0,"length_m":"","built":"","grade":"","oaza":"穂別稲里","address":"勇払郡むかわ町穂別稲里","address_kana":"ゆうふつぐんむかわちょうほべついなさと"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.13037,42.87125]},"properties":{"name":"石山","object":"石山の沢川","kana":"","romaji":"","kind":"watercourse","km":66.86,"offset_m":161.0,"length_m":"","built":"","grade":"","oaza":"穂別稲里","address":"勇払郡むかわ町穂別稲里","address_kana":"ゆうふつぐんむかわちょうほべついなさと"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.13398,42.86806]},"properties":{"name":"狩勝","object":"狩勝幹線","kana":"","romaji":"","kind":"power line","km":67.05,"offset_m":414.0,"length_m":"","built":"","grade":"","oaza":"穂別稲里","address":"勇払郡むかわ町穂別稲里","address_kana":"ゆうふつぐんむかわちょうほべついなさと"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.13854,42.87311]},"properties":{"name":"豊里","object":"豊里橋","kana":"とよさとはし","romaji":"Toyosato hashi","kind":"bridge","km":67.48,"offset_m":0.0,"length_m":"27","built":"1966","grade":"Ⅰ","oaza":"穂別稲里","address":"勇払郡むかわ町穂別稲里","address_kana":"ゆうふつぐんむかわちょうほべついなさと"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.14,42.87313]},"properties":{"name":"稲豊","object":"稲豊橋","kana":"いなとよはし","romaji":"Inatoyo hashi","kind":"bridge","km":67.6,"offset_m":0.0,"length_m":"27","built":"1966","grade":"Ⅰ","oaza":"穂別稲里","address":"勇払郡むかわ町穂別稲里","address_kana":"ゆうふつぐんむかわちょうほべついなさと"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.14032,42.87304]},"properties":{"name":"サヌシュッペ","object":"サヌシュッペ川","kana":"","romaji":"","kind":"watercourse","km":67.62,"offset_m":5.0,"length_m":"","built":"","grade":"","oaza":"穂別稲里","address":"勇払郡むかわ町穂別稲里","address_kana":"ゆうふつぐんむかわちょうほべついなさと"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.15164,42.87144]},"properties":{"name":"稲里","object":"稲里橋","kana":"いなさとはし","romaji":"Inasato hashi","kind":"bridge","km":68.63,"offset_m":0.0,"length_m":"31","built":"1988","grade":"Ⅱ","oaza":"穂別稲里","address":"勇払郡むかわ町穂別稲里","address_kana":"ゆうふつぐんむかわちょうほべついなさと"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.15774,42.86734]},"properties":{"name":"稲里","object":"稲里簡易郵便局","kana":"いなさとかんいゆうびんきょく","romaji":"Inasatokan'i yuubinkyoku","kind":"post office","km":69.29,"offset_m":161.0,"length_m":"","built":"","grade":"","oaza":"穂別稲里","address":"勇払郡むかわ町穂別稲里","address_kana":"ゆうふつぐんむかわちょうほべついなさと"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.16085,42.86894]},"properties":{"name":"佐主","object":"佐主橋","kana":"さぬしばし","romaji":"Sanushi bashi","kind":"bridge","km":69.48,"offset_m":0.0,"length_m":"85","built":"1973","grade":"Ⅲ","oaza":"穂別稲里","address":"勇払郡むかわ町穂別稲里","address_kana":"ゆうふつぐんむかわちょうほべついなさと"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.16642,42.87408]},"properties":{"name":"穂別","object":"穂別川","kana":"","romaji":"","kind":"watercourse","km":70.22,"offset_m":32.0,"length_m":"","built":"","grade":"","oaza":"穂別稲里","address":"勇払郡むかわ町穂別稲里","address_kana":"ゆうふつぐんむかわちょうほべついなさと"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.17737,42.88475]},"properties":{"name":"穂別","object":"穂別ダム神社","kana":"ほべつだむじんじゃ","romaji":"Hobetsudamu jinja","kind":"Shinto shrine","km":71.86,"offset_m":18.0,"length_m":"","built":"","grade":"","oaza":"穂別稲里","address":"勇払郡むかわ町穂別稲里","address_kana":"ゆうふつぐんむかわちょうほべついなさと"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.17937,42.88502]},"properties":{"name":"穂別","object":"穂別ダム","kana":"","romaji":"","kind":"dam","km":71.9,"offset_m":166.0,"length_m":"","built":"","grade":"","oaza":"穂別稲里","address":"勇払郡むかわ町穂別稲里","address_kana":"ゆうふつぐんむかわちょうほべついなさと"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.17748,42.88619]},"properties":{"name":"長和","object":"長和トンネル","kana":"おさわとんねる","romaji":"Osawa tonneru","kind":"tunnel","km":72.02,"offset_m":0.0,"length_m":"281","built":"1983","grade":"","oaza":"穂別長和","address":"勇払郡むかわ町穂別長和","address_kana":"ゆうふつぐんむかわちょうほべつおさわ"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.17918,42.8882]},"properties":{"name":"穂別","object":"穂別大橋","kana":"ほべつおおはし","romaji":"Hobetsu oohashi","kind":"bridge","km":72.29,"offset_m":0.0,"length_m":"506.2","built":"1979","grade":"Ⅲ","oaza":"穂別長和","address":"勇払郡むかわ町穂別長和","address_kana":"ゆうふつぐんむかわちょうほべつおさわ"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.18476,42.89187]},"properties":{"name":"山水","object":"山水橋","kana":"さんすいばし","romaji":"Sansui bashi","kind":"bridge","km":72.9,"offset_m":0.0,"length_m":"53.5","built":"1979","grade":"Ⅰ","oaza":"穂別長和","address":"勇払郡むかわ町穂別長和","address_kana":"ゆうふつぐんむかわちょうほべつおさわ"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.18498,42.89195]},"properties":{"name":"高西","object":"高西の沢川","kana":"","romaji":"","kind":"watercourse","km":72.93,"offset_m":9.0,"length_m":"","built":"","grade":"","oaza":"穂別長和","address":"勇払郡むかわ町穂別長和","address_kana":"ゆうふつぐんむかわちょうほべつおさわ"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.20015,42.8883]},"properties":{"name":"沼の沢","object":"沼の沢橋","kana":"ぬまのさわはし","romaji":"Numanosawa hashi","kind":"bridge","km":74.31,"offset_m":0.0,"length_m":"188","built":"1983","grade":"Ⅲ","oaza":"穂別長和","address":"勇払郡むかわ町穂別長和","address_kana":"ゆうふつぐんむかわちょうほべつおさわ"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.20951,42.88343]},"properties":{"name":"稲里","object":"稲里トンネル","kana":"いなさととんねる","romaji":"Inasato tonneru","kind":"tunnel","km":75.28,"offset_m":0.0,"length_m":"1441","built":"1985","grade":"Ⅲ","oaza":"穂別長和","address":"勇払郡むかわ町穂別長和","address_kana":"ゆうふつぐんむかわちょうほべつおさわ"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.22782,42.87802]},"properties":{"name":"ペンケ橋","object":"ペンケ橋","kana":"ぺんけばし","romaji":"Penke bashi","kind":"bridge","km":76.97,"offset_m":0.0,"length_m":"120.7","built":"1985","grade":"Ⅲ","oaza":"穂別福山","address":"勇払郡むかわ町穂別福山","address_kana":"ゆうふつぐんむかわちょうほべつふくやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.22885,42.87849]},"properties":{"name":"オロロップ","object":"オロロップ沢川","kana":"","romaji":"","kind":"watercourse","km":77.05,"offset_m":15.0,"length_m":"","built":"","grade":"","oaza":"穂別福山","address":"勇払郡むかわ町穂別福山","address_kana":"ゆうふつぐんむかわちょうほべつふくやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.23487,42.88572]},"properties":{"name":"下福山","object":"下福山橋","kana":"しもふくやまはし","romaji":"Shimofukuyama hashi","kind":"bridge","km":78.03,"offset_m":0.0,"length_m":"129.9","built":"1982","grade":"Ⅰ","oaza":"穂別福山","address":"勇払郡むかわ町穂別福山","address_kana":"ゆうふつぐんむかわちょうほべつふくやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.23759,42.88721]},"properties":{"name":"オロロップ","object":"オロロップ橋","kana":"おろろっぷはし","romaji":"Ororoppu hashi","kind":"bridge","km":78.31,"offset_m":0.0,"length_m":"205.9","built":"1983","grade":"Ⅱ","oaza":"穂別福山","address":"勇払郡むかわ町穂別福山","address_kana":"ゆうふつぐんむかわちょうほべつふくやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.2439,42.89249]},"properties":{"name":"福山","object":"福山橋","kana":"ふくやまはし","romaji":"Fukuyama hashi","kind":"bridge","km":79.11,"offset_m":0.0,"length_m":"134.7","built":"1984","grade":"Ⅲ","oaza":"穂別福山","address":"勇払郡むかわ町穂別福山","address_kana":"ゆうふつぐんむかわちょうほべつふくやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.25175,42.89114]},"properties":{"name":"福山","object":"福山神社","kana":"ふくやまじんじゃ","romaji":"Fukuyama jinja","kind":"Shinto shrine","km":79.67,"offset_m":184.0,"length_m":"","built":"","grade":"","oaza":"穂別福山","address":"勇払郡むかわ町穂別福山","address_kana":"ゆうふつぐんむかわちょうほべつふくやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.25118,42.89003]},"properties":{"name":"福山第1ゲート","object":"福山第1ゲート","kana":"","romaji":"","kind":"gate","km":79.81,"offset_m":71.0,"length_m":"","built":"","grade":"","oaza":"穂別福山","address":"勇払郡むかわ町穂別福山","address_kana":"ゆうふつぐんむかわちょうほべつふくやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.25072,42.8889]},"properties":{"name":"福山第2ゲート","object":"福山第2ゲート","kana":"","romaji":"","kind":"gate","km":79.86,"offset_m":47.0,"length_m":"","built":"","grade":"","oaza":"穂別福山","address":"勇払郡むかわ町穂別福山","address_kana":"ゆうふつぐんむかわちょうほべつふくやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.25385,42.88942]},"properties":{"name":"穂別福山 (穂別 + 福山)","object":"穂別福山","kana":"ほべつふくやま","romaji":"Hobetsufukuyama","kind":"place (neighbourhood)","km":80.01,"offset_m":172.0,"length_m":"","built":"","grade":"","oaza":"穂別福山","address":"勇払郡むかわ町穂別福山","address_kana":"ゆうふつぐんむかわちょうほべつふくやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.25421,42.8874]},"properties":{"name":"鵡川","object":"鵡川","kana":"","romaji":"","kind":"watercourse","km":80.24,"offset_m":68.0,"length_m":"","built":"","grade":"","oaza":"穂別福山","address":"勇払郡むかわ町穂別福山","address_kana":"ゆうふつぐんむかわちょうほべつふくやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.25416,42.88678]},"properties":{"name":"福山","object":"福山大橋","kana":"ふくやまおおはし","romaji":"Fukuyama oohashi","kind":"bridge","km":80.24,"offset_m":0.0,"length_m":"160","built":"1968","grade":"Ⅲ","oaza":"穂別福山","address":"勇払郡むかわ町穂別福山","address_kana":"ゆうふつぐんむかわちょうほべつふくやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.29725,42.88901]},"properties":{"name":"千坂","object":"千坂橋","kana":"ちさかはし","romaji":"Chisaka hashi","kind":"bridge","km":85.4,"offset_m":0.0,"length_m":"138.7","built":"1975","grade":"Ⅱ","oaza":"穂別福山","address":"勇払郡むかわ町穂別福山","address_kana":"ゆうふつぐんむかわちょうほべつふくやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.30059,42.89179]},"properties":{"name":"オコタン","object":"オコタン橋","kana":"おこたんばし","romaji":"Okotan bashi","kind":"bridge","km":85.87,"offset_m":0.0,"length_m":"338","built":"1985","grade":"Ⅰ","oaza":"穂別福山","address":"勇払郡むかわ町穂別福山","address_kana":"ゆうふつぐんむかわちょうほべつふくやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.30394,42.89278]},"properties":{"name":"パンケモトツ","object":"パンケモトツ沢川","kana":"","romaji":"","kind":"watercourse","km":86.16,"offset_m":10.0,"length_m":"","built":"","grade":"","oaza":"穂別福山","address":"勇払郡むかわ町穂別福山","address_kana":"ゆうふつぐんむかわちょうほべつふくやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.30463,42.89321]},"properties":{"name":"モトツ","object":"モトツトンネル","kana":"もとつとんねる","romaji":"Mototsu tonneru","kind":"tunnel","km":86.24,"offset_m":0.0,"length_m":"924","built":"1991","grade":"Ⅱ","oaza":"穂別福山","address":"勇払郡むかわ町穂別福山","address_kana":"ゆうふつぐんむかわちょうほべつふくやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.31156,42.89931]},"properties":{"name":"モトツ","object":"モトツ橋","kana":"もとつばし","romaji":"Mototsu bashi","kind":"bridge","km":87.12,"offset_m":0.0,"length_m":"62","built":"1988","grade":"Ⅱ","oaza":"穂別福山","address":"勇払郡むかわ町穂別福山","address_kana":"ゆうふつぐんむかわちょうほべつふくやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.31156,42.89931]},"properties":{"name":"モトツ","object":"モトツシェルター","kana":"もとつしぇるたー","romaji":"Mototsu sherutaa","kind":"shed","km":87.12,"offset_m":0.0,"length_m":"62","built":"1990","grade":"Ⅲ","oaza":"穂別福山","address":"勇払郡むかわ町穂別福山","address_kana":"ゆうふつぐんむかわちょうほべつふくやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.31229,42.89988]},"properties":{"name":"福山","object":"福山トンネル","kana":"","romaji":"","kind":"tunnel","km":87.21,"offset_m":0.0,"length_m":"839","built":"1991","grade":"","oaza":"穂別福山","address":"勇払郡むかわ町穂別福山","address_kana":"ゆうふつぐんむかわちょうほべつふくやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.32161,42.90332]},"properties":{"name":"ペンケモトツ","object":"ペンケモトツ沢川","kana":"","romaji":"","kind":"watercourse","km":88.04,"offset_m":26.0,"length_m":"","built":"","grade":"","oaza":"穂別福山","address":"勇払郡むかわ町穂別福山","address_kana":"ゆうふつぐんむかわちょうほべつふくやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.32132,42.90322]},"properties":{"name":"福穂","object":"福穂橋","kana":"ふくすいはし","romaji":"Fukusui hashi","kind":"bridge","km":88.04,"offset_m":0.0,"length_m":"210","built":"1990","grade":"Ⅰ","oaza":"穂別福山","address":"勇払郡むかわ町穂別福山","address_kana":"ゆうふつぐんむかわちょうほべつふくやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.32368,42.90398]},"properties":{"name":"穂高","object":"穂高トンネル","kana":"ほだかとんねる","romaji":"Hodaka tonneru","kind":"tunnel","km":88.25,"offset_m":0.0,"length_m":"1991","built":"1991","grade":"Ⅱ","oaza":"穂別福山","address":"勇払郡むかわ町穂別福山","address_kana":"ゆうふつぐんむかわちょうほべつふくやま"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.35128,42.90958]},"properties":{"name":"穂高","object":"穂高橋","kana":"ほだかはし","romaji":"Hodaka hashi","kind":"bridge","km":90.58,"offset_m":0.0,"length_m":"140.6","built":"1988","grade":"Ⅱ","oaza":"中央","address":"勇払郡占冠村中央","address_kana":"ゆうふつぐんしむかっぷむらちゅうおう"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.35485,42.90889]},"properties":{"name":"高翠","object":"高翠橋","kana":"こうすいばし","romaji":"Kousui bashi","kind":"bridge","km":90.9,"offset_m":0.0,"length_m":"114","built":"1988","grade":"Ⅰ","oaza":"中央","address":"勇払郡占冠村中央","address_kana":"ゆうふつぐんしむかっぷむらちゅうおう"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.35768,42.90869]},"properties":{"name":"占翠","object":"占翠橋","kana":"せんすいばし","romaji":"Sensui bashi","kind":"bridge","km":91.14,"offset_m":0.0,"length_m":"167","built":"1989","grade":"Ⅰ","oaza":"中央","address":"勇払郡占冠村中央","address_kana":"ゆうふつぐんしむかっぷむらちゅうおう"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.36986,42.9098]},"properties":{"name":"名石","object":"名石駐車場","kana":"めいせきちゅうしゃじょう","romaji":"Meiseki chuushajou","kind":"parking","km":93.58,"offset_m":32.0,"length_m":"","built":"","grade":"","oaza":"中央","address":"勇払郡占冠村中央","address_kana":"ゆうふつぐんしむかっぷむらちゅうおう"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.37052,42.91029]},"properties":{"name":"名石","object":"名石橋","kana":"めいせきばし","romaji":"Meiseki bashi","kind":"bridge","km":93.67,"offset_m":0.0,"length_m":"39.6","built":"1970","grade":"Ⅰ","oaza":"中央","address":"勇払郡占冠村中央","address_kana":"ゆうふつぐんしむかっぷむらちゅうおう"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.37087,42.91045]},"properties":{"name":"ニセイパオマナイ","object":"ニセイパオマナイ川","kana":"","romaji":"","kind":"watercourse","km":93.73,"offset_m":30.0,"length_m":"","built":"","grade":"","oaza":"中央","address":"勇払郡占冠村中央","address_kana":"ゆうふつぐんしむかっぷむらちゅうおう"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.37731,42.91317]},"properties":{"name":"赤岩","object":"赤岩大橋","kana":"あかいわおおはし","romaji":"Akaiwa oohashi","kind":"bridge","km":94.35,"offset_m":0.0,"length_m":"157.4","built":"1970","grade":"Ⅱ","oaza":"中央","address":"勇払郡占冠村中央","address_kana":"ゆうふつぐんしむかっぷむらちゅうおう"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.38713,42.91532]},"properties":{"name":"一の沢川","object":"一の沢川","kana":"","romaji":"","kind":"watercourse","km":95.37,"offset_m":44.0,"length_m":"","built":"","grade":"","oaza":"中央","address":"勇払郡占冠村中央","address_kana":"ゆうふつぐんしむかっぷむらちゅうおう"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.38677,42.91502]},"properties":{"name":"渓流","object":"渓流大橋","kana":"けいりゅうおおはし","romaji":"Keiryuu oohashi","kind":"bridge","km":95.37,"offset_m":0.0,"length_m":"153.7","built":"1974","grade":"Ⅲ","oaza":"中央","address":"勇払郡占冠村中央","address_kana":"ゆうふつぐんしむかっぷむらちゅうおう"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.39911,42.91588]},"properties":{"name":"日高","object":"日高トンネル","kana":"ひだかとんねる","romaji":"Hidaka tonneru","kind":"tunnel","km":96.43,"offset_m":0.0,"length_m":"730","built":"1972","grade":"Ⅲ","oaza":"中央","address":"勇払郡占冠村中央","address_kana":"ゆうふつぐんしむかっぷむらちゅうおう"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.41771,42.89623]},"properties":{"name":"右の沢川","object":"右の沢川","kana":"","romaji":"","kind":"watercourse","km":99.93,"offset_m":145.0,"length_m":"","built":"","grade":"","oaza":"日高","address":"沙流郡日高町日高","address_kana":"さるぐんひだかちょうひだか"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.41942,42.89623]},"properties":{"name":"ホロカワウシャップ","object":"ホロカワウシャップ川","kana":"","romaji":"","kind":"watercourse","km":99.98,"offset_m":79.0,"length_m":"","built":"","grade":"","oaza":"日高","address":"沙流郡日高町日高","address_kana":"さるぐんひだかちょうひだか"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.42716,42.8971]},"properties":{"name":"日夕","object":"日夕橋","kana":"にちゆうばし","romaji":"Nichiyuu bashi","kind":"bridge","km":100.6,"offset_m":0.0,"length_m":"30","built":"1968","grade":"Ⅰ","oaza":"日高","address":"沙流郡日高町日高","address_kana":"さるぐんひだかちょうひだか"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.42766,42.89691]},"properties":{"name":"パンケウシャップ","object":"パンケウシャップ川","kana":"","romaji":"","kind":"watercourse","km":100.66,"offset_m":21.0,"length_m":"","built":"","grade":"","oaza":"日高","address":"沙流郡日高町日高","address_kana":"さるぐんひだかちょうひだか"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.43448,42.89635]},"properties":{"name":"日高","object":"日高","kana":"","romaji":"","kind":"place (neighbourhood)","km":100.9,"offset_m":373.0,"length_m":"","built":"","grade":"","oaza":"日高","address":"沙流郡日高町日高","address_kana":"さるぐんひだかちょうひだか"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.43237,42.88427]},"properties":{"name":"新町","object":"新町三丁目","kana":"しんまち3ちょうめ","romaji":"Shinmachi 3-choume","kind":"place (neighbourhood)","km":102.18,"offset_m":13.0,"length_m":"","built":"","grade":"","oaza":"新町","address":"沙流郡日高町新町","address_kana":"さるぐんひだかちょうしんまち"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.43553,42.88427]},"properties":{"name":"日高","object":"日高神社","kana":"ひだかじんじゃ","romaji":"Hidaka jinja","kind":"Shinto shrine","km":102.36,"offset_m":221.0,"length_m":"","built":"","grade":"","oaza":"宮下町","address":"沙流郡日高町宮下町","address_kana":"さるぐんひだかちょうみやしたちょう"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.43687,42.88086]},"properties":{"name":"kanamoto","object":"kanamoto","kana":"かなもと","romaji":"Kanamoto","kind":"shop","km":102.72,"offset_m":42.0,"length_m":"","built":"","grade":"","oaza":"宮下町","address":"沙流郡日高町宮下町","address_kana":"さるぐんひだかちょうみやしたちょう"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.44001,42.87791]},"properties":{"name":"新川","object":"新川橋","kana":"しんかわはし","romaji":"Shinkawa hashi","kind":"bridge","km":103.12,"offset_m":0.0,"length_m":"3.6","built":"1993","grade":"Ⅰ","oaza":"本町東","address":"沙流郡日高町本町東","address_kana":"さるぐんひだかちょうほんちょうひがし"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.43992,42.87811]},"properties":{"name":"新川","object":"新川","kana":"にいかわ","romaji":"Niikawa","kind":"watercourse","km":103.12,"offset_m":23.0,"length_m":"","built":"","grade":"","oaza":"本町東","address":"沙流郡日高町本町東","address_kana":"さるぐんひだかちょうほんちょうひがし"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.44195,42.87748]},"properties":{"name":"日高","object":"日高郵便局","kana":"ひだかゆうびんきょく","romaji":"Hidaka yuubinkyoku","kind":"post office","km":103.29,"offset_m":85.0,"length_m":"","built":"","grade":"","oaza":"本町東","address":"沙流郡日高町本町東","address_kana":"さるぐんひだかちょうほんちょうひがし"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.44216,42.87734]},"properties":{"name":"セイコーマート","object":"セイコーマート日高道の駅店","kana":"せいこーまーとひだかみちのえきてん","romaji":"Seikoomaatohidakamichinoeki ten","kind":"convenience store","km":103.29,"offset_m":85.0,"length_m":"","built":"","grade":"","oaza":"本町東","address":"沙流郡日高町本町東","address_kana":"さるぐんひだかちょうほんちょうひがし"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.45211,42.88146]},"properties":{"name":"ウシャップ","object":"ペンケウシャップ川","kana":"","romaji":"","kind":"watercourse","km":104.39,"offset_m":15.0,"length_m":"","built":"","grade":"","oaza":"日高","address":"沙流郡日高町日高","address_kana":"さるぐんひだかちょうひだか"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.45788,42.87724]},"properties":{"name":"日高","object":"北海道電力 日高発電所","kana":"ひだかはつでんしょ","romaji":"Hidaka hatsudensho","kind":"power station","km":104.52,"offset_m":666.0,"length_m":"","built":"","grade":"","oaza":"千栄","address":"沙流郡日高町千栄","address_kana":"さるぐんひだかちょうちさか"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.46766,42.88829]},"properties":{"name":"沙流川","object":"沙流川","kana":"","romaji":"","kind":"watercourse","km":105.67,"offset_m":272.0,"length_m":"","built":"","grade":"","oaza":"千栄","address":"沙流郡日高町千栄","address_kana":"さるぐんひだかちょうちさか"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.46778,42.88869]},"properties":{"name":"ユウケシュオマナイ","object":"パンケユウケシュオマナイ川","kana":"","romaji":"","kind":"watercourse","km":105.99,"offset_m":181.0,"length_m":"","built":"","grade":"","oaza":"日高","address":"沙流郡日高町日高","address_kana":"さるぐんひだかちょうひだか"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.46755,42.89314]},"properties":{"name":"右左府","object":"右左府発電所","kana":"うさっぷはつでんしょ","romaji":"Usappu hatsudensho","kind":"power station","km":106.22,"offset_m":244.0,"length_m":"","built":"","grade":"","oaza":"日高","address":"沙流郡日高町日高","address_kana":"さるぐんひだかちょうひだか"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.46713,42.8928]},"properties":{"name":"右左府","object":"右左府変電所","kana":"","romaji":"","kind":"substation","km":106.22,"offset_m":245.0,"length_m":"","built":"","grade":"","oaza":"日高","address":"沙流郡日高町日高","address_kana":"さるぐんひだかちょうひだか"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.47167,42.89254]},"properties":{"name":"オワイタカ","object":"オワイタカ沢川","kana":"","romaji":"","kind":"watercourse","km":106.47,"offset_m":52.0,"length_m":"","built":"","grade":"","oaza":"日高","address":"沙流郡日高町日高","address_kana":"さるぐんひだかちょうひだか"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.48126,42.89575]},"properties":{"name":"滝の沢川","object":"滝の沢川","kana":"","romaji":"","kind":"watercourse","km":107.29,"offset_m":18.0,"length_m":"","built":"","grade":"","oaza":"千栄","address":"沙流郡日高町千栄","address_kana":"さるぐんひだかちょうちさか"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[142.48842,42.894]},"properties":{"name":"ルウケシオマナイ","object":"ルウケシオマナイ川","kana":"","romaji":"","kind":"watercourse","km":107.83,"offset_m":134.0,"length_m":"","built":"","grade":"","oaza":"千栄","address":"沙流郡日高町千栄","address_kana":"さるぐんひだかちょうちさか"}}]} \ No newline at end of file diff --git a/song-274/route/274-lyrics-index.csv b/song-274/route/274-lyrics-index.csv new file mode 100644 index 0000000..aced01f --- /dev/null +++ b/song-274/route/274-lyrics-index.csv @@ -0,0 +1,99 @@ +start,stop,start_s,stop_s,sung,object,kind,km,lat,lon,km_from,km_to +00:14.54,00:17.89,14.54,17.89,夕張郡由仁町川端,夕張郡由仁町川端,district,38.41,42.91715,141.90896,38.41,38.41 +00:17.89,00:19.67,17.89,19.67,川端橋,川端橋,bridge,38.41,42.91715,141.90896,, +00:25.04,00:28.41,25.04,28.41,夕張郡栗山町滝下,夕張郡栗山町滝下,district,39.80,42.91197,141.91642,39.80,41.86 +00:28.41,00:32.06,28.41,32.06,川端発電所,北海道企業局 川端発電所,power station,39.80,42.91197,141.91642,, +00:32.06,00:35.44,32.06,35.44,滝下八幡神社,滝下八幡神社,Shinto shrine,40.16,42.91183,141.92472,, +00:35.44,00:39.84,35.44,39.84,滝ノ下信号場,滝ノ下信号場,place (locality),40.57,42.90630,141.92320,, +00:39.84,00:42.01,39.84,42.01,雨霧橋,雨霧橋,bridge,41.86,42.91003,141.94197,, +00:42.45,00:45.15,42.45,45.15,夕張郡由仁町川端,夕張郡由仁町川端,district,43.03,42.91604,141.95220,43.03,43.03 +00:45.15,00:46.69,45.15,46.69,竜仙橋,竜仙橋,bridge,43.03,42.91604,141.95220,, +00:47.63,00:50.08,47.63,50.08,夕張郡栗山町滝下,夕張郡栗山町滝下,district,44.00,42.91449,141.96321,44.00,44.00 +00:50.08,00:52.88,50.08,52.88,草木橋,草木橋,bridge,44.00,42.91449,141.96321,, +00:52.88,00:54.73,52.88,54.73,滝の上こ線橋,滝の上こ線橋,bridge,44.00,42.91449,141.96321,, +00:56.44,00:59.95,56.44,59.95,夕張市滝ノ上,夕張市滝ノ上,district,44.62,42.91152,141.97021,44.62,45.29 +00:59.95,01:03.47,59.95,63.47,滝の上発電所,北海道企業局 滝の上発電所,power station,44.62,42.91152,141.97021,, +01:03.47,01:06.94,63.47,66.94,滝ノ上信号場,滝ノ上信号場,railway signal post,45.21,42.91000,141.97642,, +01:06.94,01:08.78,66.94,68.78,滝ノ上神社,滝ノ上神社,Shinto shrine,45.29,42.90979,141.97873,, +01:10.50,01:12.05,70.50,72.05,夕張市紅葉山,夕張市紅葉山,district,49.71,42.91482,142.02439,49.71,55.60 +01:12.05,01:13.86,72.05,73.86,十三里信号場,十三里信号場,place (locality),49.71,42.91482,142.02439,, +01:13.86,01:16.44,73.86,76.44,十三里橋,十三里橋,bridge,50.28,42.91772,142.03043,, +01:16.44,01:18.78,76.44,78.78,紅葉山駐車帯,紅葉山駐車帯,parking,50.52,42.91840,142.03331,, +01:18.78,01:21.06,78.78,81.06,瑞穂橋,瑞穂橋,bridge,52.11,42.93244,142.03548,, +01:21.06,01:24.44,81.06,84.44,セブンイレブン夕張紅葉山店,セブンイレブン夕張紅葉山店,convenience store,52.47,42.93507,142.03683,, +01:24.44,01:27.06,84.44,87.06,新夕張駅,新夕張駅,railway station,52.54,42.93670,142.03648,, +01:27.06,01:30.02,87.06,90.02,紅葉山郵便局,紅葉山郵便局,post office,52.61,42.93642,142.03925,, +01:30.02,01:32.30,90.02,92.30,紅葉山神社,紅葉山神社,Shinto shrine,52.85,42.93788,142.03956,, +01:32.30,01:35.24,92.30,95.24,セイコーマートもみじやま店,セイコーマートもみじやま店,convenience store,52.99,42.93910,142.04167,, +01:35.24,01:38.48,95.24,98.48,紅楓橋,紅楓橋,bridge,53.13,42.93855,142.04317,, +01:38.48,01:40.25,98.48,100.25,ポン久留喜橋,ポン久留喜橋,bridge,53.69,42.93697,142.04976,, +01:40.25,01:42.44,100.25,102.44,久留喜橋,久留喜橋,bridge,53.69,42.93697,142.04976,, +01:42.44,01:43.79,102.44,103.79,楓橋,楓橋,bridge,55.41,42.92957,142.06562,, +01:43.79,01:45.03,103.79,105.03,桂橋,桂橋,bridge,55.60,42.93026,142.06775,, +01:45.77,01:49.12,105.77,109.12,夕張市楓,夕張市楓,district,56.60,42.93414,142.07860,56.60,57.84 +01:49.12,01:50.76,109.12,110.76,千紫橋,千紫橋,bridge,56.60,42.93414,142.07860,, +01:50.76,01:52.51,110.76,112.51,楓駐車帯,楓駐車帯,parking,57.08,42.93352,142.08412,, +01:52.51,01:53.80,112.51,113.80,万紅橋,万紅橋,bridge,57.25,42.93274,142.08627,, +01:53.80,01:55.54,113.80,115.54,登川神社,登川神社,Shinto shrine,57.44,42.93395,142.08819,, +01:55.54,01:57.32,115.54,117.32,楓信号場,楓信号場,railway signal post,57.76,42.93157,142.09230,, +01:57.32,01:59.00,117.32,119.00,登川橋,登川橋,bridge,57.84,42.93167,142.09327,, +01:59.00,02:00.74,119.00,120.74,登川郵便局,登川郵便局,post office,57.84,42.93185,142.09335,, +02:01.26,02:02.93,121.26,122.93,夕張市登川,夕張市登川,district,58.23,42.92922,142.09647,58.23,60.29 +02:02.93,02:05.23,122.93,125.23,花園橋,花園橋,bridge,58.23,42.92922,142.09647,, +02:05.23,02:06.62,125.23,126.62,登川トンネル,登川トンネル,tunnel,60.29,42.92478,142.11599,, +03:30.80,03:34.55,210.80,214.55,勇払郡むかわ町穂別長和,勇払郡むかわ町穂別長和,district,62.36,42.90892,142.12482,62.36,62.94 +03:34.55,03:36.77,214.55,216.77,オマナイ橋,オマナイ橋,bridge,62.36,42.90892,142.12482,, +03:36.77,03:39.41,216.77,219.41,桂木橋,桂木橋,bridge,62.94,42.90434,142.12726,, +03:41.13,03:44.62,221.13,224.62,勇払郡むかわ町穂別稲里,勇払郡むかわ町穂別稲里,district,64.44,42.89157,142.12305,64.44,71.86 +03:44.62,03:46.67,224.62,226.67,大和橋,大和橋,bridge,64.44,42.89157,142.12305,, +03:46.67,03:48.38,226.67,228.38,豊進橋,豊進橋,bridge,66.69,42.87371,142.13048,, +03:48.38,03:51.61,228.38,231.61,豊進神社,豊進神社,Shinto shrine,66.78,42.87318,142.13135,, +03:51.61,03:53.14,231.61,233.14,豊里橋,豊里橋,bridge,67.48,42.87311,142.13854,, +03:53.14,03:55.52,233.14,235.52,稲豊橋,稲豊橋,bridge,67.60,42.87313,142.14000,, +03:55.52,03:57.78,235.52,237.78,稲里橋,稲里橋,bridge,68.63,42.87144,142.15164,, +03:57.78,04:01.08,237.78,241.08,稲里簡易郵便局,稲里簡易郵便局,post office,69.29,42.86734,142.15774,, +04:01.08,04:03.50,241.08,243.50,佐主橋,佐主橋,bridge,69.48,42.86894,142.16085,, +04:03.50,04:05.59,243.50,245.59,穂別ダム神社,穂別ダム神社,Shinto shrine,71.86,42.88475,142.17737,, +04:05.96,04:10.08,245.96,250.08,勇払郡むかわ町穂別長和,勇払郡むかわ町穂別長和,district,72.02,42.88619,142.17748,72.02,75.28 +04:10.08,04:13.02,250.08,253.02,長和トンネル,長和トンネル,tunnel,72.02,42.88619,142.17748,, +04:13.02,04:15.39,253.02,255.39,穂別大橋,穂別大橋,bridge,72.29,42.88820,142.17918,, +04:15.39,04:18.81,255.39,258.81,山水橋,山水橋,bridge,72.90,42.89187,142.18476,, +04:18.81,04:23.20,258.81,263.20,沼の沢橋,沼の沢橋,bridge,74.31,42.88830,142.20015,, +04:23.20,04:25.27,263.20,265.27,稲里トンネル,稲里トンネル,tunnel,75.28,42.88343,142.20951,, +04:26.00,04:29.74,266.00,269.74,勇払郡むかわ町穂別福山,勇払郡むかわ町穂別福山,district,76.97,42.87802,142.22782,76.97,88.25 +04:29.74,04:31.50,269.74,271.50,ペンケ橋,ペンケ橋,bridge,76.97,42.87802,142.22782,, +04:31.50,04:33.62,271.50,273.62,下福山橋,下福山橋,bridge,78.03,42.88572,142.23487,, +04:33.62,04:35.02,273.62,275.02,オロロップ橋,オロロップ橋,bridge,78.31,42.88721,142.23759,, +04:35.02,04:37.07,275.02,277.07,福山橋,福山橋,bridge,79.11,42.89249,142.24390,, +04:37.07,04:38.70,277.07,278.70,福山神社,福山神社,Shinto shrine,79.67,42.89114,142.25175,, +04:38.70,04:41.02,278.70,281.02,福山大橋,福山大橋,bridge,80.24,42.88678,142.25416,, +04:41.02,04:43.29,281.02,283.29,千坂橋,千坂橋,bridge,85.40,42.88901,142.29725,, +04:43.29,04:45.12,283.29,285.12,オコタン橋,オコタン橋,bridge,85.87,42.89179,142.30059,, +04:45.12,04:46.22,285.12,286.22,モトツトンネル,モトツトンネル,tunnel,86.24,42.89321,142.30463,, +04:46.22,04:48.98,286.22,288.98,モトツ橋にモトツシェルター,モトツ橋,bridge,87.12,42.89931,142.31156,, +04:46.22,04:48.98,286.22,288.98,モトツ橋にモトツシェルター,モトツシェルター,shed,87.12,42.89931,142.31156,, +04:48.98,04:51.39,288.98,291.39,福山トンネル,福山トンネル,tunnel,87.21,42.89988,142.31229,, +04:51.39,04:53.61,291.39,293.61,福穂橋,福穂橋,bridge,88.04,42.90322,142.32132,, +04:53.61,04:55.52,293.61,295.52,穂高トンネル,穂高トンネル,tunnel,88.25,42.90398,142.32368,, +05:22.60,05:25.76,322.60,325.76,勇払郡占冠村中央,勇払郡占冠村中央,district,90.58,42.90958,142.35128,90.58,96.43 +05:25.76,05:28.88,325.76,328.88,穂高橋,穂高橋,bridge,90.58,42.90958,142.35128,, +05:28.88,05:31.52,328.88,331.52,高翠橋,高翠橋,bridge,90.90,42.90889,142.35485,, +05:31.52,05:34.95,331.52,334.95,占翠橋,占翠橋,bridge,91.14,42.90869,142.35768,, +05:34.95,05:38.08,334.95,338.08,名石駐車場,名石駐車場,parking,93.58,42.90980,142.36986,, +05:38.08,05:40.99,338.08,340.99,名石橋,名石橋,bridge,93.67,42.91029,142.37052,, +05:40.99,05:43.96,340.99,343.96,赤岩大橋,赤岩大橋,bridge,94.35,42.91317,142.37731,, +05:43.96,05:48.62,343.96,348.62,渓流大橋,渓流大橋,bridge,95.37,42.91502,142.38677,, +05:48.62,05:50.73,348.62,350.73,日高トンネル,日高トンネル,tunnel,96.43,42.91588,142.39911,, +07:11.39,07:14.14,431.39,434.14,沙流郡日高町日高,沙流郡日高町日高,district,100.60,42.89710,142.42716,100.60,100.60 +07:14.14,07:16.38,434.14,436.38,日夕橋,日夕橋,bridge,100.60,42.89710,142.42716,, +07:28.85,07:31.68,448.85,451.68,沙流郡日高町宮下町,沙流郡日高町宮下町,district,102.36,42.88427,142.43553,102.36,102.36 +07:31.68,07:34.09,451.68,454.09,日高神社,日高神社,Shinto shrine,102.36,42.88427,142.43553,, +07:42.90,07:45.51,462.90,465.51,沙流郡日高町本町東,沙流郡日高町本町東,district,103.12,42.87791,142.44001,103.12,103.29 +07:45.51,07:49.88,465.51,469.88,新川橋,新川橋,bridge,103.12,42.87791,142.44001,, +07:49.88,07:52.76,469.88,472.76,セイコーマート日高道の駅店,セイコーマート日高道の駅店,convenience store,103.29,42.87734,142.44216,, +07:52.76,07:55.11,472.76,475.11,日高郵便局,日高郵便局,post office,103.29,42.87748,142.44195,, +07:56.69,07:59.36,476.69,479.36,沙流郡日高町千栄,沙流郡日高町千栄,district,104.52,42.87724,142.45788,104.52,104.52 +07:59.36,08:02.15,479.36,482.15,北電日高発電所,北海道電力 日高発電所,power station,104.52,42.87724,142.45788,, +08:03.90,08:06.38,483.90,486.38,沙流郡日高町日高,沙流郡日高町日高,district,106.22,42.89314,142.46755,106.22,106.22 +08:06.38,08:09.44,486.38,489.44,右左府発電所,右左府発電所,power station,106.22,42.89314,142.46755,, +08:10.93,08:12.66,490.93,492.66,東に続く,,closing,,,,, diff --git a/song-274/route/274-route-east.json b/song-274/route/274-route-east.json new file mode 100644 index 0000000..d936bb0 --- /dev/null +++ b/song-274/route/274-route-east.json @@ -0,0 +1 @@ +[[108.557,42.89528,142.49683],[108.603,42.89539,142.49736],[108.649,42.89556,142.49787],[108.695,42.89571,142.49842],[108.736,42.89578,142.4989],[108.794,42.89581,142.49962],[108.84,42.89571,142.50016],[108.946,42.89545,142.50142],[109.173,42.89489,142.5041],[109.371,42.89434,142.5064],[109.456,42.8942,142.50743],[109.52,42.89412,142.5082],[110.111,42.89351,142.51541],[110.297,42.89332,142.51768],[110.457,42.89317,142.51963],[110.482,42.89315,142.51995],[110.575,42.89305,142.52107],[110.738,42.89288,142.52306],[111.028,42.89258,142.5266],[111.056,42.89255,142.52694],[111.318,42.89229,142.53014],[111.333,42.89227,142.53031],[111.358,42.89224,142.53062],[111.359,42.89224,142.53064],[111.498,42.89212,142.53233],[111.527,42.89209,142.53269],[111.596,42.89201,142.53353],[111.671,42.89194,142.53444],[111.814,42.89181,142.53619],[111.842,42.89182,142.53653],[111.864,42.89177,142.5368],[111.958,42.89168,142.53794],[112.065,42.89155,142.53924],[112.09,42.89153,142.53954],[112.111,42.89153,142.53981],[112.138,42.89155,142.54013],[112.164,42.89159,142.54045],[112.196,42.89167,142.54083],[112.333,42.89204,142.54243],[112.688,42.89295,142.5466],[112.973,42.89375,142.54994],[113.048,42.89392,142.55082],[113.143,42.89417,142.55194],[113.202,42.89435,142.55262],[113.23,42.89444,142.55295],[113.27,42.89459,142.55338],[113.312,42.89478,142.55384],[113.395,42.8952,142.55467],[113.435,42.8954,142.55508],[113.492,42.89569,142.55566],[113.793,42.89718,142.55874],[113.829,42.89736,142.55911],[113.851,42.89747,142.55933],[113.987,42.89814,142.56073]] \ No newline at end of file diff --git a/song-274/route/274-route-west.json b/song-274/route/274-route-west.json new file mode 100644 index 0000000..de8f95c --- /dev/null +++ b/song-274/route/274-route-west.json @@ -0,0 +1 @@ +[[30.456,42.94898,141.83538],[30.485,42.94902,141.83573],[31.021,42.94975,141.84224],[31.152,42.94995,141.84383],[31.305,42.95011,141.8457],[31.317,42.95013,141.84585],[31.385,42.95022,141.84667],[31.396,42.95024,141.8468],[31.405,42.95025,141.84692],[31.543,42.95043,141.84859],[31.633,42.95055,141.84968],[31.656,42.95058,141.84996],[31.663,42.95059,141.85004],[31.719,42.95067,141.85073],[31.953,42.95099,141.85357],[31.986,42.95103,141.85397],[32.022,42.95104,141.85441],[32.046,42.95104,141.8547],[32.061,42.95102,141.85489],[32.082,42.951,141.85514],[32.102,42.95095,141.85538],[32.124,42.95088,141.85564],[32.148,42.95079,141.8559],[32.17,42.95069,141.85614],[32.192,42.95059,141.85636],[32.214,42.95046,141.85658],[32.249,42.95025,141.8569],[32.278,42.95007,141.85715],[32.304,42.9499,141.85737],[32.315,42.94983,141.85746],[32.398,42.94927,141.85815],[32.462,42.94884,141.85865],[32.474,42.94875,141.85875],[32.607,42.94783,141.85978],[32.639,42.9476,141.86004],[32.72,42.94705,141.86067],[32.929,42.94561,141.86234],[32.957,42.94542,141.86256],[33.001,42.94512,141.86292],[33.138,42.94418,141.86399],[33.305,42.94303,141.8653],[33.489,42.94176,141.86678],[33.731,42.94012,141.86873],[33.99,42.93834,141.87077],[34.132,42.93738,141.87193],[34.161,42.93717,141.87214],[34.308,42.93617,141.87331],[34.584,42.93429,141.87554],[34.753,42.93312,141.87686],[35.006,42.9314,141.87888],[35.192,42.93012,141.88036],[35.335,42.92915,141.8815],[35.443,42.92841,141.88237],[35.527,42.92783,141.88304]] \ No newline at end of file diff --git a/song-274/route/274-route.json b/song-274/route/274-route.json new file mode 100644 index 0000000..25f30c4 --- /dev/null +++ b/song-274/route/274-route.json @@ -0,0 +1 @@ +[[35.527,42.92783,141.88304],[35.827,42.92577,141.88541],[36.828,42.91884,141.89326],[36.877,42.91848,141.89362],[37.043,42.91721,141.89469],[37.06,42.91709,141.89479],[37.079,42.91692,141.89487],[37.092,42.91681,141.8949],[37.147,42.91632,141.89497],[37.236,42.91552,141.8951],[37.251,42.91538,141.89512],[37.266,42.9154,141.89529],[37.377,42.91551,141.89665],[37.476,42.91559,141.89787],[37.579,42.91568,141.89912],[37.673,42.91577,141.90026],[37.876,42.91595,141.90275],[38.055,42.91613,141.90493],[38.118,42.91618,141.90571],[38.194,42.91627,141.90663],[38.211,42.9163,141.90684],[38.229,42.91635,141.90704],[38.278,42.9165,141.90761],[38.297,42.91657,141.90783],[38.317,42.91665,141.90803],[38.339,42.91675,141.90827],[38.361,42.91686,141.9085],[38.41,42.91715,141.90896],[38.588,42.91822,141.91059],[38.659,42.91864,141.91124],[38.71,42.91892,141.91172],[38.726,42.91901,141.91189],[38.742,42.91908,141.91205],[38.769,42.9192,141.91235],[38.792,42.91928,141.9126],[38.818,42.91938,141.9129],[38.852,42.91948,141.9133],[38.885,42.91955,141.91368],[38.907,42.91959,141.91395],[38.935,42.91963,141.91429],[38.967,42.91965,141.91469],[38.999,42.91965,141.91507],[39.021,42.91964,141.91535],[39.053,42.9196,141.91574],[39.081,42.91954,141.91607],[39.12,42.91941,141.91651],[39.155,42.91928,141.9169],[39.192,42.91909,141.91727],[39.222,42.91891,141.91755],[39.255,42.9187,141.91784],[39.284,42.91849,141.91805],[39.313,42.91827,141.91823],[39.346,42.91801,141.91843],[39.38,42.91773,141.91861],[39.472,42.91696,141.91903],[39.559,42.91624,141.91944],[39.618,42.91576,141.91973],[39.66,42.91542,141.91997],[39.721,42.91495,141.92036],[39.761,42.91465,141.92062],[39.8,42.91436,141.9209],[39.914,42.91355,141.92175],[40.158,42.91178,141.92352],[40.43,42.90983,141.92554],[40.511,42.90925,141.92615],[40.574,42.90884,141.92668],[40.618,42.90861,141.92711],[40.666,42.9084,141.92763],[40.703,42.90828,141.92806],[40.736,42.9082,141.92845],[40.773,42.90814,141.92889],[40.807,42.90812,141.92931],[40.838,42.90812,141.92969],[40.864,42.90814,141.93001],[40.905,42.9082,141.9305],[41.016,42.90845,141.93182],[41.321,42.90912,141.93546],[41.472,42.90946,141.93725],[41.522,42.90957,141.93784],[41.572,42.90965,141.93845],[41.766,42.90991,141.9408],[41.862,42.91003,141.94197],[41.958,42.91015,141.94314],[42.047,42.91027,141.94422],[42.076,42.91031,141.94457],[42.097,42.91037,141.94482],[42.119,42.91044,141.94507],[42.143,42.91055,141.94532],[42.177,42.91073,141.94566],[42.2,42.91088,141.94585],[42.231,42.9111,141.94608],[42.266,42.91137,141.9463],[42.358,42.91211,141.94683],[42.418,42.91259,141.94713],[42.486,42.91317,141.94744],[42.599,42.91412,141.94789],[42.631,42.91439,141.94806],[42.663,42.91464,141.94824],[42.694,42.91487,141.94846],[42.728,42.9151,141.94875],[42.753,42.91525,141.94897],[42.782,42.9154,141.94924],[42.808,42.91553,141.94952],[42.841,42.91566,141.94988],[42.875,42.91577,141.95028],[42.907,42.91583,141.95066],[43.008,42.91597,141.95188],[43.035,42.91604,141.9522],[43.067,42.91614,141.95257],[43.213,42.91668,141.9542],[43.231,42.91674,141.95441],[43.251,42.91679,141.95464],[43.252,42.91679,141.95465],[43.275,42.91683,141.95494],[43.302,42.91684,141.95526],[43.326,42.91682,141.95555],[43.345,42.9168,141.95579],[43.363,42.91677,141.95601],[43.388,42.91671,141.9563],[43.499,42.91632,141.95755],[43.644,42.9158,141.95919],[43.87,42.915,141.96174],[43.943,42.91473,141.96256],[44.002,42.91449,141.96321],[44.048,42.91429,141.96371],[44.094,42.9141,141.96421],[44.149,42.91385,141.96479],[44.188,42.9137,141.96521],[44.23,42.91355,141.9657],[44.279,42.91342,141.96627],[44.414,42.91317,141.96789],[44.562,42.91291,141.96967],[44.625,42.91279,141.97043],[44.672,42.91268,141.97099],[44.702,42.9126,141.97134],[44.735,42.91248,141.97171],[44.747,42.91243,141.97184],[44.858,42.91193,141.97302],[44.988,42.91134,141.9744],[45.064,42.91099,141.9752],[45.099,42.91084,141.97557],[45.188,42.91042,141.9765],[45.211,42.91031,141.97674],[45.286,42.90994,141.97752],[45.505,42.90888,141.97978],[45.535,42.90873,141.98009],[45.667,42.9081,141.98146],[45.741,42.90774,141.98223],[45.768,42.90763,141.98251],[45.79,42.90755,141.98277],[45.813,42.90748,141.98303],[45.836,42.90743,141.9833],[45.856,42.9074,141.98355],[45.877,42.90738,141.9838],[45.903,42.90739,141.98412],[45.96,42.90745,141.98482],[46.109,42.90767,141.98663],[46.15,42.90771,141.98712],[46.17,42.9077,141.98737],[46.19,42.90768,141.98761],[46.207,42.90764,141.98782],[46.225,42.90758,141.98802],[46.245,42.90751,141.98825],[46.269,42.90741,141.98851],[46.318,42.90718,141.98902],[46.361,42.90697,141.98947],[46.386,42.90687,141.98974],[46.405,42.90681,141.98995],[46.421,42.90675,141.99014],[46.448,42.90668,141.99045],[46.502,42.90657,141.9911],[46.56,42.90644,141.99179],[46.598,42.90634,141.99223],[46.684,42.90608,141.99323],[46.708,42.906,141.99351],[46.778,42.9058,141.99432],[46.869,42.90552,141.99537],[47.038,42.90502,141.99732],[47.093,42.90485,141.99797],[47.179,42.90459,141.99895],[47.402,42.90392,142.00154],[47.448,42.90382,142.00209],[47.485,42.90378,142.00253],[47.521,42.90376,142.00297],[47.542,42.90376,142.00323],[47.557,42.90377,142.00342],[47.583,42.90379,142.00373],[47.61,42.90383,142.00406],[47.658,42.90393,142.00463],[47.709,42.9041,142.00522],[47.785,42.90444,142.00603],[48.017,42.90557,142.00842],[48.106,42.906,142.00935],[48.178,42.90631,142.01012],[48.308,42.90672,142.01161],[48.421,42.90716,142.01287],[48.497,42.90752,142.01366],[48.589,42.90803,142.01454],[48.684,42.90861,142.01539],[48.908,42.90995,142.01746],[49.142,42.91135,142.01961],[49.217,42.91179,142.02029],[49.366,42.91268,142.02166],[49.454,42.91321,142.02248],[49.63,42.91423,142.02412],[49.708,42.9147,142.02484],[49.866,42.91567,142.02625],[50.042,42.91669,142.02791],[50.084,42.9169,142.02833],[50.133,42.91714,142.02884],[50.183,42.91735,142.02938],[50.278,42.91772,142.03043],[50.427,42.91829,142.03209],[50.451,42.91839,142.03235],[50.492,42.91856,142.03279],[50.522,42.91873,142.03309],[50.55,42.9189,142.03333],[50.581,42.91912,142.03357],[50.628,42.91948,142.03388],[50.699,42.92004,142.03429],[50.733,42.92034,142.03437],[50.78,42.92076,142.0344],[50.803,42.92097,142.03442],[50.832,42.92123,142.03439],[50.87,42.92157,142.03433],[51.014,42.92285,142.03414],[51.121,42.92382,142.03411],[51.168,42.92424,142.03418],[51.221,42.92471,142.03432],[51.253,42.92499,142.03441],[51.29,42.92531,142.03449],[51.34,42.92576,142.03462],[51.503,42.92712,142.03531],[51.59,42.92785,142.03572],[51.624,42.92814,142.03585],[51.662,42.92848,142.03594],[51.772,42.92947,142.03603],[51.815,42.92985,142.03602],[51.843,42.93009,142.03594],[51.874,42.93036,142.03583],[51.91,42.93067,142.0357],[51.95,42.93101,142.03554],[51.962,42.93111,142.03551],[51.98,42.93127,142.03545],[52.014,42.93158,142.0354],[52.051,42.93191,142.0354],[52.079,42.93216,142.03541],[52.111,42.93244,142.03548],[52.146,42.93275,142.03557],[52.187,42.9331,142.03575],[52.229,42.93343,142.036],[52.25,42.93359,142.03614],[52.351,42.93433,142.03684],[52.474,42.93524,142.0377],[52.541,42.93574,142.03816],[52.575,42.93599,142.03841],[52.608,42.93624,142.03865],[52.731,42.93714,142.03949],[52.853,42.93805,142.04035],[52.908,42.93846,142.04072],[52.926,42.93858,142.04086],[52.939,42.93866,142.04098],[52.953,42.93873,142.04113],[52.974,42.9388,142.04137],[52.992,42.93883,142.04158],[53.014,42.93882,142.04186],[53.039,42.93877,142.04216],[53.125,42.93855,142.04317],[53.249,42.93823,142.04462],[53.458,42.93769,142.04709],[53.594,42.9373,142.04868],[53.649,42.93713,142.04931],[53.672,42.93704,142.04956],[53.684,42.937,142.04969],[53.69,42.93697,142.04976],[53.735,42.93675,142.05022],[53.811,42.93635,142.05098],[53.929,42.9357,142.05214],[53.97,42.93546,142.0525],[54.013,42.93519,142.05288],[54.043,42.93499,142.05313],[54.08,42.93475,142.05344],[54.123,42.93449,142.05383],[54.241,42.93383,142.05498],[54.362,42.93315,142.05614],[54.46,42.93261,142.05708],[54.495,42.93242,142.05743],[54.537,42.93218,142.05782],[54.59,42.93187,142.05832],[54.63,42.93161,142.05866],[54.694,42.93116,142.05915],[54.765,42.93065,142.05967],[54.88,42.92983,142.06054],[54.996,42.92898,142.06137],[55.015,42.92886,142.06152],[55.035,42.92873,142.06169],[55.054,42.92861,142.06187],[55.07,42.92853,142.06204],[55.086,42.92847,142.0622],[55.106,42.9284,142.06243],[55.125,42.92836,142.06266],[55.143,42.92835,142.06288],[55.167,42.92836,142.06318],[55.186,42.92838,142.06341],[55.205,42.92843,142.06362],[55.224,42.92851,142.06384],[55.244,42.9286,142.06405],[55.268,42.92874,142.06428],[55.333,42.92913,142.06486],[55.359,42.92929,142.0651],[55.381,42.92941,142.06532],[55.411,42.92957,142.06562],[55.472,42.92985,142.06626],[55.602,42.93026,142.06775],[55.647,42.93039,142.06828],[55.679,42.93052,142.06864],[55.717,42.93068,142.06904],[55.76,42.9309,142.06948],[55.856,42.93141,142.07042],[55.889,42.93158,142.07075],[55.964,42.93197,142.0715],[56.082,42.9326,142.07268],[56.134,42.93286,142.07321],[56.184,42.93307,142.07375],[56.23,42.93324,142.07427],[56.381,42.93377,142.07598],[56.451,42.934,142.07677],[56.477,42.93408,142.07707],[56.497,42.93412,142.07731],[56.513,42.93415,142.07751],[56.531,42.93415,142.07773],[56.557,42.93415,142.07805],[56.602,42.93414,142.0786],[56.665,42.93411,142.07937],[56.685,42.9341,142.07962],[56.732,42.93407,142.08019],[56.763,42.93403,142.08057],[56.79,42.934,142.0809],[56.816,42.93395,142.08121],[56.882,42.93381,142.082],[56.944,42.93363,142.08272],[57.079,42.93318,142.08426],[57.135,42.93299,142.0849],[57.167,42.9329,142.08526],[57.194,42.93283,142.08559],[57.25,42.93274,142.08627],[57.304,42.93265,142.08692],[57.438,42.9325,142.08855],[57.565,42.93235,142.09009],[57.656,42.93222,142.0912],[57.686,42.93218,142.09157],[57.717,42.93211,142.09193],[57.743,42.93204,142.09224],[57.762,42.93197,142.09245],[57.803,42.9318,142.0929],[57.837,42.93167,142.09327],[57.868,42.93154,142.09361],[57.892,42.93142,142.09386],[57.905,42.93135,142.09399],[57.918,42.93127,142.0941],[57.931,42.93118,142.0942],[57.948,42.93104,142.0943],[57.96,42.93094,142.09435],[57.992,42.93067,142.09449],[58.02,42.93044,142.09462],[58.05,42.9302,142.09479],[58.08,42.92999,142.09501],[58.098,42.92986,142.09515],[58.104,42.92982,142.0952],[58.137,42.92959,142.09546],[58.154,42.9295,142.09563],[58.17,42.92942,142.0958],[58.202,42.92931,142.09616],[58.212,42.92928,142.09627],[58.229,42.92922,142.09647],[58.263,42.92912,142.09686],[58.291,42.92907,142.09719],[58.317,42.92904,142.09751],[58.343,42.92903,142.09784],[58.381,42.92903,142.0983],[58.422,42.92906,142.09881],[58.483,42.92911,142.09954],[58.516,42.92914,142.09995],[58.56,42.92917,142.10049],[58.599,42.92918,142.10097],[58.644,42.92917,142.10152],[58.689,42.92913,142.10207],[58.758,42.92907,142.10291],[58.907,42.92894,142.10473],[58.951,42.9289,142.10527],[59.007,42.92887,142.10595],[59.036,42.92888,142.10632],[59.053,42.92892,142.10652],[59.071,42.92897,142.10672],[59.088,42.92904,142.10691],[59.107,42.92915,142.1071],[59.126,42.92927,142.10727],[59.168,42.92956,142.10759],[59.214,42.9299,142.10792],[59.237,42.93005,142.10809],[59.261,42.93021,142.1083],[59.285,42.93035,142.10853],[59.306,42.93045,142.10875],[59.326,42.93052,142.10897],[59.346,42.93057,142.1092],[59.365,42.9306,142.10944],[59.386,42.93061,142.1097],[59.409,42.93059,142.10998],[59.429,42.93055,142.11021],[59.452,42.9305,142.11049],[59.477,42.93041,142.11077],[59.502,42.93031,142.11105],[59.54,42.93013,142.11144],[59.663,42.9295,142.11268],[59.761,42.929,142.11367],[59.783,42.92888,142.11388],[59.824,42.92862,142.11424],[59.854,42.92841,142.11449],[59.89,42.92816,142.11476],[59.918,42.92794,142.11494],[59.954,42.92767,142.11517],[59.98,42.92746,142.11532],[60.01,42.92721,142.11547],[60.05,42.92687,142.11563],[60.077,42.92664,142.11572],[60.118,42.92628,142.11584],[60.155,42.92596,142.11591],[60.183,42.9257,142.11594],[60.237,42.92522,142.11597],[60.285,42.92478,142.11599],[60.648,42.92152,142.11611],[60.69,42.92114,142.11612],[60.731,42.92078,142.11616],[60.768,42.92045,142.11621],[60.794,42.92022,142.11628],[60.826,42.91994,142.11639],[60.856,42.91969,142.11652],[60.884,42.91946,142.11667],[60.913,42.91926,142.11689],[60.956,42.91898,142.11727],[61.035,42.91857,142.11806],[61.108,42.91821,142.1188],[61.129,42.9181,142.11902],[61.176,42.91784,142.11946],[61.226,42.91751,142.11989],[61.287,42.91707,142.12034],[61.338,42.9167,142.1207],[61.379,42.91638,142.12096],[61.408,42.91615,142.12111],[61.442,42.91586,142.12126],[61.479,42.91553,142.12137],[61.511,42.91525,142.12138],[61.549,42.91491,142.12137],[61.602,42.91443,142.1213],[61.642,42.91408,142.12124],[61.675,42.91379,142.12119],[61.704,42.91352,142.12119],[61.802,42.91264,142.12126],[61.914,42.91164,142.12138],[61.976,42.91109,142.12149],[62.004,42.91084,142.12156],[62.032,42.91061,142.12171],[62.081,42.91024,142.122],[62.119,42.90997,142.12231],[62.174,42.90969,142.12286],[62.269,42.90927,142.12387],[62.345,42.90897,142.12471],[62.356,42.90892,142.12482],[62.392,42.90875,142.1252],[62.42,42.90862,142.1255],[62.461,42.90838,142.12589],[62.488,42.9082,142.12612],[62.523,42.90795,142.12637],[62.538,42.90783,142.12645],[62.565,42.9076,142.12656],[62.596,42.90733,142.12666],[62.626,42.90707,142.12671],[62.653,42.90683,142.12673],[62.692,42.90647,142.12675],[62.706,42.90634,142.12673],[62.748,42.90597,142.12669],[62.781,42.90568,142.12672],[62.815,42.90537,142.12677],[62.843,42.90513,142.12687],[62.894,42.90469,142.12704],[62.937,42.90434,142.12726],[62.983,42.90395,142.12746],[63.02,42.90365,142.12763],[63.04,42.90346,142.12769],[63.071,42.90319,142.12774],[63.096,42.90297,142.12775],[63.129,42.90267,142.12774],[63.16,42.9024,142.12766],[63.391,42.90044,142.12672],[63.429,42.90011,142.12657],[63.451,42.89993,142.12648],[63.48,42.89968,142.12636],[63.539,42.89917,142.12615],[63.585,42.89879,142.12593],[63.609,42.89859,142.12585],[63.63,42.8984,142.12581],[63.658,42.89815,142.1258],[63.744,42.89737,142.12584],[63.792,42.89694,142.12586],[63.822,42.89667,142.12587],[63.846,42.89645,142.12583],[63.874,42.89621,142.12576],[63.917,42.89584,142.12562],[63.989,42.89522,142.12536],[64.101,42.89428,142.12489],[64.166,42.89373,142.1246],[64.223,42.89327,142.12431],[64.29,42.89274,142.12388],[64.352,42.89227,142.1235],[64.376,42.89208,142.12335],[64.412,42.89179,142.12317],[64.438,42.89157,142.12305],[64.476,42.89123,142.12293],[64.532,42.89074,142.1228],[64.596,42.89017,142.12275],[64.631,42.88986,142.12277],[64.667,42.88953,142.12281],[64.701,42.88922,142.12283],[64.73,42.88897,142.12278],[64.755,42.88875,142.12269],[64.802,42.88836,142.12247],[64.829,42.88813,142.12237],[64.86,42.88786,142.12227],[64.888,42.88761,142.12223],[64.932,42.88722,142.12222],[64.956,42.887,142.12223],[64.998,42.88663,142.12228],[65.048,42.88618,142.12241],[65.085,42.88589,142.12261],[65.205,42.88497,142.1234],[65.237,42.88471,142.12356],[65.257,42.88455,142.12367],[65.284,42.88432,142.12376],[65.31,42.88409,142.12385],[65.35,42.88373,142.12388],[65.378,42.88348,142.12388],[65.404,42.88325,142.12386],[65.436,42.88296,142.12381],[65.475,42.88262,142.12372],[65.513,42.88228,142.12365],[65.541,42.88203,142.1236],[65.569,42.88178,142.12359],[65.599,42.88151,142.12362],[65.627,42.88126,142.12367],[65.635,42.88119,142.1237],[65.664,42.88095,142.1238],[65.69,42.88073,142.12392],[65.726,42.88042,142.12408],[65.764,42.8801,142.12423],[65.802,42.8798,142.12444],[65.844,42.87949,142.12474],[65.889,42.87924,142.12517],[66.035,42.87866,142.12677],[66.084,42.87846,142.12732],[66.126,42.87828,142.12777],[66.151,42.87813,142.12801],[66.169,42.87803,142.12817],[66.194,42.87785,142.12834],[66.213,42.8777,142.12846],[66.233,42.87753,142.12856],[66.385,42.87627,142.12927],[66.472,42.87554,142.12967],[66.525,42.8751,142.12993],[66.582,42.87462,142.13017],[66.621,42.87429,142.1303],[66.643,42.87409,142.13035],[66.687,42.87371,142.13048],[66.708,42.87353,142.13055],[66.738,42.87327,142.13065],[66.755,42.87313,142.13073],[66.777,42.87294,142.13084],[66.806,42.87273,142.13104],[66.833,42.87256,142.13128],[66.861,42.8724,142.13156],[66.878,42.87233,142.13174],[66.96,42.87202,142.13265],[67.003,42.87188,142.13313],[67.026,42.87182,142.13341],[67.051,42.87178,142.13371],[67.076,42.87178,142.13401],[67.097,42.87181,142.13427],[67.12,42.87188,142.13453],[67.145,42.87199,142.13481],[67.17,42.87213,142.13505],[67.21,42.87233,142.13545],[67.249,42.87254,142.13582],[67.287,42.87273,142.13622],[67.319,42.87283,142.13659],[67.37,42.87293,142.13719],[67.481,42.87311,142.13854],[67.517,42.87316,142.13898],[67.527,42.87316,142.1391],[67.549,42.87316,142.13937],[67.569,42.87316,142.13962],[67.601,42.87313,142.14],[67.624,42.87308,142.14027],[67.649,42.87301,142.14057],[67.685,42.87291,142.14099],[67.717,42.87282,142.14136],[67.747,42.8727,142.1417],[67.776,42.87258,142.14202],[67.85,42.87222,142.14278],[67.877,42.8721,142.14306],[67.903,42.872,142.14336],[67.927,42.87196,142.14363],[67.948,42.87194,142.1439],[67.973,42.87195,142.1442],[67.999,42.872,142.14451],[68.036,42.87206,142.14496],[68.145,42.87237,142.14623],[68.263,42.87269,142.14761],[68.297,42.87275,142.14801],[68.324,42.87275,142.14835],[68.351,42.87271,142.14867],[68.381,42.87264,142.14903],[68.409,42.87254,142.14935],[68.441,42.87239,142.14968],[68.581,42.8717,142.15112],[68.632,42.87144,142.15164],[68.679,42.8712,142.15211],[68.772,42.87073,142.15306],[68.884,42.87017,142.1542],[68.921,42.87,142.15459],[68.952,42.86987,142.15492],[69.122,42.86924,142.15683],[69.222,42.86886,142.15794],[69.287,42.86862,142.15866],[69.303,42.86857,142.15884],[69.317,42.86853,142.15901],[69.33,42.86851,142.15917],[69.343,42.86849,142.15932],[69.357,42.86849,142.1595],[69.374,42.8685,142.1597],[69.389,42.86853,142.15988],[69.403,42.86857,142.16005],[69.417,42.86862,142.16021],[69.431,42.86867,142.16036],[69.442,42.86873,142.16047],[69.465,42.86885,142.1607],[69.48,42.86894,142.16085],[69.579,42.86957,142.1617],[69.643,42.86996,142.16226],[69.668,42.87014,142.16247],[69.717,42.87051,142.1628],[69.803,42.87122,142.1632],[69.866,42.87173,142.16352],[69.925,42.8722,142.16385],[69.976,42.87258,142.16421],[70.037,42.87302,142.16466],[70.151,42.8738,142.16558],[70.225,42.8743,142.16616],[70.281,42.87466,142.16665],[70.338,42.875,142.16717],[70.367,42.87516,142.16745],[70.395,42.87532,142.16773],[70.447,42.87558,142.16824],[70.488,42.87583,142.16862],[70.529,42.87615,142.16888],[70.566,42.87647,142.16898],[70.617,42.87693,142.16894],[70.67,42.87739,142.16874],[70.733,42.87792,142.16851],[70.762,42.87819,142.16847],[70.81,42.87861,142.16847],[70.859,42.87904,142.16864],[70.928,42.87962,142.16894],[70.995,42.88018,142.16922],[71.016,42.88036,142.16931],[71.071,42.8808,142.16962],[71.123,42.8812,142.16996],[71.181,42.88161,142.1704],[71.24,42.882,142.17089],[71.297,42.88236,142.17137],[71.393,42.88299,142.17219],[71.435,42.88322,142.1726],[71.477,42.88342,142.17304],[71.518,42.88355,142.1735],[71.568,42.88367,142.17409],[71.64,42.88379,142.17497],[71.703,42.8839,142.17573],[71.74,42.88401,142.17615],[71.763,42.88412,142.1764],[71.787,42.88425,142.17662],[71.807,42.88438,142.17681],[71.835,42.88457,142.17701],[71.858,42.88476,142.17715],[71.882,42.88495,142.17727],[71.905,42.88515,142.17734],[71.932,42.88539,142.17738],[71.985,42.88587,142.17743],[72.021,42.88619,142.17748],[72.073,42.88665,142.1776],[72.128,42.8871,142.1779],[72.214,42.88771,142.17853],[72.269,42.88807,142.179],[72.29,42.8882,142.17918],[72.825,42.89144,142.18404],[72.848,42.89157,142.18427],[72.9,42.89187,142.18476],[72.929,42.892,142.18506],[72.955,42.89209,142.18536],[72.979,42.89215,142.18563],[73.01,42.89222,142.18601],[73.086,42.89231,142.18694],[73.135,42.89234,142.18753],[73.327,42.89246,142.18989],[73.361,42.89246,142.1903],[73.397,42.89244,142.19075],[73.434,42.89234,142.19118],[73.473,42.89218,142.19161],[73.508,42.89203,142.19197],[73.538,42.89185,142.19226],[73.587,42.89152,142.19266],[73.636,42.89122,142.19309],[73.675,42.89102,142.19348],[73.715,42.89089,142.19395],[73.756,42.89085,142.19444],[73.795,42.89081,142.19492],[73.847,42.89069,142.19554],[73.91,42.89044,142.19622],[74.243,42.88869,142.19955],[74.309,42.8883,142.20015],[74.498,42.8871,142.20181],[74.593,42.88651,142.20264],[74.633,42.88631,142.20305],[74.68,42.88615,142.20359],[74.739,42.88604,142.20429],[74.802,42.886,142.20506],[74.85,42.88594,142.20565],[74.871,42.88585,142.20588],[74.902,42.88571,142.2062],[74.928,42.88556,142.20645],[74.967,42.88527,142.20671],[75.045,42.88466,142.20717],[75.073,42.88445,142.20738],[75.137,42.88409,142.20798],[75.281,42.88343,142.20951],[75.558,42.88208,142.21237],[75.931,42.88028,142.21623],[76.269,42.87867,142.21975],[76.359,42.8783,142.22073],[76.478,42.87791,142.22209],[76.593,42.87756,142.22342],[76.693,42.87739,142.22462],[76.771,42.87744,142.22558],[76.776,42.87744,142.22564],[76.803,42.87748,142.22596],[76.831,42.87753,142.22631],[76.859,42.87761,142.22662],[76.888,42.87769,142.22697],[76.922,42.87783,142.22734],[76.966,42.87802,142.22782],[77.007,42.87821,142.22824],[77.055,42.8785,142.22868],[77.122,42.87896,142.22921],[77.269,42.87996,142.23039],[77.348,42.88045,142.23109],[77.403,42.88083,142.23152],[77.44,42.88113,142.2317],[77.481,42.8815,142.23178],[77.534,42.88198,142.23185],[77.579,42.88238,142.23193],[77.607,42.88262,142.23203],[77.635,42.88284,142.23217],[77.742,42.88368,142.23284],[77.826,42.88434,142.23333],[77.899,42.88491,142.23377],[77.906,42.88496,142.23381],[77.94,42.88521,142.23406],[77.983,42.88549,142.23442],[78.028,42.88572,142.23487],[78.132,42.88619,142.23599],[78.206,42.88651,142.23677],[78.236,42.88668,142.23706],[78.276,42.88695,142.23739],[78.309,42.88721,142.23759],[78.394,42.88792,142.23799],[78.427,42.88816,142.2382],[78.487,42.88863,142.23857],[78.539,42.88903,142.23891],[78.614,42.88956,142.23946],[78.687,42.89007,142.24004],[78.741,42.89044,142.24047],[78.772,42.89063,142.24075],[78.829,42.89086,142.24138],[78.886,42.8911,142.242],[78.925,42.8913,142.24238],[78.963,42.89156,142.2427],[79.035,42.89207,142.24324],[79.046,42.89214,142.24333],[79.065,42.89226,142.2435],[79.083,42.89237,142.24366],[79.095,42.89243,142.24378],[79.106,42.89249,142.2439],[79.121,42.89256,142.24406],[79.136,42.89261,142.24422],[79.149,42.89265,142.24437],[79.16,42.89268,142.2445],[79.173,42.8927,142.24466],[79.187,42.89272,142.24482],[79.201,42.89272,142.245],[79.215,42.89272,142.24517],[79.23,42.89271,142.24535],[79.247,42.89268,142.24555],[79.271,42.89262,142.24584],[79.305,42.89252,142.24624],[79.416,42.89218,142.24752],[79.445,42.89209,142.24785],[79.472,42.89198,142.24815],[79.502,42.89184,142.24846],[79.525,42.8917,142.24868],[79.545,42.89158,142.24885],[79.556,42.89151,142.24894],[79.575,42.89138,142.24909],[79.587,42.89129,142.24917],[79.599,42.8912,142.24925],[79.617,42.89105,142.24936],[79.637,42.89089,142.24946],[79.669,42.89062,142.2496],[79.708,42.89029,142.24979],[79.727,42.89015,142.2499],[79.745,42.89001,142.25002],[79.769,42.88984,142.25021],[79.81,42.88958,142.25056],[79.862,42.88926,142.25102],[79.895,42.88907,142.25132],[79.911,42.88896,142.25147],[79.947,42.88874,142.25179],[80.005,42.88837,142.25229],[80.033,42.88819,142.25254],[80.072,42.88794,142.25285],[80.238,42.88678,142.25416],[80.291,42.88644,142.2546],[80.33,42.88618,142.25492],[80.346,42.88609,142.25507],[80.364,42.88598,142.25525],[80.381,42.8859,142.25542],[80.398,42.88584,142.25561],[80.415,42.88578,142.2558],[80.428,42.88575,142.25596],[80.442,42.88573,142.25613],[80.455,42.88572,142.25629],[80.468,42.88572,142.25644],[80.482,42.88573,142.25662],[80.494,42.88574,142.25676],[80.508,42.88578,142.25693],[80.52,42.88581,142.25707],[80.534,42.88586,142.25722],[80.547,42.88592,142.25736],[80.564,42.886,142.25754],[80.584,42.88611,142.25774],[80.634,42.88638,142.25823],[80.649,42.88646,142.25838],[80.665,42.88654,142.25854],[80.685,42.88664,142.25874],[80.707,42.88674,142.25898],[80.725,42.88681,142.25917],[80.741,42.88687,142.25936],[80.755,42.88691,142.25952],[80.77,42.88695,142.25969],[80.785,42.88697,142.25988],[80.8,42.88699,142.26006],[80.814,42.887,142.26023],[80.829,42.887,142.26042],[80.844,42.88699,142.2606],[80.857,42.88697,142.26075],[80.87,42.88695,142.26091],[80.884,42.88692,142.26107],[80.898,42.88688,142.26124],[80.911,42.88684,142.26138],[80.924,42.88678,142.26153],[80.935,42.88674,142.26165],[80.95,42.88667,142.26181],[80.964,42.88659,142.26194],[80.977,42.88652,142.26206],[80.994,42.88641,142.26222],[81.009,42.88631,142.26234],[81.024,42.88621,142.26246],[81.04,42.88609,142.26259],[81.057,42.88597,142.2627],[81.166,42.88512,142.26337],[81.179,42.88503,142.26346],[81.192,42.88494,142.26356],[81.203,42.88486,142.26365],[81.214,42.88479,142.26375],[81.227,42.88472,142.26387],[81.24,42.88465,142.264],[81.253,42.8846,142.26414],[81.265,42.88455,142.26428],[81.276,42.88452,142.26441],[81.287,42.88449,142.26454],[81.297,42.88448,142.26466],[81.308,42.88447,142.26479],[81.323,42.88446,142.26497],[81.343,42.88445,142.26522],[81.396,42.88445,142.26587],[81.413,42.88445,142.26609],[81.43,42.88445,142.26629],[81.445,42.88444,142.26647],[81.459,42.88442,142.26664],[81.475,42.8844,142.26684],[81.488,42.88438,142.267],[81.503,42.88435,142.26718],[81.52,42.8843,142.26738],[81.54,42.88424,142.26761],[81.56,42.88417,142.26783],[81.591,42.88406,142.26818],[81.611,42.88399,142.2684],[81.629,42.88393,142.26861],[81.644,42.88388,142.26878],[81.662,42.88383,142.26899],[81.68,42.88378,142.2692],[81.7,42.88373,142.26943],[81.72,42.88368,142.26967],[81.734,42.88365,142.26984],[81.749,42.88363,142.27002],[81.779,42.88358,142.27038],[81.817,42.88356,142.27085],[82.059,42.8834,142.27382],[82.085,42.88337,142.27413],[82.112,42.88333,142.27445],[82.149,42.88324,142.2749],[82.212,42.88299,142.27558],[82.262,42.88274,142.2761],[82.362,42.88215,142.27702],[82.419,42.88186,142.2776],[82.514,42.88153,142.27867],[82.555,42.88142,142.27916],[82.665,42.88119,142.28047],[82.719,42.8811,142.28112],[82.734,42.88107,142.2813],[82.749,42.88102,142.28147],[82.765,42.88097,142.28165],[82.825,42.88073,142.28232],[82.838,42.88069,142.28246],[82.85,42.88066,142.2826],[82.863,42.88062,142.28275],[82.874,42.88061,142.28288],[82.886,42.8806,142.28304],[82.897,42.88061,142.28317],[82.908,42.88063,142.2833],[82.92,42.88066,142.28344],[82.931,42.88071,142.28356],[82.942,42.88075,142.28368],[82.952,42.88081,142.28378],[82.963,42.88088,142.28387],[82.973,42.88096,142.28394],[82.983,42.88103,142.28401],[82.995,42.88112,142.28407],[83.004,42.88121,142.28411],[83.016,42.88131,142.28415],[83.026,42.8814,142.28416],[83.036,42.88149,142.28416],[83.047,42.88159,142.28415],[83.057,42.88167,142.28412],[83.07,42.88178,142.28407],[83.081,42.88187,142.28401],[83.093,42.88196,142.28393],[83.105,42.88205,142.28384],[83.119,42.88213,142.28371],[83.135,42.88221,142.28355],[83.151,42.88228,142.28338],[83.439,42.8834,142.28019],[83.457,42.88348,142.27999],[83.475,42.88356,142.2798],[83.486,42.88362,142.27969],[83.498,42.88369,142.27958],[83.509,42.88376,142.27948],[83.521,42.88384,142.27939],[83.534,42.88393,142.2793],[83.546,42.88403,142.27923],[83.558,42.88413,142.27918],[83.568,42.88422,142.27915],[83.582,42.88434,142.27913],[83.593,42.88444,142.27912],[83.603,42.88453,142.27913],[83.615,42.88464,142.27917],[83.628,42.88475,142.27921],[83.641,42.88486,142.27928],[83.654,42.88496,142.27936],[83.666,42.88504,142.27945],[83.681,42.88513,142.27959],[83.695,42.88521,142.27972],[83.709,42.88527,142.27988],[83.725,42.88532,142.28006],[83.737,42.88534,142.2802],[83.749,42.88536,142.28034],[83.761,42.88535,142.28049],[83.773,42.88534,142.28064],[83.783,42.88532,142.28076],[83.794,42.88529,142.28089],[83.808,42.88524,142.28104],[83.824,42.88516,142.28121],[83.838,42.88509,142.28135],[83.856,42.88499,142.28153],[83.928,42.88456,142.28219],[83.94,42.88449,142.28231],[83.952,42.88443,142.28243],[83.963,42.88438,142.28254],[83.974,42.88434,142.28266],[83.987,42.88429,142.2828],[84.001,42.88425,142.28297],[84.012,42.88422,142.2831],[84.025,42.8842,142.28325],[84.037,42.88418,142.28341],[84.05,42.88418,142.28357],[84.064,42.88418,142.28374],[84.078,42.8842,142.2839],[84.092,42.88422,142.28407],[84.104,42.88424,142.28422],[84.117,42.88428,142.28437],[84.151,42.88439,142.28475],[84.246,42.88469,142.28584],[84.448,42.88541,142.28813],[84.498,42.88558,142.28869],[84.536,42.88576,142.28909],[84.573,42.88596,142.28946],[84.601,42.88615,142.28968],[84.631,42.88639,142.28986],[84.663,42.88664,142.29004],[84.72,42.88714,142.29021],[84.723,42.88717,142.29022],[84.77,42.88757,142.29038],[84.806,42.88786,142.29055],[84.846,42.88818,142.29081],[84.872,42.88834,142.29103],[84.9,42.8885,142.29131],[84.926,42.88863,142.29157],[84.954,42.88876,142.29186],[84.979,42.88886,142.29213],[85.005,42.88892,142.29244],[85.03,42.88896,142.29274],[85.055,42.88899,142.29305],[85.102,42.88899,142.29363],[85.398,42.88901,142.29725],[85.428,42.88901,142.29763],[85.447,42.88905,142.29785],[85.467,42.88913,142.29808],[85.485,42.88922,142.29826],[85.504,42.88933,142.29844],[85.52,42.88944,142.29856],[85.532,42.88954,142.29863],[85.554,42.88973,142.29869],[85.591,42.89006,142.29876],[85.615,42.89028,142.29877],[85.637,42.89047,142.2988],[85.67,42.89077,142.29882],[85.692,42.89096,142.2989],[85.724,42.89122,142.29903],[85.746,42.89138,142.29922],[85.766,42.89149,142.2994],[85.786,42.89157,142.29962],[85.806,42.89164,142.29984],[85.869,42.89179,142.30059],[86.091,42.89235,142.3032],[86.116,42.89246,142.30348],[86.142,42.89258,142.30374],[86.162,42.89269,142.30395],[86.181,42.89279,142.30414],[86.203,42.89294,142.30431],[86.221,42.89306,142.30446],[86.243,42.89321,142.30463],[86.53,42.89523,142.30684],[86.81,42.89714,142.30906],[87.017,42.89857,142.31071],[87.125,42.89931,142.31156],[87.212,42.89988,142.31229],[87.283,42.90029,142.31296],[87.341,42.90057,142.31355],[87.415,42.90089,142.31435],[87.586,42.90155,142.31625],[87.813,42.9024,142.31879],[88.025,42.90317,142.32117],[88.038,42.90322,142.32132],[88.241,42.90395,142.32359],[88.249,42.90398,142.32368],[88.41,42.90451,142.32552],[88.702,42.90526,142.32896],[89.085,42.90618,142.3335],[90.231,42.90883,142.34709],[90.582,42.90958,142.35128],[90.61,42.90962,142.35161],[90.638,42.90965,142.35195],[90.668,42.90968,142.35231],[90.69,42.90968,142.35259],[90.718,42.90964,142.35293],[90.739,42.90959,142.35318],[90.768,42.90951,142.35352],[90.802,42.90938,142.3539],[90.845,42.90916,142.35432],[90.897,42.90889,142.35485],[90.92,42.90878,142.35509],[90.943,42.90868,142.35534],[90.974,42.90855,142.35568],[91.011,42.90845,142.35611],[91.038,42.90844,142.35643],[91.066,42.90845,142.35678],[91.087,42.90849,142.35703],[91.108,42.90855,142.35728],[91.131,42.90863,142.35754],[91.144,42.90869,142.35768],[91.16,42.90876,142.35785],[91.178,42.90886,142.35803],[91.199,42.90898,142.35821],[91.314,42.90972,142.3592],[91.582,42.91145,142.3615],[91.63,42.91174,142.36193],[91.684,42.91209,142.3624],[91.701,42.91219,142.36255],[91.72,42.91229,142.36273],[91.735,42.91237,142.36289],[91.749,42.91243,142.36304],[91.762,42.91247,142.36319],[91.778,42.91252,142.36337],[91.793,42.91255,142.36356],[91.809,42.91257,142.36374],[91.824,42.91257,142.36393],[91.842,42.91256,142.36415],[91.855,42.91254,142.36432],[91.869,42.91251,142.36447],[91.882,42.91247,142.36463],[91.899,42.91241,142.36483],[91.918,42.91232,142.36503],[91.935,42.91224,142.36519],[91.947,42.91217,142.3653],[91.96,42.91208,142.36541],[91.972,42.912,142.36551],[91.984,42.91191,142.36559],[91.998,42.9118,142.36568],[92.012,42.91169,142.36576],[92.024,42.91159,142.36581],[92.038,42.91147,142.36586],[92.052,42.91134,142.3659],[92.065,42.91123,142.36592],[92.079,42.9111,142.36593],[92.094,42.91097,142.36592],[92.11,42.91083,142.36589],[92.127,42.91068,142.36584],[92.141,42.91056,142.36579],[92.156,42.91043,142.36571],[92.175,42.91028,142.3656],[92.191,42.91017,142.36549],[92.206,42.91006,142.36536],[92.227,42.90994,142.36518],[92.24,42.90987,142.36504],[92.258,42.90978,142.36487],[92.276,42.90969,142.36467],[92.543,42.90851,142.36183],[92.561,42.90843,142.36164],[92.579,42.90833,142.36145],[92.596,42.90823,142.3613],[92.608,42.90815,142.3612],[92.622,42.90805,142.3611],[92.633,42.90797,142.36103],[92.643,42.90788,142.36097],[92.654,42.90779,142.36093],[92.664,42.90771,142.3609],[92.675,42.90761,142.36088],[92.685,42.90752,142.36087],[92.696,42.90742,142.36087],[92.708,42.90731,142.36088],[92.72,42.90721,142.36091],[92.732,42.9071,142.36096],[92.744,42.90701,142.36101],[92.755,42.90691,142.36108],[92.768,42.90683,142.36117],[92.78,42.90675,142.36127],[92.79,42.90668,142.36137],[92.804,42.90661,142.36151],[92.816,42.90656,142.36164],[92.83,42.90651,142.36179],[92.839,42.90649,142.3619],[92.852,42.90646,142.36206],[92.864,42.90645,142.3622],[92.876,42.90645,142.36235],[92.889,42.90647,142.3625],[92.902,42.90649,142.36266],[92.915,42.90653,142.36281],[92.931,42.90659,142.36299],[92.949,42.90668,142.36318],[92.982,42.90685,142.36351],[93.035,42.90715,142.36401],[93.489,42.90953,142.36855],[93.549,42.90982,142.36917],[93.585,42.90998,142.36955],[93.621,42.91012,142.36996],[93.652,42.91024,142.3703],[93.671,42.91029,142.37052],[93.732,42.91045,142.37124],[93.827,42.91066,142.37237],[93.901,42.91083,142.37325],[93.922,42.91087,142.3735],[93.945,42.91094,142.37376],[93.969,42.91102,142.37404],[93.99,42.91112,142.37426],[94.015,42.91125,142.37452],[94.042,42.91141,142.37476],[94.066,42.91157,142.37496],[94.09,42.91174,142.37513],[94.111,42.9119,142.37527],[94.134,42.91209,142.37539],[94.197,42.91261,142.3757],[94.218,42.91277,142.37583],[94.237,42.9129,142.37598],[94.256,42.91301,142.37616],[94.278,42.91311,142.37639],[94.296,42.91315,142.3766],[94.314,42.91317,142.37682],[94.335,42.91318,142.37708],[94.354,42.91317,142.37731],[94.386,42.91316,142.37771],[94.407,42.9132,142.37796],[94.422,42.91324,142.37813],[94.437,42.91331,142.37829],[94.454,42.91341,142.37845],[94.472,42.91353,142.3786],[94.488,42.91366,142.3787],[94.502,42.91377,142.37876],[94.518,42.91391,142.37882],[94.62,42.91482,142.379],[94.664,42.91521,142.37908],[94.686,42.9154,142.37915],[94.703,42.91554,142.37923],[94.718,42.91566,142.37932],[94.734,42.91578,142.37943],[94.753,42.91591,142.37959],[94.771,42.91601,142.37975],[94.789,42.91611,142.37993],[94.811,42.91619,142.38017],[94.832,42.91626,142.38042],[94.85,42.9163,142.38063],[94.871,42.91632,142.38088],[94.889,42.91631,142.38111],[94.907,42.91629,142.38133],[94.932,42.91623,142.38162],[94.988,42.91605,142.38227],[95.071,42.9158,142.38322],[95.158,42.91554,142.38424],[95.264,42.9152,142.38546],[95.291,42.91513,142.38576],[95.312,42.91508,142.38602],[95.333,42.91505,142.38627],[95.354,42.91503,142.38653],[95.374,42.91502,142.38677],[95.516,42.91512,142.38851],[95.651,42.91523,142.39016],[95.682,42.91525,142.39054],[95.706,42.91525,142.39083],[95.727,42.91524,142.39109],[95.748,42.91521,142.39135],[95.771,42.91515,142.39161],[95.796,42.91507,142.39191],[95.868,42.91484,142.39273],[95.887,42.91479,142.39296],[95.904,42.91477,142.39316],[95.919,42.91477,142.39335],[95.934,42.91479,142.39352],[95.947,42.91482,142.39369],[95.962,42.91488,142.39385],[95.977,42.91495,142.39401],[95.997,42.91506,142.39419],[96.041,42.91534,142.39457],[96.061,42.91546,142.39475],[96.076,42.91555,142.3949],[96.09,42.91562,142.39504],[96.105,42.91569,142.3952],[96.126,42.91578,142.39542],[96.146,42.91584,142.39565],[96.166,42.9159,142.39589],[96.186,42.91594,142.39612],[96.206,42.91598,142.39637],[96.228,42.91599,142.39664],[96.252,42.91599,142.39693],[96.298,42.91595,142.39749],[96.357,42.9159,142.39821],[96.43,42.91588,142.39911],[97.127,42.91567,142.40766],[97.149,42.91565,142.40793],[97.182,42.91559,142.40833],[97.213,42.91549,142.40869],[97.239,42.91537,142.40897],[97.268,42.9152,142.40922],[97.298,42.91497,142.40943],[97.327,42.91472,142.40955],[97.354,42.91449,142.40961],[97.382,42.91424,142.40963],[97.441,42.91371,142.40966],[97.466,42.91348,142.4097],[97.48,42.91335,142.40972],[97.497,42.91321,142.40978],[97.51,42.91311,142.40984],[97.522,42.91301,142.40992],[97.537,42.91291,142.41004],[97.554,42.91281,142.4102],[97.594,42.91258,142.41058],[97.612,42.91247,142.41075],[97.627,42.91238,142.41087],[97.64,42.91228,142.41097],[97.656,42.91215,142.41105],[97.672,42.91201,142.41109],[97.688,42.91186,142.41112],[97.702,42.91174,142.41113],[97.753,42.91129,142.41114],[97.772,42.91111,142.41116],[97.793,42.91093,142.41119],[97.813,42.91075,142.41125],[97.826,42.91064,142.41131],[97.841,42.91051,142.41138],[97.857,42.91039,142.41147],[97.873,42.91027,142.41158],[97.891,42.91016,142.41173],[97.942,42.90987,142.41222],[97.994,42.90958,142.41272],[98.038,42.90934,142.41316],[98.093,42.90903,142.41368],[98.117,42.90891,142.41393],[98.136,42.90884,142.41414],[98.156,42.90879,142.41437],[98.176,42.90876,142.41462],[98.2,42.90875,142.41492],[98.219,42.90878,142.41515],[98.278,42.90889,142.41585],[98.302,42.90892,142.41615],[98.323,42.90892,142.4164],[98.342,42.9089,142.41663],[98.363,42.90884,142.41688],[98.381,42.90877,142.41708],[98.403,42.90866,142.4173],[98.42,42.90855,142.41745],[98.441,42.9084,142.41761],[98.459,42.90827,142.41773],[98.509,42.90786,142.41799],[98.533,42.90766,142.41811],[98.574,42.90734,142.41834],[98.656,42.90666,142.41874],[98.695,42.90633,142.41889],[98.714,42.90616,142.41894],[98.812,42.90528,142.41908],[98.847,42.90497,142.41915],[98.858,42.90488,142.41921],[98.883,42.90469,142.41936],[98.915,42.90445,142.41959],[98.943,42.90428,142.41984],[98.966,42.90416,142.42008],[98.992,42.90407,142.42036],[99.035,42.90394,142.42086],[99.061,42.90386,142.42116],[99.083,42.90376,142.42139],[99.102,42.90365,142.42158],[99.124,42.90349,142.42173],[99.143,42.90334,142.42184],[99.159,42.9032,142.42188],[99.175,42.90305,142.42189],[99.188,42.90294,142.42188],[99.203,42.9028,142.42185],[99.221,42.90266,142.42178],[99.241,42.9025,142.42166],[99.333,42.90184,142.42097],[99.35,42.90169,142.42091],[99.374,42.90147,142.42091],[99.396,42.90128,142.42095],[99.445,42.90085,142.42107],[99.479,42.90054,142.42107],[99.518,42.90019,142.42104],[99.548,42.89992,142.42096],[99.579,42.89967,142.4208],[99.612,42.89945,142.42054],[99.721,42.89872,142.41964],[99.799,42.89818,142.41902],[99.824,42.89799,142.41889],[99.837,42.89788,142.41883],[99.852,42.89775,142.41879],[99.861,42.89766,142.41878],[99.87,42.89758,142.41879],[99.88,42.8975,142.41881],[99.889,42.89741,142.41884],[99.9,42.89732,142.4189],[99.91,42.89725,142.41896],[99.919,42.89719,142.41904],[99.928,42.89714,142.41912],[99.937,42.89709,142.41922],[99.947,42.89704,142.41932],[99.958,42.89701,142.41944],[99.968,42.89698,142.41956],[99.979,42.89697,142.4197],[99.993,42.89698,142.41987],[100.027,42.89701,142.42028],[100.267,42.89742,142.42317],[100.333,42.89752,142.42398],[100.36,42.89755,142.4243],[100.387,42.89756,142.42463],[100.413,42.89755,142.42496],[100.438,42.89751,142.42526],[100.464,42.89746,142.42557],[100.493,42.89739,142.4259],[100.6,42.8971,142.42716],[100.664,42.89695,142.42792],[100.722,42.89679,142.42861],[100.762,42.89664,142.42904],[100.795,42.89646,142.42938],[100.829,42.89625,142.42968],[100.85,42.89609,142.42979],[100.87,42.89591,142.42988],[100.901,42.89565,142.43],[100.931,42.89539,142.43007],[101.275,42.89234,142.43081],[101.504,42.89031,142.43125],[101.646,42.88904,142.43152],[102.027,42.88566,142.43224],[102.128,42.88476,142.43243],[102.181,42.88429,142.43252],[102.214,42.88401,142.43264],[102.243,42.88376,142.43275],[102.277,42.88349,142.43294],[102.326,42.88312,142.43327],[102.362,42.88289,142.43358],[102.376,42.88279,142.4337],[102.491,42.88202,142.43464],[102.514,42.88188,142.43484],[102.533,42.88176,142.435],[102.555,42.88162,142.43519],[102.566,42.88155,142.4353],[102.684,42.88078,142.43628],[102.692,42.88072,142.43636],[102.72,42.88054,142.43659],[102.801,42.88001,142.43727],[102.836,42.87979,142.43757],[102.848,42.87971,142.43766],[102.86,42.87963,142.43777],[102.895,42.8794,142.43807],[102.988,42.87879,142.43885],[103.028,42.87854,142.43919],[103.124,42.87791,142.44001],[103.135,42.87783,142.4401],[103.2,42.87742,142.44065],[103.208,42.87736,142.44073],[103.219,42.8773,142.44081],[103.286,42.87685,142.44137],[103.299,42.87677,142.44148],[103.389,42.87618,142.44225],[103.412,42.87602,142.44242],[103.432,42.87614,142.44262],[103.46,42.87629,142.44289],[103.468,42.87633,142.44297],[103.514,42.87659,142.44342],[103.56,42.87682,142.44389],[103.66,42.87737,142.44485],[103.686,42.87752,142.44511],[103.738,42.8778,142.44561],[103.783,42.87804,142.44604],[103.791,42.87809,142.44612],[103.883,42.8786,142.44701],[103.904,42.87872,142.44721],[103.943,42.87894,142.44759],[103.951,42.87898,142.44766],[103.955,42.879,142.44771],[104.001,42.87926,142.44815],[104.018,42.87935,142.44831],[104.084,42.87971,142.44896],[104.233,42.88053,142.45041],[104.335,42.88112,142.45137],[104.393,42.88143,142.45193],[104.423,42.88159,142.45223],[104.519,42.88213,142.45316],[104.887,42.88417,142.45671],[105.44,42.88723,142.46206],[105.674,42.88852,142.46433],[105.994,42.8903,142.46741],[106.217,42.89153,142.46958],[106.469,42.89294,142.472],[106.552,42.89336,142.47284],[106.716,42.89391,142.47471],[106.837,42.89431,142.47608],[107.186,42.89544,142.48008],[107.224,42.89555,142.48052],[107.243,42.89559,142.48075],[107.267,42.8956,142.48105],[107.29,42.8956,142.48134],[107.416,42.89561,142.48288],[107.501,42.89559,142.48392],[107.54,42.89558,142.4844],[107.566,42.89555,142.48471],[107.597,42.89551,142.48509],[107.631,42.89544,142.4855],[107.724,42.89525,142.48661],[107.788,42.89516,142.48739],[107.833,42.89516,142.48794],[107.948,42.89517,142.48936],[108.519,42.89525,142.49636],[108.557,42.89528,142.49683],[108.603,42.89539,142.49736],[108.649,42.89556,142.49787],[108.695,42.89571,142.49842],[108.736,42.89578,142.4989]] \ No newline at end of file diff --git a/song-274/route/274-transect.html b/song-274/route/274-transect.html new file mode 100644 index 0000000..7c8b003 --- /dev/null +++ b/song-274/route/274-transect.html @@ -0,0 +1,341 @@ +274 Transect + + + + + +
+
+

274 Transect

+

The working roster for the 川端橋–右左府 stretch of National Route 274, + ordered by distance along the road. Structures come from the 北海道開発局 facility registers, + watercourses from 国土数値情報 W05, addresses from the 国土地理院 reverse geocoder.

+
+ WEST 川端橋 37.3 km · 夕張郡由仁町川端 + EAST 右左府 106.2 km · 沙流郡日高町日高 + +
+
+ +

Strip — the road straightened

+

Distance runs left to right, structures above the line, everything else below. +The band across the top is the 大字 the road is passing through, sampled every 250 m. +Distances are measured from a datum near 上野幌 and are not official kiloposts.

+
+
+ + + + + +
+
+
+
+
+ +

Ground — true shape

+

The same roster in real coordinates. 50 km east to west, under 8 km +north to south, so the road reads nearly straight apart from the swing south through 穂別.

+
+ +

Roster

+
+ + + +
kmObjectKanaKindOffset (m)Address
+ +
OpenStreetMap contributors (ODbL) · 国土交通省 北海道開発局 個別施設計画, 令和8年3月 +· 国土数値情報 河川データセット W05 via 国立情報学研究所 · 国土地理院 逆ジオコーディング +· 日本郵便 郵便番号データ. Positions are derived, not surveyed — a starting point for +verification.
+
+ + \ No newline at end of file diff --git a/song-274/route/README.md b/song-274/route/README.md new file mode 100644 index 0000000..a8c5905 --- /dev/null +++ b/song-274/route/README.md @@ -0,0 +1,74 @@ +# Route data — 274 + +Copied from `novoyuuparosk-wiki/ncmr-songs/wip/274/`, which is where these are +generated and edited. **Treat everything here as read-only**: change it upstream +and re-copy, or the two will drift. + +## Files + +| File | What it is | +|---|---| +| `274-lyrics-index.csv` | One row per sung line, resolved to its roster entry, with start/stop timing and coordinates. The file the video syncs to. | +| `274-lookup.csv` | The full roster — every named object on the stretch, sung or not. The page draws all of these; the index only covers the ones that get sung. | +| `274-route.json` | The road itself: `[km, lat, lon]` per point, for drawing the line. | +| `274-route-west.json` | A short run of R274 before the western cutoff, same format — km 30.46 to 35.53, ending exactly on the first point of `274-route.json`. The road arriving before 川端橋, in symmetry with the east stub. Also in the GeoJSON as `kind: route-west`. | +| `274-route-east.json` | A short continuation past the eastern cutoff — km 108.56 to 113.99, overlapping the main shape by 0.18 km so the join is seamless. For `東に続く`: the road visibly carrying on after the last named thing. Also in the GeoJSON as `kind: route-east`. | +| `274-districts.json` | The 大字 bands with entry/exit km — the strip across the top of the transect page. | +| `274-lookup.geojson` | Route line, one point per roster entry, and the bands as geometryless features. For anything that wants GeoJSON directly. | +| `274-transect.html` | The interactive page the video is based on. Self-contained; opens from disk. | + +## Using the index + +`start` / `stop` are `mm:ss.xx`; `start_s` / `stop_s` are the same in seconds. +`stop` is the next timestamp in the LRC, blank spacer lines included, so every +line has one and the spans butt up against each other without gaps. + +Join to `274-lookup.csv` on `object`, which is unique across the roster. The +`sung` column is the line as it appears in the lyric — the three power stations +are sung without their operator prefix, so `sung` and `object` differ for those. + +Two row types are not ordinary nodes: + +- **`kind = district`** — the address headers. These have no single point; they + carry the first coordinate of the run they introduce, plus `km_from`/`km_to` + spanning it. +- **`kind = closing`** — `東に続く`, which is text rather than an object. No + coordinates. + +**モトツ橋にモトツシェルター emits two rows** sharing one timing and one +coordinate. It is one structure to drive through — a bridge roofed by a shelter, +between モトツトンネル and 福山トンネル — and two separately inspected facilities +in the national registers. Light both or either; they are the same place. + +## Caveats that matter for the visuals + +**All three route shapes are single clean polylines.** Where R274 has a central +reservation — the divided climbs after 福山大橋 and through 占冠 — OpenStreetMap +draws each carriageway as its own way. The shapes follow one spine through those +sections: point spacing adds up to exactly the km span, and km strictly increases +along every file, so the line can be drawn point to point without sideways spikes. + +**`km` is not an official kilopost.** It is measured along the OpenStreetMap +route geometry from a datum near 上野幌, because the route relation is broken +across the divided carriageway in 札幌. Official KP is roughly this plus 14 km, +unverified. Ordering, spacing and geometry are all internally consistent; only +the absolute labels would be wrong if shown as real KP. + +**`offset_m` is the straight-line distance from the object to the road.** Some +things sung are well off the carriageway — 日高神社 is 221 m away, クオーベツダム +1798 m. If the camera follows the road, an object's own coordinate is not always +where the camera should point. + +**The lyric is monotonic by km end to end** — no backward jumps — so a camera +driven by `start_s` moves forward continuously from km 38.41 to 106.22. + +**The lyric ends before the music does.** Lines run 14.54 s to 492.66 s (8:12), +while the release master is 619.27 s (10:19). Roughly two minutes of music play +past 東に続く. + +## Provenance + +How the roster was built, what was verified by hand, and what is derived rather +than measured: see `274-dev.md` in the source directory. Several entries exist +only because they were found on Google Maps and are absent from OpenStreetMap +entirely — ten of them, including four of the eight shrines. -- 2.52.0 From fac282bcbc8e2b6b9e11df27b9d090ea5eb985c4 Mon Sep 17 00:00:00 2001 From: Mikkeli Date: Thu, 17 Sep 2026 09:56:16 +0900 Subject: [PATCH 4/7] feat(274): show the east stub ahead of time; slow its paint run MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Transect.tsx: the dimmed "road ahead" now includes the east continuation (274-route-east.json), so it is visible all along instead of appearing only once the paint reaches it after 東に続く. - progress.ts: EAST_RUN_S 4 -> 75. The paint used to dash along the east stub (5.25 km in 4 s, about 1.3 km/s, after 0.55 km/s for the leg before it); it now takes 75 s from 東に続く, well into the outro. Verified: eslint + tsc clean. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01PLt25nCVMsoroKALYUBu6u --- src/song-274/Transect.tsx | 12 +++++++----- src/song-274/progress.ts | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/song-274/Transect.tsx b/src/song-274/Transect.tsx index c4e70f2..bac24dd 100644 --- a/src/song-274/Transect.tsx +++ b/src/song-274/Transect.tsx @@ -69,18 +69,20 @@ export const Transect: React.FC = ({ palette, audio, data }) => { const frame = useCurrentFrame(); const { fps, width, height } = useVideoConfig(); const projection = useMemo(() => (data ? projectGround(data.route) : null), [data]); + // The main road plus the east continuation. The paint runs into the latter + // after 東に続く; the camera and overview stay on the main road, so that run + // leaves the screen. + const paintRoute = useMemo(() => (data ? paintableRoute(data) : []), [data]); + // The dimmed road ahead includes the east continuation, so it shows all along. const fullRoad = useMemo( - () => (data && projection ? routePath(data.route, projection) : ""), - [data, projection], + () => (projection && paintRoute.length > 1 ? routePath(paintRoute, projection) : ""), + [paintRoute, projection], ); const bounds = useMemo( () => (data && projection ? prefixBounds(data.route, projection) : []), [data, projection], ); const kmAt = useMemo(() => (data ? monotoneCurve(progressKeyframes(data)) : null), [data]); - // The paint may run past the main road into the east continuation; the camera - // and overview stay on the main road, so that run leaves the screen. - const paintRoute = useMemo(() => (data ? paintableRoute(data) : []), [data]); const westRoad = useMemo( () => data && projection && data.routeWest.length > 1 diff --git a/src/song-274/progress.ts b/src/song-274/progress.ts index 8de0e90..895751c 100644 --- a/src/song-274/progress.ts +++ b/src/song-274/progress.ts @@ -13,7 +13,7 @@ import type { RoutePoint, TransectData } from "./data"; export type Keyframe = { t: number; km: number }; /** How long the paint takes to run the east continuation once 東に続く starts. */ -export const EAST_RUN_S = 4; +export const EAST_RUN_S = 75.0; /** * Pins, in time order: the start of the route at 0 s and each sung line's -- 2.52.0 From 04963c929a4624bf9dbfc0f9a3d6241bf8e7e7cc Mon Sep 17 00:00:00 2001 From: Mikkeli Date: Thu, 17 Sep 2026 10:31:58 +0900 Subject: [PATCH 5/7] feat(274): spectrum outro for the transect MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From SPECTRUM_START_S the nodes stop following the lyric and behave as a spectrum analyser: every sung node is given one log-spaced frequency band (40 Hz–12 kHz), dealt out in a seeded shuffle, and sizes up and down with that band's amplitude. - spectrum.ts: band maths and every tunable. Levels come from @remotion/media-utils visualizeAudio on audio loaded by useWindowedAudioData (10 s windows, so the 227 MB WAV is never decoded whole; before the outro the window stays parked at its start). Bands average the FFT bins they span, or interpolate for bands narrower than a bin, so neighbouring bass nodes never move in lockstep. Level = (raw × GAIN × (f/40 Hz)^TREBLE_TILT)^CURVE with a release that looks back RELEASE_FRAMES frames at RELEASE_DECAY per frame. Defaults were calibrated on the release2 outro (nodes pinned at full size 0.6% of the time). The node→band mapping uses Remotion's seeded random() (BAND_SEED), not Math.random(), so render tabs and the Studio agree. - nodeAnimation.ts: SPECTRUM_PEAK and spectrumLook(level), alongside lightUp and switchOff, plus a levelExponential shaping curve. - Transect.tsx: hands each node over from its lyric look to its spectrum look over SPECTRUM_FADE_S. - package.json: declare @remotion/media-utils 4.0.522 (already installed as a dependency of the CLI; now pinned alongside the other Remotion packages). Verified: eslint + tsc clean on this commit's tree; outro stills show nodes sized by band level, so the windowed audio loads during renders. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01PLt25nCVMsoroKALYUBu6u --- package.json | 1 + src/song-274/Transect.tsx | 38 +++++++-- src/song-274/nodeAnimation.ts | 14 ++++ src/song-274/spectrum.ts | 152 ++++++++++++++++++++++++++++++++++ 4 files changed, 200 insertions(+), 5 deletions(-) create mode 100644 src/song-274/spectrum.ts diff --git a/package.json b/package.json index 9cc72e2..d4c4138 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "license": "UNLICENSED", "dependencies": { "@remotion/cli": "4.0.522", + "@remotion/media-utils": "4.0.522", "@remotion/tailwind-v4": "4.0.522", "react": "19.2.3", "react-dom": "19.2.3", diff --git a/src/song-274/Transect.tsx b/src/song-274/Transect.tsx index bac24dd..66d4d32 100644 --- a/src/song-274/Transect.tsx +++ b/src/song-274/Transect.tsx @@ -19,7 +19,15 @@ import { } from "./camera"; import type { Cue, RosterItem, TransectData } from "./data"; import { extendBounds, GROUND, prefixBounds, projectGround, routePath } from "./layout"; -import { isAwake, nodeLookAt } from "./nodeAnimation"; +import { useWindowedAudioData } from "@remotion/media-utils"; +import { isAwake, mixLooks, nodeLookAt, spectrumLook } from "./nodeAnimation"; +import { + AUDIO_WINDOW_S, + audioWindowFrame, + bandLevels, + shuffledBandFrequencies, + spectrumWeight, +} from "./spectrum"; import type { TransectPalette } from "./palette"; import { coveredRoute, @@ -92,6 +100,17 @@ export const Transect: React.FC = ({ palette, audio, data }) => { ); const parts = useMemo(() => narrationParts(data ? data.lines : []), [data]); const cueMap = useMemo(() => cuesByObject(data ? data.cues : []), [data]); + // Each node gets one log-spaced band, dealt out in a seeded shuffle. + const frequencies = useMemo( + () => shuffledBandFrequencies(data ? data.items.length : 0), + [data], + ); + const { audioData, dataOffsetInSeconds } = useWindowedAudioData({ + src: staticFile(audio), + frame: audioWindowFrame(frame, fps), + fps, + windowInSeconds: AUDIO_WINDOW_S, + }); if (!data || !projection || !kmAt) { return ; @@ -129,10 +148,19 @@ export const Transect: React.FC = ({ palette, audio, data }) => { view, ); - const nodes = data.items.map((item: RosterItem) => ({ - item, - look: nodeLookAt(currentCue(cueMap.get(item.object), t), t), - })); + // In the outro the nodes hand over from their lyric looks to the spectrum. + const spectrum = spectrumWeight(t); + const levels = + spectrum > 0 && audioData + ? bandLevels({ audioData, dataOffsetInSeconds, frame, fps, frequencies }) + : null; + const nodes = data.items.map((item: RosterItem, i) => { + const lyricLook = nodeLookAt(currentCue(cueMap.get(item.object), t), t); + return { + item, + look: levels ? mixLooks(lyricLook, spectrumLook(levels[i]), spectrum) : lyricLook, + }; + }); const draw = ({ item, look }: (typeof nodes)[number]) => ( { return switchOff(t - offS, lightUp(offS - cue.startS)); }; +/** A node at full amplitude in the outro spectrum (see spectrum.ts). */ +export const SPECTRUM_PEAK: NodeLook = { radius: 9, opacity: 1 }; + +/** level scaling helper */ +export const levelExponential = (level: number, exponent: number = 2.0): number => + Math.pow(clamp01(level), exponent); + +/** + * A node in the outro spectrum. + * @param level its band's level, 0 (silence: resting) to 1 (SPECTRUM_PEAK) + */ +export const spectrumLook = (level: number): NodeLook => + mixLooks(RESTING, SPECTRUM_PEAK, clamp01(levelExponential(level))); + /** Whether a look is anything other than resting (drawn on top if so). */ export const isAwake = (look: NodeLook): boolean => look.radius !== RESTING.radius || look.opacity !== RESTING.opacity; diff --git a/src/song-274/spectrum.ts b/src/song-274/spectrum.ts new file mode 100644 index 0000000..bee856a --- /dev/null +++ b/src/song-274/spectrum.ts @@ -0,0 +1,152 @@ +import { visualizeAudio, type MediaUtilsAudioData } from "@remotion/media-utils"; +import { random } from "remotion"; + +/** + * The outro spectrum: from SPECTRUM_START_S the nodes stop following the lyric + * and act as a spectrum analyser. The log-spaced frequency bands are dealt out + * to the nodes in a seeded shuffle (see BAND_SEED), with no relation to where + * a node is on the road; each node's size follows its band's amplitude. + * + * Everything here is a pure function of the frame, so Studio previews and + * renders agree. Starting values were calibrated on the outro of + * 274_release2.wav (8:20 to the end, left channel). + */ + +/** When the spectrum takes over from the lyric-driven looks. */ +export const SPECTRUM_START_S = 504.4; +/** How long the hand-over from lyric looks to spectrum looks takes. */ +export const SPECTRUM_FADE_S = 1.5; + +/** Band centres are log-spaced across this range, one band per node. */ +export const FREQ_LOW_HZ = 40; +export const FREQ_HIGH_HZ = 12000; + +/** + * Seed for the node-to-band shuffle. Any string or number; change it to deal a + * different mapping. Seeded (Remotion's random()) rather than Math.random(), so + * every render tab and the Studio agree on which node gets which band. + */ +export const BAND_SEED = "274-spectrum"; + +/** + * Raw amplitude → level (0–1): (raw × GAIN × (f / FREQ_LOW_HZ)^TREBLE_TILT)^CURVE. + * High bands are far quieter than bass, so TREBLE_TILT lifts them; CURVE below 1 + * lifts quiet passages so more than the loudest bands move. + * + * On the release2 outro these give a median level of 0.35 (10–90% range + * 0.18–0.67), with nodes pinned at full size 0.6% of the time. GAIN 10 pinned + * them 11% of the time with the bass nodes nearly always full; CURVE 0.8 with + * GAIN 8 is livelier (0.15–0.85) but pins 6%. + */ +export const GAIN = 5; +export const TREBLE_TILT = 0.5; +export const CURVE = 0.6; + +/** + * Release: a node's level is the loudest of its last RELEASE_FRAMES frames, each + * frame back multiplied by RELEASE_DECAY once more. Hits jump up at once and + * fall back smoothly, without any state carried between frames. + */ +export const RELEASE_FRAMES = 6; +export const RELEASE_DECAY = 0.75; + +/** FFT size for visualizeAudio: bins are (sample rate / 2) / FFT_SAMPLES wide (23.4 Hz). */ +export const FFT_SAMPLES = 1024; +/** Seconds of audio useWindowedAudioData keeps loaded around the current frame. */ +export const AUDIO_WINDOW_S = 10; + +const clamp01 = (v: number) => Math.min(1, Math.max(0, v)); + +const easeInOutCubic = (p: number) => + p < 0.5 ? 4 * p * p * p : 1 - Math.pow(-2 * p + 2, 3) / 2; + +/** 0 before the spectrum, 1 once the hand-over has finished. */ +export const spectrumWeight = (t: number): number => + easeInOutCubic(clamp01((t - SPECTRUM_START_S) / SPECTRUM_FADE_S)); + +/** + * The frame to load audio around: the real frame once the spectrum is active, + * otherwise the spectrum's start, so nothing is fetched for the rest of the song. + */ +export const audioWindowFrame = (frame: number, fps: number): number => + Math.max(frame, Math.floor((SPECTRUM_START_S - SPECTRUM_FADE_S) * fps)); + +/** `count` log-spaced band centres from FREQ_LOW_HZ to FREQ_HIGH_HZ. */ +export const bandFrequencies = (count: number): number[] => + Array.from({ length: count }, (_, i) => + count === 1 + ? FREQ_LOW_HZ + : FREQ_LOW_HZ * Math.pow(FREQ_HIGH_HZ / FREQ_LOW_HZ, i / (count - 1)), + ); + +/** + * One band centre per node, in node order: bandFrequencies(count) dealt out in a + * Fisher–Yates shuffle seeded by BAND_SEED. + */ +export const shuffledBandFrequencies = (count: number): number[] => { + const frequencies = bandFrequencies(count); + for (let i = frequencies.length - 1; i > 0; i--) { + const j = Math.floor(random(`${BAND_SEED}-${i}`) * (i + 1)); + const swap = frequencies[i]; + frequencies[i] = frequencies[j]; + frequencies[j] = swap; + } + return frequencies; +}; + +/** + * A band's raw amplitude from one spectrum: the mean over the bins between its + * geometric edges, or, for bands narrower than a bin (the bass end), the value + * interpolated at its centre, so neighbouring bass nodes still differ. + */ +const bandValue = (spectrum: number[], centreHz: number, ratio: number, binHz: number) => { + const half = Math.sqrt(ratio); + const low = centreHz / half / binHz; + const high = centreHz * half / binHz; + const first = Math.max(1, Math.ceil(low)); + const last = Math.min(spectrum.length - 1, Math.floor(high)); + if (last >= first) { + let sum = 0; + for (let k = first; k <= last; k++) { + sum += spectrum[k]; + } + return sum / (last - first + 1); + } + const pos = Math.min(spectrum.length - 1.001, Math.max(0, centreHz / binHz)); + const k = Math.floor(pos); + return spectrum[k] + (spectrum[k + 1] - spectrum[k]) * (pos - k); +}; + +/** Every band's level (0–1) at `frame`, release included. */ +export const bandLevels = (args: { + audioData: MediaUtilsAudioData; + dataOffsetInSeconds: number; + frame: number; + fps: number; + frequencies: number[]; +}): number[] => { + const { audioData, dataOffsetInSeconds, frame, fps, frequencies } = args; + const binHz = audioData.sampleRate / 2 / FFT_SAMPLES; + const ratio = + frequencies.length > 1 ? Math.pow(FREQ_HIGH_HZ / FREQ_LOW_HZ, 1 / (frequencies.length - 1)) : 2; + const levels = frequencies.map(() => 0); + + for (let back = 0; back < RELEASE_FRAMES && frame - back >= 0; back++) { + const spectrum = visualizeAudio({ + audioData, + frame: frame - back, + fps, + numberOfSamples: FFT_SAMPLES, + dataOffsetInSeconds, + optimizeFor: "accuracy", + }); + const decay = Math.pow(RELEASE_DECAY, back); + frequencies.forEach((hz, i) => { + const raw = bandValue(spectrum, hz, ratio, binHz); + const level = + Math.pow(clamp01(raw * GAIN * Math.pow(hz / FREQ_LOW_HZ, TREBLE_TILT)), CURVE) * decay; + levels[i] = Math.max(levels[i], level); + }); + } + return levels; +}; -- 2.52.0 From 561c93062085ac8d0b730fbb293ac41eb6c2d113 Mon Sep 17 00:00:00 2001 From: Mikkeli Date: Thu, 17 Sep 2026 10:32:19 +0900 Subject: [PATCH 6/7] fix(274): separate nodes that share exact coordinates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three pairs of sung nodes have identical roster coordinates, so one circle fully eclipsed the other: 草木橋 / 滝の上こ線橋, ポン久留喜橋 / 久留喜橋, and モトツ橋 / モトツシェルター (a bridge roofed by a shelter). Editing the lyrics index's lat/lon could not fix it: the video takes positions from the roster (274-lookup.csv), joined on object. - layout.ts: nodePositions() groups nodes by exact coordinate and spreads each group COINCIDENT_SPREAD (1.5 map units, about 35 m) apart along the road's direction there, in road order, centred on the shared point. All such pairs are on-road structures, so they stay on the road (within 0.06 units) and read as a doubled dot; partial overlap is intended, full eclipse is not. Along rather than across the road, and small: at 6 units モトツシェルター landed on 福山トンネル, 90 m further on. - data.ts: RosterItem carries the roster's km, for road order and direction. - Transect.tsx: draws nodes at those positions. Verified: eslint + tsc clean on this commit's tree; close-ups at モトツ, resting and lit, show both nodes on the road in order after モトツトンネル. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01PLt25nCVMsoroKALYUBu6u --- src/song-274/Transect.tsx | 20 +++++++++--- src/song-274/data.ts | 3 ++ src/song-274/layout.ts | 68 ++++++++++++++++++++++++++++++++++++++- 3 files changed, 86 insertions(+), 5 deletions(-) diff --git a/src/song-274/Transect.tsx b/src/song-274/Transect.tsx index 66d4d32..a1f1e14 100644 --- a/src/song-274/Transect.tsx +++ b/src/song-274/Transect.tsx @@ -18,7 +18,14 @@ import { type Frame, } from "./camera"; import type { Cue, RosterItem, TransectData } from "./data"; -import { extendBounds, GROUND, prefixBounds, projectGround, routePath } from "./layout"; +import { + extendBounds, + GROUND, + nodePositions, + prefixBounds, + projectGround, + routePath, +} from "./layout"; import { useWindowedAudioData } from "@remotion/media-utils"; import { isAwake, mixLooks, nodeLookAt, spectrumLook } from "./nodeAnimation"; import { @@ -100,6 +107,11 @@ export const Transect: React.FC = ({ palette, audio, data }) => { ); const parts = useMemo(() => narrationParts(data ? data.lines : []), [data]); const cueMap = useMemo(() => cuesByObject(data ? data.cues : []), [data]); + // Nodes at identical coordinates are spread slightly apart along the road. + const positions = useMemo( + () => (data && projection ? nodePositions(data.items, data.route, projection) : null), + [data, projection], + ); // Each node gets one log-spaced band, dealt out in a seeded shuffle. const frequencies = useMemo( () => shuffledBandFrequencies(data ? data.items.length : 0), @@ -112,7 +124,7 @@ export const Transect: React.FC = ({ palette, audio, data }) => { windowInSeconds: AUDIO_WINDOW_S, }); - if (!data || !projection || !kmAt) { + if (!data || !projection || !kmAt || !positions) { return ; } @@ -165,8 +177,8 @@ export const Transect: React.FC = ({ palette, audio, data }) => { const draw = ({ item, look }: (typeof nodes)[number]) => ( => { object: r.object, kind: r.kind, family: familyOf(r.kind, r.object), + km: Number(r.km), lat: Number(r.lat), lon: Number(r.lon), }); diff --git a/src/song-274/layout.ts b/src/song-274/layout.ts index dee8ee8..0187dcc 100644 --- a/src/song-274/layout.ts +++ b/src/song-274/layout.ts @@ -1,4 +1,4 @@ -import type { RoutePoint } from "./data"; +import type { RosterItem, RoutePoint } from "./data"; /** * The "Ground — true shape" projection of `274-transect.html`, in the page's @@ -38,6 +38,72 @@ export const projectGround = (route: RoutePoint[]): Projection => { }; }; +/** + * Distance, in map units, between nodes that share exactly the same roster + * coordinates (草木橋 / 滝の上こ線橋, ポン久留喜橋 / 久留喜橋, モトツ橋 / + * モトツシェルター): small, so they read as a doubled dot on the road. Grows with + * zoom like the nodes themselves. (1 map unit ≈ 44 m on the ground here.) + */ +export const COINCIDENT_SPREAD = 1.5; + +export type NodePosition = { x: number; y: number }; + +/** Direction of the road at `km`, as a unit vector in map units. */ +const roadDirection = (route: RoutePoint[], km: number, proj: Projection) => { + const at = (k: number) => { + let i = 1; + while (i < route.length - 1 && route[i][0] < k) { + i++; + } + const [k0, lat0, lon0] = route[i - 1]; + const [k1, lat1, lon1] = route[i]; + const p = k1 === k0 ? 0 : Math.min(1, Math.max(0, (k - k0) / (k1 - k0))); + return { x: proj.x(lon0 + (lon1 - lon0) * p), y: proj.y(lat0 + (lat1 - lat0) * p) }; + }; + const a = at(km - 0.1); + const b = at(km + 0.1); + const length = Math.hypot(b.x - a.x, b.y - a.y); + return length > 0 ? { x: (b.x - a.x) / length, y: (b.y - a.y) / length } : { x: 1, y: 0 }; +}; + +/** + * Where each node is drawn, by object name. Usually its roster coordinate; nodes + * sharing exactly the same coordinate are spread COINCIDENT_SPREAD apart along + * the road there, in road order, centred on the shared point. All such pairs are + * on-road structures, so they stay on the road. Keep the spread small: at 6, + * モトツシェルター landed on 福山トンネル, only 90 m further on. + */ +export const nodePositions = ( + items: RosterItem[], + route: RoutePoint[], + proj: Projection, +): Map => { + const groups = new Map(); + for (const item of items) { + const key = `${item.lat},${item.lon}`; + const group = groups.get(key) ?? []; + group.push(item); + groups.set(key, group); + } + + const positions = new Map(); + groups.forEach((group) => { + const x = proj.x(group[0].lon); + const y = proj.y(group[0].lat); + if (group.length === 1) { + positions.set(group[0].object, { x, y }); + return; + } + const ordered = group.slice().sort((a, b) => a.km - b.km); + const dir = roadDirection(route, ordered[0].km, proj); + ordered.forEach((item, i) => { + const offset = (i - (ordered.length - 1) / 2) * COINCIDENT_SPREAD; + positions.set(item.object, { x: x + dir.x * offset, y: y + dir.y * offset }); + }); + }); + return positions; +}; + export type Bounds = { minX: number; minY: number; maxX: number; maxY: number }; /** Bounds of the projected route from its start up to each point, inclusive. */ -- 2.52.0 From 10949dfa186506bff9bc625b15513e77bf2e8d46 Mon Sep 17 00:00:00 2001 From: Mikkeli Date: Thu, 17 Sep 2026 10:32:20 +0900 Subject: [PATCH 7/7] style(274): retune the dark transect palette Colour choices for the dark palette, made while previewing in the Studio: - roadCovered #9dcde4 -> #fdb021 (the covered road now reads amber) - bridge #79d1c5 -> #9be9de - place / railway #129252 -> #68ad7f - shrine #b32c2c -> #a05050 - other #ff9900 -> #a7b7d6 The light palette is unchanged. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01PLt25nCVMsoroKALYUBu6u --- src/song-274/palette.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/song-274/palette.ts b/src/song-274/palette.ts index 405b358..6fde178 100644 --- a/src/song-274/palette.ts +++ b/src/song-274/palette.ts @@ -40,15 +40,15 @@ export type FeatureFamily = export const darkPalette: TransectPalette = { background: "#28323d", // --paper roadAhead: "#49565f", // --rule - roadCovered: "#9dcde4", // --road - bridge: "#79d1c5", // --bridge + roadCovered: "#fdb021", // --road + bridge: "#9be9de", // --bridge tunnel: "#b6c5c1", // --tunnel shed: "#eba9eb", // --shed watercourse: "#5FB6D6", // --water - place: "#129252", // --place - railway: "#129252", // --railway - shrine: "#b32c2c", // --shrine - other: "#ff9900", // --util + place: "#68ad7f", // --place + railway: "#68ad7f", // --railway + shrine: "#a05050", // --shrine + other: "#a7b7d6", // --util }; export const lightPalette: TransectPalette = { -- 2.52.0