[英]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.