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

使用MySQL';点';和PHP通过表单插入纬度和经度点,php,mysql,geospatial,Php,Mysql,Geospatial,我正在制作一个基于web的应用程序,允许用户根据输入创建路由。用户将航路点添加到谷歌地图,获取纬度和经度点,并将其复制到网站上的表中,然后使用PHP将数据发送到MySQL数据库 我在将lat和lon点添加到MySQL数据库时遇到问题。我正在使用数据类型“POINT”。但是,当我将点发送到数据库时,会出现错误“无法从发送到几何体字段的数据中获取几何体对象” 我花了好几天时间研究这个错误。我已经尝试添加空间索引,但MySQL不允许添加。我已尝试更改的表格,以便将该行更改为updatetable se

我正在制作一个基于web的应用程序,允许用户根据输入创建路由。用户将航路点添加到谷歌地图,获取纬度和经度点,并将其复制到网站上的表中,然后使用PHP将数据发送到MySQL数据库

我在将lat和lon点添加到MySQL数据库时遇到问题。我正在使用数据类型“POINT”。但是,当我将点发送到数据库时,会出现错误“无法从发送到几何体字段的数据中获取几何体对象”

我花了好几天时间研究这个错误。我已经尝试添加空间索引,但MySQL不允许添加。我已尝试更改的表格,以便将该行更改为
updatetable set point\u latlon=point(lat lon)
,但它告诉我lat未定义,我无法找到解决方案

我真的被困在如何修复这个错误上,已经耗尽了我所有的资源

这是我的桌子:

创建表用户输入(
点id非空主键自动增量,
点_desc varchar(40),
点_LatLon非空点
);
这是我的插入声明:

$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)
我发现,如果我有两个数值参数,这种构造效果很好,
是那些lat和lon参数的占位符。CONCAT函数将所需的文本字符串拼凑在一起

GeomFromText( CONCAT('POINT(', ?, ' ', ?, ')') ) 
在MySQL版本5.7.4之前的版本中,您可能无法在InnoDB表中创建空间索引(该版本尚未普遍提供)。如果需要空间索引,则需要对表使用MyISAM访问方法。这有点讨厌


这里有一篇关于为此目的使用地理空间的文章

我从来没有用过point,我用float表示我的lat和long points。我在数据库配置和实现中使用了谷歌文档,你看过了吗?代码中还有一个SQL可注入实例。我会看一下谷歌文档,因为我认为这将解决你90%的问题。你的第一个问题做得很好。欢迎来到堆栈溢出!为什么要使用
数据类型?我总是用浮子…谢谢!经过多次尝试和错误,这种方法最终没有奏效。我只是不断地遇到更多的小错误,并且从那时起,我就开始使用float作为我的数据类型。