मेरे पास एक तालिका geofences
है जो पॉलीगॉन के geometry
स्टोर करती है।पोस्टगिस ज्यामिति की सीमा पर दो निकटतम अंक
मेरे पास एक बिंदु A
भी है जो ज्यामिति के अंदर है। मुझे क्या करना है पॉलीगॉन ज्यामिति की सतह पर स्थित बिंदु A
से दो निकटतम बिंदु खोजें।
फंक्शन:
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;
मैं सिर्फ बहुभुज ज्यामिति की सीमा पर दो अंक लगाना चाहते हैं। वैसे ही जैसे मैं क्वेरी से एक मिल गया है:
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;
अन्य तो इस बिंदु मैं अधिक से अधिक तो बिंदु से ऊपर लगता है लेकिन छोटे अंक के बाकी तो दूरी के साथ एक और खोजने के लिए।
डबल lat1 = Math.toRadians (26.5534d); \t \t डबल लॉन 1 = Math.toRadians (75.4925 डी); \t \t डबल lat2 = Math.toRadians (28.3650d); \t \t डबल lon2 = Math.toRadians (77.1232d); \t \t डबल डेलैट = (lat2 - lat1); \t \t डबल डेलन = (लॉन 2 - लॉन 1); \t \t डबल आर = 6371; \t \t डबल एक = गणित.पाप ((dellat)/2) * गणित.पाप ((dellat)/2) \t \t \t \t + गणित.क्योंकि (lat1) * गणित.क्योंकि (lat2) * गणित.पाप ((डेलन)/2) \t \t \t \t * Math.sin ((डेलन)/2); \t \t डबल सी = 2 * (Math.atan2 (Math.sqrt (ए), Math.sqrt (1 - ए))); \t \t डबल डी = आर * सी; \t \t System.out.println ("किमी में दूरी का मूल्य =" + डी); –
ने बिंदु ए के साथ ज्यामिति से प्रत्येक बिंदु के लिए लूप में दूरी की गणना की और उन सभी से कम से कम या न्यूनतम दूरी खोजें। –
यदि आप केवल ज्यामिति में बिंदुओं की परवाह करते हैं, न कि बिंदुओं के बीच रेखा खंड, तो आप बहुभुज की सीमा को मल्टीपॉइंट में परिवर्तित कर सकते हैं, निकटतम बिंदु ढूंढ सकते हैं, इसे हटा सकते हैं और फिर दूसरा निकटतम बिंदु ढूंढ सकते हैं। –