我有查询回复这个,纬度和经度是否在Rectangle中。请检查下面的代码和图像文件。
我的问题是如何获得圈子的结果? mylat长圈或出圈
我在数据库中有"lat":"25.38227896335241","lon":"68.3395897859009"},"radius":"141.4213562373095"
示例:"我有纬度经度的汽车我正在检查纬度 ,如果在圆形结果中,经度是否在圆圈内?' Car in Circle' 如果不是' Car out of Circle area'这个逻辑在我的矩形中很完美但是 我也想要圆圈结果"
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
答案 0 :(得分:0)
如果你运行它,它应该返回一个1,这意味着汽车在该地方的给定半径范围内。
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]
标准美国里程检查
set @check = select @source.STDistance(@target)/1609.344
km check
set @check = select @source.STDistance(@target)/1000