我正在制作一个基于Web的应用程序,允许用户根据他们的输入创建路由。用户将航点添加到谷歌地图,并获取纬度和经度点并将其复制到网站上的表格中,然后使用PHP将数据发送到MySQL数据库。
我在将纬度和纬度点添加到我的 MySQL 数据库时遇到问题。我正在使用数据类型"POINT"。但是,当我将点发送到数据库时,出现错误"无法从发送到 GEOMETRY 字段的数据中获取几何对象"。
我花了几天时间研究这个错误。我尝试添加空间索引,但 MySQL 不允许我这样做。我尝试更改表格,以便将该行更改为update table set point_latlon = POINT(lat lon)
但它告诉我 lat 未定义,我找不到解决方案。
真的被困在如何解决此错误上,并且已经用尽了我所有的资源。
这是我的表:
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])') ;";
这是我第一次发帖,如果我遗漏了任何东西或没有正确格式化我的帖子,我们深表歉意。提前谢谢。
你需要类似的东西
SET point_LatLon = GeomFromText('POINT(45.1234 123.4567)')
其中传递给GeomFromText的参数是一个字符串,例如
POINT(45.1234 123.4567)
我发现如果我有两个数字参数,这种结构效果很好,其中?
是这些纬度和lon参数的占位符。 CONCAT 函数将所需的文本字符串拼凑在一起。
GeomFromText( CONCAT('POINT(', ?, ' ', ?, ')') )
碰巧您无法在 5.7.4 版之前的 MySQL 版本中的 InnoDB 表中创建空间索引(该版本尚未普遍发布)。如果需要空间索引,则需要对表使用 MyISAM 访问方法。这有点麻烦。
这是一篇关于为此目的使用地理空间的文章。 http://www.plumislandmedia.net/mysql/using-mysqls-geospatial-extension-location-finder/