使用 MySQL 'POINT' 和 PHP 通过表单插入纬度和经度点

Using MySQL 'POINT' and PHP to insert Latitude and Longitude points through a form

我正在制作一个基于网络的应用程序,允许用户根据他们的输入创建路线。用户将 waypoints 添加到 google 地图并获取纬度和经度点并将其复制到网站上的 table,然后使用 MySQL 将数据发送到 MySQL 数据库=35=]。

我在将纬度和经度点添加到我的 MySQL 数据库时遇到了问题。我正在使用数据类型 'POINT'。但是,当我将点发送到数据库时,出现错误 "Cannot get geometry object from data you send to the GEOMETRY field"。

我花了好几天时间研究这个错误。我尝试添加空间索引,但 MySQL 不允许我这样做。我尝试更改 table 以便将该行更改为 update table set point_latlon = POINT(lat lon) 但它告诉我未定义纬度,我找不到解决方案。

我真的被如何修复这个错误困住了,已经用尽了我所有的资源。

这是我的 table:

CREATE TABLE user_input (
  point_id not null primary key auto_increment,
  point_desc varchar(40),
  point_LatLon not null point
);

这是我的插入语句:

$sql = "INSERT INTO user_input (point_desc, point_latLon) VALUES ('$_GET[waypoint_in_Desc]', 'GeomFromText($_GET[waypoint_in_LatLon])') ;";

这是我第一次 post 如有遗漏或格式不正确,我深表歉意 post。提前致谢。

你需要这样的东西

SET point_LatLon = GeomFromText('POINT(45.1234 123.4567)')

其中传递给GeomFromText的参数是一个字符串,如

POINT(45.1234 123.4567)

我发现如果我有两个数字参数,这种构造会很好地工作,其中 ? 是那些 lat 和 lon 参数的占位符。 CONCAT 函数拼凑出所需的文本字符串。

GeomFromText( CONCAT('POINT(', ?, ' ', ?, ')') ) 

在 MySQL 版本 5.7.4(尚未普遍可用)之前的版本中,您无法在 InnoDB table 中创建空间索引。如果你想要一个空间索引,你需要为你的 table 使用 MyISAM 访问方法。这有点麻烦。

这是一篇关于为此目的使用地理空间的文章。 http://www.plumislandmedia.net/mysql/using-mysqls-geospatial-extension-location-finder/