
# 誤差 移動 直行 90度 越えた 垂直
江端智一のホームページ

# 誤差 移動 直行 90度 越えた 垂直
「OpenStreetMapから鉄道路線データを落とせない」と愚痴っていたら、社内の人から「OSMに鉄道データ入っていますよ」と言われて、愕然とした件
という訳で、今日は、OpenStreetMapX.jl をダウンロードして色々やっていたのですが、よく分からりませんでした。というか、何ができるのか、が今一つ肚に落ちてこないのです。
で、こちらの路線は諦めて、とにかく鉄道データが取れる手段を探しました。

C:\Users\ebata>docker run -t -i stefda/osmium-tool /bin/bash
/bin , /usr/bin, /usr/local/bin のどこかで当るだろうと探りを入れていたら、
root@e87f198ccc07:/usr/bin# ls o*
objcopy objdump od odbcinst ogdi-config openssl osage osmium
root@e87f198ccc07:/usr/bin# osmium
Usage: osmium COMMAND [ARG...]
/usr/binで当たりました。
で、作業用のディレクトリを探していたら、/tmpがあったので、ここにファイルを持ち込んで作業することにしました
2つ目の、別のWindowsのコマンドプロンプトを上げて、今動かしているコンテナを調べました
C:\Users\ebata>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e87f198ccc07 stefda/osmium-tool "/bin/bash" 12 minutes ago Up 12 minutes wonderful_lumiere
で、ローカルからDockerコンテナの/tmpに直接コピーしました。
C:\Users\ebata>docker cp kanto-latest.osm.pbf wonderful_lumiere:/tmp
一つ目のコマンドプロンプトに戻って、ファイルが可能されているか確認しました。
root@e87f198ccc07:/# cd tmp
root@e87f198ccc07:/tmp# ls
kanto-latest.osm.pbf
ちゃんと入っていました。パスも通っているようですので、
root@e87f198ccc07:/tmp# which osmium
/usr/bin/osmium
そのまま、/tmpの中で作業しました
root@e87f198ccc07:/tmp# osmium tags-filter kanto-latest.osm.pbf w/railway -o kanto-railway-latest.osm.pbf
[======================================================================] 100%
root@e87f198ccc07:/tmp# ls
kanto-latest.osm.pbf kanto-railway-latest.osm.pbf
root@e87f198ccc07:/tmp# osmium export kanto-railway-latest.osm.pbf -o kanto-railway-latest.json
root@e87f198ccc07:/tmp# ls
kanto-latest.osm.pbf kanto-railway-latest.json kanto-railway-latest.osm.pbf
2つ目のコマンドプロンプトを立ち上げて、dockerコンテナから、ローカルに、完成したjsonファイルを送り出します。
C:\Users\ebata\docker-osmium-tool>docker cp wonderful_lumiere:/tmp/kanto-railway-latest.json .
C:\Users\ebata>lsDockerfile README.md kanto-latest.osm.pbf kanto-railway-latest.json work

見事に鉄道だけが抽出されています。

さて、今回はLRTを中心とした宇都宮市をカバーする地域の交通機関を切り出します。
【食べログ作れる? 】 OpenStreetMap から Osmiumで飲食店の位置情報を取得してGeoJSONに出力してみたを参照して、
$ osmium extract --bbox 左上の経度,左上の緯度,右下の経度, 右下の緯度 -o 出力したいファイル名.pbf 元のファイル名.osm.pbf
から、
$ osmium extract --bbox 139.76675736787732, 36.659949299138, 140.1596765021647, 36.47004171587971 -o utunomiya-lrt.osm.pbf kanto-latest.osm.pbf
として切り出してみます。
root@80e1a2d0dc02:/tmp# osmium extract --bbox 139.76675736787732, 36.659949299138, 140.1596765021647, 36.47004171587971 -o utunomiya-lrt.osm.pbf kanto-latest.osm.pbf
Error parsing command line: too many positional options have been specified on the command line
あれ、コンマと空白がダメだったかな?
root@80e1a2d0dc02:/tmp# osmium extract --bbox 139.76675736787732,36.659949299138,140.1596765021647,36.47004171587971 -o
utunomiya-lrt.osm.pbf kanto-latest.osm.pbf
Need LEFT < RIGHT and BOTTOM < TOP in --box/-b option.
うむ、 では、36.659949299138 と 36.47004171587971 を入れかえて、再度挑戦
root@80e1a2d0dc02:/tmp# osmium extract --bbox 139.76675736787732,36.47004171587971,140.1596765021647,36.659949299138 -o utunomiya-lrt.osm.pbf kanto-latest.osm.pbf
[======================================================================] 100%
成功したっぽいです。
root@80e1a2d0dc02:/tmp# osmium tags-filter utunomiya-lrt.osm.pbf w/railway -o utunomiya-railway-latest.osm.pbf
[======================================================================] 100%root@80e1a2d0dc02:/tmp# osmium export utunomiya-railway-latest.osm.pbf -o utunomiya-railway-latest.json
では、ここから、2つ目のコマンドプロンプトから、
C:\Users\ebata\docker-osmium-tool>docker cp serene_shirley:/tmp/utunomiya-railway-latest.json .C:\Users\ebata\docker-osmium-tool>docker cp serene_shirley:/tmp/utunomiya-lrt.osm.pbf .
としました。
utunomiya-railway-latest.json の表示結果はこちらです。

データ量も、関東全域と比較すると、11%程度になりました。

ところで、osmファイルと、osm.pbfファイルの違いって何だろう?
「OpenStreetMapから鉄道路線データを落とせない」と愚痴っていたら、社内の人から「OSMに鉄道データ入っていますよ」と言われて、愕然としました。
江端:「私は、鉄道のOSMデータの取り方に辿り付けていません。いつも、ここからOSMデータをダウンロードしていますが、地理情報しか取れていない(ように思えます)。お暇な時に御教授頂けましたら幸いです。」
同僚:「そこから取れるデータの中に、鉄道路線のデータも入っています」
江端: ―― はい?
江端:「かなりずうずうしいお願いをしていることは分かっているのです、このタグをPostGISのpostgresqlに落す方法とかご存知だったりしますか? 多分、この辺(Configuration file = /usr/local/share/osm2pgrouting/mapconfig_for_cars.xml)です。」
同僚:「私は、JuliaのOpenStreetMapX.jlを少し改造して、直接OpenStreetMapのosmファイルをパースしていました」
https://github.com/pszufe/OpenStreetMapX.jl
で、現在、readme.mdを読んでいます。
うむ、この連休の使い方としては、有意義な時間を過せそうです。
ところで、Juliaって、コンピュータ言語かな。これ以上、言語は、覚えたくないんだけど ―― 仕方ないですね。
昔、倒れている人を助けようとして『余計なことするな!』と怒鳴られたことがあります。
I once tried to help a man who had fallen and was yelled at, 'Don't do anything unnecessary!
結構ショックだったので、覚えています。
It was quite a shock, so I remember it.
ただ、私も人の手を素直に借りれない性分であるので、その心情、ちょっとだけ理解できます。
However, I too am of the nature that I can't honestly ask for help from others, so I can understand the mind a little bit.
-----
数年前、駅で倒れている人がいました。
A few years ago, I saw a man lying in a train station.
皆、心配そうにはするのですが、具体的に手を差し延べることはしないようでした。
Everyone seemed concerned, but did not seem to reach out specifically for help.
私も、原則、そちらの側ですが、それでも倒れた人の近くにしゃがんで、一言言いました。
As a rule, I am on their side, but I still crouched down near the fallen man and said a few words.
『もし、ご希望があれば、お助けします。どうしますか?』
"If you wish, we can help you. Which is better for you?"
私は、ここで遠慮した人を「見捨てる」と決めています。
I have decided to "ditch" anyone who refrains here.
セカンドチャンスは提供しません。
I do not offer second chances.
これが、『江端ファースト&ファイナルコールプロトコル』です。
This is the "Ebata First & Final Call Protocol".
ちなみに、その時は、その人が『駅員を呼んでくれ』と頼んだので、駅員を呼んで、そのまま立ち去りました。
Incidentally, at that time, the man asked me to 'call the station staff,' so I called the station staff and just walked away.
-----
私は、
I always ask, at least once, the following questions.
「席をおゆずりしましょうか」
"Shall I give you a seat?"
「救急車を呼びましょうか」
"Shall I call an ambulance?"
「飲料水、買ってきましょうか」
"Shall I get you some drinking water?"
"If you need help, I will give it to you."
"If you need help, I will give it to you."
と、最低一回は必ず尋ねます。
しかし、自分の言葉でご辞退されれば、私は立ち去ります。
However, if they 'decline' on their own terms, I will walk away.
(応答がない場合は、状況の判断に因ります)
(If no response is received, the decision will be based on the situation)
-----
ただし、「駅で飛び込み自殺をしようとしている人」に関しては、このプロトコルの例外です。
However, an exception to this protocol is made with regard to "a person attempting to commit suicide by jumping into a train station".
従わない場合は、力づくでも止めます。
If she/he does not comply, I will stop them, even by force.
"If you're going to jump in, make sure it's the next train after the one I'm on."
この連休でやっておきたいことをメモに書き出してみたら、とんでもない数になりました。
I wrote down in my notes what I wanted to do during this holiday weekend, then, there were a tremendous number of things to do.
―― どうして、私(たち)は、連休に、こんなに過大な要求を自分に課せるのか?
"Why do I (we) put such excessive demands on myself(ourselves) during the holidays?"
言わば『連休幻想』とでも言うものでしょうか。
Is it a "holiday illusion," so to speak?
私たちに与えられた時間と、私たちの持っている能力が、連休の期間に跳ね上がる訳でもありません。
The time we are given and the abilities we have, do not jump during the holidays.
メリットは、『メールと電話がやってこない』くらいなんですけどね。
The only advantage is that 'emails and phone calls don't come to us'.
-----
私は、GW初日から、ドップリとコーディングをしています。
I have been coding deeply since the first day of GW.
私の人工知能(技術)を搭載した3台のバスたちは、移動・連携しながら、相互に一秒間に数百回のルート計算を繰返し、街(先月視察してきた)の、住人のピックアップとドロップオフを続けています。
Three buses equipped with my artificial intelligence (technology) are moving and working together, mutually calculating their routes hundreds of times per second and continuing to pick up and drop off residents of the city (which I inspected last month).
もちろん、Webの地図上で、ですが。
On a web map, of course.
―― 可愛いやつらめ
"Cute little guys"
と、目を細めています。
I am looking at them with smile.
嫁さんも、動いているアイコンを見て「可愛いね」と言っていますが ―― 多分、その見方は、全然違うんだろうなぁ、と思っています。
My wife also looks at the moving icons and says they are cute, however I think that her viewpoint is different from mine.
以前、こちらで、redisのブロードキャスト(Pub/Sub)の方法について2つほど紹介しましたが、試した結果、こっちの方が安定して調子が良くて、現在、こちら(redigo)を使っています
で紹介されていた、サンプルプログラムを使って、構造体のデータを丸ごと送信しようとしたのですが、Golangの厳しい型チェックに掴まって、なかなか上手く動かすことができません。
ただ、構造体をJSON形式にすれば、成功することは分かっています。
しかし、今の段階で構造体をJSONに変更すると、その影響が、プログラム全体に波及し、作業が膨大になるので、これはしたくありませんでした。
もしかしたら、構造体のブロードキャストも、JSONの時と同じように、"json.Unmarshal"、 "json.Marshal" を使えばいけるかな? と思ってやってみたら、あっさりと成功しました。
上記の記事のサンプルプログラムを、構造体データ送付用に改造したものを開示しておきます。
■パブリッシャ(発行元)側
// go run pub.go
// goga\1-9-6\others\pub.go
package main
import (
"encoding/json"
"fmt"
"github.com/gomodule/redigo/redis"
)
type Ch5_info struct {
Bus_num int // バスの番号
CC int // 1: 座標情報 2: 停車位置情報
Present int // 停車位置番号
Lat float64 //
Lon float64 //
}
func main() {
// 接続
conn, err := redis.Dial("tcp", "localhost:6379")
if err != nil {
panic(err)
}
defer conn.Close()
c5i := new(Ch5_info)
c5i.Bus_num = 1
c5i.CC = 2
c5i.Present = 23
c5i.Lat = 12.34
c5i.Lon = 56.78
json_c5i, _ := json.Marshal(c5i)
// パブリッシュ
r, err := redis.Int(conn.Do("PUBLISH", "channel_1", json_c5i))
if err != nil {
panic(err)
}
fmt.Println(r)
}
■サブスクライブ(購読者)側
// go run sub.go
// goga\1-9-6\others\sub.go
package main
import (
"encoding/json"
"fmt"
"github.com/gomodule/redigo/redis"
)
type Ch5_info struct {
Bus_num int // バスの番号
CC int // 1: 座標情報 2: 停車位置情報
Present int // 停車位置番号
Lat float64 //
Lon float64 //
}
func main() {
// 接続
conn, err := redis.Dial("tcp", "localhost:6379")
if err != nil {
panic(err)
}
defer conn.Close()
psc := redis.PubSubConn{Conn: conn}
psc.Subscribe("channel_1", "channel_2", "channel_3")
for {
switch v := psc.Receive().(type) {
case redis.Message:
fmt.Printf("%s: message: %s\n", v.Channel, v.Data)
c5i := new(Ch5_info)
_ = json.Unmarshal(v.Data, &c5i)
// 試しに2つほど出力してみる
fmt.Println(c5i.Bus_num)
fmt.Println(c5i.Lon)
case redis.Subscription:
fmt.Printf("%s: %s %d\n", v.Channel, v.Kind, v.Count)
case error:
return
}
}
}
私のような悩み持っている人、世界中に沢山いました。
Golangは、C/C++みたいに、自己責任で自由にキャストできないんですよね。
memset()を使って、大量の配列の変数を一気に変更させてしまう、ということもできないようで、Golang不便だなぁ、って思います。
最近、ソロキャン(一人キャンプ)が流行っています。
Solo camping (camping alone) has recently become popular.
私も、若い頃、バイクにキャンプ一式を掲載して、ツーリングに出かけていました。
When I was a young man, I used to post a set of camps on my motorcycle and go touring.
で、キャンプをやったことが「ない」人は、ときどきは「ある」人も忘れてしまいがちですが、
And people who have "never been" camping, or sometimes even people who have "been", tend to forget the following.
―― テントの居住性って、最悪です
"Tent habitability is the worst"
大抵、サウナのように暑いか、野ざらしのように寒いかの、いずれかです。
It is usually either as hot as a sauna or as cold as the open air.
当然、ろくな睡眠ができません。
Naturally, we cannot get a good night's sleep.
翌日、鉛のような体を引き摺って、移動しなければなりません。
The next day, dragging my lead-like body, we have to move on.
私、一度、GWに北陸にツーリングにでかけたことがあるのですが、2日目で体力の限界に達して、3日目はビジネスホテルに宿泊せざるを得ませんでした。
I once went on a touring trip to Hokuriku in GW, but I reached my physical limit on the second day and had to stay at a business hotel on the third day.
このままバイクの旅を付けたら、『事故を起こす』と確信できるレベルで、疲労困憊していました。
I was exhausted and convinced that if I continued on my motorcycle trip, I would 'cause an accident'.
-----
そもそも私たち人類は、自然の中で生きることを捨てて、家を作り、街をつくり、移動手段を作って、進化してきた種族です。
In the first place, we humans are a species that has evolved by abandoning the idea of living in nature, building houses, cities, and means of transportation.
予備訓練もしない、無茶な自然への回帰願望は、命にかかわります。
A reckless desire to return to nature, without preliminary training, can be deadly.
ソロキャンのデビューは、経験者とともに、十分な回数を積んでから ―― を、強くお勧めします。
I strongly recommend that you make your solo camping debut only after you have done the camp enough times with an experienced person.
下手すると、生涯『お家が一番』と決めつける『引きこもり』になる可能性があります。
To the worst case, you may become a "hermit" who decides that "home is best" for the rest of your life.
-----
バックパックを背負って、世界中(おもにアジア)を放浪していた私 ―― あれは「別の世界線の私」です。
Wandering around the world (mainly in Asia) with a backpack on my back - that was "me on another world line".
多くの犠牲を払って、「お家が一番」という「今の世界線」に、私は辿りついたのです。
With many sacrifices, I have arrived at the "current world line" where "home is best".
コロナ禍の運動不足から、腰痛などが発生しています。
隔日のウォーキングはしていますが、筋力の低下が著しいです。
そこで、『ぶらさがり健康法』→『(可能なら)懸垂』に持っていくために、部屋に鉄棒を作ってみました。
まず、屋根裏に上って、私の体重を支えられるに足る木材の場所を捜しました。

で、屋根から千枚通しを打ち込んで基準点を見えるようにしました。

で、DIYショップにいって、手摺り用の器具(でもって、私の体重を支えられそうな、ごっついもの)を購入してきました。


完成

ぶらさがってみましたが、ビクともしませんでした ―― 私の体の方にガタが出てくるもしれませんが。
以上
その後
私は、1993年から続けているhtmlによるサイトと、2年前から新しく始めたWordPressによる、2つのサイトを運営しています。
I run two websites, one in html, which I have been doing since 1993, and the other in WordPress, which I newly started two years ago.
WordPressの管理者画面では、読まれた記事のランキングが表示されます。
The WordPress admin screen shows the ranking of read posts.
で、現在、月間No.1の記事が、これ。
And now, the No. 1 article of the month is this one.
-----
結構、これが、気持ち良くて、毎日3回はぶら下がっています。
I feel pretty using this trial, and hang out three times daily.
ぶら下がりより、懸垂の方、思いの外好調でして、現在、頭を天井ぶつけて、5cmだけ離し、しかも、足をジタバタさせて勢いをつける、という「インチキ懸垂」が、連続10回ほどできるようになりました。
I am doing better at pull-ups than hanging, and I can now do about 10 pull-ups in a row by hitting my head against the ceiling, pulling 5 cm away from it, and flailing my legs to gain momentum.
で、懸垂後に、ぶら下がりに移行するのですが、正直こっちの方が辛くて、20秒以上ぶら下がっていることができません。
And after the pull-ups, I move on to hanging, which is honestly more painful, and I can't hang for more than 20 seconds.
工事作業用のゴム手袋をして、ぶら下がっているのですが、20秒を越えると、握力が耐えられなって落ちてしまう、という状態です。
I wear rubber gloves for construction work and hang on, but after 20 seconds, my grip becomes unbearable and I fall off.
-----
この握力問題ですが、筋肉トレーニングしている人にとっては、よくある問題ということを知りました。
I have learned that this grip strength problem is a common problem for people who are doing muscle training.
で、今日、Amazonで、「パワーグリップ」なるものを買ってみました。
So today, I went to Amazon and bought something called "Power Grip".
-----
筋トレには興味ないのですが、『視野に入るところに「鉄棒」があれば、なんとなくぶら下がってみたくなる』というのは、新しい発見でした。
I am not interested in muscle training, but I discovered something new: 'If there is an "iron bar" in my field of vision, I kind of want to hang on to it.