【发布时间】:2019-11-13 11:34:11
【问题描述】:
QN:对于 PostGIS 中提供的几何图形,ST_Within 函数出现错误。不确定实现 ST_Within 的第一个参数的方式是什么。
注意:变量经度和纬度是提供给函数的字符类型。但是,我无法构造传递给 ST_Within 的值。
从自定义函数中提取代码:
pointText := 'POINT(longitude || || latitude )';
result := (select p_code
from public.parking_lot
b where ST_Within (ST_GeomFromText(pointText)::geometry::geography,wkb_geography) limit 1);
编辑:2019 年 11 月 14 日 在@jim-jones 的建议下,我重新创建了我的函数,如下所示:
CREATE OR REPLACE FUNCTION public.returnParkingLot(
longitude character,
latitude character)
RETURNS character AS
$BODY$
declare result text;
declare pointText text;
BEGIN
IF longitude = '0' THEN
return '';
ELSE
pointText := 'POINT(' || longitude || ' ' || latitude || ')';
result := (select p_code from public.parking_lot b where ST_Within (ST_GeomFromText(pointText),b.wkb_geography::GEOMETRY) limit 1);
return result;
END IF;
END;$BODY$
LANGUAGE plpgsql VOLATILE STRICT
COST 100;
ALTER FUNCTION public.returnParkingLot(character, character)
OWNER TO mother;
访问: 我使用上面的函数使用 select 语句如下:
select public.returnParkingLot('103.84472222','1.28333333');
注意事项:想知道这个实现是否正确。
编辑:11 月 21 日
根据@jim-jones 的要求,更改下方用户输入的数据类型。
CREATE OR REPLACE FUNCTION public.returnParkingLot(
longitude double precision,
latitude double precision)
RETURNS character AS
$BODY$
declare result text;
declare pointText text;
BEGIN
IF longitude = '0' THEN
return '';
ELSE
pointText := 'POINT(' || longitude || ' ' || latitude || ')';
result := (select p_code from public.parking_lot b where ST_Within (ST_GeomFromText(pointText),b.wkb_geography::GEOMETRY) limit 1);
return result;
END IF;
END;$BODY$
LANGUAGE plpgsql VOLATILE STRICT
COST 100;
ALTER FUNCTION public.returnParkingLot(double precision, double precision)
OWNER TO mother;
选择语句:
select public.returnParkingLot(103.84472222, 1.28333333);
【问题讨论】:
标签: postgresql gis postgis