2023,江端さんの忘備録

本日、リモート環境で打ち合わせをしている最中に、比較的大きめの地震が発生しました。

During a remote meeting, a relatively big earthquake occurred.

が、打ち合わせはそのまま問題なく進んでいるので、『いちいち地震を気にしないで会議を進めるのだ』と思っていました。

However, the meeting continued without any trouble, I thought "They don't care about earthquakes"

ところが、3秒くらい経過したところで、「あ、揺れている」「比較的大きいですね」という声がチラホラ聞こえてきました。

After about three seconds, the voice "Oh, it's shaking," or "It's relatively big" were coming, so I thought

―― 生れてはじめて、地震波の存在をリアルに実感した

"For the first time in my life, I really felt the existence of earthquake waves"

と思いました。

"巨大地震の発生直後、飛行場の管制官が、離陸の最中にあった旅客機に停止指示を出さずに、空に逃がすシーン"

-----

ただ、Twitterで震源地情報などを調べると、どうも、違和感がある。

However, I felt a sense of discomfort, when I looked up the epicenter on Twitter.

私の住んでいるところが、一番震源地より遠いはずです。

My location must be far from the epicenter, I thought.

私の考えた、仮説の一つは、『他の人の(高価な)家は免震構造が頑強であるが、私の(高価でない)家は敏感にP波(初期微動)を感じられる』です。

One of my hypotheses is that "other member's houses are expensive and robust seismic isolation structures, but my house is not expensive and can feel P-waves (initial microtremors) sensitively.

あまり愉快な仮説ではありませんが。

Anyway, it is not a very pleasant hypothesis.

未分類

なんでこれが

FROM golang:1.16.3-alpine
WORKDIR /go
ADD . /go
# CMD ["go", "run", "main.go","-addr" ":18888"]
# CMD ["go", "run", "main.go","-addr" ":18888"]
# CMD ["main.exe"]

こうなる?

わからん・・・

2023,江端さんの忘備録

私は、自分のWebサイトをDB化しています ―― GoogleエンジンとWordPressの検索機能を使っているだけですが。

I use my website as DataBase, using just the Google search engine and search functions of WordPress.

これ結構便利です。

This is really useful.

「○○についてネタが欲しい」と思った時に、すぐに探し出せるからです。

Whenever I want to tell a story about a specified theme, I can find it soon.

Amazon 恐るべし。

-----

今日も会社で、あるテーマについて投稿しなければならなかったのですが、数秒でネタを見つけました。

Today I was ordered to submit a short story about a specific theme, and I could find it in a few seconds.

まあ、ネタの使い回しもあるので、何度も同じ話を聞かされている人もいるでしょうが ―― まあ、そこは、諦めて下さい。

Well some people should hear my story again and again, I ask them to give up.

-----

なんだかんだ言って、私のWebの創立は、1993年です ―― 創業30年の老舗Webサイトです。

Anyway, my Web establishment was founded in 1993 -- a 30-year old Web site.

まあ、規模的には「和菓子屋」というよりは「駄菓子屋」ですが ――

Well, in terms of scale, it's more of a "candy store" than a "wagashi ya" -- however,

それでも歴史だけに着目すれば、AmazonやGoogleなどのGAFAなんぞは、小僧のようなものです。

Still, if you focus only on history, GAFAs like Amazon and Google are like little boys.

決して、負け惜しみではありません。

By no means is this a sore loser?

2023,江端さんの忘備録

昨日書いたようなデッドロックに、本日、遭遇することになりました。

『システムの奴隷』

Today, I faced the "Dead Lock" I wrote yesterday.

だいたいヤバいことは、システムをいじった直後に発生するというのは「お約束」です。

Almost all of the troubles will happen just after the system modification. This is so typical.

-----

で、このデッドロック対策について、教えを乞い、100ページのマニュアルを送ってもらったのですが、「もうダメだ」と諦めました。

In order to avoid the deadlock, I asked workers in my company. A guy gave me a manual book with more than 100 pages. After reading it, I gave up easily.

しかし、その人から『簡単ですよ』と言われて、実際に試してみたら、ざっくり1分で設定が完了しました。

However, the guy gives a reply, "It was a piece of cake", I could complete the set in a minute

-----

ここから導かれる事実は2つ。

The facts lead to the following.

■マニュアルは、本当に欲しいことを、分からないように記載される傾向がある

- Manual books are apt to be written difficult, so too hard to get us what we want.

■人間(というか、私)は、マニュアルより、人間の言葉を信じる傾向にある

- A human being (like me) is apt to believe human words more than manuals.

ということです。

私も今回のメモを纏めましたが、「10行の文章 + 図面のハードコーピー2枚」になりました。

I made a memorandum about what I did, and the volumes are only 10 line-document and two hardcopy sheets.

-----

マニュアルがあんなに長く、分かりにくいのは、問題が発生した時に「問題」になるからです。

The reason why manuals are so long and hard to read is to become a problem if the problem happens.

一方、私のメモは私の為のものなので、他の人がそれを読んでシステムを壊すなどの被害が起ったところで ―― 私の、知ったことではありません。

On the other hand, my memorandum is just for me, so even if someone tries some actions by reading my memorandum, it is not my business.

私だって、他の人のメモで、色々酷い目にあったこともあります ―― これは『お互い様』です。

Even I also got in terrible trouble by reading another's memorandum. So It is "mutual"

まあ、普通の企業には、恐しくてとてもできないことだとは思いますが。

Well, I think it is something that ordinary companies are too afraid to do.

2023,江端さんの忘備録

ITシステムが会社になかった時代 ―― いや、本当にそういう時代があったんです。

"The ear where there is No IT system in companies". --- I am not kidding.? The era had existed in the old days.

ほんの20年くらい前は、それが当たり前でした。

It was natural just before 20 years ago.

勤怠管理の提出を怠れば、総務部が怒りの声で電話をしてきて、遅延した伝票の処理は庶務担当の人に、頭を下げて、定期的にお土産を提供していれば、なんとかなりました。

If I failed to submit my time and attendance, a person in the general affair department called me in an angry voice. When I delayed vouchers to the accounting department,? I kept my head down and sometimes I give them souvenirs periodically.

事務処理は、"なあなあ"な人間関係で、なんとかこなすことができたのです。

The paperwork was managed through a casual relationship.

そういう意味では、インターフェースの優れた、いわゆる「ネアカ」「陽キャ」「恫喝」「土下座」というのは、社内において圧倒的に有利、というか、立派な「インタフェース」だったのです。

In that sense, the so-called "cheerfulness," "cherry," "frights," and "down on their knees", were superior interfaces to keep our paper management in my company.

-----

しかし、ITシステムは、そんなこと『気にしません』。

However, IT system doesn't take care of them at all.

決済日を70日経過しても、警告一つ寄越さず、期末の精算処理の時点で、社内が大騒ぎになります。

Even if the deadlines pass through over 70 days, the IT system doesn't put any alert message. As a result, on the day of the end of the fiscal year,? my company came to be in a fuss.

締切の時間を5分遅れたら、報告書を受理しません。

IT system rejects to get a report even if I delay submitting it by just five minutes.

それどころか、末日のシステム集中でシステムダウンをしても、それに対して謝罪も弁済も補償も猶予もなく、そのまま、手続を『不受理』とします。

On the contrary, even if the IT system is down for access concentrations, they have no apology, reimbursement, compensation, or grace, and just reject my submission.

そのため、以前は締切日に資料を提出するのは避けていました。 なぜなら、その日は「システムダウンの日」だと決めているからです。

Therefore I used to avoid submitting any materials on the deadline day. Because I decide the day is "The system down day".

つまるところ、AI技術などと関係なく、業務のIT化によって、私たちは、すでに

In short, regardless of AI technologies, with IT management by computer, we have already become

『システムの奴隷』

"Slavers of the IT system"

と、なっているのです。

-----

私の勤務している会社では、会社の業務システムに対して、年に数回のパスワード変更を実施しなければなりません。

My company orders us to change my "password" several times a year for the company work system.

それを実施しない場合の、システム側からの制裁は、単純で、そして残酷です。

When we don't do it, the sanctions from the systems are simple and brutal.

『全業務システムへのアクセス停止』です。

"All accesses to all work systems are suspended".

業務システムだけでなく、メール、チャット、IP電話、何もかもかもが使えなくなります。

Not only the work systems, but also e-mail, chat, IP phones, and everything else will be out of service.

-----

ところが、パスワードの変更をすると、そのパスワードの変更を他のシステムで承認するという面倒なシーケンスが働きます。

However, when I try to change my password, the change must be admitted by another system. This is a seriously complicated status.

この結果何が発生するかというと ―― デッドロックです。

As a result, what will happen? It is a "deadlock".

システムにアクセスするのに新しいパスワードが必要なのですが、そのパスワードを承認するシステムが、そのパスワードでなければログインできない、という状態になり ――

When I try to access a work system, I need to use the new password. However, the system also needs the new password.

つまるところ、『パスワード変更をすることで、どのシステムにもアクセスできなくなる』という状態が発生するのです。

In short, the situation of "changing password makes me not access any work system" occurs.

デッドロックを発生させない為に、あるシステムにパスワード変更の効果が及ぶ前に処理をしなければならないなど、クソ面倒くさい気遣いが必要になっています。

In order to avoid the deadlock, I have to start the system before being spread the changing password to the system. Anyway, it is an annoying process I have to.

こうなると、もはや、単なる奴隷ではなく、

In a sense, I am not just a slave but,

『システムの下僕』

"Servant of the System"

といっても過言ではないでしょう。

現代の私たちは、望む望まずに関わらず、マイクロソフト社の「Windows OS」と「Office」の奴隷・・・もとい、ユーザとなっています。

I believe that it would not be an exaggeration.

腹立たしいことこの上もありませんが、「ネアカ」「陽キャ」「恫喝」「土下座」を排除した世界の一つの形であるのは事実です。

It is beyond infuriating, but it is true that this is one of the worlds that eliminate "cheerfulness," "cherry," "frights," and "down on their knees".

ただ、システムデッドロックに陥った場合、そこから抜け出すのは、簡単ではない世界です。

Still, it is also very difficult to escape from the world when we are caught by the system deadlock.

-----

次のAI技術の目指すものは、「ネアカ」「陽キャ」「恫喝」「土下座」などのアナログインターフェースを、正しく理解するものなのかもしれません。

The next-generation AI technology might be something to understand the interfaces of "cheerfulness," "cherry," "frights," and "down on their knees".

もっとも、そのAI技術では、コンピュータが『うるせい!大声出すな!!』と応答してくるかもしれませんが。

However, with the AI technology, a computer might respond with "Shut up! Stop yelling!!" against your loud claims.

2023,江端さんの技術メモ

cert.pem やら key.pem に、localhost や 127.0.0.1を含めて作っていなかったから。以上

C:\Users\ebata\kitaya>curl https://localhost:8080
curl: (35) schannel: next InitializeSecurityContext failed: Unknown error (0x80092012) - 失効の関数は証明書の失効を確認できませんでした。

cert.pem = fullchain.pem  key.pem = privkey.pem ということで良いのだろう

ローカルネットワークにおける「オレオレ証明書」の作り方 "http: TLS handshake error from 192.168.0.22:59914: remote error: tls: unknown certificate"のエラーを、ようやく消せました

2023,江端さんの忘備録

最近の私の英語の教師は、全部"IT"(×"AI")です。

Recently, my English teachers are IT (not AI).

翻訳も、文法も、慣用表現も、チェックは全部ITがやってくれます。

ITs are checking translations, grammar, and idioms of my English.

しかも、ほとんどフリー(無料)。

In addition, they are almost free. So I feel

―― 『語学は人前で恥をかいて習得する』という時代の終焉

The end of an era of "Learning a language with shame in public"

を感じます。

私、以前、英語はコミュニケーションではなくて、コンピュータのインターフェースの為に必要となる、という論を展開したことがあります。

I used to develop the argument that English will be needed not by communication but by the interface of computers.

―― エラそうに

今や、コンピュータのインターフェースどころか、コミュニケーションの道具として、ITに英語を教えてもらっている有様です。

Now, computers are, beyond my imagination, not only the interface with a human beings but also a teacher we use English as a communication tool.

という話、どっかで書いたなぁ、と思ったら、こちらにありました。

I remember that I had already written the same story before, and I found the following blog.

私は生れて始めて『AI技術による廃業』の予感を感じました ―― 最初の犠牲者は、語学教師です。

-----

ただ一つ問題があるとすれば、ITに鍛えて貰うのであれば、日常的に英語を使わなければなりません。

There is a problem to be trained by computer to learn English, we have to continue to use English day by day.

それは、どんなやり方でも構わないのですが、基本的に「毎日、英語を使う」という環境が必要であって、そんな環境、普通に手に入るものではありません。

Any way is good for you, however, the important thing is "using English every day" and the environment. It might be hard to get the environment.

私のように、『日英併著の日記を書いて公開する』というような(気持ちの悪い)決意でもしない限りは無理でしょう。

Like me, "disclosing blogs written in both English and Japanese" is one of several methods, however, ordinal people cannot continue to do that.

ここで大切なのは、やはり『公開』です。

We should emphasize the "disclosing".

一般的に『公開』は怖いことです。観衆の目に晒されて批判を受ける覚悟が必要になるからです。

Generally, "disclosing" is fear for anyone, because, we have to prepare to accept criticisms from many people in the world.

------

そのように考えていくと、

Come to think of it,

―― 『語学は人前で恥をかいて習得する』という時代は、まだ終焉していない?

Is the era of "Learning a language with shame in public" continuing?

のかもしれません。

That might be true.

2023,江端さんの忘備録

GWの最初の2日間は、コラムを書いていて、そこからずっとコーディングをしていました。

I had written a long column for the first two days, and after that, I have been coding since then.

が、まあ、予想を越えてコーディングが面倒くさくて、現時点でも予想した進捗の5割も達成していない状況です。

However, beyond my first estimation, I have completed less than just half progress in the present.

いわゆる、『2行のデバッグに丸一日』というやつです ―― 最近の私のブログを読んで頂ければ状況はご理解頂けるとは思いますが。

This is so called, "Two line debugs for one whole day". You could be understanding my real progress by reading recent my columns.

まあ、その『2行のデバッグに丸一日』の結果を、私がバシバシと公開しているのは、私が気前が良い訳ではありません。

I disclosed the result of "Two lines debug for whole one day" easily, however, I am not "open-minded".

世界中の多くのそういう人の記事に助けて貰っているからです ―― "Give and Take"です。

I have been helped by the person who opens their technical tips easily every day. It is a typical "Give and Take"

だから、今一度、言おう。『インターネット、ばんざい』

-----

ところで、私については、"I take"は間違いがないのですが、"I give"については、ちょっと疑義があります。

By the way, for me, It is true that "I take", on the other hand, it is doubtful whether "I give" is.

良いものを頂いて、粗品を返却しているというのでは、なんとも申し訳ありません。

It is not excusable even if I take "something awesome" but I give "something little".

で、まあ、私のブログの横に出てくる参照情報を見ています。

So now I am reading the reference information on my blog page.

まあ、"トントン"くらいにはなっているのかな、と思っています。

I hope that they are almost "even"

『江端のサイトにアクセスしたけど、全然、役に立っていない』ということもありますからね。

There might be many cases that "the information is not useful, even if you access Ebata's Web site".

-----

以前、上司から、

Before, my boss told me that

『江端さんは、社内の特許・秘密情報に抵触しない範囲で、非常に上手く技術情報を開示していることは、よく分かっています。"匠の技"だと思います』

"I know well that Ebata-san opens technical information except for our company secret, security, and patentable information, It is "master craftsmanship", I believe"

と言われたことがあります。

一方、釘も刺されました。

On the other hand, my boss ordered me that,

『しかし、若手研究員の中には、江端さんの"匠の技"に気がつかない者もいます。その者への教育もしっかりやって下さいね』

"Some young researchers in my company might not notice your "master craftsmanship".so I hope you ask to instruct them about your methods"

と。

-----

という訳で、社内の研究員の諸君。

So, young researchers in my company.

自分の力量では、「社内情報を流してしまうかもしれない」と思っているなら、私のマネをしない方がいいです

You don't follow my examples if you worry about your "leak of information".

ゆめゆめ『匿名』ごときで逃げられると思わないようにして下さい。

You don't think that you can run away by using "anonymous"

もし会社が命じれば、私が『追手』になるケースすら考えられます。

Even if my company orders me, I become a "chaser" to you by far.

忘れないでください ―― 私は「会社の犬」です。

Don't forget it. I am a "company's dog".

2023,江端さんの技術メモ

    // C:\Users\ebata\yoko_bus_route\others>go run test2.go
    バスルート情報(LINESTRING)に幅を当与えてPOLYGONにして、データベースに格納する方法

 

    (Step.1)テーブルの作成
    CREATE TABLE bus_route(name varchar(50), geom geometry(POLYGON,4326) );

 

    (Step.2)以下でエントリーを追加できることを確認
    INSERT INTO bus_route(name, geom) VALUES('test2', ST_Buffer(st_setsrid(ST_GeomFromtext('linestring(139.595873 35.378154,139.595779 35.37812,139.595766 35.378045,139.595922 35.377752,139.596212 35.377193)'),4326),0.0001,'endcap=round join=round'));

 

    route_db=# select * from bus_route;
    name  |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                geom
    ------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    test1 | 0103000020E61000000100000031000000EC55D36C11736140FEFA05EA63B04140F87A208412736140B5B6AEB75BB04140C96A2B8512736140A12BBFAF5BB041404BFB57E514736140AACF835E49B04140E6839BF41473614026E3D2C548B04140BE7F21FC1473614016C2272448B041401EEB9FFB147361406DE8B87F47B04140D5C01BF314736140A104D8DE46B0414036C9E8E21473614005CDB34746B04140DB61A6CB147361402D2D1BC045B04140CF5D39AE14736140AF21444D45B04140673AC38B147361407C7498F344B0414046FF96651473614010528AB644B0414002372C3D14736140B062729844B0414098801014147361402FB5789A44B04140A547D8EB13736140535E89BC44B04140BE390FC613736140D03C55FD44B04140C71129A4137361403DDA5E5A45B04140E84E7387137361406CEA12D045B041409B630871137361400C78EB5946B0414084EF5F1111736140ED342CA758B041402CE6BECA0F73614067FE133D62B04140F2C8AEB90F736140BD9C67E862B04140C33964B20F736140124B819E63B04140E26F39B50F736140B5E0935664B0414047C27CD00F736140C026B9CB66B0414071B186DC0F736140AD16347567B041404E3A26F10F736140171FE31068B041401A76720D10736140BA15E89768B041405CD22B30107361400A2E4E0469B04140E229CA5710736140113D4D5169B041408307EC1C11736140BDAE836E6AB041401240C444117361402E7E05976AB041403D3DD26D117361405331A89F6AB041406B1A82961173614073D316886AB04140009143BD117361406E4039516AB04140435A99E011736140BD3B2BFD69B0414055D627FF1173614044B2278F69B041401B68C217127361401BF3680B69B04140A802772912736140D717FF7668B0414084769733127361409F359ED767B041404D23C03512736140F240663367B04140D5CBDB2F127361403ACCA69066B041401467242212736140E5F1A0F565B04140E8E5200D12736140D9CC496865B041408A03A0F11173614090DC0FEE64B04140BF53B0D0117361407895A58B64B04140EFDC95AB11736140452BD34464B04140EC55D36C11736140FEFA05EA63B04140
    SQLのコマンド画面からは、上記の"INSERT INTO bus_route...."でエントリーできるのですが、これをプログラム(ins.Exec())を使うと、
    どうしても、
    Exec Error: pq: parse error - invalid geometry
    というエラーが出てきて、これを消すことができないです。
    そこで、まず、"selectで"0103000020E6100000010....."を受けとってから、これを、ins.Exec()を使ってエントリーすることにしました(原因はよく分かっていません)
/*
	// C:\Users\ebata\yoko_bus_route\others>go run test2.go

	バスルート情報(LINESTRING)に幅を当与えてPOLYGONにして、データベースに格納する方法

	テーブルの作成
	CREATE TABLE bus_route(name varchar(50), geom geometry(POLYGON,4326) );

	以下でエントリーを追加できることを確認
	INSERT INTO bus_route(name, geom) VALUES('test2', ST_Buffer(st_setsrid(ST_GeomFromtext('linestring(139.595873 35.378154,139.595779 35.37812,139.595766 35.378045,139.595922 35.377752,139.596212 35.377193)'),4326),0.0001,'endcap=round join=round'));

	route_db=# select * from bus_route;
 	name  |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                geom
	------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 	test1 | 0103000020E61000000100000031000000EC55D36C11736140FEFA05EA63B04140F87A208412736140B5B6AEB75BB04140C96A2B8512736140A12BBFAF5BB041404BFB57E514736140AACF835E49B04140E6839BF41473614026E3D2C548B04140BE7F21FC1473614016C2272448B041401EEB9FFB147361406DE8B87F47B04140D5C01BF314736140A104D8DE46B0414036C9E8E21473614005CDB34746B04140DB61A6CB147361402D2D1BC045B04140CF5D39AE14736140AF21444D45B04140673AC38B147361407C7498F344B0414046FF96651473614010528AB644B0414002372C3D14736140B062729844B0414098801014147361402FB5789A44B04140A547D8EB13736140535E89BC44B04140BE390FC613736140D03C55FD44B04140C71129A4137361403DDA5E5A45B04140E84E7387137361406CEA12D045B041409B630871137361400C78EB5946B0414084EF5F1111736140ED342CA758B041402CE6BECA0F73614067FE133D62B04140F2C8AEB90F736140BD9C67E862B04140C33964B20F736140124B819E63B04140E26F39B50F736140B5E0935664B0414047C27CD00F736140C026B9CB66B0414071B186DC0F736140AD16347567B041404E3A26F10F736140171FE31068B041401A76720D10736140BA15E89768B041405CD22B30107361400A2E4E0469B04140E229CA5710736140113D4D5169B041408307EC1C11736140BDAE836E6AB041401240C444117361402E7E05976AB041403D3DD26D117361405331A89F6AB041406B1A82961173614073D316886AB04140009143BD117361406E4039516AB04140435A99E011736140BD3B2BFD69B0414055D627FF1173614044B2278F69B041401B68C217127361401BF3680B69B04140A802772912736140D717FF7668B0414084769733127361409F359ED767B041404D23C03512736140F240663367B04140D5CBDB2F127361403ACCA69066B041401467242212736140E5F1A0F565B04140E8E5200D12736140D9CC496865B041408A03A0F11173614090DC0FEE64B04140BF53B0D0117361407895A58B64B04140EFDC95AB11736140452BD34464B04140EC55D36C11736140FEFA05EA63B04140

	SQLのインタースを使うと、上記の"INSERT INTO bus_route...."でエントリーできるのですが、これをプログラム(ins.Exec())を使うと、
	どうしても、
	Exec Error: pq: parse error - invalid geometry
	というエラーが出てきて、これを消すことができないです。

	そこで、まず、"selectで"0103000020E6100000010....."を受けとってから、これを、ins.Exec()を使ってエントリーすることにしました(原因はよく分かっていません)
*/

package main

import (
	"database/sql"
	"fmt"
	"log"

	_ "github.com/lib/pq" // ←これを追記
)

func main() {

	db, err := sql.Open("postgres",
		"user=postgres password=password host=192.168.0.23 port=15432 dbname=route_db sslmode=disable")
	if err != nil {
		log.Fatal("OpenError: ", err)
	}
	defer db.Close()

	str := "select ST_Buffer(st_setsrid(ST_GeomFromtext('linestring(139.595873 35.378154,139.595779 35.37812,139.595766 35.378045,139.595922 35.377752,139.596212 35.377193)'),4326),0.0001,'endcap=round join=round')"

	rows, err := db.Query(str)
	if err != nil {
		log.Fatal(err)
	}
	defer rows.Close()

	var ret_str string
	for rows.Next() {
		if err := rows.Scan(&ret_str); err != nil {
			fmt.Println(err)
		}
		fmt.Println(ret_str)
	}

	ins, err := db.Prepare("insert into bus_route (name, geom) VALUES($1, $2)")
	if err != nil {
		log.Fatal("db.Prepare Error: ", err)
	}

	a := "test2"
	_, err = ins.Exec(a, ret_str)
	if err != nil {
		log.Fatal("ins.Exec Error: ", err)
	}

}

ちなみに

route_db=# SELECT name, ST_AsText(geom) from bus_route;

とすると、ちゃんとポリゴンで表示されます。

test2 | POLYGON((139.595877087369 35.378049137993,139.596010268629 35.3777989962668,139.596010765838 35.3777980502557,139.596300765838 35.3772390502557,139.596308044186 35.3772208480571,139.596311631611 35.3772015756733,139.596311390248 35.3771819737311,139.596307329374 35.3771627955223,139.596299605045 35.3771447780546,139.596288514104 35.3771286137292,139.596274482769 35.3771149237322,139.596258050256 35.3771042341623,139.596239848057 35.3770969558137,139.596220575673 35.3770933683894,139.596200973731 35.377093609752,139.596181795522 35.3770976706261,139.596163778055 35.3771053949546,139.596147613729 35.3771164858958,139.596133923732 35.3771305172312,139.596123234162 35.3771469497443,139.595833480238 35.3777054754117,139.595677731371 35.3779980037332,139.595669595124 35.3780184274596,139.595666118386 35.378040135509,139.595667469198 35.3780620786724,139.595680469198 35.3781370786724,139.595686209748 35.3781572822894,139.595696043647 35.3781758412353,139.595709537084 35.3781919368007,139.595726094808 35.3782048589456,139.595744986392 35.3782140376226,139.595838986392 35.3782480376226,139.595857985784 35.3782528664418,139.595877562164 35.3782538958791,139.595896963222 35.3782510863738,139.595915443388 35.3782445458936,139.595932292477 35.3782345257855,139.59594686299 35.3782214111166,139.59595859499 35.3782057058763,139.595967037623 35.3781880136082,139.595971866442 35.3781690142161,139.595972895879 35.3781494378362,139.595970086374 35.3781300367777,139.595963545894 35.3781115566124,139.595953525785 35.3780947075226,139.595940411117 35.3780801370095,139.595924705876 35.3780684050097,139.595907013608 35.3780599623774,139.595877087369 35.378049137993))

2023,江端さんの技術メモ

自分用のメモ。PC落すと、忘れてしまうので残します。

目的

バスルートをDBで格納する。

やってきたこと

新規に、データベースを作る。postgisとpgroutingの対応できるようにしておく。

yoko_db=# create database route_db;
CREATE DATABASE
yoko_db=# \c route_db
psql (13.4, server 12.5 (Debian 12.5-1.pgdg100+1))
You are now connected to database "route_db" as user "postgres".
route_db=# CREATE EXTENSION postgis;
CREATE EXTENSION
route_db=# create extension pgrouting;
CREATE EXTENSION

色々分かったこと

geometry型のデータには指定方法がある(らしい)。

http://cse.naro.affrc.go.jp/yellow/pgisman/3.0.0/using_postgis_dbmanagement.html

POINT: SRID指定なしでの2次元ポイントジオグラフィのテーブル生成は次の通りです。デフォルトは4326 WGS84経度緯度となります。

CREATE TABLE ptgeogwgs(gid serial PRIMARY KEY, geog geography(POINT) );
POINT: NAD83経度緯度での2次元ポイントジオグラフィのテーブル生成は次の通りです。

CREATE TABLE ptgeognad83(gid serial PRIMARY KEY, geog geography(POINT,4269) );
Z値を持ち、明示的にSRIDを指定したポイントのテーブル生成は次の通りです。

CREATE TABLE ptzgeogwgs84(gid serial PRIMARY KEY, geog geography(POINTZ,4326) );
LINESTRING

CREATE TABLE lgeog(gid serial PRIMARY KEY, geog geography(LINESTRING) );
POLYGON

-- ポリゴン NAD 1927経度緯度
CREATE TABLE lgeognad27(gid serial PRIMARY KEY, geog geography(POLYGON,4267) );
MULTIPOINT

MULTILINESTRING

MULTIPOLYGON

GEOMETRYCOLLECTION

ジオグラフィ型のフィールドはgeography_columnsシステムビューに登録されます。

"geography_columns"ビューをチェックして、テーブルが一覧にあるか見て下さい。

CREATE TABLEの文法でジオグラフィカラムを持つテーブルを新規に生成できます。

CREATE TABLE global_points (
    id SERIAL PRIMARY KEY,
    name VARCHAR(64),
    location GEOGRAPHY(POINT,4326)
  );

で、ちょっと、試しに、ちょっと以下のgeomデータを入れてみたのですが、興味深い結果が得られました。

route_db=# create table route_geom(geog geography(LINESTRING));
CREATE TABLE
route_db=#
route_db=# insert into route_geom(geog) VALUES('0105000020E610000001000000010200000012000000E97DE36BCF6F6140CDCCCCCCCCCC4140E4141DC9E56F614006D847A7AECC41400D8E9257E76F61400DFD135CACCC4140BEBC00FBE86F6140A27A6B60ABCC4140404D2D5BEB6F61401422E010AACC414045F0BF95EC6F6140A99F3715A9CC4140923F1878EE6F614062F3716DA8CC41400708E6E8F16F61401B47ACC5A7CC4140ABECBB22F86F6140F870C971A7CC414055F65D11FC6F61401B47ACC5A7CC414014ED2AA4FC6F61403F1D8F19A8CC414072A774B0FE6F6140A99F3715A9CC414047ACC5A70070614038F8C264AACC414075C8CD700370614031D3F6AFACCC4140130A117008706140B1E1E995B2CC4140C3B645990D70614006F52D73BACC414043C5387F13706140E23B31EBC5CC4140003ACC9717706140A2D11DC4CECC4140');
ERROR:  Geometry type (MultiLineString) does not match column type (LineString)

とエラーが出てきます。LineStringではなくて、MultiLineStringにしなさい と注意されました。

insertの段階でパースされているとは思いませんでした。

という訳で、次のようにやってみました。

route_db=# drop table route_geom;
DROP TABLE
route_db=# create table route_geom(geog geography(MULTILINESTRING));
CREATE TABLE
route_db=# insert into route_geom(geog) VALUES('0105000020E610000001000000010200000012000000E97DE36BCF6F6140CDCCCCCCCCCC4140E4141DC9E56F614006D847A7AECC41400D8E9257E76F61400DFD135CACCC4140BEBC00FBE86F6140A27A6B60ABCC4140404D2D5BEB6F61401422E010AACC414045F0BF95EC6F6140A99F3715A9CC4140923F1878EE6F614062F3716DA8CC41400708E6E8F16F61401B47ACC5A7CC4140ABECBB22F86F6140F870C971A7CC414055F65D11FC6F61401B47ACC5A7CC414014ED2AA4FC6F61403F1D8F19A8CC414072A774B0FE6F6140A99F3715A9CC414047ACC5A70070614038F8C264AACC414075C8CD700370614031D3F6AFACCC4140130A117008706140B1E1E995B2CC4140C3B645990D70614006F52D73BACC414043C5387F13706140E23B31EBC5CC4140003ACC9717706140A2D11DC4CECC4140');
INSERT 0 1

と、今度はinsertできました。

postGISで接触する線を抽出する方法を探す

のgeomのデータを入力したのですが、座標がおかしい、と、こちらも入力を拒否されました。