我需要找到最好的方式为“圆圈重叠的指定点”系统。
我有很多,例如餐馆点的,每一个项目都有一个点的地方,以及如半径“带来了食品”。 半径不同,有的有3公里,距离其他10公里。 我从一个点搜索。 例如:“我的位置”经/纬度。
我需要找到找到我的重叠点的所有餐馆的最佳途径。 (会不会带食物给我)。 (不为圆点,但什么圆圈重叠的我的观点。)
我想在2008年的SQLServer存储纬度/经度的地理类型的这是为了做到这一点?
我可以直接查询SQLSERVER上的顶部? 或者我需要做的代码? 什么是做到这一点的呢?
是的,这正是那种东西, 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
;
是的,你可以画出你的圈子中的点作为一个地理/几何数据类型。 然后你就可以对这些数据与类似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语句。