【问题标题】:Only show results within range chosen by user仅显示用户选择范围内的结果
【发布时间】:2015-02-10 12:18:50
【问题描述】:

我有一个存储经纬度坐标的数据库表。用户输入他们的邮政编码并应选择一个范围,例如 5 英里,然后应显示数据库中存储的 5 英里范围内的所有坐标。我已设法将用户输入的邮政编码转换为坐标,但我发现很难在下一部分中仅显示所选英里范围内的结果。

<?php
$postcode = urlencode("$_POST[postcode]"); // post code to look up in this case status however can easily be retrieved from a database or a form post
$request_url = "http://maps.googleapis.com/maps/api/geocode/xml?address=".$postcode."&sensor=true"; // the request URL you'll send to google to get back your XML feed
$xml = simplexml_load_file($request_url) or die("url not loading");// XML request
$status = $xml->status;// GET the request status as google's api can return several responses
if ($status=="OK") {
    //request returned completed time to get lat / lang for storage
    $lat = $xml->result->geometry->location->lat;
    $long = $xml->result->geometry->location->lng;

}
echo "$lat,$long";

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}


$sql = "SELECT * FROM location";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
// output data of each row
while($row = mysqli_fetch_assoc($result)) {
    echo " Hobby: " . $row["lat"]. " Location: " . $row["long"]. "<br>";
    $lat1=$row["lat"];
    echo $lat1;
}
} else {
echo "Sorry, there are no meetups yet you can create one here ";
}

mysqli_close($conn);

     ?>

【问题讨论】:

标签: php html mysql database coordinates


【解决方案1】:

如果您有一个 mySQL 数据库,请查看这些问题,它们处理相同的问题。

Mysql within distance query

https://gis.stackexchange.com/questions/31628/find-points-within-a-distance-using-mysql

您需要创建一个 SQL 语句,其中一定距离内的所有坐标都是结果。它可能看起来像:

SELECT *, 
   ( 3959 * acos( cos( radians($lat) ) 
   * cos( radians( lat ) ) 
   * cos( radians( lng ) - radians($lng) ) 
   + sin( radians($lat) ) 
   * sin( radians( lat ) ) ) ) AS distance 
FROM locations 
HAVING distance < $miles 
ORDER BY distance 
LIMIT 0, 20

如果您有 postgres 数据库,则可以使用 postGIS 扩展。存在一个函数 ST_DWithin,如果坐标在一定距离内,则返回 true。

【讨论】:

  • $lat, $long, $miles 是用户的变量:lat, lng 是数据库中列的名称
  • 由于某种原因,我不断收到错误“检查与您的 MySQL 服务器版本相对应的手册,以了解在 'long 附近使用正确的语法 - 弧度 (0.0116469) ) + sin( 弧度 (51.5556739) ) * sin( radi' 在第 4 行"
  • 检查所有变量的正确拼写以及是否所有的括号都在那里。好像有解释错误
  • 是的,我已经检查过了,似乎没有任何错误。与上面相同的代码我已经相应地更改了变量名
  • 已修复,现在为数据库列名添加了 `
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-17
  • 1970-01-01
  • 1970-01-01
  • 2015-08-23
  • 1970-01-01
  • 2011-09-21
  • 1970-01-01
相关资源
最近更新 更多