1

postgresql 9.2 に、場所の緯度と経度を整数値として格納するテーブルがあります。

私は、ユーザーが場所を検索すると、その場所から半径 7 マイル以内にある他の場所に関する情報も取得するようにするつもりです。

私はそれに慣れていないので、これにpostGISを使用するにはどうすればよいですか。何か案が。?

4

1 に答える 1

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);
于 2012-12-19T23:26:03.550 に答える