使用PostGIS获取基于位置的数据

时间:2012-12-19 06:54:52

标签: postgresql postgis postgresql-9.2 postgresql-9.0

我在postgresql 9.2中有一个表,它将位置的纬度和经度存储为整数值。

我打算做一些事情,例如当用户搜索某个位置时,他也会获取有关该搜索位置7英里范围内的其他位置的信息。

我如何使用postGIS,因为我是新手。任何想法。?

1 个答案:

答案 0 :(得分:3)

您实际上想要将纬度和经度存储为一个点。

CREATE TABLE postal_codes
(
  zip character varying(7) NOT NULL,
  state character(2) NOT NULL,
  city character varying(50) NOT NULL,
  geoloc geography(Point,4326) NOT NULL
);
INSERT INTO postal_codes
VALUES (
    '35004', 'AL', 'Moody',
    ST_GeographyFromText('SRID=4326;POINT(-86.50249 33.606379)') -- lon lat
);

然后,您可以使用STDWithin获取特定距离内的所有点。

SELECT geoloc
FROM postal_codes
WHERE ST_DWithin(
    geoloc,                            -- The current point being evaluated
    'thegeolocyoustoredawaysomewhere', -- the location of the person
                                       -- you're giving info to
    7 * 1.6 * 1000                     -- Miles to meters
);

或者:

SELECT geoloc
FROM postal_codes
WHERE ST_DWithin(
    geoloc,
    (
        SELECT geoloc
        FROM postal_codes
        WHERE zip = '12345'
    ),
    7 * 1.6 * 1000
);

为了提高其他类型查询的性能(这里没有看到),请使用GiST索引:

CREATE INDEX geoloc_idx
ON postal_codes
USING gist (geoloc);