繁体   English   中英

Postgres中的ST_SRID数据类型

[英]ST_SRID data type in Postgres

哪种数据类型应为包含ST_SRID的变量? 我有以下功能,需要使用类似srid的表达式:= ST_SetSRID(ST_MakePoint(start_long,start_lat),4326);。 “ srid”的数据类型应该是什么? 我用整数,点等进行了测试

create function ATest3(start_lat double precision, start_long double precision) returns setof int as $$
declare
  r record;
  srid ?????????????????????????????
begin
  srid := ST_SetSRID(ST_MakePoint(start_long, start_lat), 4326);

  for r in select DISTINCT journey_id, ST_DWithin(srid, geom, 2/111.325), break_id from journey_break_points loop
    return next r.break_id;
  end loop;
  return;
end;
$$ language plpgsql;

当您在PostGIS或其他任何几何图形中指定一个点时,它将返回一个geometry 这就是您的变量的类型。

create function ATest3(start_lat double precision, start_long double precision) returns setof int as $$
declare
  r   record;
  pnt geometry;
begin
  pnt := ST_SetSRID(ST_MakePoint(start_long, start_lat), 4326);

  for r in select distinct journey_id, ST_DWithin(pnt, geom, 2/111.325), break_id
           from journey_break_points
    loop
      return next r.break_id;
    end loop;
  return;
end;
$$ language plpgsql;

但是,您可以使用一个简单的存储的SQL函数来大大简化和加快整个过程:

create function ATest4(start_lat double precision, start_long double precision) returns setof int as $$
  select break_id
  from journey_break_points
  where ST_DWithin(ST_SetSRID(ST_MakePoint($2, $1), 4326), geom, 2/111.325);
$$ language sql;

在上面的代码中, ST_SetSRID()ST_MakePoint()都定义为IMMUTABLE ,因此在给定常量输入的情况下,它们始终会产生相同的输出。 查询优化器仅对($ 2,$ 1)上的函数求值一次,并将其用于表中所有带有geom列的ST_DWithin()表中的行。

文档中 ,st_setsrid返回geometry类型。

概要

几何ST_SetSRID(geometry geom,整数srid);

描述

将几何图形上的SRID设置为特定的整数值。 在构造查询的边界框时很有用。

因此,您的行:

srid := ST_SetSRID(ST_MakePoint(start_long, start_lat),4326);

在空间参考系统4326中,将geometry分配给变量srid。

有一个函数st_srid,但是它做了一些不同的事情:

概要

整数ST_SRID(几何g1);

描述

返回空间_ref_sys表中定义的ST_Geometry的空间​​参考标识符。 第4.3.1节“ SPATIAL_REF_SYS表和空间参考系统”

如果您只在那条语句中使用变量,那么我很想不要去理会变量,只需将语句放在选择查询中即可。 如果您想使用该变量,建议您使用其他名称(例如“ startpoint_geometry”),因为“ srid”表示PostGIS中特定的内容,以后您可能会感到困惑...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM