【问题标题】:MySQL storing google maps lat/long dataMySQL存储谷歌地图纬度/经度数据
【发布时间】:2011-09-18 14:02:06
【问题描述】:

我创建了一个地图,允许用户绘制多个标记,以便将它们存储在数据库表中。最初的计划是在一张地图上存储多行,如下所示:

------------------------------------
| mapentryid | mapid | Long | Lat  | 
------------------------------------
| 1          | 1     | X.XX | X.XX |
| 2          | 1     | X.XX | X.XX |
| 3          | 1     | X.XX | X.XX |
| 4          | 2     | X.XX | X.XX |
| 5          | 2     | X.XX | X.XX |
| 6          | 2     | X.XX | X.XX |
| 7          | 2     | X.XX | X.XX |
------------------------------------

但我后来发现您可以将multilinestring 存储在 MySQL 中,这听起来很适合我想要的东西(我认为?)

我可以使用以下 SQL 查询格式正确插入数据:

INSERT INTO table (LatLng)
VALUES (
         MultiLineString(
            LineString(Point(x),Point(y)),
            LineString(Point(x),Point(y)),LineString(Point(x),Point(y))
       )

这添加了多行字符串 OK,尽管它们实际上如下所示:

问题是,以上可以吗?如果是这样,我怎样才能将这些数据转换回我能够在 Google 地图上显示的内容?

【问题讨论】:

  • 为什么将坐标存储为多行字符串更好?如果您希望能够检索例如哪些用户存储了彼此附近的坐标,或者其他什么?
  • 我建议您使用以下字段定义:latitude decimal(18,7) DEFAULT NULLlongitude decimal(18,7) DEFAULT NULL
  • @Stefan,我只是假设我应该使用 MySQL 的内置函数/数据类型?
  • @Jelly,我最初确实认为,但后来发现这些不同的数据类型我认为使用起来可能很有趣,也许会让我的生活更轻松..
  • 囚徒:只对行进行选择可能比对字符串中的嵌套数据进行选择要容易得多。

标签: mysql google-maps geolocation multilinestring


【解决方案1】:

为什么不使用 POINT 数据?

INSERT INTO geoTable (mapentryid, mapid, coord) VALUES (
    1, 1, GeomFromText('POINT(15 20)')
);

我总是使用'Well-Known Text (WKT) Format' 在 MySQL 中启用地理空间查询,它们与其他系统最兼容。

查询存储的值:

SELECT mapentryid, mapid, X(coord), Y(coord) FROM geoTable;

【讨论】:

  • 谢谢,我最终选择了这个!
猜你喜欢
  • 2016-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-29
相关资源
最近更新 更多