获取所有点(与半径的圆),重叠的给定点(Get all points(circles with ra

2019-09-24 05:53发布

我需要找到最好的方式为“圆圈重叠的指定点”系统。

我有很多,例如餐馆点的,每一个项目都有一个点的地方,以及如半径“带来了食品”。 半径不同,有的有3公里,距离其他10公里。 我从一个点搜索。 例如:“我的位置”经/纬度。

我需要找到找到我的重叠点的所有餐馆的最佳途径。 (会不会带食物给我)。 (不为圆点,但什么圆圈重叠的我的观点。)

我想在2008年的SQLServer存储纬度/经度的地理类型的这是为了做到这一点?

我可以直接查询SQLSERVER上的顶部? 或者我需要做的代码? 什么是做到这一点的呢?

Answer 1:

是的,这正是那种东西, geography和空间的方法所擅长的。 下面是一个简单的例子:

DECLARE @Restaurant TABLE (
    Name nvarchar(50),
    Location geography,
    DeliveryRadiusMetres int
);

INSERT @Restaurant
VALUES
-- long lat
('Dominos','POINT(-0.109339 51.532835)',2000 ),
('Pizza Hut','POINT(-0.102961 51.541157)',2000 );

注意,这里构建geography我使用从字符串隐式转换,这在幕后调用值geography::Parse

DECLARE @MyLocation geography = 'POINT(-0.115063 51.550231)';

SELECT
    Name
FROM
    @Restaurant R
WHERE
    R.Location.STDistance(@MyLocation) <= R.DeliveryRadiusMetres
;


Answer 2:

是的,你可以画出你的圈子中的点作为一个地理/几何数据类型。 然后你就可以对这些数据与类似STWithin和STTouches功能直接写SQL查询。

设置你的餐厅的位置与半径的点。 然后,你可以写这样的查询:

DECLARE @RestaurantCoverage Geometry
SET @RestaurantCoverage = 'Point(10 5)' --Location
SET @RestaurantCoverage = @RestaurantCoverage.STBuffer(5)     --Cover radius
DECLARE @YourLocation Geometry
SET @YourLocation = 'Point(13 5)' --Your location

SELECT @YourLocation.STWithin(@RestaurantCoverage)

http://technet.microsoft.com/en-us/library/bb933991.aspx

也适用直接针对表中的数据与where语句。



文章来源: Get all points(circles with radius), that overlap given point