2016-06-29 5 views
0

Ich habe Abfrage, die damit antworten, dass Breite und Länge sind in Rectangle oder not.please überprüfen Sie unter Code und Bilddatei.wie lat lange im Kreis oder nicht sql Server überprüfen

Meine Frage ist, wie man Ergebnis des Kreises erhält? mylat lange im Kreis oder aus habe ich "lat":"25.38227896335241","lon":"68.3395897859009"},"radius":"141.4213562373095" in Datenbank

Beispiel: „Ich habe Breite Länge von Auto i Breite ist Überprüfung , Längengrade sind im Kreis oder nicht, wenn im Kreis Ergebnis‚Auto in Kreis‘ wenn nicht ‚Auto aus Kreisfläche‘ diese Logik perfekt in meinem Rechteck aber i Kreis Ergebnis will „auch

DECLARE @g geography, 
@pIn geography, 
@pOut geography 


DECLARE @minY varchar(10); 
DECLARE @maxY varchar(10); 
DECLARE @minX varchar(10); 
DECLARE @maxX varchar(10); 
DECLARE @carlat varchar(10); 
DECLARE @carlong varchar(10); 
DECLARE @CarIdx int; 
select 
@minY = g.minlatitude , --N'29.7071393481341' 
@maxY = g.minlongitude , --N'64.808349609375' 
@minX = g.maxlatitude , --N'28.2463279710488' 
@maxX = g.maxlongitude --N'63.292236328125' 
from tblgeofencing as g where ShapeType = 'rectangle' 
SET @g = geography::STPolyFromText('POLYGON((' + @minX + ' ' + @minY + ', ' + 
@maxX + ' ' + @minY + ', ' + 
@maxX + ' ' + @maxY + ', ' + 
@minX + ' ' + @maxY + ', ' + 
@minX + ' ' + @minY + '))', 4326); 

select TOP 1 @CarIdx= idx, @carlat = f.lat, @carlong = f.long from checkgeofence as f order by idx desc 
SET @pIn = geography::STPointFromText('POINT(' + @carlat +' ' + @carlong +')',4326) 
SET @pOut = geography::STPointFromText('POINT(28.709860843942856 63.643798828125)',4326) 

SELECT Poly = @g, 
pIn = @pIn, 
pOut = @pOut 
SELECT DistanceInMetersIn = @g.STDistance(@pIn), 
DistanceInMetersOut = @g.STDistance(@pOut), 
STIntersectsIn = @g.STIntersects(@pIn), 
STIntersectsOut = @g.STIntersects(@pOut) 
SELECT STIntersectionIn = @g.STIntersection(@pIn).ToString(), 
STIntersectionOut = @g.STIntersection(@pOut).ToString() 
if(@g.STIntersects(@pIn) >= 1) 
update checkgeofence 
set IsGeofence = 1 
where idx = @CarIdx 

enter image description here

+1

Ich bin nicht sicher, wie der Code auf die Frage bezieht sich gezeigt. Es ist mir nicht klar. Wie auch immer, die Frage, ob sich etwas in einem Kreis befindet, entspricht der Frage, wie groß der Abstand zwischen diesem Punkt und dem Mittelpunkt des Kreises ist, und vergleicht diesen Wert mit dem Radius. Mit welchem ​​Teil kämpfst du? –

+0

Lieber ich habe Breitengrad Längengrad Ich überprüfe Breitengrad Längengrad sind im Kreis oder nicht im Kreis Ergebnis 'Auto im Kreis' Wenn nicht 'Auto außerhalb Kreisbereich' –

Antwort

0
  1. get geografische Breite und Länge des Autos
  2. get Breiten- und Längengrad des Ortes
  3. den gewünschten Radius des Kreises erhalten
  4. den Abstand zwischen dem Fahrzeug berechnen und den Ort

Wenn Sie dies ausführen, sollte es eine 1 zurückgeben, was bedeutet, dass das Auto innerhalb des gegebenen Radius des Ortes ist.

declare @latitudeCar decimal(9,6) = 0.0275361; 
declare @longitudeCar decimal(9,6) = 51.5064694; 
declare @latitudePlace decimal(9,6) = -66.1711278; 
declare @longitudePlace decimal(9,6) = -17.4125; 


declare @source geography = 'POINT(' + cast(@latitudeCar as nvarchar) + ' ' + cast(@longitudeCar as nvarchar) + ')' 
declare @target geography = 'POINT(' + cast(@latitudePlace as nvarchar) + ' ' + cast(@longitudePlace as nvarchar) + ')' 
declare @radius float = 7000 
declare @check float 
declare @isPastCircle bit 

set @check = (select @source.STDistance(@target)/1609.344) 
--select @source.STDistance(@target)/1000 

set @isPastCircle = (select case when @check < @radius then 1 else 0 end); 
select @isPastCircle [isPastCircle], @check [carDistance], @radius [acceptableRadius] 

Standard US-Meilen überprüfen

set @check = select @source.STDistance(@target)/1609.344 

km Check

set @check = select @source.STDistance(@target)/1000 
+0

Bitte überprüfen Sie Ihre Abfrage Ergebnis immer falsch –

+0

Ich möchte nur Längengrad zu überprüfen im Kreis oder nicht, –

+0

Ok so das gleiche ist wirklich das, was es tut. Nehmen wir den Breiten-/Längengrad, sagen wir das Auto, und wenn ich in dem "Kreis" oder dem gegebenen Radius bin, dann wahr sonst falsch. Nun, was Sie tun müssen, ist eine Funktion zu getRadius() aus Ihrem Kreis zu erstellen, um den Radius tatsächlich zu erhalten, aber dann würden Sie dies ausführen, sobald Sie diesen Wert haben, um festzustellen, ob der Punkt im "Kreis" ist – dkolln