ジオメトリ ポイントを使用して 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)