私はPostGISの新機能で、データベースに緯度と経度(2次元ポイント)を格納する新しい場所の列を作成したいと考えています。後で私はこれらの2つのポイントの間の距離を見つけることができるようにしたいと思うでしょう。postGISを使用してポイントを追加して距離をマイル単位で計算する正しい方法
私が次のクエリを実行して、私が欲しいものを達成することができそうです:
CREATE EXTENSION postgis;
CREATE TABLE places (
id SERIAL PRIMARY KEY,
name VARCHAR(500) NOT NULL,
location geometry NOT NULL
);
INSERT INTO places (name, location)
VALUES ('The Place of Luke', ST_SetSRID(ST_MakePoint(-71.1043443253471, 42.3150676015829),4326)),
('The Place of Bob', ST_SetSRID(ST_MakePoint(-75.1043443253471, 43.3150676015829),4326));
SELECT ST_Distance(
(SELECT location FROM places WHERE name = 'The Place of Luke'),
(SELECT location FROM places WHERE name = 'The Place of Bob')
);
私は、これは正しく4.12310562561766
の緯度と経度で距離を返しているが、私はベストプラクティスについていくつかの質問を持っていると信じています。
geometry
は、私が達成しようとしている正しいタイプですか?
が、私はCREATE TABLE places ( id SERIAL PRIMARY KEY, name VARCHAR(500) NOT NULL, location point NOT NULL ); INSERT INTO places (name, location) VALUES ('The Place of Luke', ST_MakePoint(-71.1043443253471, 42.3150676015829)), ('The Place of Bob', ST_MakePoint(-75.1043443253471, 43.3150676015829)); SELECT ST_Distance( (SELECT location FROM places WHERE name = 'The Place of Luke'), (SELECT location FROM places WHERE name = 'The Place of Bob') );
ERROR: column "location" is of type point but expression is of type geometry
を取得保管:私はpoint
からgeometry
を変えてみました。私はST_MakePointがおそらくタイプgeometry
のものを作成しようとしていることを理解していますが、それはエラーを引き起こしていますが、どのようにタイプポイントを作成するのですか?- documentationは私の場所テーブルに直接列を追加するのではなく、
AddGeometryColumn()
を使用しなければならないと主張しているようですが、私のアプリケーションが成長するにつれてこれが問題になるかどうかは分かりません。私がする必要があるのは、2つの場所(2次元平面上)の間の距離を土地別の移動距離で見つけることです。これは私の問題ですか? - この結果を何マイル(場合によってはキロメートル)に変換することができますか?すべて別のクエリを実行する必要がありますか?経度と緯度を理解することで、この数値が返されても、マイルへの単純な線形変換ではないと考えられます。
また、このような質問はgis.stackexchange.comでうまく答えられます。 –