簡體   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