我在使用 PostGIS ST_DWithin 使用几何点时遇到了问题,这让我完全难过。即使我使用 SRID 3857 的几何点(见下文),ST_DWithin 解释似乎将第三个参数(双精度 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 的第三个参数解释为 1 DEGREE 与 1 METER,即使我使用已确认的 SRID 3857 几何点使用米单位。无论 NI 作为第三个参数传递给 ST_DWithin,结果始终返回大约 N * 100 公里(~66 英里)的距离。这就是为什么我假设 ST_DWithin 将其解释为 1 度。
这是一个示例结果,应该被解释为一米(距离以英里为单位):
avg_lat avg_lng store_lng store_lat distance dwithin
43.3275959623, -71.1169553872, -71.0626, 42.3291, 68.9794023576, true
这是我在这个主题上最接近的东西:ST_DWithin 将参数作为 degree ,而不是 Meters ,为什么?
关于可能导致这种情况的任何想法,或者我在分析问题时可能会寻找什么?
我在用着:
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)