mysql存放lng lat_使用空间点类型在MySQL中存储Lat Lng值

使用的技术:MySQL 5.1和PHP 5.3

我正在为我正在编写的网站设计一个新的数据库。我正在寻找现在存储纬度和经度值的最佳方法。

过去,我一直使用DECIMAL并使用PHP / MySQL选择以下形式:

SQRT(POW(69.1 * (fld_lat - ( $lat )), 2) + POW(69.1 * (($lon) - fld_lon) * COS(fld_lat / 57.3 ), 2 )) AS distance

查找最近的匹配地点。

开始阅读有关新技术的更多信息,我想知道是否应该使用Spatial

Extensions。http://dev.mysql.com/doc/refman/5.1/en/geometry-property-

functions.html

但是,地面上的信息非常稀少,并且对如何存储数据存在疑问。我现在将POINT用作数据类型,而不是使用DECIMAL?

另外,一旦存储为POINT,就很容易从中获取Lat Lng值,以防万一我想在地图上绘制该Lat Lng值,或者我还应该另外将lat

lng存储为DECIMALS?

我知道我应该使用PostGIS,因为这里的大多数帖子都说我只是不想学习新的数据库!

跟进

我一直在玩新的POINT类型。我已经可以使用以下方法添加Lat Lng值:

INSERT INTO spatialTable (placeName, geoPoint) VALUES( "London School of Economics", GeomFromText( 'POINT(51.514 -0.1167)' ));

然后,我可以使用以下命令从Db中获取Lat和Lng值:

SELECT X(geoPoint), Y(geoPoint) FROM spatialTable;

一切看起来不错,但是距离的计算是我需要解决的问题。显然,MySQL具有距离函数的占位符,但暂时不会发布。在几篇文章中,我发现我需要做以下类似的事情,但是我认为我的代码有点错误:

SELECT

placeName,

ROUND(GLength(

LineStringFromWKB(

LineString(

geoPoint,

GeomFromText('POINT(52.5177, -0.0968)')

)

)

))

AS distance

FROM spatialTable

ORDER BY distance ASC;

在此示例中,geoPoint是使用上面的INSERT输入到数据库中的POINT。

GeomFromText('POINT(52.5177, -0.0968)' 是我想计算距离的Lat Lng值。

更多跟进

愚蠢的是,我只是没有真正考虑就把SQL的ROUND部分放进去了。把这个拿出来给我:

SELECT

placeName,

(GLength(

LineStringFromWKB(

LineString(

geoPoint,

GeomFromText('POINT(51.5177 -0.0968)')

)

)

))

AS distance

FROM spatialTable

ORDER BY distance ASC

这似乎给了我所需的正确距离。

我想目前唯一需要回答的就是对我是否只是通过现在使用Spatial或使自己适应未来的想法使自己的生活变得困难…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值