【问题标题】:Creating PostGIS my first Table创建 PostGIS 我的第一个表
【发布时间】:2012-10-08 10:11:49
【问题描述】:

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

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

【问题讨论】:

  • 这里肯定需要更多信息。

标签: postgresql geospatial postgis


【解决方案1】:

假设您的数据在表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 公里的所有记录。

【讨论】:

  • 谢谢 Aleksandr Dezhin!但是当我尝试按照您的步骤操作时,出现以下错误: function addgeometrycolumn("unknown", "unknown", integer, "unknown", integer) 不存在 这种情况下应该怎么做?
  • 通过为我的数据库安装“postgis”和“postgis_topology”扩展解决了上述错误。谢谢!
  • 您好 Aleksandr Dezhin,根据您的建议,我添加了两个几何列并将 SRID 设置为它们。但是,当我尝试执行上述空间查询时,出现以下错误:错误:地理类型的坐标值超出范围 [-180 -90, 180 90](SQL 状态:22023)。可能是什么原因?
  • @KetanBarshikar 您是否使用了坐标轴顺序(经度、纬度)?如果是,这些值是否在该范围内?
  • @KetanBarshikar,您可以使用这样的简单查询找到坐标超出范围的点:SELECT * FROM foo WHERE source_lon < -180 OR source_lon > 180 OR destination_lon < -180 OR destination_lon > 180 OR source_lat < -90 OR source_lat > 90 OR destination_lat < -90 OR destination_lat > 90
【解决方案2】:

错误:

function addgeometrycolumn("unknown", "unknown", integer, "unknown", integer) 不存在

告诉你 PostgreSQL 无法识别这个 PostGIS 函数。

这可能是因为:

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

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

【讨论】:

    【解决方案3】:

    Creating a spatial table - PostGIS manual

    建议您使用 AddGeometryColumn。

    【讨论】:

      猜你喜欢
      • 2016-10-20
      • 1970-01-01
      • 2016-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多