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

时间:2015-03-07 16:36:17

标签: php mysql geospatial

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

我在将lat和lon点添加到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])') ;";

这是我第一次发帖,如果我遗漏了任何内容或者没有正确格式化我的帖子,那么道歉。提前谢谢。

1 个答案:

答案 0 :(得分:1)

你需要像

这样的东西
SET point_LatLon = GeomFromText('POINT(45.1234 123.4567)')

,您传递给GeomFromText的参数是

之类的字符串
POINT(45.1234 123.4567)

我发现如果我有两个数字参数,这种结构很有效,其中?是这些lat和lon参数的占位符。 CONCAT函数将所需的文本字符串拼凑在一起。

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

在版本5.7.4之前的MySQL版本(通常尚不可用)中,您无法在InnoDB表中创建空间索引。如果需要空间索引,则需要对表使用MyISAM访问方法。这有点令人讨厌。

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