2012-10-08 30 views
0

我在PostgreSQL数据库的表中有大约200万条记录,包含诸如“source_location”,“destination_location”,“source_lat”,“source_long”,“destination_lat”,“destination_long”等列。创建PostGIS我的第一个表

如何使用此表将其转换为PostGIS中的Spatial表格,以便我可以触发对此数据的空间查询?

+0

肯定需要更多资讯。 –

回答

2

我们假设您的数据在表foo中。首先添加几何列:

SELECT AddGeometryColumn('foo', 'source_geom', 4326, 'POINT', 2); 
SELECT AddGeometryColumn('foo', 'destination_geom', 4326, 'POINT', 2); 

比你可以设定几何列的值:因此,你可以使用列source_geomdestination_geom在空间查询

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); 

SELECT * FROM foo 
WHERE ST_Distance_Sphere(source_geom, destination_geom) > 1000000; 

这查询返回源和目标之间的距离大于1000公里的所有记录。

+0

谢谢Aleksandr Dezhin!但当我试图按照你的步骤,我得到了以下错误: 函数addgeometrycolumn(“未知”,“未知”,整数,“未知”,整数)不存在 在这种情况下应该做什么? –

+1

上述错误已通过为我的数据库安装'postgis'和'postgis_topology'扩展来解决。谢谢! –

+0

嗨Aleksandr Dezhin,根据您的建议,我添加了两个几何列,并设置SRID给他们。但是,当我尝试执行上述空间查询时,出现以下错误:错误:对于GEOGRAPHY类型(SQL状态:22023),坐标值超出范围[-180 -90,180 90]。可能是什么原因? –

相关问题