在矩形(多边形)内找到 sql 个地理点
finding sql geography point within rectangular (polygon)
我有一个 interesting/annoying 问题,无法在矩形边界内找到地标的纬度和经度。
我相信我的两个点在我的矩形边界内。但是您可以自己测试一下,第一个 select 的结果是错误的而不是正确的!
DECLARE @boundingRect varchar(1000)
DECLARE @maxLat VARCHAR(20)
DECLARE @minLong VARCHAR(20)
DECLARE @minLat VARCHAR(20)
DECLARE @maxLong VARCHAR(20)
set @maxLat ='-36.06631759541187'
set @minLong ='125.23310677812492'
set @minLat ='-44.43329881450396'
set @maxLong='167.04707162187492'
SET @boundingRect = 'POLYGON((' + @minLong + ' ' + @minLat + ', ' +
@maxLong + ' ' + @minLat + ', ' +
@maxLong + ' ' + @maxLat + ', ' +
@minLong + ' ' + @maxLat + ', ' +
@minLong + ' ' + @minLat + '))'
DECLARE @Bounds AS Geography =GEOGRAPHY::STPolyFromText(@boundingRect,4326)
DECLARE @point1 AS GEOGRAPHY = GEOGRAPHY::Point(-37.81502, 144.94601, 4326)
DECLARE @point2 AS GEOGRAPHY = GEOGRAPHY::Point(-38.81502, 144.94601, 4326)
SELECT @Bounds.STIntersects(@point1)
SELECT @Bounds.STIntersects(@point2)
为了给您提供背景信息,我列出了要加载到 google 地图上的地标(纬度、经度)。由于地标数量太多,我无法一次 return 所有。我需要 return 用户可见区域中的地标,在他们的查看边界内。我正在获取 google 地图边界的西北(最大纬度,最小长度)和东南(最小纬度,最大长度)并将其发送到我的存储过程以返回土地列表 return该边界内的标记。但是,正如我上面所解释的,我遇到了一些问题,列表中缺少一些地标。
实际上,地理多边形不是矩形:
如果你想要矩形,你可以使用几何多边形:
@point1 不相交这可以通过以下方式验证:
DECLARE @boundingRect varchar(1000)
DECLARE @maxLat VARCHAR(20)
DECLARE @minLong VARCHAR(20)
DECLARE @minLat VARCHAR(20)
DECLARE @maxLong VARCHAR(20)
set @maxLat ='-36.06631759541187'
set @minLong ='125.23310677812492'
set @minLat ='-44.43329881450396'
set @maxLong='167.04707162187492'
SET @boundingRect = 'POLYGON((' + @minLong + ' ' + @minLat + ', ' +
@maxLong + ' ' + @minLat + ', ' +
@maxLong + ' ' + @maxLat + ', ' +
@minLong + ' ' + @maxLat + ', ' +
@minLong + ' ' + @minLat + '))'
DECLARE @Bounds AS Geography =GEOGRAPHY::STPolyFromText(@boundingRect,4326);
DECLARE @point1 AS GEOGRAPHY = GEOGRAPHY::Point(-37.81502, 144.94601, 4326);
DECLARE @point2 AS GEOGRAPHY = GEOGRAPHY::Point(-38.81502, 144.94601, 4326);
SELECT @Bounds.STIntersects(@point1);
SELECT @Bounds.STIntersects(@point2);
SELECT @point1, 'Point 1'
UNION ALL
SELECT @Point2, 'Point 2'
UNION ALL
SELECT @BoundingRect, 'Rect'
我有一个 interesting/annoying 问题,无法在矩形边界内找到地标的纬度和经度。 我相信我的两个点在我的矩形边界内。但是您可以自己测试一下,第一个 select 的结果是错误的而不是正确的!
DECLARE @boundingRect varchar(1000)
DECLARE @maxLat VARCHAR(20)
DECLARE @minLong VARCHAR(20)
DECLARE @minLat VARCHAR(20)
DECLARE @maxLong VARCHAR(20)
set @maxLat ='-36.06631759541187'
set @minLong ='125.23310677812492'
set @minLat ='-44.43329881450396'
set @maxLong='167.04707162187492'
SET @boundingRect = 'POLYGON((' + @minLong + ' ' + @minLat + ', ' +
@maxLong + ' ' + @minLat + ', ' +
@maxLong + ' ' + @maxLat + ', ' +
@minLong + ' ' + @maxLat + ', ' +
@minLong + ' ' + @minLat + '))'
DECLARE @Bounds AS Geography =GEOGRAPHY::STPolyFromText(@boundingRect,4326)
DECLARE @point1 AS GEOGRAPHY = GEOGRAPHY::Point(-37.81502, 144.94601, 4326)
DECLARE @point2 AS GEOGRAPHY = GEOGRAPHY::Point(-38.81502, 144.94601, 4326)
SELECT @Bounds.STIntersects(@point1)
SELECT @Bounds.STIntersects(@point2)
实际上,地理多边形不是矩形:
如果你想要矩形,你可以使用几何多边形:
@point1 不相交这可以通过以下方式验证:
DECLARE @boundingRect varchar(1000)
DECLARE @maxLat VARCHAR(20)
DECLARE @minLong VARCHAR(20)
DECLARE @minLat VARCHAR(20)
DECLARE @maxLong VARCHAR(20)
set @maxLat ='-36.06631759541187'
set @minLong ='125.23310677812492'
set @minLat ='-44.43329881450396'
set @maxLong='167.04707162187492'
SET @boundingRect = 'POLYGON((' + @minLong + ' ' + @minLat + ', ' +
@maxLong + ' ' + @minLat + ', ' +
@maxLong + ' ' + @maxLat + ', ' +
@minLong + ' ' + @maxLat + ', ' +
@minLong + ' ' + @minLat + '))'
DECLARE @Bounds AS Geography =GEOGRAPHY::STPolyFromText(@boundingRect,4326);
DECLARE @point1 AS GEOGRAPHY = GEOGRAPHY::Point(-37.81502, 144.94601, 4326);
DECLARE @point2 AS GEOGRAPHY = GEOGRAPHY::Point(-38.81502, 144.94601, 4326);
SELECT @Bounds.STIntersects(@point1);
SELECT @Bounds.STIntersects(@point2);
SELECT @point1, 'Point 1'
UNION ALL
SELECT @Point2, 'Point 2'
UNION ALL
SELECT @BoundingRect, 'Rect'