キーワード: 切取り、切り取り、削除、圧縮、キャプチャ、画面、編集、
■VideoSmaller →動画のファイルサイズをオンラインで小さくする
■Avidemux/aviUtl→動画(mp4)のいらん部分を切りすてる
■amuseGraphics → これは使ったことないなぁ
■AG-デスクトップレコーダー → PC画面をキャプチャする(使い倒している)
■RealPlayer →wmvファイルをmp4に変換するのに使っている(ちなみにVLCでは、結構な音ずれが発生する)
江端智一のホームページ
キーワード: 切取り、切り取り、削除、圧縮、キャプチャ、画面、編集、
■VideoSmaller →動画のファイルサイズをオンラインで小さくする
■Avidemux/aviUtl→動画(mp4)のいらん部分を切りすてる
■amuseGraphics → これは使ったことないなぁ
■AG-デスクトップレコーダー → PC画面をキャプチャする(使い倒している)
■RealPlayer →wmvファイルをmp4に変換するのに使っている(ちなみにVLCでは、結構な音ずれが発生する)
以前、書いていた投稿を編集しなおして、その編集の最新日時にしたいというニーズは、私の中では結構高くて、色々なプラグインを入れて試していたのですが、上手く動きませんでした(多分、phpファイルをいじっているからだろうなぁと思っていますが)
とこが、気がつかなったのですが(あるいはWPがバージョンアップしてできるようになったのか?)、今、WP5.5ではこの機能があることに気がつきました。
結構盲点だったので、メモしておきます。
以上
Docker commitで作ったイメージをアップしてみようと思って、docker pushを使ってみたんだけど、上手く動きませんでした。
ebata@DESKTOP-P6KREM0 MINGW64 ~/xxxxxxx_ride_hailing_go
$ docker push ebata_db_data_1_back2
The push refers to repository [docker.io/library/ebata_db_data_1_back2]
d103f95b4a98: Preparing
195be5f8be1d: Preparing
denied: requested access to the resource is denied
ebata@DESKTOP-P6KREM0 MINGW64 ~/xxxxxxx_ride_hailing_go
$ docker push ebata_db_data_1_back2
The push refers to repository [docker.io/library/ebata_db_data_1_back2]
d103f95b4a98: Preparing
195be5f8be1d: Preparing
denied: requested access to the resource is denied
なんで上手くいかないのかなー、とググッてみたら、イメージ名にルールがあったみたいです。ユーザ名がtomoichiならば、image作る時に、こういう名前にしなければダメみたい。
ebata@DESKTOP-P6KREM0 MINGW64 ~/xxxxxxx_ride_hailing_go
$ docker commit f5ae64d47096 tomoichi/ebata_db_data_1_back2
sha256:bf565f55a2cf06e0c9fe6ecb3460f7afe7228cf48886ae0a71cde6bf770ebf1c
ebata@DESKTOP-P6KREM0 MINGW64 ~/xxxxxxx_ride_hailing_go
$ docker commit 64101530c199 tomoichi/ebata_db_1_back2
sha256:6243b4ad2ea96bca6183b331a1c2c4467c9337ce2b305e40ca6a1d456b58df8d
でもって、
ebata@DESKTOP-P6KREM0 MINGW64 ~/xxxxxxx_ride_hailing_go
$ docker push tomoichi/ebata_db_data_1_back2
The push refers to repository [docker.io/tomoichi/ebata_db_data_1_back2]
d103f95b4a98: Preparing
195be5f8be1d: Preparing
d103f95b4a98: Pushed
195be5f8be1d: Pushed
latest: digest: sha256:e69eb3011f892fc5fe80530657f2ed0c1b59202cdca62788483315412a54be50 size: 734
みたいに成功するようです。
江端家では、2本の愛用包丁(南部鉄(*))があります 。これらの包丁は、長期の使用で私が修理を繰返して使い倒しています。
(*)鉄分補給がしやすい、という特徴があるそうですが、包丁(×鍋、×フライパン)でその効果が発揮できるのかは不明です
今回も柄が折れしまったので、Amazonで新しい柄を購入して修理することにしました。
で、こちらが解体した包丁。
解体に際に気を付けることは、包丁に力を加えないこと。包丁の金属の柄の部分は、すでに長期に渡って金属疲労が与えられ続けられており、簡単に「ポッキリ」いきかねないから。包丁の刃の柄が折れたら、もう再利用はできない
木の柄の部分と、プラスチック(黒)の部分を、ペンチやニッパーを使って、地道に破壊していくことが必要。
Amazonから届きました。
コンロで、刃の柄の先端が真っ赤になるまで加熱する。
あとは、鉄の柄を、木の柄に差し込むだけ。簡単にズブズブと刺さる。(私の場合)刃を立ててそのまま押し込みました。
本当は、この後、ロウを入れたりするらしいが、私は全部省略して、自然に冷えるのを待って作業を完了しました。
(追記)
その後、刃の柄が、木の柄にガッチリ固定されずに、グラグラしてしまうので、一度、刃の柄を出した後、木の柄の溝に木工用ボンドを投入して、一日程、放置した。
結果としては、固定されなかった。
これは、木工用ボンドが柄の中で固まらなかった為と思われる(多分、まだ液状になっているのだと推測)。
そこで、刃の柄を、木の柄に差し込んだ状態で、刃をコンロの火に晒してみた。これによって、木工用ボンドを強制的に乾燥させる為である。
上手く接着できたかどうかは、後日報告する。
以上
やりたいことではなかったのだが、結果的に見つけてしまったので、忘れない内にメモをしておく(やりたかったのは,railのosmデータの取得)
https://overpass-turbo.eu/ というページから欲しいエリアの地図を表示する
これで、export.osm というファイルできる。
あとは、QGISにドラッグすると、こんな感じの地図がでてくる
その付近のosmデータと合わせると、こんな感じ
駅周辺を拡大
これで駅の抽出ができる
node
[railway=station]
({{bbox}});
out;
docker-compose.ymlの内容
version: '3.5'
services:
app:
build:
context: ./
dockerfile: docker/app/Dockerfile
target: build
command: ./main
depends_on:
- db
- tile38
volumes:
- ./:/XXXXXX_ride_hailing_go
db:
image: postgis-pgrouting:latest
build:
context: docker/postgis-pgrouting
expose:
- "5432"
ports:
- "15432:5432"
volumes:
- data
- ./:/XXXXX_ride_hailing_go
data:
image: busybox
volumes:
- "/data/db"
tile38:
image: tile38/tile38:1.17.0
expose:
- "9851"
ports:
- "19851:9851"
volumes:
- tile38_data
tile38_data:
image: busybox
volumes:
- "/data/tile38"
nginx:
image: nginx:1.15-alpine
ports:
- "80:80"
links:
- app:app
volumes:
- "./nginx.conf:/etc/nginx/conf.d/default.conf"
でもって、
XXXXXX_ride_hailing_go/docker/postgis-pgrouting/ の直下の Dockerfileの中身
FROM postgres:11.2
LABEL maintainer="dev@connect.co.jp"
ENV POSTGIS_MAJOR 2.5 →これもコメントアウト
ENV POSTGIS_VERSION 2.5.2+dfsg-1~exp1.pgdg90+1 → これはコロコロ変わるので注意のこと
ENV PGROUTING_MAJOR 2.5 → 最近は"3"になっている
ENV PGROUTING_VERSION 2.5.2 →コメントアウト
社内から使う時には、以下のプロキシの設定がないと動かない
ENV http_proxy http://12.34.56.789:8080
ENV https_proxy http://12.34.56.789:8080 ("http://" なのか "https://"なのかを間違えないように)
RUN apt-get update \
&& apt-cache showpkg postgresql-$PG_MAJOR-postgis-$POSTGIS_MAJOR \
&& apt-get install -y --no-install-recommends \
postgresql-$PG_MAJOR-postgis-$POSTGIS_MAJOR=$POSTGIS_VERSION \
postgresql-$PG_MAJOR-postgis-$POSTGIS_MAJOR-scripts=$POSTGIS_VERSION \
postgis=$POSTGIS_VERSION \
postgresql-$PG_MAJOR-pgrouting \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir -p /docker-entrypoint-initdb.d
COPY ./initdb-postgis.sh /docker-entrypoint-initdb.d/postgis.sh
COPY ./update-postgis.sh /usr/local/bin
COPY ./initdb-pgrouting.sh /docker-entrypoint-initdb.d/routing.sh
VOLUME /XXXXXX_ride_hailing_go
WORKDIR /XXXXXX_ride_hailing_go
の赤字の部分が原因で、以下のようなエラーが出ているらしい、というところまで分かった。
Reverse Provides:
Reading package lists…
Building dependency tree…
Reading state information…
E: Version '2.5.2+dfsg-1~exp1.pgdg90+1' for 'postgresql-11-postgis-2.5' was not found
E: Version '2.5.2+dfsg-1~exp1.pgdg90+1' for 'postgresql-11-postgis-2.5-scripts' was not found
E: Version '2.5.2+dfsg-1~exp1.pgdg90+1' for 'postgis' was not found
Service 'db' failed to build: The command '/bin/sh -c apt-get update && apt-cache showpkg postgresql-$PG_MAJOR-postgis-$POSTGIS_MAJOR && apt-get install -y --no-install-recommends postgresql-$PG_MAJOR-postgis-$POSTGIS_MAJOR=$POSTGIS_VERSION postgresql-$PG_MAJOR-postgis-$POSTGIS_MAJOR-scripts=$POSTGIS_VERSION postgis=$POSTGIS_VERSION postgresql-$PG_MAJOR-pgrouting && rm -rf /var/lib/apt/lists/*' returned a non-zero code: 100
さて、どうも最新バージョンの問題だな、というところまでは分かたけど、何を入れたら良いのか分からず、2時間ほどすったもんだしていた。
このバージョンだが、docker-compose buildの最中に登場するので、見逃さないように
Reverse Depends:
postgresql-12-postgis-3-dbgsym,postgresql-12-postgis-3 3.1.0+dfsg-1.pgdg100+1
postgresql-12-postgis-3-scripts,postgresql-12-postgis-3
postgis-gui,postgresql-12-postgis-3
Dependencies:
3.1.0+dfsg-1.pgdg100+1 - postgresql-12 (0 (null)) postgresql-12-postgis-3-scripts (0 (null)) libc6 (2 2.14) libgcc1 (2 1:3.0) libgdal20 (2 2.0.1) libgeos-c1v5 (2 3.7.0) libjson-c3 (2 0.11) libpcre3 (0 (null)) libproj13 (2 4.9.0) libprotobuf-c1 (2 1.0.1) libsfcgal1 (2 1.3.1) libstdc++6 (2 5) libxml2 (2 2.7.4) postgis (3 1.2.1) postgis (0 (null))
Provides:
3.1.0+dfsg-1.pgdg100+1
- postgresql-postgis (= ) postgresql-12-postgis (= )
Reverse Provides:
Reading package lists…
Building dependency tree…
Reading state information…
E: Version '3.0.2+dfsg-4.pgdg+1' for 'postgresql-12-postgis-3' was not found
そこで、最近構築したPostgreSQLにログインして、色々情報を探ってみたら、
ca_sim-# \dx
List of installed extensions
Name | Version | Schema | Description
-----------+---------+------------+---------------------------------------------------------------------
pgrouting | 3.0.0 | public | pgRouting Extension
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
postgis | 3.0.0 | public | PostGIS geometry, geography, and raster spatial types and functions
(3 rows)
ca_sim-# select postgis_version();
3.0 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
(1 row)
ということが分かり、postgreSQLも、pgroutingも、postgisも、全部'3'になっていることが分った。そこで、docker-compose buildの画面に戻って、調べていたら、こんなメッセージを見つけた。
Reverse Depends:
postgresql-11-postgis-3,postgresql-11-postgis-3-scripts
Dependencies:
3.0.1+dfsg-4.pgdg90+1 - perl:any (0 (null)) postgresql-11-postgis-3 (0 (null)) postgresql-11-postgis-scripts (3 2.2.2+dfsg-3~)
Provides:
3.0.1+dfsg-4.pgdg90+1 - postgresql-postgis-scripts (= ) postgresql-11-postgis-scripts (= )
Reverse Provides:
Package: postgresql-11-postgis-3-dbgsym
Versions:
3.0.1+dfsg-4.pgdg90+1 (/var/lib/apt/lists/apt.postgresql.org_pub_repos_apt_dists_stretch-pgdg_main_binary-amd64_Packages.lz4)
なんか、これがクサいな、と思い、XXXXXX_ride_hailing_go/docker/postgis-pgrouting/ の直下の Dockerfileの中身を以下のように変えてみた。
FROM postgres:12.2
LABEL maintainer="dev@connect.co.jp"
ENV POSTGIS_MAJOR 3
ENV POSTGIS_VERSION 3.0.1+dfsg-4.pgdg100+1
# ENV PGROUTING_MAJOR 2.5
# ENV PGROUTING_VERSION 3.0.0
(上記2つの環境変数は、使われていないようだったのでコメントアウトしておいた)
この変更で、docker-compose build が無事通ることを確認した。
(あいかわらず、docker-compose.yml も Dockerfile も、よく分かっていないが、トライアンドエラーで何とかしている)
以上
=====
C:\Users\ebata\xxxxxxx_ride_hailing_go>docker-compose ps
xxxxxxx_ride_hailing_go_app_1 ./main Exit 1
xxxxxxx_ride_hailing_go_data_1 sh Exit 0
xxxxxxx_ride_hailing_go_db_1 docker-entrypoint.sh postgres Exit 1
xxxxxxx_ride_hailing_go_nginx_1 nginx -g daemon off; Up 0.0.0.0:80->80/tcp
xxxxxxx_ride_hailing_go_tile38_1 tile38-server -d /data Up 0.0.0.0:19851->9851/tcp
xxxxxxx_ride_hailing_go_tile38_data_1 sh Exit 0
となって、DBがどうしても動いてくれない問題発生。手動で起動を試みてみたら、こうなった。
C:\Users\ebata\xxxxxxx_ride_hailing_go>docker start -a xxxxxxx_ride_hailing_go_db_1
Error: Database is uninitialized and superuser password is not specified.
You must specify POSTGRES_PASSWORD to a non-empty value for the
superuser. For example, "-e POSTGRES_PASSWORD=password" on "docker run".
You may also use "POSTGRES_HOST_AUTH_METHOD=trust" to allow all
connections without a password. This is not recommended.
See PostgreSQL documentation about "trust":
https://www.postgresql.org/docs/current/auth-trust.html
そこで、PostgresのDockerImageに変更があって起動ができなくなった話 を参照させて頂き、docker-compose.yml に
POSTGRES_HOST_AUTH_METHOD: 'trust'
POSTGRES_PASSWORD: 'postgres'
を追加して、
db:
image: postgis-pgrouting:latest
environment:
POSTGRES_HOST_AUTH_METHOD: 'trust'
POSTGRES_PASSWORD: 'postgres'
build:
context: docker/postgis-pgrouting
expose:
- "5432"
ports:
- "15432:5432"
volumes:
- data
- ./:/xxxxxxx_ride_hailing_go
data:
image: busybox
volumes:
- "/data/db"
のようにしてみて、再度 docker rmでコンテナ潰しておき、$ docker-compose build $ docker-compose up -d で、(さらに上手く動かない場合は) docker-compose restartを実施してみたら
C:\Users\ebata\xxxxxxx_ride_hailing_go>docker-compose restart
Restarting xxxxxxx_ride_hailing_go_nginx_1 ... done Restarting xxxxxxx_ride_hailing_go_app_1 ... done Restarting xxxxxxx_ride_hailing_go_data_1 ... done Restarting xxxxxxx_ride_hailing_go_tile38_data_1 ... done Restarting xxxxxxx_ride_hailing_go_db_1 ... done Restarting xxxxxxx_ride_hailing_go_tile38_1 ... done
C:\Users\ebata\xxxxxxx_ride_hailing_go>docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------------------------------
xxxxxxx_ride_hailing_go_app_1 ./main Exit 1
xxxxxxx_ride_hailing_go_data_1 sh Exit 0
xxxxxxx_ride_hailing_go_db_1 docker-entrypoint.sh postgres Up 0.0.0.0:15432->5432/tcp
xxxxxxx_ride_hailing_go_nginx_1 nginx -g daemon off; Up 0.0.0.0:80->80/tcp
xxxxxxx_ride_hailing_go_tile38_1 tile38-server -d /data Up 0.0.0.0:19851->9851/tcp
xxxxxxx_ride_hailing_go_tile38_data_1 sh Exit 0
となり、xxxxxxx_ride_hailing_go_db_1 docker-entrypoint.sh postgres Up 0.0.0.0:15432->5432/tcp を確認できるようになるに至った。
docker-compose run db psql -h db -U postgres -d gis -c 'CREATE EXTENSION pgrouting CASCADE; CREATE EXTENSION hstore;' で失敗した
失敗のメッセージはこんな感じ
C:\Users\ebata\xxxxxxx_ride_hailing_go>docker-compose run db psql -h db -U postgres -d gis -c 'CREATE EXTENSION pgrouting CASCADE; CREATE EXTENSION hstore;'
psql: warning: extra command-line argument "EXTENSION" ignored
psql: warning: extra command-line argument "pgrouting" ignored
psql: warning: extra command-line argument "CASCADE;" ignored
psql: warning: extra command-line argument "CREATE" ignored
psql: warning: extra command-line argument "EXTENSION" ignored
psql: warning: extra command-line argument "hstore;'" ignored
ERROR: unterminated quoted string at or near "'CREATE"
LINE 1: 'CREATE
ので、pgAdminで、xxxxxxx_ride_hailing_go のエントリーを作って接続してみたら、一応繋げた。
試しに、C:\Users\ebata\xxxxxxx_ride_hailing_go>docker-compose run db psql -h db -U postgres をやってみたら、ログインできて、こうなった
C:\Users\ebata\xxxxxxx_ride_hailing_go>docker-compose run db psql -h db -U postgres
psql (12.2 (Debian 12.2-2.pgdg100+1))
Type "help" for help.
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+------------+------------+-----------------------
gis | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 rows)
postgres=# \c gis
You are now connected to database "gis" as user "postgres".
gis=# \dt
Did not find any relations.
gis=#
やっぱり何も入っていないか。
ここから直接、
CREATE EXTENSION pgrouting CASCADE;
CREATE EXTENSION hstore;
を実行したら成功した。
次は、
C:\Users\ebata\xxxxxxx_ride_hailing_go>docker-compose run app migrate -database 'postgres://postgres:@db:5432/gis?sslmode=disable' -path ./repository/postgresql/migrations up
Starting xxxxxxx_ride_hailing_go_tile38_1 … done
Starting xxxxxxx_ride_hailing_go_db_1 … done
error: database: parse 'postgres://postgres:@db:5432/gis?sslmode=disable': first path segment in URL cannot contain colon
うーん、「コロンを消せ」と言われているようだけど、まあ、試してみる
C:\Users\ebata\xxxxxxx_ride_hailing_go>docker-compose run app migrate -database postgres://postgres:@db:5432/gis?sslmode=disable -path ./repository/postgresql/migrations up
Starting xxxxxxx_ride_hailing_go_db_1 … done Starting xxxxxxx_ride_hailing_go_tile38_1 … done 1/u create_administrators (43.041999ms)
2/u create_worlds (84.101398ms)
3/u create_passengers (126.189996ms)
4/u create_services (169.342395ms)
5/u create_bus_stops (237.856592ms)
6/u create_service_bus_stops (277.409391ms)
7/u create_waypoints (320.23459ms)
8/u create_trips (386.509487ms)
9/u add_pickuped_at_to_trips (410.829887ms)
10/u add_dissatisfaction_to_trips (437.705386ms)
通った。(ただ、その後、コンテナの再構築したら「コロンを消せ」のメッセージが出てこなくなった)。
その後、何度http://localhost をしても動かないので、試しに、http://localhost/admin/login から、 admin-0/password でログインできた。
「デモ世界の管理」を選択すると
が出てくるので、「地図表示」を選択すると、例の画面が出てきた。
そういえば、データの生成は、以下のコマンドで。
docker-compose run app go run cmd/dummy_data_generator_concurrent_small/main.go
ああ、疲れた。(これで、ようやく眠れる)
==========
$ cd /path/to/hitachi_ride_hailing_go
$ docker-compose build
# 上記部分が完了するまで、はじめての場合はネットワーク環境により数分かかります
$ docker-compose up -d
$ docker-compose run db createdb -h db -U postgres gis
$ docker-compose run db psql -h db -U postgres -d gis -c 'CREATE EXTENSION pgrouting CASCADE; CREATE EXTENSION hstore;'
$ docker-compose run db psql -h db -U postgres gis < repository/postgresql/data/dump.sql
$ docker-compose run db psql -h db -U postgres -d gis -f repository/postgresql/data/postgis-vt-util.sql
$ docker-compose stop
$ docker-compose start
$ docker-compose run app migrate -database 'postgres://postgres:@db:5432/gis?sslmode=disable' -path ./repository/postgresql/migrations up
$ docker-compose run app go run cmd/dummy_data_generator_concurrent_small/main.go
$ docker-compose stop
$ docker-compose start
Windows10のコマンドプロンプトではなく、MinGW64のシェルを使うと調子がいい
==========
石膏ボード 600円 5+1 枚
4x2フォーム 3000円くらい
吸音ざい 910X910 6 = 4500 x 6 27000 → 18000円くらい
防音シート 5885円
https://item.rakuten.co.jp/pialiving/cz-12/?iasid=07rpp_10095___eh-kcng6x35-2p-d8c44078-682d-426b-96ad-33c9bf2dc05f
m_conn->prepare( // HACK 1. 2文を1文に(PQExec仕様)、2. JOIN周り、 3. ORDER BYを消せないか?
"find_shortest_path_by_dijkstra_calc",
R"(
INSERT INTO s_dijkstra_memoization (source, target, node, edge, length_m)
SELECT
$1, $2, d.node, d.edge, coalesce(ways.length_m, 0) AS length_m
FROM
pgr_dijkstra (
'SELECT gid AS id, source, target, length_m AS cost from ways',
start_vid:=$1::bigint, end_vid:=$2::bigint, directed:=false::boolean
) as d LEFT JOIN ways ON ways.gid = d.edge
WHERE NOT EXISTS (SELECT source, target FROM s_dijkstra_memoization WHERE source = $1 AND target = $2);
)",
//RETURNING node, edge, length_m;
2
);
のところで、問題が発生しているのは分かるのだけど、私にとっては上記な呪文であり、さっぱり分からない。
とりあえず、psql から地道に部分的に動かしてみて、問題点を探っている。
ca_sim=# SELECT gid, source, target, length_m AS cost from ways;
gid | source | target | cost
------+--------+--------+--------------------
1 | 55 | 23 | 121.17749638577058
2 | 844 | 1 | 710.1279290280786
3 | 4807 | 2 | 40.26044319993349
4 | 6296 | 3 | 251.21876036796243
5 | 22 | 4 | 2181.7785758382133
6 | 18 | 6 | 435.2439693722031
7 | 4304 | 6 | 950.7269653866767
8 | 6289 | 7 | 29.068747479235597
となるが、
ca_sim=# SELECT * FROM pgr_dijkstra(
'SELECT gid, source, target, length_m AS cost FROM ways',
2, 3
);
ERROR: Column 'id' not Found
CONTEXT: SQL function "pgr_dijkstra" statement 1
となる。pgr_dijkstraを実行する為には、パラメータの名前まで注意しなければなならないらしい。
ca_sim=# SELECT * FROM pgr_dijkstra(
'SELECT gid AS id, source, target, length_m AS cost FROM ways',
2, 3
);
seq | path_seq | node | edge | cost | agg_cost
-----+----------+------+------+--------------------+--------------------
1 | 1 | 2 | 342 | 224.26753559377073 | 0
2 | 2 | 229 | 8773 | 295.36268951709405 | 224.26753559377073
3 | 3 | 6359 | 8771 | 41.04204131422657 | 519.6302251108648
4 | 4 | 6357 | 344 | 136.12897946273213 | 560.6722664250914
5 | 5 | 231 | 8688 | 58.55503032553214 | 696.8012458878235
6 | 6 | 6294 | 8690 | 191.73693713817062 | 755.3562762133556
7 | 7 | 6296 | 4 | 251.21876036796243 | 947.0932133515262
8 | 8 | 3 | -1 | 0 | 1198.3119737194886
(8 rows)
くるしまぎれに、
start_vid:=$1::bigint, end_vid:=$2
の部分に、
1、2
を、実数でベタ書きしたら、エラーが取れて、シミュレーションが走りだした(原因不明)
しかし、
start_vid:=$1::bigint, end_vid:=$2 → $1, $2
では、
ERROR: function pgr_dijkstra(unknown, unknown, unknown, directed => boolean) is not unique
LINE 7: pgr_dijkstra(
^
HINT: Could not choose a best candidate function. You might need to add explicit type casts.
Error:ERROR: function pgr_dijkstra(unknown, unknown, unknown, directed => boolean) is not unique
LINE 7: pgr_dijkstra(
^
HINT: Could not choose a best candidate function. You might need to add explicit type casts.
となってしまう。
ブログを読んで頂いたからから、以下のアドバイスを頂いたので、その観点より挑戦。
上の箇所の$1や$2は、SQLインジェクションされないためのprepare文のプレースホルダーです。
ドキュメントの該当箇所は次のものです。
https://www.postgresql.org/docs/current/sql-prepare.html
$1と$2に該当するものをうしろから代入してあげれば動く(はず)と思います。
MySQLは、たしか「?」がプレースホルダで、SQLiteも「?」がプレースホルダ(https://docs.python.org/ja/3/library/sqlite3.html をみたら、合ってました)だったように覚えています。PostgreSQLは$+数字をつかうことになっています。
そこで、このページを印刷しながら、比較して、色々試してみた
pgr_dijkstra(
(SELECT gid AS id, source, target, length_m AS cost from ways),
start_vid:=$1::bigint, end_vid:=$2::bigint, directed:=false::boolean
) as d LEFT JOIN ways ON ways.gid = d.edge
ERROR: subquery must return only one column
LINE 8: (SELECT gid AS id, source, target, length_m AS cost fr...
^
Error:ERROR: subquery must return only one column
LINE 8: (SELECT gid AS id, source, target, length_m AS cost fr...
FROM
pgr_dijkstra(
'SELECT gid AS id, source, target, length_m AS cost from ways',
(start_vid:=$1::bigint), (end_vid:=$2::bigint), directed:=false::boolean
) as d LEFT JOIN ways ON ways.gid = d.edge
ERROR: syntax error at or near ":="
LINE 9: (start_vid:=$1::bigint), (end_vid:=$2::bigint), direct...
^
Error:ERROR: syntax error at or near ":="
LINE 9: (start_vid:=$1::bigint), (end_vid:=$2::bigint), direct...
すでに試してみたが、これもやってみた
pgr_dijkstra(
'SELECT gid AS id, source, target, length_m AS cost from ways',
$1, $2, directed:=false::boolean
) as d LEFT JOIN ways ON ways.gid = d.edge
ERROR: function pgr_dijkstra(unknown, unknown, unknown, directed => boolean) is not unique
LINE 7: pgr_dijkstra(
^
HINT: Could not choose a best candidate function. You might need to add explicit type casts.
Error:ERROR: function pgr_dijkstra(unknown, unknown, unknown, directed => boolean) is not unique
LINE 7: pgr_dijkstra(
^
HINT: Could not choose a best candidate function. You might need to add explicit type casts.
なんかエラーが増えてきたようだ(unknownが3つになった)。
他の行と比較してみながら、start_vid と end_vid を消してみた(これが記載されていない別の行があったので)
FROM
pgr_dijkstra(
'SELECT gid AS id, source, target, length_m AS cost from ways',
$1::bigint, $2::bigint, directed:=false::boolean
) as d LEFT JOIN ways ON ways.gid = d.edge
これで動いた。
けど、理由はさっぱり分かりません。$1::bigint, $2::bigint がキャストの書式?
トライアンド&エラーでやろうとすると、こういう目にあう、という良い教訓として下さい。