Javascript 使用AJAX将给定位置与SQL数据库中存储的地理代码进行比较

Javascript 使用AJAX将给定位置与SQL数据库中存储的地理代码进行比较,javascript,php,jquery,mysql,ajax,Javascript,Php,Jquery,Mysql,Ajax,简化问题: 我想将数据库中存储的位置与定义的位置进行比较,如果它们之间的距离在1000米以内,则显示结果。我需要即时的结果,所以可能需要使用AJAX 解释和我目前的位置: 我有一个数据库,其中有一份人员名单,以及他们所在的地理编码位置: 我希望能够循环使用这些方法,将它们与定义的位置进行比较,检索位于定义位置特定范围内的位置(所有这些都使用AJAX,以便立即显示结果) 到目前为止,我有以下几点: <script> $(document).ready(function() { ge

简化问题:

我想将数据库中存储的位置与定义的位置进行比较,如果它们之间的距离在1000米以内,则显示结果。我需要即时的结果,所以可能需要使用AJAX

解释和我目前的位置:

我有一个数据库,其中有一份人员名单,以及他们所在的地理编码位置:

我希望能够循环使用这些方法,将它们与定义的位置进行比较,检索位于定义位置特定范围内的位置(所有这些都使用AJAX,以便立即显示结果)

到目前为止,我有以下几点:

<script>
$(document).ready(function() {

geocoder = new google.maps.Geocoder();

var saddress = $('#postcode').val(); //get postcode from form

geocoder.geocode( { 'address': saddress}, function(results,status) {
    if( status == google.maps.GeocoderStatus.OK ) { //waits for results
    var latlng = results[0].geometry.location; //gets location
    var locationlatlng = new google.maps.LatLng(52.6628780, -3.1380000);

    var distance = google.maps.geometry.spherical.computeDistanceBetween(latlng, locationlatlng); //gets distance between the two geocodes
    }
});



})//end ready
</script> 

$(文档).ready(函数(){
geocoder=新的google.maps.geocoder();
var saddress=$('#postcode').val();//从表单获取邮政编码
geocoder.geocode({'address':saddress},函数(结果,状态){
如果(status==google.maps.GeocoderStatus.OK){//等待结果
var latlng=results[0]。geometry.location;//获取位置
var locationlatlng=新的google.maps.LatLng(52.6628780,-3.1380000);
var distance=google.maps.geometry.spherical.ComputedDistanceBeween(latlng,locationlatlng);//获取两个地理代码之间的距离
}
});
})//准备就绪
这个脚本给出了表单上给出的邮政编码(第4行)和定义位置(
var locationlatlng
)之间的距离,并且是实现我想要的部分

现在,我不使用表单中的邮政编码,而是使用数据库中的地理编码,并将其与定义的位置进行比较。如果它们落在一定距离内(例如1000米),我希望能够使用数据库中的那一行在网页上显示信息


我的绊脚石是如何从数据库中取出相应的行。我找到这两个位置之间距离的唯一方法是使用google函数
computedIstanceBeween()
,但这是javascript,对数据库的AJAX调用是PHP,这让我绞尽脑汁想如何将两者结合起来

假设你有两件事:

  • 纬度和经度值的数据库表
  • 用于比较的经纬度“点”
  • 然后可以使用SQL查询计算距离。我有一些相关的东西,是为MS SQL Server编写的(因此我肯定它需要一些MySQL的翻译,尽管它看起来是可用的),如下所示:

    SELECT
      Name,
      Address,
      City,
      State,
      Latitude,
      Longitude,
      (
        ACOS(
          COS(@center_latitude * (PI()/180)) *
          COS(@center_longitude * (PI()/180)) *
          COS(Latitude * (PI()/180)) *
          COS(Longitude * (PI()/180)) +
          COS(@center_latitude * (PI()/180)) *
          SIN(@center_longitude * (PI()/180)) *
          COS(Latitude * (PI()/180)) *
          SIN(Longitude * (PI()/180)) +
          SIN(@center_latitude * (PI()/180)) *
          SIN(Latitude * (PI()/180))
        ) *
        (
          (@equatorial_radius * @polar_radius) /
          (
            SQRT(
              (@equatorial_radius * @equatorial_radius) -
              (
                (
                  (@equatorial_radius * @equatorial_radius) -
                  (@polar_radius * @polar_radius)
                ) *
                (
                  COS(@center_latitude) *
                  COS(@center_latitude)
                )
              )
            )
          )
        )
      ) AS DistanceInMeters
    FROM
      Places
    WHERE
      DistanceInMeters <= @search_radius
    
    选择
    名称
    地址:,
    城市
    国家,,
    纬度,
    经度,
    (
    ACOS(
    COS(@center_lation*(PI()/180))*
    COS(@center_longitude*(PI()/180))*
    COS(纬度*(π()/180))*
    COS(经度*(PI()/180))+
    COS(@center_lation*(PI()/180))*
    SIN(@中心经度*(PI()/180))*
    COS(纬度*(π()/180))*
    SIN(经度*(PI()/180))+
    SIN(@center_lation*(PI()/180))*
    正弦(纬度*(π()/180))
    ) *
    (
    (@赤道半径*@极半径)/
    (
    SQRT(
    (@赤道半径*@赤道半径)-
    (
    (
    (@赤道半径*@赤道半径)-
    (@polar_radius*@polar_radius)
    ) *
    (
    COS(中心纬度)*
    COS(中心纬度)
    )
    )
    )
    )
    )
    )如距离
    从…起
    地点
    哪里
    
    距离米你在这里组合了太多的问题。将其拆分为更小、更容易解决的组件。您是否在询问如何在AJAX调用中向服务器传递值?如何在服务器上读取该值?如何从数据库中读取值?如何对此特定逻辑执行比较?如何从AJAX调用返回结果?如何在客户端代码中使用该结果?这里有许多单独的组件。一次只关注一个。你卡住了哪一个?把注意力集中在问题中的那个问题上,去掉剩下的。它太宽了。注意,将立即编辑!哇,多好的回答啊!我从来不知道你可以将如此复杂的查询放入SQL,所以不需要Google Javascript函数?准确性不是最重要的,所以这应该是一个好的解决方案。不过现在是周六晚上1点30分/周日早上,我已经做了14个小时了,所以我明天会调查一下,然后再给你回复。但是谢谢你的回答,我一定会跟进的@乔瓦尼:我想你可以去掉一些数学来简化它,牺牲准确性来提高计算速度。不幸的是,我早就忘记了方程的哪一部分完成了什么(比如赤道隆起)。不过,在谷歌上搜索两个地理坐标之间的距离可能会有所帮助。其他人可能有更简单的方程式。现在,谷歌的JavaScript功能确实可以满足您的需求。(我不熟悉它。)但是作为客户端,您必须为它提供整个数据库表。这可能太多,无法存储在页面上。