我有一个网站,使用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用于空间数据的例子。
我的普通SELECT代码是:
$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等。
另一种选择是返回使用两个字段作为坐标,但这使得以后进行距离测量变得更加困难。
知道如何提取纬度和经度吗?
答案 0 :(得分:0)
经过多次挫折后,我设法解决了这个问题。您必须在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>";
}
}
?>