我在PostgreSQL数据库的表中有大约200万条记录,其中包含“source_location”,“destination_location”,“source_lat”,“source_long”,“destination_lat”,“destination_long”等列。
如何利用此表将其转换为PostGIS中的Spatial表格,以便我可以对此数据进行空间查询?
答案 0 :(得分:2)
假设您的数据位于表foo
中。首先添加几何列:
SELECT AddGeometryColumn('foo', 'source_geom', 4326, 'POINT', 2);
SELECT AddGeometryColumn('foo', 'destination_geom', 4326, 'POINT', 2);
您可以设置几何列的值:
UPDATE foo SET
source_geom =
ST_SetSRID(ST_MakePoint(source_lon, source_lat), 4326),
destination_geom =
ST_SetSRID(ST_MakePoint(destination_lon, destination_lat), 4326);
因此,您可以在空间查询中使用列source_geom
和destination_geom
:
SELECT * FROM foo
WHERE ST_Distance_Sphere(source_geom, destination_geom) > 1000000;
此查询返回源和目标之间距离的所有记录> 1000公里。
答案 1 :(得分:1)
错误:
function addgeometrycolumn("unknown", "unknown", integer, "unknown", integer) does not exist
告诉您PostgreSQL无法识别此PostGIS功能。
这可能是因为:
未安装PostGIS(请参阅http://postgis.refractions.net/download/);
您的数据库未加载这些功能(请参阅http://trac.osgeo.org/postgis/wiki/UsersWikiNewbieAddgeometrycolumn)
答案 2 :(得分:0)
Creating a spatial table - PostGIS manual
它建议您使用AddGeometryColumn。