我试图开发一个小网站,它从数据库中按设定的半径检索结果,并将其放在地图上。我使用谷歌地图api从那里获得lat和long搜索条件,将这些传递给我的php脚本,该脚本查询数据库并返回结果集作为JSON对象。
我在使用json向php发送lat和long时遇到了一个小问题。
我的主要问题是,我搜索数据库的sql似乎是错误的,因为它只检索数据库中的前10个结果。我希望它返回搜索点半径内的前10个结果。
这是我的ajax代码
function showCarPark(location)
{
var lat = location.lat();
var lng = location.lng();
//alert("Lat: " +lat.toFixed(6));
//alert("Lng: " +lng.toFixed(6));
document.getElementById('carParkResults').innerHTML = "";
var criterion = document.getElementById("address").value;
var count = 0;
$.ajax({
url: 'process.php',
type: 'GET',
data: "lat=" + lat + "&lng=" + lng,
dataType: 'json',
success: function(data)
{
jQuery.each(data, function()
{
$('<p>').text("Car Park: " + data[count].name).appendTo('#carParkResults');
placeCarParks(data[count].postcode,data[count].name, data[count].street, data[count].type);
count++;
});
},
error: function(e)
{
//called when there is an error
console.log(e.message);
alert("error" + e.message);
}
});
这是我的php脚本
$rad = 20;
$lat = $_GET['lat'];
$lng = 1.4681464; //put a temporary number in as it wont pass the lng in the JSON
$sql="SELECT *, (3959 * acos(cos(radians('".$lat."')) * cos(radians(lat)) * cos( radians(long) - radians('".$lng."')) + sin(radians('".$lat."')) *
sin(radians(lat))))
AS distance
FROM carpark HAVING distance < 15 ORDER BY distance LIMIT 0 , 10";
$result = mysql_query($sql);
while($r = mysql_fetch_assoc($result)) $rows[] = $r;
echo json_encode($rows);
我表中的列称为lat,感谢您的帮助。
拉里·乌尔曼在他的书《PHP 5高级:可视化快速专业指南》中做了非常相似的事情
查看他的示例代码,尝试这样计算距离:
ROUND(DEGREES(ACOS(SIN(RADIANS($lat))
* SIN(RADIANS(latitude))
+ COS(RADIANS($lat))
* COS(RADIANS(latitude))
* COS(RADIANS($long - longitude)))) * 69.09) AS distance
我使用have没有问题。伊林的回答有误导性。下面是一个查找到纽约市距离的正确查询示例:
SELECT *, (3959 * acos(cos(radians('40.7142')) * cos(radians(latitudeColName)) * cos( radians(longitudeColName) - radians('-74.0064')) + sin(radians('40.7142')) * sin(radians(latitudeColName)))) AS distance FROM myTable HAVING distance < 15 ORDER BY distance LIMIT 0 , 10
将jQuery请求中的行更改为使用以下符号{name:value,name:value}:
data: {lat : lat, long : long},
对于您的情况,尝试使用WHERE
而不是have
SELECT *, (3959 * acos(cos(radians('".$lat."')) * cos(radians(lat)) * cos( radians(long) - radians('".$lng."')) + sin(radians('".$lat."')) *
sin(radians(lat))))
AS distance
FROM carpark WHERE distance < 15 ORDER BY distance LIMIT 0 , 10
这个问题不同于常规的mysql lat/long、基于radius的数据获取 例如,我想搜索包含以下列的mysql数据库表- 现在,如果用户具有lat/long(29.941095/77.812424),则希望知道这些项目中的哪些可以在其位置提供服务。那么我将如何使用php获取结果
我在学习PHP,我创建了一个页面来用MySQL显示我的数据表。我想用这些数据进行分页、搜索和排序。 我写了一些条件来搜索和排序。但它不起作用。我的传呼似乎工作得很好。 当我运行它时,它说:警告:mysqli_fetch_array()期望参数1是mysqli_result。你能帮助我吗?非常感谢。
我运行下面的脚本时出错,我不知道如何更正它。本质上,我在mysql中有一个名为gamestbl的表。我希望用户输入一些关于游戏名称或游戏描述的关键词,然后php将正确的游戏显示为下拉列表(理想情况下)甚至信息表。 错误显示: 警告:mysqli_query()至少需要2个参数,其中1个参数在第29行的C:\xampp\htdocs\introductiongphp\Email.php中给出 警告:
问题内容: 我正在尝试根据用户输入创建动态搜索查询。 用户可以不填写任何,部分或全部字段。 该查询在表中搜索符合所有要求的记录。 现在,我已经完成了研究,并且发现了执行此操作的多种方法。但是它们都不起作用,如果起作用了,那么它们就不可行了。 试图: 目前,我正在创建这样的查询: 该查询有效,但前提是您填写了所有字段。 我是从stackoverflow文章中得到的,我再也找不到了,它说: 如果用户已
我不理解高级REST客户机(它取代了传输客户机)和Spring Data ElasticSearch之间的关系。 有一些教程(https://www.baeldung.com/spring-data-elasticsearch-tutorial)展示了如何使用像getSomethingById()这样的自动实现方法进行JPA风格的查询。他们利用这个接口: 所以如果我想使用最新的官方客户端,对我来说
我是mysql和php的新手。 一直致力于为用户创建一个带有表的数据库。 我已经成功地将用户添加到数据库中,他们的密码是md5(是的,我知道它不安全),它不会在线启动。 我的问题是,如何根据用户正确的用户名和密码登录。 这是我的密码 我的逻辑是taht查询运行后,它将返回true或false。 如果为真,则显示成功登录,否则不成功。 然而,即使我输入了正确的用户名和密码,我仍然会收到一条不成功的登