想找到给定的地点或地址的所有附近的地方。有没有谷歌地图API?或者我们需要按照如下步骤进行:我如何找到附近的位置使用谷歌地图api
查找该地点的经纬度。
做一些处理并获得近似长度。
使用获得的来自步骤2的经纬度长度对反向地理编码进行反向地址编码,并找到每个经纬度长度对的位置。
澄清我。另外,如果你可以提高步骤2,那就太棒了。
此方法是否有效?你能澄清一下吗?
想找到给定的地点或地址的所有附近的地方。有没有谷歌地图API?或者我们需要按照如下步骤进行:我如何找到附近的位置使用谷歌地图api
查找该地点的经纬度。
做一些处理并获得近似长度。
使用获得的来自步骤2的经纬度长度对反向地理编码进行反向地址编码,并找到每个经纬度长度对的位置。
澄清我。另外,如果你可以提高步骤2,那就太棒了。
此方法是否有效?你能澄清一下吗?
这真的取决于您所寻找的附近事物是否在Google数据库中作为感兴趣的地方,或者它们是否是任意地址/位置。
如果它们是地址/位置,则类似于您指定的内容是正确的。你想
的数学是:
以下(其中LAT1和Lon1在弧度和LAT2和Lon2您当前的位置是在弧度目标):
Acos(
Cos(Lat1) * Cos(Lon1) * Cos(Lat2) * Cos(Lon2) +
Cos(Lat1) * Sin(Lon1) * Cos(Lat2) * Sin(Lon2) +
Sin(Lat1) * Sin(Lat2)
) * EarthRadiusInMiles
这可以使用SQL F为完成(MSSQL,但是你可以很容易地将这个逻辑编码到大多数其他语言中)。
CREATE FUNCTION [dbo].[CoordinateDistanceMiles](
@Latitude1 float,
@Longitude1 float,
@Latitude2 float,
@Longitude2 float
)
RETURNS float
AS
BEGIN
-- SAME LOCATION, RETURN 0
IF @Latitude1 = @Latitude2 AND @Longitude1 = @Longitude2 RETURN 0.00
-- CONSTANTS
DECLARE @EarthRadiusInMiles float;
SET @EarthRadiusInMiles = 3963.1
DECLARE @PI float;
SET @PI = PI();
-- RADIANS conversion
DECLARE @lat1Radians float;
DECLARE @long1Radians float;
DECLARE @lat2Radians float;
DECLARE @long2Radians float;
SET @lat1Radians = @Latitude1 * @PI/180;
SET @long1Radians = @Longitude1 * @PI/180;
SET @lat2Radians = @Latitude2 * @PI/180;
SET @long2Radians = @Longitude2 * @PI/180;
RETURN Acos(
Cos(@lat1Radians) * Cos(@long1Radians) * Cos(@lat2Radians) * Cos(@long2Radians) +
Cos(@lat1Radians) * Sin(@long1Radians) * Cos(@lat2Radians) * Sin(@long2Radians) +
Sin(@lat1Radians) * Sin(@lat2Radians)
) * @EarthRadiusInMiles;
END
从任何电话查询您可以通过距离排序,例如
然后:
CREATE PROCEDURE [dbo].[NearbyThings]
(
@Lat float,
@Lon float,
@Num int = 10
)
AS
SET NOCOUNT ON
Select Top (@Num)
'Distance' = Round(dbo.CoordinateDistanceMiles(@Lat, @Lon, Lat, Lon), 1),
ThingId,
Postcode,
Lat,
Lon
From
Things
Order by
dbo.CoordinateDistanceMiles(@Lat, @Lon, Lat, Lon) ASC
GO
+1组织良好的答案 – amd 2012-08-02 09:44:30
邻近_whats_? – SLaks 2010-08-16 17:55:59
你的意思是“接近地点”是什么意思? – 2010-08-16 17:58:22
附近的地点/地理位置更精确 – nepsdotin 2010-08-17 02:59:28