奥高尾縦走路(稲荷山・高尾山・城山(小仏城山)・景信山・堂所山・陣馬山(陣場山))

奥高尾縦走路

高尾山です。ギネス記録のやつ。前日に鎌倉へ水月観音を見に行きつつ江ノ島観光に行ったので、そこから行きやすくて行ってみたいところということで高尾山にした。高尾山に行くときは、そこだけだと物足りなくなるだろうなと思ったので、陣馬山までの縦走にすることにしてた。一般的には陣馬山から高尾山へ下ってくる経路が選ばれるそうだけど、やっぱり初めてなので高尾山から行くことにした。前日夜時点でJR高尾駅近くの駐車場に停めて車中泊。ネットの情報だと値上がりしてるみたいだったけど、24h600円のところを見つけたのでラッキーだった。ここでSDカードを忘れてきたことに気づく。仕方ないのでコンビニで買う。せっかく駐車場安いとこだったのに…。早朝、高尾駅から電車で高尾山駅へ。コースはせっかくなので稲荷山コースにした。1時間ぐらいで山頂へ。先行く人にめっちゃ早い人がいて負けじとついていったら早く行けた。そしてそれが良くなかった。さすが早い時間でも人たくさんいた。あとでX見たら遅い時間だと人ギュウギュウな感じだったらしい、すごいなぁ。山頂から景信山ぐらいまでは快調だったのだが、そこからは足が攣りそうになったり、膝が痛くなったり、足底筋膜炎みたくなったりした。特に足底筋膜炎は今もひきずっていて、ちょっと今後に不安が残る。せっかくだしと巻道は全部使わず頑張ったせいもあると思う。ところどころで富士山がよく見えて、今日の天気は最高ですねと声かけられたりした。たしかに、最高だったなぁ。陣馬山からの下山は陣馬高原下バス停方面へ。あとから知ったが藤野駅?へ下りる道もあるそうです。でもそっちは舗装路の区間が長そうかな?高尾駅についたらイチョウ祭りが行われてて人いっぱいだった。もうちょっと時間あれば見てったけども、その日山口晃氏の個展に行きたかったので急いで移動した。とっても良い山行でした。

https://drive.google.com/file/d/141rCnzNhRPD8cNjiUCG-jfksbpxklvqv/view?usp=sharing

総移動距離(平地換算) 山行時間 標高差(最大値-最小値)
17.7 km 6:21:42 687.95 m
獲得標高 登り 獲得標高 降り 平均速度
1450.56 m 1026.72 m 2.782 km/h

カテゴリー: やま | タグ: , | コメントする

小町山・宝篋山

小町山・宝篋山

おひさしぶりの小町山・宝篋山。前回は3/11だって。8ヶ月ぶりぐらいか。尾根コースから小町山、そこから宝篋山へ、だが様子がおかしい。倒木の危険ということで立ち入り禁止の札が掲げられている。国有林だからというわけではないのかな…?パッと見たところ鬼越山直下、西側の沢を上がったところ、弁慶平を上がったところ、宝篋山から下って東城寺方面への道入り口ってところか。なんかあったのかなぁ。このコースとても好きだっただけに、罪悪感が湧く山行になってしまうのはイヤねぇ。どうしたもんかな。

こんな像あったっけ

https://drive.google.com/file/d/1kiktvhHFNdpk6GNPx0c5f0FmvK9EpxQR/view?usp=sharing

総移動距離(平地換算) 山行時間 標高差(最大値-最小値)
9.42 km 2:54:31 421.35 m
獲得標高 登り 獲得標高 降り 平均速度
676.82 m 690.56 m 3.241 km/h

カテゴリー: やま | タグ: , | コメントする

霧ヶ峰(車山)

霧ヶ峰

ついでのついでに霧ヶ峰にも行ってきた。だけど、霧ヶ峰なのかな?車山が霧ヶ峰最高峰のはずなんだけど車山高原ていう名前がついてた。さすがに疲れてしまってリフトを使って登った。霧ヶ峰の湿原は歩いてないのでもしかしたら霧ヶ峰には行ってないのかもしれない。山頂グルっと回ってそのままリフトで降りてきた。登ったり降りたり湿原周回したりという選択肢もあったがこの後に北澤美術館に行きたかったのでサクッと終わらせたぜ。また春夏に来ます。下山後に寄ったロマネットがなかなか良い風呂だった。また行きたいな。

https://drive.google.com/file/d/1128steFc2MlgISMidvtZg_tN97U6d5bN/view?usp=sharing

総移動距離(平地換算) 山行時間 標高差(最大値-最小値)
4.19 km 0:53:55 400.01 m
獲得標高 登り 獲得標高 降り 平均速度
551.65 m 518.93 m 4.662 km/h

 

 

カテゴリー: やま | タグ: , | コメントする

美ヶ原(牛伏山・王ヶ鼻・王ヶ頭)

美ヶ原

三連休なので次の日も別の山に登ることにした。赤岳にしようかとも思ったがちょっと疲れちゃったので美ヶ原へ。秋に来るとこではないような気もするがせっかくなので。風が強く昨日に比べてかなり寒かった。美ヶ原の道の駅で夜を越したがそこも寒かった。ただ、景色は抜群で、写真じゃ全然伝わらないぐらいの広大さだった。北アルプス展望ルートを選んだのも正解だった。寒くて途中スマホの電源が落ちたが素晴らしい景色を堪能できた。その他の砂利の道はあんまし嬉しくないかな。砂埃キライなんよね。春夏にまた来てみたいね。高原美術館の外観だけ見たけどフジサンケイの作るものってなんでこんなダサいんだろうな。

https://drive.google.com/file/d/1fseNwP0MD5U6ZAUnc7_ks6-GRS1_RhXG/view?usp=sharing

総移動距離(平地換算) 山行時間 標高差(最大値-最小値)
12.7 km 3:33:59 133.77 m
獲得標高 登り 獲得標高 降り 平均速度
1440.23 m 1403.87 m 3.561 km/h

時間対標高

距離対標高

 

カテゴリー: やま | タグ: , | コメントする

蓼科山

蓼科山

なんだかんだ色々あって約1ヶ月ぶりの登山になった。予報では天気最高らしかったので行ってみたかった蓼科山に行くことにした。女乃神茶屋のある登山口からスタートしえっちらおっちら、ぶっちゃけ殆ど忘れた。調子良くて上りはほとんど止まってない気がする。最後の森林限界を超えて山頂まで右に巻いて登るのがいまいち分からんかった。頂上はだだっ広くアルプスの山とかも見えてよかった。紅葉はそうでもなかったな、ぶっちゃけ下りてからの別荘地の方がキレイだった。帰りは小屋の方へ降りて竜源橋へおりてきた。全体的に久しぶりのわりには体が軽く、サクサク登ることができたと思う。それでも疲れたし、下りは踏ん張り効かなくなったりしたけどね。そういえば将軍平分岐で遠吠えのような音が聞こえた。怖くなったのと熊鈴持ってきてなかったのでそこから暫くの間はスマホで音楽流しながら下った。八ヶ岳に遠吠えするような動物いるか帰ってから調べたけどなんかあんまいなそう…?なんだったんだあれ。他のアホ登山者かな。そういえば前から思ってたけど八ヶ岳ってなんかチャラい感じ多いよね。なんかあんま感じよくないわ。温泉は縄文の湯に寄った。いいお湯でしたわー。下りてからSNSで話題になってた御射鹿池にも行ってみたけどクソみたいな渋滞のわりにがっかり景勝地だったな。SNSで話題になるのってこんなんばっかだな…。

https://drive.google.com/file/d/1kjkUNv8S-Apzc3pWjlEMt3SHgq_Qstfh/view?usp=sharing

総移動距離(平地換算) 山行時間 標高差(最大値-最小値)
9.82 km 5:42:46 976.05 m
獲得標高 登り 獲得標高 降り 平均速度
1440.44 m 1300.02 m 1.719 km/h

時間対標高

距離対標高

山行記録がだいぶ充実してきた気がする。よきかな。

カテゴリー: やま | タグ: , | コメントする

山行記録の項目を増やしたい

山行記録の項目

山行記録を作成しているが、今のところ地図上にルートを表示するのと気圧から高度変化をグラフにする2つだけ作ってる。プログラミングによってなんとか作りたいとか思ってたんだけど、うだうだやってるうちにもうエクセルでいんじゃねという啓示がおりてきたのでそうします。

取ってるログは、日付・時間・緯度・経度・GPS標高・温度・気圧の7つ。ここから色んな項目を作ってく。

標高

https://dalomo.net/blog/2023/03/04/1982/#toc13

こちらはGSSで作ってる。エクセルでやってもまぁ一緒。その日の海面気圧は自明ではないので気象庁から取ってくるか、標準大気圧をそのまま使って変化量だけ見る感じ。自分は後者にしている。

距離

緯度と経度から2地点間の距離を求める。

https://qiita.com/Yuzu2yan/items/0f312954feeb3c83c70e

こちらが参考になった。短い距離ではどの方法も誤差はほぼ無視していいみたいだが、今回は測地線航海算法を使うことにした。

https://www2.nc-toyama.ac.jp/WEB_Profile/mkawai/lecture/sailing/geodetic/geosail.html

こちらにも同様、というかこれが元かな?ここで化成緯度がなんか分かんなかったけど、更成緯度というのがいいのかな。いうてこれ更正じゃないのとか、reduceって言ってるし縮小とかのが合ってそう。地球を正円から楕円体として捉えるのだから値は小さくなるし。まぁそれは置いといてエクセルでやると左上がA1として

lat lon Φ X Δρ ρ(km) cm
緯度1 経度1 =ATAN(定数!$B$3/定数!$B$2*TAN(RADIANS(A2)))
緯度2 経度2 =ATAN(定数!$B$3/定数!$B$2*TAN(RADIANS(A3))) =ACOS((SIN(C2)*SIN(C3))+(COS(C2)*COS(C3)*COS(RADIANS(B2)-RADIANS(B3)))) =定数!$B$4/8*((SIN(D3)-D3)*POWER(SIN(C2)+SIN(C3),2)/POWER(COS(D3/2),2)-(SIN(D3)+D3)*POWER(SIN(C2)-SIN(C3),2)/POWER(SIN(D3/2),2)) =定数!$B$2*(D3+E3) =F3*100000

定数は

赤道半径 6378.137 B2
極半径 6356.752314 B3
扁平率 0.003352811 B4

にしてみてる。これでログの行間の距離が出た。ちなみにこれは勾配を考慮に入れていない。あくまで平地とした場合の距離となる。まぁ大菩薩嶺のログで単純に合計すると13.33kmだった。結構歩いたな。

距離基準の標高グラフ

距離が出たので距離基準の標高グラフもつくれーる。距離を積算していった列を作りそれと標高列を合わせてグラフを作るのだが、普通に折れ線グラフにすると行ごとの等間隔グラフになってしまって見たい形が出てこない。これはいつも作ってる時間対標高でもそうだったみたい。これを解消する、距離の間隔を等間隔にしてグラフを作るにはグラフの種類で散布図を選ぶとよい。

こうできた。大菩薩嶺丸川峠分岐からの急さと頂上から大菩薩峠ー上日川峠への緩やかさがよく分かって嬉しくなるね。時間対高さと比較

けっこー違うね。

速度

時間も距離も分かったので速度が出せる。距離は平地での距離なので、例えば90度の壁を時間かけて登ったとしてもそこの速度は0になることに注意。んで、エクセルは時間をシリアル値で管理しているためそれを考慮した計算にしないと変なことになる。

time cm cm/s km/h 50 100
0.238668981481481
0.238680555555556 16.4455124078171 =B3/((A3-A2)*24*60*60) =C3/27.7778 =SUM(B3:B52)/((A52-A2)*24*60*60) =SUM(B3:B103)/((A103-A2)*24*60*60)

cm/sはエクセルの秒数に24*60*60=86400を掛ければよい。罠として、時間表示のところに日付が紛れる場合があり、エクセルが余計な気を利かすそれを解消するために「1900/1/0 」などを削除する作業が発生する場合がある。cm/sをkm/hに変換する場合27.7778ぐらいの係数を掛けると変えれるらしい。ここまでは隣接2データの間の速度だけどこれだとデータ間のぶれが大きい。なので50行ごととか100行ごととかで計算してみる。

2行

50行

100行

だんだんこう滑らかーになっていく。最後の方は#VALUEのエラーが出るので前行値-(前行値/100)とかで埋めてしまう。負になるようならゼロ埋め。これを元に地図上の軌跡に色を付けたい。

地図上の軌跡にカラーマップを適用する

速度によって軌跡の色を変えることによってなんかいい感じに表示してる地図を見かけたので同じことをやってみたいなと思った。GARMINのGPSMAPの機能らしい。

https://www.google.com/search?q=GPSMAP%E3%80%80%E8%BB%8C%E8%B7%A1%E3%80%80%E8%89%B2&sca_esv=577607103&tbm=isch&sxsrf=AM9HkKm63QTYJ9HwtsFe5rYBioZnEmGRBQ:1698584054905&source=lnms&sa=X&ved=2ahUKEwijs9rZppuCAxXTmFYBHV9fBIgQ_AUoAXoECAEQAw&biw=1360&bih=625

カラーマップ

最初こういうのはヒートマップというのだと思っていたけど、通称はカラーマップというらしい。その中でも有名なのがMATLABで使われているjetという配色みたい。RGBの青から赤へ色相を変化させる感じで

R G B
0 0 0.5
0 0 1
0 0.5 1
0 1 1
0.5 1 0.5
1 1 0
1 0.5 0
1 0 0
0.5 0 0

こんな感じで変化していく。Doubleで扱う計算式がよく分からんので、0-255の2次元配列ルックアップテーブルを作った。

[[0, 0, 128], [0, 0, 132], [0, 0, 136], [0, 0, 140], [0, 0, 144], [0, 0, 148], [0, 0, 152], [0, 0, 156], [0, 0, 160], [0, 0, 165], [0, 0, 169], [0, 0, 173], [0, 0, 177], [0, 0, 181], [0, 0, 185], [0, 0, 189], [0, 0, 193], [0, 0, 197], [0, 0, 202], [0, 0, 206], [0, 0, 210], [0, 0, 214], [0, 0, 218], [0, 0, 222], [0, 0, 226], [0, 0, 230], [0, 0, 234], [0, 0, 239], [0, 0, 243], [0, 0, 247], [0, 0, 251], [0, 0, 255], [0, 4, 255], [0, 8, 255], [0, 12, 255], [0, 16, 255], [0, 20, 255], [0, 24, 255], [0, 28, 255], [0, 32, 255], [0, 36, 255], [0, 40, 255], [0, 44, 255], [0, 48, 255], [0, 52, 255], [0, 56, 255], [0, 60, 255], [0, 64, 255], [0, 68, 255], [0, 72, 255], [0, 76, 255], [0, 80, 255], [0, 84, 255], [0, 88, 255], [0, 92, 255], [0, 96, 255], [0, 100, 255], [0, 104, 255], [0, 108, 255], [0, 112, 255], [0, 116, 255], [0, 120, 255], [0, 124, 255], [0, 128, 255], [0, 131, 255], [0, 135, 255], [0, 139, 255], [0, 143, 255], [0, 147, 255], [0, 151, 255], [0, 155, 255], [0, 159, 255], [0, 163, 255], [0, 167, 255], [0, 171, 255], [0, 175, 255], [0, 179, 255], [0, 183, 255], [0, 187, 255], [0, 191, 255], [0, 195, 255], [0, 199, 255], [0, 203, 255], [0, 207, 255], [0, 211, 255], [0, 215, 255], [0, 219, 255], [0, 223, 255], [0, 227, 255], [0, 231, 255], [0, 235, 255], [0, 239, 255], [0, 243, 255], [0, 247, 255], [0, 251, 255], [0, 255, 255], [4, 255, 251], [8, 255, 247], [12, 255, 243], [16, 255, 239], [20, 255, 235], [24, 255, 231], [28, 255, 227], [32, 255, 223], [36, 255, 219], [40, 255, 215], [44, 255, 211], [48, 255, 207], [52, 255, 203], [56, 255, 199], [60, 255, 195], [64, 255, 191], [68, 255, 187], [72, 255, 183], [76, 255, 179], [80, 255, 175], [84, 255, 171], [88, 255, 167], [92, 255, 163], [96, 255, 159], [100, 255, 155], [104, 255, 151], [108, 255, 147], [112, 255, 143], [116, 255, 139], [120, 255, 135], [124, 255, 131], [128, 255, 128], [131, 255, 124], [135, 255, 120], [139, 255, 116], [143, 255, 112], [147, 255, 108], [151, 255, 104], [155, 255, 100], [159, 255, 96], [163, 255, 92], [167, 255, 88], [171, 255, 84], [175, 255, 80], [179, 255, 76], [183, 255, 72], [187, 255, 68], [191, 255, 64], [195, 255, 60], [199, 255, 56], [203, 255, 52], [207, 255, 48], [211, 255, 44], [215, 255, 40], [219, 255, 36], [223, 255, 32], [227, 255, 28], [231, 255, 24], [235, 255, 20], [239, 255, 16], [243, 255, 12], [247, 255, 8], [251, 255, 4], [255, 255, 0], [255, 251, 0], [255, 247, 0], [255, 243, 0], [255, 239, 0], [255, 235, 0], [255, 231, 0], [255, 227, 0], [255, 223, 0], [255, 219, 0], [255, 215, 0], [255, 211, 0], [255, 207, 0], [255, 203, 0], [255, 199, 0], [255, 195, 0], [255, 191, 0], [255, 187, 0], [255, 183, 0], [255, 179, 0], [255, 175, 0], [255, 171, 0], [255, 167, 0], [255, 163, 0], [255, 159, 0], [255, 155, 0], [255, 151, 0], [255, 147, 0], [255, 143, 0], [255, 139, 0], [255, 135, 0], [255, 131, 0], [255, 128, 0], [255, 124, 0], [255, 120, 0], [255, 116, 0], [255, 112, 0], [255, 108, 0], [255, 104, 0], [255, 100, 0], [255, 96, 0], [255, 92, 0], [255, 88, 0], [255, 84, 0], [255, 80, 0], [255, 76, 0], [255, 72, 0], [255, 68, 0], [255, 64, 0], [255, 60, 0], [255, 56, 0], [255, 52, 0], [255, 48, 0], [255, 44, 0], [255, 40, 0], [255, 36, 0], [255, 32, 0], [255, 28, 0], [255, 24, 0], [255, 20, 0], [255, 16, 0], [255, 12, 0], [255, 8, 0], [255, 4, 0], [255, 0, 0], [251, 0, 0], [247, 0, 0], [243, 0, 0], [239, 0, 0], [235, 0, 0], [231, 0, 0], [227, 0, 0], [223, 0, 0], [219, 0, 0], [215, 0, 0], [211, 0, 0], [207, 0, 0], [203, 0, 0], [199, 0, 0], [195, 0, 0], [191, 0, 0], [187, 0, 0], [183, 0, 0], [179, 0, 0], [175, 0, 0], [171, 0, 0], [167, 0, 0], [163, 0, 0], [159, 0, 0], [155, 0, 0], [151, 0, 0], [147, 0, 0], [143, 0, 0], [139, 0, 0], [135, 0, 0], [131, 0, 0], [128, 0, 0]]

なんちゃってなので正しいかの保証はない。で、jetのことを調べていたらturboのことを知った。

https://blog.research.google/2019/08/turbo-improved-rainbow-colormap-for.html

Googleが作ったやつでjetの視覚的均等性に考慮したものらしい。地理院関連でこんな講演もあったらしい。

https://www.gsi.go.jp/common/000236591.pdf

https://www.gsi.go.jp/cais/colloquium-21_00001.html#:~:text=%E3%82%A6%E3%82%A7%E3%83%96%E4%BC%9A%E8%AD%B0%E5%BD%A2%E5%BC%8F-,%E7%AC%AC160%E5%9B%9E%E3%80%80%E4%BB%A4%E5%92%8C3%E5%B9%B47%E6%9C%8816%E6%97%A5,-%EF%BC%91%EF%BC%8E%E7%A7%91%E5%AD%A6%E7%9A%84

turboはPython, C, 多項式で公開されてるのでそれを流用してテーブルを作る。255かけりゃいいそうなので楽だ。試しに両方の配色を比べてみると

jet

turbo

輝度のピークと色相が均されているように感じる。なのでturboを使ってみよう。

コード書く

便宜的に日付、時間、緯度、経度、速度の順に列が並んでるCSVデータとして、この前作った軌跡表示のコードを流用して

    var btn = document.getElementById("upbtn");
    btn.addEventListener("click", csv2map, false);

    const turbo_colormap_data = [[0.18995, 0.07176, 0.23217], [0.19483, 0.08339, 0.26149], [0.19956, 0.09498, 0.29024], [0.20415, 0.10652, 0.31844], [0.20860, 0.11802, 0.34607], [0.21291, 0.12947, 0.37314], [0.21708, 0.14087, 0.39964], [0.22111, 0.15223, 0.42558], [0.22500, 0.16354, 0.45096], [0.22875, 0.17481, 0.47578], [0.23236, 0.18603, 0.50004], [0.23582, 0.19720, 0.52373], [0.23915, 0.20833, 0.54686], [0.24234, 0.21941, 0.56942], [0.24539, 0.23044, 0.59142], [0.24830, 0.24143, 0.61286], [0.25107, 0.25237, 0.63374], [0.25369, 0.26327, 0.65406], [0.25618, 0.27412, 0.67381], [0.25853, 0.28492, 0.69300], [0.26074, 0.29568, 0.71162], [0.26280, 0.30639, 0.72968], [0.26473, 0.31706, 0.74718], [0.26652, 0.32768, 0.76412], [0.26816, 0.33825, 0.78050], [0.26967, 0.34878, 0.79631], [0.27103, 0.35926, 0.81156], [0.27226, 0.36970, 0.82624], [0.27334, 0.38008, 0.84037], [0.27429, 0.39043, 0.85393], [0.27509, 0.40072, 0.86692], [0.27576, 0.41097, 0.87936], [0.27628, 0.42118, 0.89123], [0.27667, 0.43134, 0.90254], [0.27691, 0.44145, 0.91328], [0.27701, 0.45152, 0.92347], [0.27698, 0.46153, 0.93309], [0.27680, 0.47151, 0.94214], [0.27648, 0.48144, 0.95064], [0.27603, 0.49132, 0.95857], [0.27543, 0.50115, 0.96594], [0.27469, 0.51094, 0.97275], [0.27381, 0.52069, 0.97899], [0.27273, 0.53040, 0.98461], [0.27106, 0.54015, 0.98930], [0.26878, 0.54995, 0.99303], [0.26592, 0.55979, 0.99583], [0.26252, 0.56967, 0.99773], [0.25862, 0.57958, 0.99876], [0.25425, 0.58950, 0.99896], [0.24946, 0.59943, 0.99835], [0.24427, 0.60937, 0.99697], [0.23874, 0.61931, 0.99485], [0.23288, 0.62923, 0.99202], [0.22676, 0.63913, 0.98851], [0.22039, 0.64901, 0.98436], [0.21382, 0.65886, 0.97959], [0.20708, 0.66866, 0.97423], [0.20021, 0.67842, 0.96833], [0.19326, 0.68812, 0.96190], [0.18625, 0.69775, 0.95498], [0.17923, 0.70732, 0.94761], [0.17223, 0.71680, 0.93981], [0.16529, 0.72620, 0.93161], [0.15844, 0.73551, 0.92305], [0.15173, 0.74472, 0.91416], [0.14519, 0.75381, 0.90496], [0.13886, 0.76279, 0.89550], [0.13278, 0.77165, 0.88580], [0.12698, 0.78037, 0.87590], [0.12151, 0.78896, 0.86581], [0.11639, 0.79740, 0.85559], [0.11167, 0.80569, 0.84525], [0.10738, 0.81381, 0.83484], [0.10357, 0.82177, 0.82437], [0.10026, 0.82955, 0.81389], [0.09750, 0.83714, 0.80342], [0.09532, 0.84455, 0.79299], [0.09377, 0.85175, 0.78264], [0.09287, 0.85875, 0.77240], [0.09267, 0.86554, 0.76230], [0.09320, 0.87211, 0.75237], [0.09451, 0.87844, 0.74265], [0.09662, 0.88454, 0.73316], [0.09958, 0.89040, 0.72393], [0.10342, 0.89600, 0.71500], [0.10815, 0.90142, 0.70599], [0.11374, 0.90673, 0.69651], [0.12014, 0.91193, 0.68660], [0.12733, 0.91701, 0.67627], [0.13526, 0.92197, 0.66556], [0.14391, 0.92680, 0.65448], [0.15323, 0.93151, 0.64308], [0.16319, 0.93609, 0.63137], [0.17377, 0.94053, 0.61938], [0.18491, 0.94484, 0.60713], [0.19659, 0.94901, 0.59466], [0.20877, 0.95304, 0.58199], [0.22142, 0.95692, 0.56914], [0.23449, 0.96065, 0.55614], [0.24797, 0.96423, 0.54303], [0.26180, 0.96765, 0.52981], [0.27597, 0.97092, 0.51653], [0.29042, 0.97403, 0.50321], [0.30513, 0.97697, 0.48987], [0.32006, 0.97974, 0.47654], [0.33517, 0.98234, 0.46325], [0.35043, 0.98477, 0.45002], [0.36581, 0.98702, 0.43688], [0.38127, 0.98909, 0.42386], [0.39678, 0.99098, 0.41098], [0.41229, 0.99268, 0.39826], [0.42778, 0.99419, 0.38575], [0.44321, 0.99551, 0.37345], [0.45854, 0.99663, 0.36140], [0.47375, 0.99755, 0.34963], [0.48879, 0.99828, 0.33816], [0.50362, 0.99879, 0.32701], [0.51822, 0.99910, 0.31622], [0.53255, 0.99919, 0.30581], [0.54658, 0.99907, 0.29581], [0.56026, 0.99873, 0.28623], [0.57357, 0.99817, 0.27712], [0.58646, 0.99739, 0.26849], [0.59891, 0.99638, 0.26038], [0.61088, 0.99514, 0.25280], [0.62233, 0.99366, 0.24579], [0.63323, 0.99195, 0.23937], [0.64362, 0.98999, 0.23356], [0.65394, 0.98775, 0.22835], [0.66428, 0.98524, 0.22370], [0.67462, 0.98246, 0.21960], [0.68494, 0.97941, 0.21602], [0.69525, 0.97610, 0.21294], [0.70553, 0.97255, 0.21032], [0.71577, 0.96875, 0.20815], [0.72596, 0.96470, 0.20640], [0.73610, 0.96043, 0.20504], [0.74617, 0.95593, 0.20406], [0.75617, 0.95121, 0.20343], [0.76608, 0.94627, 0.20311], [0.77591, 0.94113, 0.20310], [0.78563, 0.93579, 0.20336], [0.79524, 0.93025, 0.20386], [0.80473, 0.92452, 0.20459], [0.81410, 0.91861, 0.20552], [0.82333, 0.91253, 0.20663], [0.83241, 0.90627, 0.20788], [0.84133, 0.89986, 0.20926], [0.85010, 0.89328, 0.21074], [0.85868, 0.88655, 0.21230], [0.86709, 0.87968, 0.21391], [0.87530, 0.87267, 0.21555], [0.88331, 0.86553, 0.21719], [0.89112, 0.85826, 0.21880], [0.89870, 0.85087, 0.22038], [0.90605, 0.84337, 0.22188], [0.91317, 0.83576, 0.22328], [0.92004, 0.82806, 0.22456], [0.92666, 0.82025, 0.22570], [0.93301, 0.81236, 0.22667], [0.93909, 0.80439, 0.22744], [0.94489, 0.79634, 0.22800], [0.95039, 0.78823, 0.22831], [0.95560, 0.78005, 0.22836], [0.96049, 0.77181, 0.22811], [0.96507, 0.76352, 0.22754], [0.96931, 0.75519, 0.22663], [0.97323, 0.74682, 0.22536], [0.97679, 0.73842, 0.22369], [0.98000, 0.73000, 0.22161], [0.98289, 0.72140, 0.21918], [0.98549, 0.71250, 0.21650], [0.98781, 0.70330, 0.21358], [0.98986, 0.69382, 0.21043], [0.99163, 0.68408, 0.20706], [0.99314, 0.67408, 0.20348], [0.99438, 0.66386, 0.19971], [0.99535, 0.65341, 0.19577], [0.99607, 0.64277, 0.19165], [0.99654, 0.63193, 0.18738], [0.99675, 0.62093, 0.18297], [0.99672, 0.60977, 0.17842], [0.99644, 0.59846, 0.17376], [0.99593, 0.58703, 0.16899], [0.99517, 0.57549, 0.16412], [0.99419, 0.56386, 0.15918], [0.99297, 0.55214, 0.15417], [0.99153, 0.54036, 0.14910], [0.98987, 0.52854, 0.14398], [0.98799, 0.51667, 0.13883], [0.98590, 0.50479, 0.13367], [0.98360, 0.49291, 0.12849], [0.98108, 0.48104, 0.12332], [0.97837, 0.46920, 0.11817], [0.97545, 0.45740, 0.11305], [0.97234, 0.44565, 0.10797], [0.96904, 0.43399, 0.10294], [0.96555, 0.42241, 0.09798], [0.96187, 0.41093, 0.09310], [0.95801, 0.39958, 0.08831], [0.95398, 0.38836, 0.08362], [0.94977, 0.37729, 0.07905], [0.94538, 0.36638, 0.07461], [0.94084, 0.35566, 0.07031], [0.93612, 0.34513, 0.06616], [0.93125, 0.33482, 0.06218], [0.92623, 0.32473, 0.05837], [0.92105, 0.31489, 0.05475], [0.91572, 0.30530, 0.05134], [0.91024, 0.29599, 0.04814], [0.90463, 0.28696, 0.04516], [0.89888, 0.27824, 0.04243], [0.89298, 0.26981, 0.03993], [0.88691, 0.26152, 0.03753], [0.88066, 0.25334, 0.03521], [0.87422, 0.24526, 0.03297], [0.86760, 0.23730, 0.03082], [0.86079, 0.22945, 0.02875], [0.85380, 0.22170, 0.02677], [0.84662, 0.21407, 0.02487], [0.83926, 0.20654, 0.02305], [0.83172, 0.19912, 0.02131], [0.82399, 0.19182, 0.01966], [0.81608, 0.18462, 0.01809], [0.80799, 0.17753, 0.01660], [0.79971, 0.17055, 0.01520], [0.79125, 0.16368, 0.01387], [0.78260, 0.15693, 0.01264], [0.77377, 0.15028, 0.01148], [0.76476, 0.14374, 0.01041], [0.75556, 0.13731, 0.00942], [0.74617, 0.13098, 0.00851], [0.73661, 0.12477, 0.00769], [0.72686, 0.11867, 0.00695], [0.71692, 0.11268, 0.00629], [0.70680, 0.10680, 0.00571], [0.69650, 0.10102, 0.00522], [0.68602, 0.09536, 0.00481], [0.67535, 0.08980, 0.00449], [0.66449, 0.08436, 0.00424], [0.65345, 0.07902, 0.00408], [0.64223, 0.07380, 0.00401], [0.63082, 0.06868, 0.00401], [0.61923, 0.06367, 0.00410], [0.60746, 0.05878, 0.00427], [0.59550, 0.05399, 0.00453], [0.58336, 0.04931, 0.00486], [0.57103, 0.04474, 0.00529], [0.55852, 0.04028, 0.00579], [0.54583, 0.03593, 0.00638], [0.53295, 0.03169, 0.00705], [0.51989, 0.02756, 0.00780], [0.50664, 0.02354, 0.00863], [0.49321, 0.01963, 0.00955], [0.47960, 0.01583, 0.01055]]
    const conv8map = turbo_colormap_data.map((row) => {
      return row.map((n) => {
        return Math.round(n * 255);
      });
    });

    function csv2map() {
      const selectedFile = document.getElementById("csvfile").files[0];
      const reader = new FileReader();
      reader.addEventListener("load", () => {
        var temp = reader.result.split("\r\n");
        var res = [];
        var i = 0;
        for (const v of temp) {
          res[i] = v.split(",");
          i++;
        }

        var latlngs = [];
        var lli = 0;
        for (const r of res) {
          if (!isNaN(r[2])) {
            latlngs[lli] = [r[2], r[3], r[4]];
            lli++;
          }
        }

        var map = L.map("map").setView([36.8073068, 139.1125345], 15);

        L.tileLayer(
          "https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png",
          {
            maxZoom: 18,
            attribution:
              "<a href='https://maps.gsi.go.jp/development/ichiran.html' target='_blank'>地理院タイル</a>",
          }
        ).addTo(map);

        const third = latlngs.map(row => row[2]);
        const max = Math.max(...third);

        latlngs.map((row) => {
          var rgbhex = speed2hex(row[2], (Math.ceil(max * 100)) / 100);
          L.circle([row[0], row[1]], { radius: 1, color: rgbhex }).addTo(map);
        });

        map.fitBounds(latlngs);

      });

      reader.readAsText(selectedFile);
    }

    function speed2hex(speed, maxspeed) {
      var idx = Math.round((speed / maxspeed) * 255);
      return rgb2hex(conv8map[idx]);
    }

    function rgb2hex(rgb) {
      return "#" + rgb.map(function (value) {
        return ("0" + value.toString(16)).slice(-2);
      }).join("");
    }

いつもながらしっちゃかめっちゃかだが

できました。画像より地図で見たいねこれは。あとPolylineではなくCircleで点を描画しているだけなので拡大すると粗が出る。例えばこれが徒歩じゃなくて、自転車・車とかだと線で表示されているように見えないかもしれない。そういう場合はPolylineをデータ数分実行することになるのかな。

カテゴリー: したい | タグ: , | コメントする

大菩薩嶺

大菩薩嶺

3連休は乗鞍岳と御嶽山に行こうと思っていたのだが、金曜にいきなり雪が降ったため見送ることにした。その代わりに寒くなったら行こうと思っていた大菩薩嶺に行くことにした。大菩薩嶺はコースがいろいろあるようで、今回は周回できてコースタイム長めの丸川峠分岐からのコースにした。こちらのコースは山頂までずっと森の中~って感じで眺望が開けるところはなかった気がする。スタートの沢沿いを過ぎたらけっこーな斜度をえっちらおっちら登ってく感じ。ただまぁ山頂過ぎて雷岩まで来た時のカタルシスはすごく良かった。ずーっと森の中だった分、開放感。そこから大菩薩峠までの稜線はさすがにいろんな所で紹介されるだけあって素晴らしかった。でも人が多いのがちょっと難点かな。体力と相談して石丸峠まで行くのはやめて福ちゃん荘→上日川峠→丸川峠分岐という風に帰ってきた。ずっとだらだらと下りで楽でした。上日川峠からが人気あるルートみたいだね。唐松はちょっと急なのかな?帰りは大菩薩の湯でゆっくり。良い山行でした。

https://drive.google.com/file/d/18W3NehL8ktB-7_C6OiEFyCWgjzMdzVsD/view?usp=sharing

今回地理院地図からも標高取得して比較してみた。解像度でいうとやっぱセンサーよなー。

カテゴリー: やま | タグ: , | コメントする

緯度・経度の位置情報から高度・標高を取得したい

標高を知りたい

先日行った権現岳への山行の際、ログ取りを行っていたものの、センサーが外れてしまっており気圧と温度のログが取れていなかった。いつもはこれから高度を算出し山行時の高度の変化をグラフ化していたができなくなってしまった。幸い位置情報については取れていたため、ここからなんとかできんだろかと思った。

高度情報を提供しているAPI

まぁそういう情報提供しているAPIあるじゃろなーと軽い気持ちでググって出てきたものを見てみる。目的と外れるので詳細な比較とかはしてかない。

Google Maps JavaScript API

https://developers.google.com/maps/documentation/javascript/elevation?hl=ja

登録必要、有料。高度データは何を基にしてるか分かんない。

Open-Elevation API

https://open-elevation.com/

https://github.com/Jorl17/open-elevation/blob/master/docs/api.md

登録不要、無料。簡単に使える。GETで1024バイトまで、POSTは制限なし(!)。高度データはSRTMが基らしい。

天女山駐車場 1546.0m

Open-Meteo Elevation API

https://open-meteo.com/en/docs/elevation-api

スイスの気象関連の会社らしい。提供しているAPIの一つに高度がある。登録不要、無料。リミットはよく分かんない。これも簡単そう。Copernicus Digital Elevation ModelのGLO-90という全世界の90m四方解像度のデータを基にしているらしい。

天女山駐車場 1557.0m

Microsoft Bing Maps Elevations API

https://learn.microsoft.com/en-us/bingmaps/rest-services/elevations/

登録必要、価格はよく分からん。基データもよく分からん。

HUAWEI Elevation API

https://developer.huawei.com/consumer/en/doc/development/HMSCore-References/elevation-api-0000001158669981

なんかあった。登録は必要そう。POSTのみ。

Opentopodata

https://www.opentopodata.org/

色んなデータセットをまとめましたーって感じなんだろうか。無料のパブリックAPIは

  • Max 100 locations per request.
  • Max 1 call per second.
  • Max 1000 calls per day.

という制限がある。↓で試してみたが他との差がすごい。

天女山駐車場 671.7135620117188m

国土地理院 サーバサイドで経緯度から標高を求めるプログラム

https://maps.gsi.go.jp/development/elevation_s.html

国土地理院の……APIといっていいと思うんですが。登録不要、無料で使える。制限は常識的な範囲での利用、とな。Yahooの標高APIとかでも使われてるデータから作られてるそう。データとしては実測値の最近点4点を平滑化したものだそう。

天女山駐車場 1533.4m

 

とまぁ色々見てきたけど結局国土地理院が無難かなー。あとは制限がかからないかがあれだけど。どれもこれも戻り値はJSONなのでやっぱJavascriptで書くのがいいんかな。ぶっちゃけあんまり好きじゃないんよね~。あとなんかCORSのエラーでそうー。

プログラムからWebAPIとやりとり

何の言語でやろうかな?というところで、悩ましい。もうVBAでいいんじゃないか。

VBA

ためしに

Sub req()

Dim httpobj As XMLHTTP60
Set httpobj = New XMLHTTP60

httpobj.Open "GET", "https://cyberjapandata2.gsi.go.jp/general/dem/scripts/getelevation.php?lon=138.3979072&lat=35.9216733&outtype=JSON"
httpobj.send

Do While httpobj.readyState < 4
  DoEvents
Loop

Debug.Print httpobj.responseText

End Sub

結果

{"elevation":1533.4,"hsrc":"5m\uff08\u30ec\u30fc\u30b6\uff09"}

いいですね~。JSONのパーサを使いましょう。

https://github.com/VBA-tools/VBA-JSON

そしたらこう

Sub req()

Dim httpobj As XMLHTTP60
Set httpobj = New XMLHTTP60

httpobj.Open "GET", "https://cyberjapandata2.gsi.go.jp/general/dem/scripts/getelevation.php?lon=138.3979072&lat=35.9216733&outtype=JSON"
httpobj.send

Do While httpobj.readyState < 4
DoEvents
Loop

Dim Json As Object
Set Json = JsonConverter.ParseJson(httpobj.responseText)

Debug.Print Json("elevation")

End Sub

結果

 1533.4

ふむー。あとはもうログの1行ごとに取得するようにすりゃいいね。私は常識村の常識的な常識人なので1秒のスリープを入れておこう。

Sub req()

Dim httpobj As XMLHTTP60
Set httpobj = New XMLHTTP60

For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row

  httpobj.Open "GET", "https://cyberjapandata2.gsi.go.jp/general/dem/scripts/getelevation.php?lon=" _
                       & Range("D" & i).Value & "&lat=" & Range("C" & i).Value & "&outtype=JSON"
  httpobj.send

  Do While httpobj.readyState < 4
    DoEvents
  Loop

  Dim Json As Object
  Set Json = JsonConverter.ParseJson(httpobj.responseText)

  Range("F" & i).Value = Json("elevation")

  Application.Wait Now() + TimeValue("00:00:01")

Next i

End Sub

こうの

こうなりました。意外ときれい。15000件とかだと15000/60/60で約4時間強……。センサーの接続はちゃんとチェックしようね。

Python

久しぶりにPython。単純に考えて、CSV読み込み→行ごとにAPIにアクセス→取得したデータを書き込み→CSVを出力って流れでできると思われる。

import csv
import time
import requests

l = []

with open("test.csv", "r") as f:
    reader = csv.reader(f)
    for row in reader:
        url = (
            "https://cyberjapandata2.gsi.go.jp/general/dem/scripts/getelevation.php?lon="
            + row[3]
            + "&lat="
            + row[2]
            + "&outtype=JSON"
        )
        headers = {"User-Agent": "Mozilla/5.0"}

        res = requests.get(url=url, headers=headers)
        data = res.json()
        row.append(data["elevation"])
        l.append(row)

        time.sleep(1)

with open("output.csv", "w", newline="") as f:
    writer = csv.writer(f)
    for row in l:
        writer.writerow(row)

こう。で、追記済みのoutput.csvが出力される。いつもながらキレイに書けんなぁ。

ChatGPTとBardにレビューしてもらった

そういえば最近話題の対話型AIがレビューもできるって話なのでやってもらった。以下結果

ChatGPT

改善点と注意点:

    1. コードの機能は理解できましたが、エラー処理が不足しています。HTTPリクエストが失敗した場合やJSONデータの取得に問題がある場合に備えてエラーハンドリングを追加することが重要です。
    2. time.sleep(1)による1秒の待機は、サーバーへの負荷を軽減するためのものと思われますが、必要に応じて調整することができます。
    3. コード内の変数名やコメントは十分にわかりやすいですが、もし他の人がコードを読むことを考える場合、より詳細なコメントやドキュメンテーションを追加すると良いでしょう。
    4. Pythonのrequestsライブラリを使用してHTTPリクエストを送信していますが、エラー処理とリトライの実装も検討することをお勧めします。

これは基本的な概要ですが、コードは機能的に見えます。詳細な改善やカスタマイズはプロジェクトの要件に応じて行うことができます。

Bard

レビュー

このスクリプトは、わかりやすく、読みやすいコードで書かれています。また、APIの呼び出し頻度を制限するためにtime.sleep()を使用している点も適切です。

ただし、次の点に注意する必要があります。

  • CSVファイルの各行に標高を追加するときに、インデックスのエラーが発生する可能性があります。これを回避するには、次のようなコードを使用できます。
Python
try:
  row.append(data["elevation"])
except KeyError:
  pass
  • 出力CSVファイルを開くときに、newline=””を指定しています。これは、Windows環境でCSVファイルを書き込むときに、不要な改行文字が挿入されないようにするためです。ただし、MacやLinux環境でCSVファイルを書き込むときは、newline=””を指定しない方がよい場合があります。

上記の点に注意すれば、このスクリプトを安心して使用することができます。

 

すごい!

カテゴリー: したい | タグ: , , | コメントする

天女山・前三ツ頭・三ツ頭・権現岳

天女山・前三ツ頭・三ツ頭・権現岳

初八ヶ岳~!赤岳とどっちにするか迷ったけどこちらのが初心者でも歩きやすいとのことなのでこちらにしてみた。だいたい観音平かららしいが西側に行くの大変なので東側のこのルートにしてみた。山行としては標準な感じで行けた。八ヶ岳って山と山が近い感じがするね。縦走したら楽しそう、っていうか縦走してる人にけっこー会った。自分もやってみたいけど、テントにマットに食料に準備が大変そうだよなー。権現岳の北の長い梯子も見てきた。通るの怖そう~。ログは気圧センサが外れちゃって値が取れてなかった。残念。帰りの高速がすごい渋滞だった。あれなんでなんだったんだろなぁ?

https://drive.google.com/file/d/1cd26Ht9aWBkd8qfHtg2Mochcohz9BuYg/view?usp=sharing

別記事で高度グラフを作ってみた

https://dalomo.net/blog/2023/10/01/2625/

カテゴリー: やま | タグ: , | コメントする

赤澤富士・鶏足山・焼森山

赤澤富士・鶏足山・焼森山

親に連れられ久しぶりに登山。低いけどなんか体調悪かったためきつかった。

https://drive.google.com/file/d/1S8c0LDTXlNTL8APUoeWwlSj7mjka6yXu/view?usp=drive_link

 

 

 

カテゴリー: やま | タグ: , | コメントする