使用 PHP 从 MySQL 读取空间数据


Reading spatial data from MySQL using PHP

我有一个使用PHP和MySQL管理兴趣点的网站。我决定查看MySQL的空间数据功能,而不是将坐标保存在两个单独的字段中。

我设法使用以下方法将数据插入数据库:

// Update new records
$query = "UPDATE users SET users_address = :uaddress, users_placeid = :uplace, users_coords = POINTFROMTEXT(:location) "; 
$query .= "WHERE users_id = :uid ";
        // echo "Query: $query <br>";
        $stmt = $conn->prepare($query);
        $stmt->execute(array(':uaddress' => $users_address,
                               ':uplace' => $users_placeid,
                             ':location' => $location,
                                  ':uid' => $users_id));
        $result = $stmt;

现在我想使用 PHP 和 PDO 读取数据并获取坐标。互联网上似乎没有任何使用PDO,PHP和MySQL作为空间数据的例子。

我的正常选择代码是:

$stmt = $conn->prepare("SELECT * FROM users WHERE users_id = :uid ");
$stmt->execute(array(':uid' => $users_id));
$result = $stmt;
if ($result->rowCount() > 0) {
  foreach($result as $row) {
    $users_address           = $row['users_address'];
    $users_placeid           = $row['users_placeid'];
    $users_lat               = $row['x.users_coords'];
     echo "Lat: $users_lat <br>";
  } 
}

我尝试了各种选项,每个选项都会出错。上面的代码返回:

注意:未定义的索引:x.users_coords

如果可能的话,我想坚持使用 SELECT * 而不是 SELECT users_address 等。

另一种选择是恢复使用两个字段作为坐标,但这会使以后进行距离测量等变得更加困难。

知道如何提取纬度和经度吗?

在经历了很多挫折之后,我设法解决了这个问题。您必须在 SELECT 字符串中指定空间数据,然后才能轻松读取数据。以下是读取数据的完整代码:

$stmt = $conn->prepare("SELECT *, X(users_coords) AS users_lat, Y(users_coords) AS users_long FROM users WHERE users_id = :uid ");
$stmt->execute(array(':uid' => $users_id));
$result = $stmt;
if ($result->rowCount() > 0) {
  foreach($result as $row) {
    $users_address           = $row['users_address'];
    $users_placeid           = $row['users_placeid'];
    $users_lat               = $row['users_lat'];
    // echo "Lat: $users_lat <br>";
    $users_long              = $row['users_long'];
    // echo "Long: $users_long <br>";
  } 
}
?>