2011|08|
2013|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|05|06|07|08|09|10|11|12|
2016|01|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|

2018-11-01 便利なpostGIS関数 [長年日記]

_ 便利なpostGIS関数

■2点間の距離の算出

float ST_Distance(geometry g1, geometry g2);

float ST_Distance(geography gg1, geography gg2);

============

139.46383010 35.6078055 と 139.48004430 35.58936550 の距離を求めろ

============

SELECT ST_Distance('SRID=4326;POINT(139.46383010 35.6078055)'::GEOGRAPHY,'SRID=4326;POINT(139.48004430 35.58936550)'::GEOGRAPHY);

st_distance

---------------

2518.87992511 (単位はメートル)

(1 行)

SELECT ST_Distance(ST_Transform(ST_GeomFromText('POINT(139.46383010 35.6078055)',4326),26986),ST_Transform(ST_GeomFromText('POINT(139.48004430 35.58936550)',4326),26986));

st_distance

-----------------

2534.9890933572 (単位はメートル)

(1 行)

============

点(139.46507, 35.59577)と source 608 の距離を求めろ

============

SELECT ST_Distance('SRID=4326;POINT(139.46507 35.59577)'::GEOGRAPHY, the_geom) from ways where source = 608;

st_distance

-------------

48.64958043 (単位はメートル)

(1 行)

■点と線の最短距離の算出

===================

点(139.46383010 35.6078055) と

線(139.47364070 35.59500190),(139.47500790 35.59561250),(139.47618950 35.59667510) の # 3点は繋がっている

最短距離を求めろ

===================

SELECT ST_Distance('SRID=4326;POINT(139.46383010 35.6078055)'::GEOGRAPHY,'SRID=4326;LINESTRING(139.47364070 35.59500190,139.47500790 35.59561250, 139.47618950 35.59667510)'::GEOGRAPHY);

st_distance

---------------

1667.13188667 (単位はメートル)

(1 行)

■任意の座標に近いノードを抽出

boolean ST_DWithin(geometry g1, geometry g2, double precision distance_of_srid);

boolean ST_DWithin(geography gg1, geography gg2, double precision distance_meters);

===============

点(139.47500790 35.59561250)から半径300メートル以内の全部のノードを、近い順に出せ

===============

SELECT source, x1 as longitude, y1 as latitude, ST_Distance('SRID=4326;POINT(139.47500790 35.59561250)'::GEOGRAPHY, the_geom) as dist FROM ways WHERE ST_DWithin(the_geom, ST_GeographyFromText('SRID=4326;POINT(139.47500790 35.59561250)'), 300.0) ORDER BY dist;

source | longitude | latitude | dist

--------+-------------+------------+--------------

277 | 139.4742202 | 35.5952626 | 0

342 | 139.4737614 | 35.5960846 | 0

554 | 139.4750079 | 35.5956125 | 0

554 | 139.4750079 | 35.5956125 | 0

465 | 139.4756076 | 35.5956018 | 54.35238655

465 | 139.4756076 | 35.5956018 | 54.35883189

148 | 139.4753681 | 35.5942035 | 62.47683957

488 | 139.4755625 | 35.595278 | 62.47683957

277 | 139.4742202 | 35.5952626 | 78.20859781

309 | 139.4758617 | 35.5957534 | 78.9363046

309 | 139.4758617 | 35.5957534 | 78.9363046

163 | 139.4736407 | 35.5950019 | 81.2567669

597 | 139.4728928 | 35.5961536 | 81.2567669

406 | 139.4760808 | 35.5958841 | 101.79071989

211 | 139.4761077 | 35.5959027 | 104.73755527

580 | 139.4761706 | 35.5959419 | 111.52418485

201 | 139.4762056 | 35.5959637 | 115.32014973

(単位はメートル)


2018-11-02 postGIS の ST_Distance, ST_DWithinを使ったサンプルコード [長年日記]


2018-11-05 ホームページのフルバックアップ [長年日記]

Login by SSH
 
cd /home/kobore
 
cp -r www www2  // Don't touch "www" itself
tar -czvf www2.tgz www2
mv www2.tgz www.kobore.net.20181102.tgz 
 
rm -r www2    // Never delete directory "www" 
 
After that, bring "www.kobore.net.20181102.tgz" into a PC  

2018-11-14 QGIS 右側 ウィンドウ 物件情報 [長年日記]


2018-11-15 postGISでのA*の使い方 [長年日記]

kashiwanoha_routing=# SELECT * FROM pgr_astar('SELECT gid as id, source, target, cost_s As cost, x1, y1, x2, y2 FROM ways', 100, 159);
 seq | path_seq | node | edge |       cost        |     agg_cost
-----+----------+------+------+-------------------+------------------
   1 |        1 |  100 | 2168 |   8.5892500035812 |                0
   2 |        2 | 1571 | 4424 |  1.10979209576821 |  8.5892500035812
   3 |        3 | 3232 | 9213 | 0.440968020162748 | 9.69904209934941
   4 |        4 | 6708 |  217 |  2.29065882200656 | 10.1400101195122
   5 |        5 |  159 |   -1 |                 0 | 12.4306689415187
(5 行)

2018-11-16 postGISでのワーシャルフロイド法の使い方 [長年日記]

■ワーシャルフロイド法の使い方
 
Floydのアルゴリズムとも呼ばれるFloyd-Warshallアルゴリズムは、密集グラフのグラフのノードの各ペアの最短経路のコストの合計を計算するのに適しています。
 
主な特徴は次のとおりです。
 
・パスを返しません。
・グラフ内のノードの各ペアに対する最短経路のコストの合計を返します。
・プロセスは肯定的なコストのエッジでのみ実行されます。
・Boostは、V×V行列を返します。ここで、無限大の値です。 パスがない頂点間の距離を表します。
・無限大以外の値のみを(start_vid、end_vid、agg_cost)のセットの形で返します。
・戻り値がテーブルに格納されている場合は、一意のインデックスは(start_vid、end_vid)のペアになります。
・無向グラフの場合、結果は対称です。
・(u、v)のagg_costは(v、u)と同じです。
・start_vid = end_vidのとき、agg_cost = 0。
・推奨されているのは、3500エッジ以下のバウンディングボックスを使用することです。
 
-----
 
SELECT * FROM pgr_floydWarshall('SELECT gid, source, target, cost FROM ways where gid = 10' );
 
 start_vid | end_vid |       agg_cost
-----------+---------+-----------------------
        95 |      23 |   0.00093223435894817
        23 |      95 |   0.00093223435894817
      4506 |       1 |  0.000788520466807583
         1 |    4506 |  0.000788520466807583
      3221 |       2 | 2.70185121784218e-005
         2 |    3221 | 2.70185121784218e-005
      1724 |       3 |   0.00037710190931161
         3 |    1724 |   0.00037710190931161
       196 |       4 |   0.00036557605227385
       196 |    1800 |   0.00100402907325107
         4 |     196 |   0.00036557605227385
         4 |    1800 |  0.000638453020977218
      1800 |     196 |   0.00100402907325107
      1800 |       4 |  0.000638453020977218
      4099 |       5 |   0.00030819351844984
         5 |    4099 |   0.00030819351844984
      1458 |       6 |  0.000280440956354741
      1458 |    2417 |   0.00131019044532306
         6 |    1458 |  0.000280440956354741
         6 |    2417 |   0.00102974948896831
      2417 |    1458 |   0.00131019044532306
      2417 |       6 |   0.00102974948896831
(22 行)
 
感想 
  何やっているのか、さっぱり分からん
 
 
 
SELECT * FROM pgr_floydWarshall('SELECT gid, source, target, cost FROM ways')  WHERE start_vid = 9 and end_vid = 24;
 
 
 start_vid | end_vid |     agg_cost
-----------+---------+-------------------
         9 |      24 | 0.180760172336233
 
なんか出てきたが、酷く時間がかかった。
 

2018-11-29 見積の取得方法 [長年日記]