Postgresql 创建PostGIS我的第一个表

Postgresql 创建PostGIS我的第一个表,postgresql,geospatial,postgis,Postgresql,Geospatial,Postgis,在PostgreSQL数据库的一个表中,我有大约200万条记录,其中有“源位置”、“目的位置”、“源位置”、“源位置”、“源位置”、“目的位置”、“目的位置位置”等列 如何利用该表将其转换为PostGIS中的空间表,以便对该数据进行空间查询? 它建议您使用AddGeometryColumn。 它建议您使用AddGeometryColumn。假设您的数据在表foo中。首先添加几何图形列: SELECT AddGeometryColumn('foo', 'source_geom', 4326, 'P

在PostgreSQL数据库的一个表中,我有大约200万条记录,其中有“源位置”、“目的位置”、“源位置”、“源位置”、“源位置”、“目的位置”、“目的位置位置”等列

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

它建议您使用AddGeometryColumn。


它建议您使用AddGeometryColumn。

假设您的数据在表
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);
然后可以设置几何图形列的值:

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\u geom
destination\u geom

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

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

假设您的数据在表
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);
然后可以设置几何图形列的值:

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\u geom
destination\u geom

SELECT * FROM foo
WHERE ST_Distance_Sphere(source_geom, destination_geom) > 1000000;
此查询返回源和目标之间距离>1000公里的所有记录。

错误:

function addgeometrycolumn("unknown", "unknown", integer, "unknown", integer) does not exist 函数addgeometrycolumn(“未知”、“未知”、“整数”、“未知”、“整数”)不存在 告诉您PostgreSQL无法识别此PostGIS函数

这可能是因为:

  • 未安装PostGIS(请参阅)

  • 您的数据库没有加载这些函数(请参阅)

  • 错误:

    function addgeometrycolumn("unknown", "unknown", integer, "unknown", integer) does not exist 函数addgeometrycolumn(“未知”、“未知”、“整数”、“未知”、“整数”)不存在 告诉您PostgreSQL无法识别此PostGIS函数

    这可能是因为:

  • 未安装PostGIS(请参阅)

  • 您的数据库没有加载这些函数(请参阅)


  • 这里绝对需要更多的信息。这里绝对需要更多的信息。谢谢你Aleksandr Dezhin!但是,当我尝试按照您的步骤操作时,我遇到了以下错误:函数addgeometrycolumn(“未知”、“未知”、“整数”、“未知”、“整数”)不存在。在这种情况下,应该执行什么操作?通过为我的数据库安装“postgis”和“postgis\U拓扑”扩展,解决了上述错误。谢谢嗨,Aleksandr Dezhin,根据您的建议,我添加了两个几何体列,并为它们设置了SRID。但是,当我尝试执行上述空间查询时,我得到了以下错误:错误:坐标值超出了地理类型的范围[-180-90,180-90](SQL状态:22023)。原因可能是什么?@KetanBarshikar您是否使用了轴顺序(经度、纬度)?如果是,这些值是否符合该范围?@KetanBarshikar,您可以使用以下简单查询找到坐标超出范围的点:
    SELECT*FROM foo WHERE source_lon<-180或source_lon>180或destination_lon<-180或destination_lon>180或source_lat<-90或destination_lat<-90或destination_lat>90
    谢谢Aleksandr Dezhin!但是,当我尝试按照您的步骤操作时,我遇到了以下错误:函数addgeometrycolumn(“未知”、“未知”、“整数”、“未知”、“整数”)不存在。在这种情况下,应该执行什么操作?通过为我的数据库安装“postgis”和“postgis\U拓扑”扩展,解决了上述错误。谢谢嗨,Aleksandr Dezhin,根据您的建议,我添加了两个几何体列,并为它们设置了SRID。但是,当我尝试执行上述空间查询时,我得到了以下错误:错误:坐标值超出了地理类型的范围[-180-90,180-90](SQL状态:22023)。原因可能是什么?@KetanBarshikar您是否使用了轴顺序(经度、纬度)?如果是这样,这些值是否符合该范围?@KetanBarshikar,您可以使用以下简单查询找到坐标超出范围的点:
    SELECT*FROM foo,其中source_lon<-180或source_lon>180或destination_lon<-180或destination_lon>180或source_lat<-90或source_lat>90或destination_lat<-90或destination_lat>90