Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql PostGIS查找包含特定点的所有圆-如何定义索引_Postgresql_Gis_Postgis - Fatal编程技术网

Postgresql PostGIS查找包含特定点的所有圆-如何定义索引

Postgresql PostGIS查找包含特定点的所有圆-如何定义索引,postgresql,gis,postgis,Postgresql,Gis,Postgis,我想找到所有距离给定点不超过点特定距离的点。与普通半径搜索一样,每个点的半径都是可变的(每个条目使用点+半径定义一个围绕自身的圆) 我的问题是如何为这个问题定义索引(我目前使用的查询如下),以及是否可以使用非GIS和GIS字段(如下面的启用字段)创建索引 我目前有这个工作查询 SELECT "Locations"."Name", FROM public."Locations" WHERE "Locations"."Enabled" = TRUE AND ST_DWithin(

我想找到所有距离给定点不超过点特定距离的点。与普通半径搜索一样,每个点的半径都是可变的(每个条目使用点+半径定义一个围绕自身的圆)

我的问题是如何为这个问题定义索引(我目前使用的查询如下),以及是否可以使用非GIS和GIS字段(如下面的启用字段)创建索引

我目前有这个工作查询

SELECT "Locations"."Name",
FROM public."Locations"
WHERE
    "Locations"."Enabled" = TRUE
    AND ST_DWithin(
        "Locations"."MyCoord"::geography,
        ST_SetSRID(ST_MakePoint(<Given Long>, <Given Lat>),4326)::geography,
        "Locations"."Radius");
但是您有一个BUG-没有这样的函数ST_DWithin(几何、地理、数字)-如果您有以米为单位的半径,则在这两种情况下都使用地理,因此不需要转换(也在索引中)


编辑:

别担心,会有用的,我检查过了。。。作为证明,我有一个由osm2pgsql创建的表planet_osm_点,索引为:

CREATE INDEX planet_osm_point_index
  ON planet_osm_point
  USING gist
  (way);
我正在运行一个类似于您的查询:

explain select * 
from planet_osm_point 
where st_dwithin(way,ST_geomfromtext('POINT(2219360.7 6457010.96)'),300)
输出为。
正如您看到的,正在使用空间索引…

这是一个复制和粘贴错误,两者都是地理错误。但是,如果索引中根本没有使用半径(至少需要一个边界框来加快搜索速度),那么仅MyOrd上的索引(它是围绕它的圆的中心)如何加快搜索速度呢,但是在我的查询中,距离和一个坐标都在查询的表中。所以你的查询只有一个变量元素,而我的查询有两个。你检查过了吗?这个元素也是我在编制索引后想到的一个变量。。。没有区别。正如您看到的,索引定义中没有300。。。
CREATE INDEX planet_osm_point_index
  ON planet_osm_point
  USING gist
  (way);
explain select * 
from planet_osm_point 
where st_dwithin(way,ST_geomfromtext('POINT(2219360.7 6457010.96)'),300)