geometry
poligonunu saklayan bir tablo geofences
var.Postgis geometrisinin sınırı üzerinde en yakın iki nokta
Ayrıca geometrinin içinde yer alan bir A
noktam var. Yapmam gereken şey, çokgen geometrisinin yüzeyinde duran A
noktasından en yakın iki noktayı bulmak. PostGIS içinde
Fonksiyon:
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;
Sadece poligon geometrisi sınırda iki noktayı bulmak istiyoruz. Tıpkı sorgudan biri bulmuş gibi: Diğer
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;
sonra ben bu nokta nokta yukarıda bulmak sonra daha büyük ama noktalarının kalanı daha sonra daha küçük bir mesafe ile bir daha bulmak için.
çift lat1 = Math.toRadians (26.5534d); \t \t çift lon1 = Math.toRadians (75.4925d); \t \t çift lat2 = Math.toRadians (28.3650d); \t \t çift lon2 = Math.toRadians (77.1232d); \t \t çift dellatin = (lat2 - lat1); \t \t çift dellon = (lon2 - lon1); \t \t çift R = 6371; \t \t double = Math.sin ((dellat)/2) * Math.sin ((dellat)/2) \t \t \t \t + Math.cos (lat1) * Math.cos (lat2) * Math.sin ((Dellon)/2) \t \t \t \t * Math.sin ((Dellon)/2); \t \t çift c = 2 * (Math.atan2 (Math.sqrt (a) Math.sqrt (1 - a))); \t \t çift d = R * c; \t \t System.out.println ("km olarak mesafe değeri =" + d); –
, nokta A ile geometriden her nokta için ilmek arasındaki mesafeyi hesapladı ve her şeyden en az iki asgari mesafeyi buldu. –
Yalnızca geometride bulunan noktaları değil, noktalar arasındaki çizgi kesimlerini önemsiyorsanız, çokgenin sınırını MULTIPOINT olarak dönüştürebilir, en yakın noktayı bulabilir, kaldırabilir ve ikinci en yakın noktayı bulabilirsiniz. –