Sat*_*rma 29 postgresql postgis plpgsql
我有一个geofences
存储geometry
多边形的表.
我还有一个A
在几何体内部的点.我要做的是找到A
位于多边形几何体表面上的点的两个最近点.
PostGIS中的功能:
CREATE OR REPLACE FUNCTION accuracyCheck(Polygon geometry
,decimal lat
,decimal lon)
RETURNS VARCHAR AS
$BODY$
DECLARE height DECIMAL;
DECLARE accuracy VARCHAR(250);
BEGIN
CREATE TEMPORARY TABLE closePointStorage AS
SELECT ST_AsText(ST_ClosestPoint(geometry
,ST_GeomFromText('POINT(lat lon)',0)
)
) AS closestPoint
FROM (
SELECT ST_GeomFromText(geometry) as geometry
FROM gfe_geofences
WHERE is_active=true
) As tempName;
CREATE TEMPORARY TABLE areaStorage ON COMMIT DROP AS
SELECT ST_Area(ST_GeomFromText('Polygon((23.0808622876029 96.1304006624291
,28.0808622876029 99.1304006624291
,100 200
,23.0808622876029 96.1304006624291
))'
,0)
) AS area;
CREATE TEMPORARY TABLE distanceStorage ON COMMIT DROP AS
SELECT ST_Distance(
ST_GeomFromText('POINT(23.0808622876029 96.1304006624291)',-1)
,ST_GeomFromText('POINT(28.0808622876029 99.1304006624291)',-1)
) AS distance;
height = (SELECT area FROM areaStorage)
/(0.5*(SELECT distance FROM distanceStorage));
IF height < (SELECT radius_meters
FROM gfe_geofences Where is_active=true) THEN
accuracy = "FullConfirm";
RETURN accuracy;
ELSE
accuracy = "PartiallyConfirm";
RETURN accuracy;
END IF;
END;
$BODY$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
我只想在多边形几何的边界上找到两个点.就像我从查询中找到一个:
CREATE TEMPORARY TABLE closePointStorage AS
SELECT ST_AsText(ST_ClosestPoint(geometry
,ST_GeomFromText('POINT(lat lon)',0)
)
) AS closestPoint
FROM (
SELECT ST_GeomFromText(geometry) as geometry
FROM gfe_geofences
WHERE is_active=true
)
AS tempName;
Run Code Online (Sandbox Code Playgroud)
除此之外,我必须找到一个距离大于上面的点但比其余点更小的距离.
使用 ST_DumpPoints() 转储多边形的点,然后按 ST_Distance 到 A limit 2 的顺序选择。 ?
所以它就像是
SELECT * from ST_DumpPoints(poly) order by ST_Distance(A,geom) asc limit 2;
Run Code Online (Sandbox Code Playgroud)
(假设这是一个内部选择,其中 poly 是多边形,A 是要比较的点,geom 是要比较的多边形中的点之一的 geom 列)
归档时间: |
|
查看次数: |
2002 次 |
最近记录: |