জর্জ ম্যাকেরন একটি সহজ নিকটবর্তী নেবার ফাংশন লিখেছেন যা আমি বেশ দরকারী বলে মনে করেছি। এই ফাংশনটি প্রদত্ত বৈশিষ্ট্যে নিকটতম প্রতিবেশীর আইডি ফিরিয়ে দেয়:
create or replace function
nn(nearTo geometry
, initialDistance real
, distanceMultiplier real
, maxPower integer
, nearThings text
, nearThingsIdField text
, nearThingsGeometryField text)
returns integer as $$
declare
sql text;
result integer;
begin
sql := ' select ' || quote_ident(nearThingsIdField)
|| ' from ' || quote_ident(nearThings)
|| ' where st_dwithin($1, '
|| quote_ident(nearThingsGeometryField) || ', $2 * ($3 ^ $4))'
|| ' order by st_distance($1, ' || quote_ident(nearThingsGeometryField) || ')'
|| ' limit 1';
for i in 0..maxPower loop
execute sql into result using nearTo -- $1
, initialDistance -- $2
, distanceMultiplier -- $3
, i; -- $4
if result is not null then return result; end if;
end loop;
return null;
end
$$ language 'plpgsql' stable;
ব্যবহারের উদাহরণ:
SELECT id, nn(pt_geom,0.00001,2,100,'nw_node','node_id','node_geom') FROM my_point_table;
... আমার_পয়েন্ট_ট্যাবেলে প্রতিটি প্রবেশের জন্য nw_node টেবিলের নিকটতম নোডটি নির্বাচন করে।
এখানে একটা হল বস্টন জিআইএস সাইটে আরও জেনেরিক ফাংশন ।