postgresql – Postgis几何边界上的两个最近点

postgresql – Postgis几何边界上的两个最近点,第1张

概述我有一个表地理围栏存储多边形的几何。 我也有一个点A在几何体内。我要做的是找到位于多边形几何体表面上的点A的两个最近点。 PostGIS中的函数: CREATE OR REPLACE FUNCTION accuracyCheck(Polygon geometry ,decimal lat 我有一个表地理围栏存储多边形的几何。

我也有一个点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 ASSELECT ST_AsText(ST_ClosestPoint(geometry,ST_GeomFromText('POINT(lat lon)',0)                                )                ) AS closestPointFROM  (   SELECT ST_GeomFromText(geometry) as geometry   FROM gfe_geofences   WHERE is_active=true   ) As tempname;CREATE TEMPORARY table areaStorage ON COMMIT DROP ASSELECT 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 ASSELECT 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;

我只想在多边形几何的边界上找到两个点。就像我从查询中找到一个:

CREATE TEMPORARY table closePointStorage ASSELECT ST_AsText(ST_ClosestPoint(geometry,0)                                )                ) AS closestPoint FROM  (   SELECT ST_GeomFromText(geometry) as geometry   FROM gfe_geofences   WHERE is_active=true   ) AS tempname;

其他然后这一点,我必须找到一个更多的距离大于然后点找到以上,但小于其余的点。

我假设你想找到通过最接近问题点的多边形的边缘

为了从线[A,B]获得点’C’的距离’d’
首先翻译所有点,A为0,0

B -= A  //vector subtractionC -= A

然后归一化B,使其长度为1.0

len = sqrt( B . B) //dotproduct of two vectors is the length squaredB /= len  //scalar divIDe by length

从A找到与C成直角的长度

dotp = B . C  //dot product againclosestPointOnline =  B * dotp  //scalar multiply

现在得到距离

diff = (C - ClosestPointOnline)d = sqrt(diff . diff)

不知道如何在sql中做到这一点。您将需要对多边形上的每个边做上述 *** 作,然后找到最小值’d’

顺便说一下,B和C的叉积的符号现在会告诉你点是否在多边形的内部

总结

以上是内存溢出为你收集整理的postgresql – Postgis几何边界上的两个最近点全部内容,希望文章能够帮你解决postgresql – Postgis几何边界上的两个最近点所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1171808.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存