【问题标题】:Using MySQL 'POINT' and PHP to insert Latitude and Longitude points through a form使用 MySQL 'POINT' 和 PHP 通过表单插入纬度和经度点
【发布时间】:2015-05-09 03:27:21
【问题描述】:

我正在制作一个基于 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])') ;";

如果我遗漏了任何内容或未正确格式化我的帖子,这是我第一次发帖致歉。提前致谢。

【问题讨论】:

  • 我从来没有用过点,我用浮点数来表示我的经纬度点。我使用谷歌文档进行数据库配置和实现,你看过那些吗?您的代码中也有一个 SQL 可注入实例。我会查看谷歌文档,因为我认为这将解决您 90% 的问题。 developers.google.com/maps/articles/phpsqlsearch_v3
  • 第一个问题做得很好。欢迎使用 Stack Overflow!
  • 为什么使用point数据类型?我总是使用 FLOAT...

标签: php mysql geospatial


【解决方案1】:

你需要类似的东西

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 访问方法。这有点麻烦。

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

【讨论】:

  • 谢谢!经过大量的试验和错误,这种方式最终没有奏效。我只是不断地遇到更多的小错误,因此只使用浮点数作为我的数据类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 2018-02-15
  • 1970-01-01
  • 2022-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多