c# - 获取与给定点重叠的所有点(具有半径的圆)

标签 c# sql-server-2008 gis geocoding

我需要找到“圆圈重叠给定点”系统的最佳方法。

我有很多观点,例如餐馆,每个项目都有一个地点的点,以及例如半径。 “拿出食物来”。半径不同,有的为3公里,有的为10公里。 我从一个点开始寻找。例如“我的位置”纬度/经度。

我需要找到找到与我的观点重叠的所有餐厅的最佳方法。 (会给我带来食物)。 (不是圆中的点,而是哪些圆与我的点重叠。)

我正在考虑将 lat/lng 作为地理类型存储在 SQLServer 2008 中。这是这样做的方法吗?

可以直接在sqlserver上面查询吗?或者我需要用代码来完成吗? 还有什么方法可以实现呢?

最佳答案

是的,这正是地理和空间方法所擅长的事情。这是一个简短的示例:

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
;

关于c# - 获取与给定点重叠的所有点(具有半径的圆),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12949605/

相关文章:

c# - ComboBox 和 KeyValuePair 列表无法正常工作

sql - 如何传递带引号的参数

sql-server - 复杂 SQL 查询建议 : Reservation allotment logic

ios - 大型 MapKit 矢量叠加 - 建议

c# - ASP.NET ViewModel 替代方案

c# - T-SQL 可以存储 ulong 的吗?

c# - 如何在sql c#中增加一个整数

data-visualization - Vega-Lite/牵牛星 : How to Center or Crop a Map of Europe?

postgresql - 如何使用 ogr2ogr 将 shapefile 导入正确的 Postgres 几何字段类型

c# - .Net 桌面应用程序和 Web 应用程序之间的技术区别是什么?