0

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

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

4

3 回答 3

2

假设您的数据在 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_geomdestination_geom

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

此查询返回源和目的地之间的距离 > 1000 公里的所有记录。

于 2012-10-08T19:52:07.270 回答
1

错误:

函数 addgeometrycolumn("unknown", "unknown", integer, "unknown", integer) 不存在

告诉你 PostgreSQL 不能识别这个 PostGIS 函数。

这可能是因为:

  1. 未安装 PostGIS(请参阅http://postgis.refractions.net/download/);

  2. 您的数据库没有加载这些函数(请参阅http://trac.osgeo.org/postgis/wiki/UsersWikiNewbieAddgeometrycolumn

于 2012-10-09T08:49:02.623 回答
0

创建空间表 - PostGIS 手册

它建议您使用 AddGeometryColumn。

于 2012-10-08T10:38:47.677 回答