贴有一点,我将会执行计算 lat / 长对,哪些数据类型是最适合使用 MySQL 数据库?

2008-10-01 19:18:13
问题评论:

我打算在不久的将来做相同。基于位置的编程,我假定?该应用程序是什么?

我发现此链接很有用︰ howto-use-mysql-spatial-ext.blogspot.com/2007/11/...它可能有点旧,但是它包含的完整说明,包括示例。

回答:

用 GIS 使用 MySQL 的空间扩展

您是否有任何其他链接到示例或任何其他信息的最佳方式,开始使用它们?

超,谢谢 !

MYSQL 空间是一个不错的选择,但仍有明显的限制和警告 (截止到 6)。请参阅我下面的答案...

@James Schek 是合适的。另外,MySQL does 所有的计算使用欧式几何,因此它并不代表实际用例的 lat/lng。

Google 提供的开始到结束与 Google 地图的"存储定位器"应用程序示例的 PHP/MySQL 解决方案。在此示例中,他们 lat/lng 将值存储为"浮动",长度为"10,6"

http://code.google.com/apis/maps/articles/phpsqlsearch.html

Google 显然不了解浮点规范的工作原理︰ FLOAT(10,6)离开 4 位数的坐标的整数部分。并不对,符号不记数-,来自 (卸载) 签名特性。

我认为 Google 的 @AlixAxel 知道正在进行的工作。因为它表明:"与 Google 地图的当前缩放功能,您只需要 6 位精度小数点后。让存储 6 个数字的小数点后, 加上最多 4 位十进制数字,例如-123.456789度前的字段。"。如果符号模式将1234,567890检查。因此没有问题。

@1。 44 mb: 1234年吗?这并不是有效的坐标,我不要追随...

@AlixAxel 他关闭计数的编号的顺序;不使用实际坐标...

Laravel 使用Double数据类型

MySQL 的空间扩展是最佳的选择,因为您的空间运算符和索引的完整列表供您选择。对空间索引可以用来执行基于距离的计算速度非常快。请记住,从 6.0 中,空间的扩展是仍未完成。我不记下 MySQL 空间,仅让您知道这些陷阱之前对此太远相处得。

如果您正在处理严格点和仅距离函数,这是很好。如果需要进行任何计算多边形、 线条或 Buffered 点,空间运算符并不会提供精确的结果,除非您使用"与"运算符。看到在顶部的21.5.6警告。关系如包含内,或相交使用 MBR,不精确的几何形状 (如椭圆被当作一个矩形)。

此外,在 MySQL 空间距离是第一个几何图形的单位相同。这意味着如果您使用的十进制的度,距离测量是以十进制的度。这将使它很难获得精确的结果,为进一步获得赤道。

重申︰ MySQL 空间扩展不适合计算极圈地球纬度/经度所表示的曲面上的点之间的距离。他们距离函数等,才在笛卡儿、 平面,坐标上有用。

此外应注意防止几何列使用了 mysqldump 的 bug 由来已久。bugs.mysql.com/bug.php?id=43544

在 5.6.21 中修复的错误

当我这样做为导航数据库生成的 ARINC424 我做了大量的测试和回头看代码时,我使用了 DECIMAL(18,12) (实际上是 NUMERIC(18,12) 因为它 firebird)。

浮点数和双精度数并不精确,可能会导致舍入误差,这可能是非常不好的事情。我不记得我发现有问题的任何实际数据,但我可以相当肯定无法在浮点数或双精度准确存储可能会导致问题

点是,当使用度或弧度为单位我们知道的值的范围和小数部分需要大多数的数字。

MySQL 空间扩展是一个很好的替代方案,因为他们遵循OpenGIS 几何模型因为我需要让我的数据库可移植,我没有使用它们。

基本上它取决于您需要为您的位置精度。使用双则将有 3.5nm 精度。DECIMAL(8,6)/(9,6) 转到 16 厘米。 浮点数为 1.7 米...

这非常有趣的表具有的更完整列表︰ http://mysql.rjweb.org/doc.php/latlng :

Datatype               Bytes            Resolution

Deg*100 (SMALLINT)     4      1570 m    1.0 mi  Cities
DECIMAL(4,2)/(5,2)     5      1570 m    1.0 mi  Cities
SMALLINT scaled        4       682 m    0.4 mi  Cities
Deg*10000 (MEDIUMINT)  6        16 m     52 ft  Houses/Businesses
DECIMAL(6,4)/(7,4)     7        16 m     52 ft  Houses/Businesses
MEDIUMINT scaled       6       2.7 m    8.8 ft
FLOAT                  8       1.7 m    5.6 ft
DECIMAL(8,6)/(9,6)     9        16cm    1/2 ft  Friends in a mall
Deg*10000000 (INT)     8        16mm    5/8 in  Marbles
DOUBLE                16       3.5nm     ...    Fleas on a dog

希望这能帮助。

非常有用,谢谢 !

请输入您的翻译

What is the ideal data type to use when storing latitude / longitudes in a MySQL database?

确认取消