【问题标题】:How can I store two API values in MYSQL Point如何在 MYSQL Point 中存储两个 API 值
【发布时间】:2021-06-26 13:21:49
【问题描述】:

我从 PHP 中的 API 接收 lan 和 lot 数据,并使用 ($jsonData[0]['lat']);$jsonData[0]['lon']); 从响应中提取它们。如何将它们添加到我的 MySQL 列中的两个 location 作为 POINT 值?

【问题讨论】:

  • 您是否有特定原因不简单地将这两个单独的值存储在数据库中,以便在应用程序需要时以您希望的任何形式提供原始数据?
  • 不,没有 - 我认为 Point 是用于位置数据的?
  • 我总是更喜欢独立存储数据,而不管数据的使用方式。为您提供未来的灵活性。但这实际上取决于您的用例。您希望对这些数据执行什么样的操作?
  • 稍后我将使用这些数据在leaflet.js 地图上显示数据库条目
  • 我没有使用过那个库,但是从演示中我可以看到,坐标是单独提供的。所以我主张将它们分开存放。接收单独的坐标,将它们连接成一个点,只是从该点提取单独的坐标是没有意义的。

标签: php mysql geospatial opengis


【解决方案1】:

MySQL 的几何材料提供ST_GeomFromText() function。你可以这样使用它。

ST_GeomFromText('POINT(40.7488 -73.9854)')

注意'POINT(40.7488 -73.9854)' 是一个文本字符串,两个数字之间没有逗号。

如果你做这样的事情来制作这些文本字符串之一

$pointText = "POINT(" . $jsonData[0]['lat'] . " " .  $jsonData[0]['lon'] . ")";

然后你可以这样插入:

INSERT INTO tbl (geocolumn) VALUES (ST_GeomFromText(?));

以$pointText为参数。

对于 8 之前的 MySQL 版本,我同意 @El_Vanja 的建议,即使用单独的 FLOAT 列作为纬度/经度。但是在版本 8 中,MySQL 能够处理球面坐标系和笛卡尔坐标系,因此空间索引非常有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多