Php 如何使用google map api查找给定位置附近的位置

Php 如何使用google map api查找给定位置附近的位置,php,javascript,google-maps,Php,Javascript,Google Maps,要查找给定位置或地址的所有附近位置。有谷歌地图api吗?或者我们需要遵循一系列步骤,如 找到这个地方的最新位置 做一些加工,然后用板条靠近 使用从步骤2中获得的lat-long进行反向地理编码,并找到每个lat-long对的位置 请澄清。另外,如果你能对第二步进行私舞,那就太棒了 这种方法有效吗?你能澄清一下吗。这真的取决于你正在寻找的附近的东西是在谷歌数据库中作为感兴趣的地方,还是它们是任意的地址/位置 如果它们是地址/位置,则与您指定的类似的内容是正确的 对所有要包含的位置进行地理编码,并将

要查找给定位置或地址的所有附近位置。有谷歌地图api吗?或者我们需要遵循一系列步骤,如

  • 找到这个地方的最新位置

  • 做一些加工,然后用板条靠近

  • 使用从步骤2中获得的lat-long进行反向地理编码,并找到每个lat-long对的位置

  • 请澄清。另外,如果你能对第二步进行私舞,那就太棒了


    这种方法有效吗?你能澄清一下吗。

    这真的取决于你正在寻找的附近的东西是在谷歌数据库中作为感兴趣的地方,还是它们是任意的地址/位置

    如果它们是地址/位置,则与您指定的类似的内容是正确的

  • 对所有要包含的位置进行地理编码,并将其存储在数据库中(使用Lat/Lon)
  • 地理编码您所在的位置(您需要信息的位置)
  • 使用球体上距离的数学例程列出指定距离内的位置
  • 数学是:

  • 以弧度为单位获取当前纬度和经度(LatOrLon*PI/180)
  • 以弧度为单位获取目标纬度和经度(LatOrLon*PI/180)
  • 获取球体的半径(在本例中,地球=3963.1英里)
  • 使用长而复杂且令人困惑的forumla
  • 下面(其中Lat1和Lon1是以弧度表示的当前位置,Lat2和Lon2是以弧度表示的目标):

    这可以使用SQL函数(MSSQL)完成,但您可以轻松地将此逻辑编码为大多数其他语言

    然后从任何调用查询中,您可以按距离排序,例如:

    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
    

    你说的“附近的地方”是什么意思?更准确地说是附近的地方/地理位置
    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