【发布时间】:2014-10-23 02:31:37
【问题描述】:
我创建了一个表格,其中包含美国所有邮政编码的列表。我正在尝试查询此表以获取给定邮政编码一定半径内的所有邮政编码的列表。我正在使用带有 PostGIS 扩展的 PostgreSQL 9.3。
桌子
CREATE TABLE city
(
city_id serial NOT NULL,
region_id integer,
country_id integer,
name text NOT NULL,
postal_code text,
longitude real,
latitude real,
geom geometry(Point,4326),
CONSTRAINT city_id_pk PRIMARY KEY (city_id)
WITH (FILLFACTOR=100),
CONSTRAINT country_id_fk FOREIGN KEY (country_id)
REFERENCES country (country_id) MATCH FULL
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT region_id_fk FOREIGN KEY (region_id)
REFERENCES region (region_id) MATCH FULL
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
OIDS=FALSE
);
ALTER TABLE city
OWNER TO personnelity092014;
CREATE INDEX idx_city_geom
ON city
USING gist
(geom);
geom Column的创建:
SELECT AddGeometryColumn ('public','city','geom',4326,'POINT',2);
UPDATE city SET geom = ST_PointFromText('POINT(' || longitude || ' ' || latitude || ')', 4326);
查询
SELECT z.postal_code
FROM city z, city z2
WHERE z2.postal_code = '59801'
AND st_expand(z2.geom, .1) && z.geom
AND st_distance(z.geom, z2.geom) <= .1;
好的,太好了,它为我提供了该地区周围的邮政编码,所以我知道我在正确的轨道上。但是,0.1 到底是什么?起初我想用 10 英里(是的,没错),但我一直在阿拉斯加(蒙大拿州是 59801)得到邮政编码,所以我知道 10 是不对的。我想了解的是如何以英里为单位指定距离。
我搜索了 Google 并尝试了一些我在搜索中找到的查询,但我尝试过的查询都没有奏效——其中大多数都给了我阿拉斯加的邮政编码。我开始认为我可能错误地创建了我的 geom 列。我对理解我写的查询比让某人写一个对我“有效”的查询更感兴趣。如果有人可以为我照亮,将不胜感激。
【问题讨论】:
标签: postgresql gis postgis