C# 如何使用Sql在矩形内搜索(预定义)位置(纬度/经度)?
我有一个矩形位置的北、东、南和西值,如何只搜索那些位于该矩形位置边界内的位置纬度/经度 请注意,我需要在数据库中搜索位置纬度/经度。我需要在数据库中找到位于给定矩形边界内的位置,并在地图上为它们绘制标记 我不是说,搜索的API已经支持传递矩形边界来过滤搜索 googlemaps API可以为我这样做: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
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