2

ジオメトリ ポイントを使用して PostGIS ST_DWithin を使用すると、完全に困惑する問題が発生しました。SRID 3857 のジオメトリ ポイントを使用していますが (以下を参照)、ST_DWithin は 3 番目の引数 (倍精度の distance_of_srid ) を DEGREES として解釈するように解釈されます。これが例です。

このテーブル test_person_avg_lngs_lats を使用:

       Column        |         Type         | Modifiers 
---------------------+----------------------+-----------
 avg_lng             | double precision     | 
 avg_lat             | double precision     | 
 person_avg_location | geometry(Point,3857) | 
 store_lng           | double precision     | 
 store_lat           | double precision     | 
 store_location      | geometry(Point,3857) |

および次のクエリ:

SELECT avg_lat, avg_lng, store_lng, store_lat,
    ST_Distance_Spheroid(person_avg_location, store_location, CAST('SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG","7030\"]]' AS spheroid))/1000 AS distance,
    ST_DWithin(person_avg_location, store_location, 1) AS dwithin
FROM test_person_avg_lngs_lats
WHERE ST_DWithin(person_avg_location, store_location, 1)

クエリは、ST_DWithin への 3 番目の引数を 1 DEGREE 対 1 METER として解釈する結果を返します。SRID 3857 のジオメトリ ポイントを使用していることを確認しましたが、メートル単位を使用しています。NI が ST_DWithin の 3 番目の引数として渡されるものは何でも、結果は一貫して N * 100 km (~ 66 マイル) 前後の距離を返します。そのため、ST_DWithin はそれを 1 DEGREE と解釈していると思います。

以下は、1 メートルとして解釈されるサンプル結果です (距離はマイル単位です)。

avg_lat         avg_lng        store_lng  store_lat  distance       dwithin
43.3275959623, -71.1169553872, -71.0626,  42.3291,   68.9794023576, true

これは、私がこの件に関して最も近いものです: ST_DWithin は、パラメーターを meter ではなく degree として受け取ります。

これを引き起こしている可能性のあるもの、または問題の分析を進めるために何を探すべきかについてのアイデアはありますか?

私は使用しています:

postgis_full_version                                                                     
------------------------------------------------------------------
 POSTGIS="2.0.0 r9605" GEOS="3.3.3-CAPI-1.7.4" PROJ="Rel. 4.8.0, 6 March 2012" GDAL="GDAL 1.9.2, released 2012/10/08" LIBXML="2.7.8" LIBJSON="UNKNOWN" RASTER
(1 row)

version                                                   
-------------------------------------------------------------
 PostgreSQL 9.1.9 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 64-bit
(1 row)
4

1 に答える 1

1

明らかにdistance_of_srid、SRID の同じ距離単位を使用します。これは通常、度またはメートルです。このタイプでは、ほとんどの高校生になじみのある数学を使用geometryして、平らなデカルト平面で距離が計算されます。単位は型に対して解釈されませんgeometry

ただし、これは、データが実際に正しい SRID で投影されていることを前提としています。3857 のような投影された SRID を度で表される緯度/経度座標と混合すると、説明できないゴミが発生します。エラーがあったことは 99.9% 確実なので、列person_avg_locationと列にデータを入力した方法を確認してください。store_location

于 2013-10-13T08:15:34.957 に答える