我在 PostgreSQL 数据库的一个表中有大约 200 万条记录,其中包含“source_location”、“destination_location”、“source_lat”、“source_long”、“destination_lat”、“destination_long”等列。
如何使用此表将其转换为 PostGIS 中的空间表,以便我可以对此数据进行空间查询?
我在 PostgreSQL 数据库的一个表中有大约 200 万条记录,其中包含“source_location”、“destination_location”、“source_lat”、“source_long”、“destination_lat”、“destination_long”等列。
如何使用此表将其转换为 PostGIS 中的空间表,以便我可以对此数据进行空间查询?
假设您的数据在 table 中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 公里的所有记录。
错误:
函数 addgeometrycolumn("unknown", "unknown", integer, "unknown", integer) 不存在
告诉你 PostgreSQL 不能识别这个 PostGIS 函数。
这可能是因为:
未安装 PostGIS(请参阅http://postgis.refractions.net/download/);
您的数据库没有加载这些函数(请参阅http://trac.osgeo.org/postgis/wiki/UsersWikiNewbieAddgeometrycolumn)
它建议您使用 AddGeometryColumn。