我在PostgreSQL数据库的表中有大约200万条记录,包含诸如“source_location”,“destination_location”,“source_lat”,“source_long”,“destination_lat”,“destination_long”等列。创建PostGIS我的第一个表
如何使用此表将其转换为PostGIS中的Spatial表格,以便我可以触发对此数据的空间查询?
我在PostgreSQL数据库的表中有大约200万条记录,包含诸如“source_location”,“destination_location”,“source_lat”,“source_long”,“destination_lat”,“destination_long”等列。创建PostGIS我的第一个表
如何使用此表将其转换为PostGIS中的Spatial表格,以便我可以触发对此数据的空间查询?
我们假设您的数据在表foo
中。首先添加几何列:
SELECT AddGeometryColumn('foo', 'source_geom', 4326, 'POINT', 2);
SELECT AddGeometryColumn('foo', 'destination_geom', 4326, 'POINT', 2);
比你可以设定几何列的值:因此,你可以使用列source_geom
和destination_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公里的所有记录。
谢谢Aleksandr Dezhin!但当我试图按照你的步骤,我得到了以下错误: 函数addgeometrycolumn(“未知”,“未知”,整数,“未知”,整数)不存在 在这种情况下应该做什么? –
上述错误已通过为我的数据库安装'postgis'和'postgis_topology'扩展来解决。谢谢! –
嗨Aleksandr Dezhin,根据您的建议,我添加了两个几何列,并设置SRID给他们。但是,当我尝试执行上述空间查询时,出现以下错误:错误:对于GEOGRAPHY类型(SQL状态:22023),坐标值超出范围[-180 -90,180 90]。可能是什么原因? –
Creating a spatial table - PostGIS manual
它建议您使用AddGeometryColumn。
错误:
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)
肯定需要更多资讯。 –