1

我知道有很多关于从纬度/经度计算到公制系统的线程。这解决了我问题的第一部分。

我的问题的第二个(主要部分)是这样的:

  • 我有谷歌地图作为地图应用程序。
  • 我有一对经纬度的点
  • 我有一个公制距离,比如说30米。
  • 我需要一些点来做一个sql 查询

为什么?

我有很多 POI 记录,可以通过这对 lat&long 进行定位。我不想得到所有的结果(原因:更好的性能)。

有没有办法做类似的事情:

select * from myTable where lat> .... and lat < ... and long > ... and long < ...?

这可能吗?如果是,我如何获得这些值...

问候!

4

2 回答 2

2

看一下文章:在边界圆内选择点

和 SO 问题:SQL Query for Performing Radius Search based on Latitude Longitude

这些应该让你开始。

于 2012-05-03T20:29:30.330 回答
1

这是一个示例查询,它返回供应商 lat/lng 和 lat/lng 对数据库之间的距离:

DECLARE
@Latitude float,
@Longitude float

SET @Latitude = 46.51257000000000
SET @Longitude = -84.33660900000000

DECLARE @SampleData TABLE
(
Name varchar(100),
Lat float,
Lng float
)

INSERT INTO @SampleData
(Name, Lat, Lng)
SELECT 'Point1', 46.52450048415351,-84.35223018530274
UNION
SELECT 'Point2', 46.51835838382206,-84.30279170874024
UNION
SELECT 'Point3', 46.522138220045285,-84.2622796237793
UNION
SELECT 'Point4', 46.54056115608927,-84.223140829834

SELECT 
    Name,
    Lat,
    Lng,
    -- using spherical law of cosines, where 6371 is the earth's radius in km. Returns km.
    Distance = ACOS(SIN(RADIANS(@Latitude))*SIN(RADIANS(Lat))+COS(RADIANS(@Latitude))*COS(RADIANS(Lat))*COS(RADIANS(Lng-@Longitude)))*6371  
FROM 
    @SampleData
于 2012-05-04T10:33:39.753 回答