Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
谷歌地图地理编码器从MySQL数据库查找附近的地方_Mysql_Sql - Fatal编程技术网

谷歌地图地理编码器从MySQL数据库查找附近的地方

谷歌地图地理编码器从MySQL数据库查找附近的地方,mysql,sql,Mysql,Sql,我有一个网站,我在MySQL数据库中存储位置,并使用数据库提供的地址进行地理编码 现在,我想添加一个功能,可以找到离指定点最近的位置,例如,他们现在站立的位置或键入的位置。我正在用JavaScript和jQuery对geocoder和google地图进行编码,并使用PHP从数据库中获取结果 我读过关于视口的文章,但我不知道在我需要显示自己的数据库位置而不是谷歌的数据库位置的情况下,它会如何工作 有人能帮忙吗?如果你能举个例子,那就太棒了。下面是我要做的: 由于您仍然使用数据库,因此每次向数据库

我有一个网站,我在MySQL数据库中存储位置,并使用数据库提供的地址进行地理编码

现在,我想添加一个功能,可以找到离指定点最近的位置,例如,他们现在站立的位置或键入的位置。我正在用JavaScript和jQuery对geocoder和google地图进行编码,并使用PHP从数据库中获取结果

我读过关于
视口的文章,但我不知道在我需要显示自己的数据库位置而不是谷歌的数据库位置的情况下,它会如何工作


有人能帮忙吗?如果你能举个例子,那就太棒了。

下面是我要做的:

  • 由于您仍然使用数据库,因此每次向数据库添加位置时,都要将人类可读的地址转换并保存为LatLng(一次)

  • 查询用户的位置

  • 将用户位置地理编码为LatLng

  • 使用SQL查询查找与所需距离匹配的位置。(见此处)

选择id,(3959*acos(cos(弧度(37))*cos(弧度(lat))*cos(弧度(lng)-弧度(-122))+sin(弧度(37))*sin(弧度(lat)))作为与距离限制为0,20的距离小于25阶的标记的距离

  • 将SQL结果显示回Javascript映射
    • 半径搜索:

      select *,
          acos(cos(centerLat * (PI()/180)) *
           cos(centerLon * (PI()/180)) *
           cos(lat * (PI()/180)) *
           cos(lon * (PI()/180))
           +
           cos(centerLat * (PI()/180)) *
           sin(centerLon * (PI()/180)) *
           cos(lat * (PI()/180)) *
           sin(lon * (PI()/180))
           +
           sin(centerLat * (PI()/180)) *
           sin(lat * (PI()/180))
          ) * 3959 as Dist
      from TABLE_NAME
      having Dist < radius
      order by Dist
      
      选择*,
      acos(cos(centerat*(PI()/180))*
      cos(centerLon*(PI()/180))*
      cos(lat*(PI()/180))*
      cos(lon*(PI()/180))
      +
      cos(centerat*(PI()/180))*
      sin(centerLon*(PI()/180))*
      cos(lat*(PI()/180))*
      sin(lon*(PI()/180))
      +
      sin(centerat*(PI()/180))*
      sin(lat*(PI()/180))
      )*3959 as区
      从表\u名称
      距离小于半径的
      按地区订购
      
      3959是以英里为单位的地球半径。将此值替换为 以公里或任何单位表示的半径,以在同一单位上获得结果。 centerLatcenterLon是搜索的中心(您的
      输入),而lat和lon是表中的字段。

      听起来像是经典的商店定位器。请参阅下面使用PHP和MySQL的示例

      请举一个具体的例子。我是说,一个你正在使用的实际地址。我被你的问题弄糊涂了。例如,如果我想在哥本哈根找到一个特定的酒吧,我会保存地址,例如“Vester voldgade 10 København V”,将其发送给地理编码器,并使用我得到的纬度和经度在谷歌地图中显示。现在我想找到这个酒吧附近的地方并显示它们。所以
      Vester voldgade 10
      在您的数据库中,您想找到Vester voldgade 10附近的其他酒吧吗?例如,是的。但是它也可以是用户指定的地址,然后返回1公里或500码内的所有结果。这是一个纯SQL问题,不是Google Maps或PHP。你从哪里获得centerlat?你读了整个帖子吗?(包括代码下面的注释)?抱歉,我一定跳过了。我想保存我的lat/long,这是个好主意。谢谢,我会试试的。