Я создал таблицу, содержащую список всех почтовых индексов в Соединенных Штатах. Я пытаюсь запросить эту таблицу, чтобы получить список всех почтовых индексов в пределах определенного радиуса заданного почтового индекса. Я использую PostgreSQL 9.3 с расширением PostGIS.Я пытаюсь понять запрос, который я написал для PostgreSQL/PostGIS
Таблица
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 Колонка:
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;
OK, большой, он дает мне почтовые индексы, которые вокруг области, поэтому я знаю, что я на правильном пути. Однако, черт возьми .1? Сначала я собирался с 10, думая, что 10 миль (да, правильно), но я получал почтовые коды на всем пути на Аляске (59801 в Монтане), поэтому я знал, что 10 не прав. Я пытаюсь понять, как я могу указать расстояние в милях.
Я искал Google и пробовал некоторые запросы, которые я нашел в своих поисках, но ни один из запросов, которые я пробовал, не работал - большинство из них дало мне почтовые индексы на Аляске. Я начинаю думать, что я, возможно, неправильно создал свой стол geom. Меня больше интересует понимание того, что я написал, вместо того, чтобы кто-то написал запрос, который «просто работает» для меня. Если бы кто-нибудь мог просветить меня, это было бы очень признательно.
Единицы, определенные пространственной системой координат геометрий, в основном означают либо градусы, либо метры, в зависимости от географического или прогнозируемого. –
используйте 'geom :: geography' для вашего шага« Заполнять его », поскольку он является прямым и преобразует другие типы геометрии. Кроме того, соглашение должно вызывать этот столбец 'geog', но нет ничего плохого в том, чтобы именовать столбец так же, как и тип, как вы это делали. –