如何使用Sql搜索(预定义)矩形内的位置(纬度/经度)?

Yaq*_*mad 5 c# sql-server google-maps google-maps-api-3

我有一个矩形位置的北,东,南和西值,我如何仅搜索该矩形位置范围内的那些位置(纬度/经度)?

在此处输入图片说明

请注意,我需要在数据库中搜索位置(纬度/经度)。我需要在数据库中找到给定矩形范围内的位置,然后在地图上为其绘制标记。

我不是在谈论Google搜索搜索的API已经支持传递矩形边界以过滤搜索。

googlemapsAPI可我喜欢这样做:

var request = {
    bounds: myMapObject.getBounds(), // Search only within the Bound of the Map
    query: someTextToFind
};
Run Code Online (Sandbox Code Playgroud)

要么

var isWithInMapsBounds = myMapObject.getBounds().contains(myLocation);
Run Code Online (Sandbox Code Playgroud)

但是我需要在从数据库获取位置的同时这样做,我的意思是在服务器端

有人可以指导我正确的方向,如何实现此功能?

编辑:

我想在数据库中搜索;所以我需要一个SQL解决方案。

Sam*_*Axe 3

DECLARE @Bounds AS Geography = GEOMETRY::STGeomFromText('polygon-wkt-here',0)

SELECT columns-list
FROM   table
WHERE  1 = @Bounds.STIntersects(table.point-column)
Run Code Online (Sandbox Code Playgroud)

对于那些一无所知的人,请快速说明为什么不能将点位置与边界框的北/南/东/西坐标进行比较:

边界框可能不是纬度/经度对齐的(例如,其北/南/东/西线可能不遵循纬度/长轴)。如果您在纬度/经度地图投影上绘制平面矩形,就会发生这种情况。该点距离边界框边缘越近,距离赤道越远,失真就越明显。

使用地理数据类型的第二个原因是它提供了一种对任何多边形(而不仅仅是矩形)执行此类操作的统一方法。因此,现在您可以比较单个点是否在您的盒子内,或者查找邮政编码中的所有地址,所有地址都使用相同的代码段。