我必須將lat和long轉換爲geom
才能使用PostGIS。我的問題是,我有來自不同位置的各種表格,我想將表格作爲參數傳遞給函數。我試試這個:將表格作爲參數傳遞
CREATE or REPLACE FUNCTION convert_from_lon_lat(float,float,character varying)
RETURNS integer AS $$
select id from $3 as vertices
order by vertices.geom <-> ST_SetSrid(ST_MakePoint($1,$2),4326) LIMIT 1;
$$ LANGUAGE SQL;
但我得到一個語法錯誤。
EDIT1:
所以我改變了以前的代碼這樣:
CREATE or REPLACE FUNCTION convert_from_lon_lat(long float, lat float, _table character varying) RETURNS integer AS $$
BEGIN
EXECUTE('select id from _table as vertices order by vertices.geom <-> ST_SetSrid(ST_MakePoint(long,lat),4326) LIMIT 1;');
END;
$$ LANGUAGE plpgsql;
它創建沒有任何問題,但是當我把它叫做'convert_from_lon_lat(long1,long2,MY_TABLE)
我得到和錯誤:
ERROR: relation "_table" does not exist
它沒有通過表名作爲參數
編輯2:
CREATE or REPLACE FUNCTION convert_from_lon_lat(long float, lat float, tbl character varying) RETURNS integer AS $func$
BEGIN
EXECUTE format('select id from %s order by %s.the_geom <-> ST_SetSrid(ST_MakePoint('|| long || ','|| lat ||'),4326) LIMIT 1;', tbl, tbl);
END;
$func$ LANGUAGE plpgsql;
現在,當我調用該函數,我得到一個'錯誤:控制達到的功能結束無RETURN``
我試圖RETURN QUERY EXECUTE format('...
但我得到一個ERROR: cannot use RETURN QUERY in a non-SETOF function
您可能需要使用PL/pgSQL的和一個動態SQL構造。 – dezso
我很喜歡postgres,我該怎麼做? – tvieira