Javascript 使用AJAX将给定位置与SQL数据库中存储的地理代码进行比较
简化问题: 我想将数据库中存储的位置与定义的位置进行比较,如果它们之间的距离在1000米以内,则显示结果。我需要即时的结果,所以可能需要使用AJAX 解释和我目前的位置: 我有一个数据库,其中有一份人员名单,以及他们所在的地理编码位置: 我希望能够循环使用这些方法,将它们与定义的位置进行比较,检索位于定义位置特定范围内的位置(所有这些都使用AJAX,以便立即显示结果) 到目前为止,我有以下几点:Javascript 使用AJAX将给定位置与SQL数据库中存储的地理代码进行比较,javascript,php,jquery,mysql,ajax,Javascript,Php,Jquery,Mysql,Ajax,简化问题: 我想将数据库中存储的位置与定义的位置进行比较,如果它们之间的距离在1000米以内,则显示结果。我需要即时的结果,所以可能需要使用AJAX 解释和我目前的位置: 我有一个数据库,其中有一份人员名单,以及他们所在的地理编码位置: 我希望能够循环使用这些方法,将它们与定义的位置进行比较,检索位于定义位置特定范围内的位置(所有这些都使用AJAX,以便立即显示结果) 到目前为止,我有以下几点: <script> $(document).ready(function() { ge
<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,这让我绞尽脑汁想如何将两者结合起来 假设你有两件事:
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功能确实可以满足您的需求。(我不熟悉它。)但是作为客户端,您必须为它提供整个数据库表。这可能太多,无法存储在页面上。