【发布时间】:2012-12-06 11:43:55
【问题描述】:
我在 postgresql 9.2 中有一个表,它将位置的纬度和经度存储为整数值。
我打算做一些事情,比如当用户搜索某个位置时,他还会获取该搜索位置 7 英里半径范围内的其他位置的信息。
我如何使用 postGIS,因为我是新手。有什么想法吗?
【问题讨论】:
标签: postgresql postgis postgresql-9.2 postgresql-9.0
我在 postgresql 9.2 中有一个表,它将位置的纬度和经度存储为整数值。
我打算做一些事情,比如当用户搜索某个位置时,他还会获取该搜索位置 7 英里半径范围内的其他位置的信息。
我如何使用 postGIS,因为我是新手。有什么想法吗?
【问题讨论】:
标签: postgresql postgis postgresql-9.2 postgresql-9.0
您实际上希望将纬度和经度存储为一个点。
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);
【讨论】: