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

C# 如何使用Sql在矩形内搜索(预定义)位置(纬度/经度)?,c#,sql-server,google-maps,google-maps-api-3,C#,Sql Server,Google Maps,Google Maps Api 3,我有一个矩形位置的北、东、南和西值,如何只搜索那些位于该矩形位置边界内的位置纬度/经度 请注意,我需要在数据库中搜索位置纬度/经度。我需要在数据库中找到位于给定矩形边界内的位置,并在地图上为它们绘制标记 我不是说,搜索的API已经支持传递矩形边界来过滤搜索 googlemaps API可以为我这样做: var request = { bounds: myMapObject.getBounds(), // Search only within the Bound of the Map

我有一个矩形位置的北、东、南和西值,如何只搜索那些位于该矩形位置边界内的位置纬度/经度

请注意,我需要在数据库中搜索位置纬度/经度。我需要在数据库中找到位于给定矩形边界内的位置,并在地图上为它们绘制标记

我不是说,搜索的API已经支持传递矩形边界来过滤搜索

googlemaps API可以为我这样做:

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

但我需要在从数据库中获取位置的同时执行此操作,我的意思是在服务器端

有人能给我指引正确的方向吗?如何实现这个功能

编辑:

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

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

SELECT columns-list
FROM   table
WHERE  1 = @Bounds.STIntersects(table.point-column)
对于那些在黑暗中的人,请注意为什么不能将点位置与边界框的北/南/东/西坐标进行比较:

边界框可能没有横向/纵向对齐,例如,其北/南/东/西线可能不遵循横向/纵向轴。 如果在Lat/Long贴图投影上绘制平面矩形,则会发生这种情况。该点越靠近边界框的边缘,距离赤道越远,失真越明显

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

SQL查询

SELECT *  FROM mytable WHERE lat >= bottomlat  AND lat <= toplat AND lng >= leftlng AND lng <= rightlng
如果穿越本初子午线或赤道,则需要修改查询

SELECT * FROM mytable WHERE lat >=bottomlat AND lat <= toplat  AND   lng >= leftLng AND lng < 0 
UNION
SELECT * FROM mytable WHERE lat >=bottomlat AND lat <= toplat  AND  lng >= 0 AND lng  <= rightLng

加载图像需要几个小时。与此同时,我在Google groups上发现了这个帖子:这个帖子帮不了我。。正如我提到的,我可以用谷歌地图来做。。但我需要在从数据库中获取位置时进行此操作。@CanSpice的可能重复项不是重复项,实际上,我想在数据库中搜索。让我来探索Geography=GEOMETRY::stgeomefromtext如果矩形横跨赤道或本初子午线会发生什么?这也不处理非平面矩形。最好使用几何体类型。@Dan-o我需要在美国境内使用它,所以我认为第一个SQL对我有用??美国与平面几何体到底有什么关系?对我上面的评论有一点修正:几何学应该是地理学谢谢,这篇文章帮助我找到了我想要的答案!
SELECT * FROM mytable WHERE lat >=bottomlat AND lat <= toplat  AND   lng >= leftLng AND lng < 0 
UNION
SELECT * FROM mytable WHERE lat >=bottomlat AND lat <= toplat  AND  lng >= 0 AND lng  <= rightLng