我需要找到我周围的厕所,比如说在50公里内,我有我在经纬度方面的位置,数据库中的厕所是这样的:
Toilet ID (primary)
Address
Latitude
Longitude
my location: my_lat, my_lon是否可以构造一条语句来返回(my_lat,my_lon) 50公里内的所有厕所?就像这样
select * from ToiletTable where
SQRT((Latitude - my_lat)^2 + (Longitude - my_lon)^2) < 50谢谢!
发布于 2012-03-27 22:56:57
假设你不在极地或太平洋地区,我会使用:
where pow(2*(latitude - ?), 2) + pow(longitude - ?, 2) < distance发布于 2011-06-05 15:25:37
您正在寻找Haversine formula
下面是两个完整的实现,一个用SQL:Haversine Implementation
编辑:
Here's a Haversine implementation of a UDF in SQLite。不幸的是,它是针对iPhone的,但至少您有了所需的确切实现。现在,您只需要确定如何插入它。
下面内联的SQL
CREATE FUNCTION [dbo].[GetDistance]
(
@lat1 Float(8),
@long1 Float(8),
@lat2 Float(8),
@long2 Float(8)
)
RETURNS Float(8)
AS
BEGIN
DECLARE @R Float(8);
DECLARE @dLat Float(8);
DECLARE @dLon Float(8);
DECLARE @a Float(8);
DECLARE @c Float(8);
DECLARE @d Float(8);
SET @R = 6371; --This value is 6371 for kilometers, 3960 for miles.
SET @dLat = RADIANS(@lat2 - @lat1);
SET @dLon = RADIANS(@long2 - @long1);
SET @a = SIN(@dLat / 2) * SIN(@dLat / 2) + COS(RADIANS(@lat1))
* COS(RADIANS(@lat2)) * SIN(@dLon / 2) * SIN(@dLon / 2);
SET @c = 2 * ASIN(MIN(SQRT(@a)));
SET @d = @R * @c;
RETURN @d;
END
GOhttps://stackoverflow.com/questions/6241523
复制相似问题