Mysql POINT列用于距离搜索

弗劳伯特

是的,我知道这个问题曾经问过很多时间,但是从2012年开始,所有这些问题似乎都已经过时了,这些问题/答案都是基于这个问题,我试图用POINT列执行经典的搜索距离,但是我遇到了一些无法解决的麻烦。

我的POINT栏看起来像这样正常吗?

0x00000000010100000085B1852007052040C0B2D2A414684840

这是我所有的步骤,我看不到出什么问题了,我是根据最后一堆问题/答案来做的。

我将mariadb 10与Heideisql gui一起使用。

我有2个列lat和lon,我创建了一个geopoints POINT列,像这样填充geopoint:

 UPDATE  geoFRA 
SET     geopoints = GeomFromText(CONCAT('POINT (', lon, ' ', lat, ')'))

之后,我的geopoints列如下所示:

  0x00000000010100000085B1852007052040C0B2D2A414684840

然后我尝试以2种方式执行查询,首先尝试:

SET@lat = 48.88;
SET@lon = 2.34;

SELECT  *
FROM    geoFRA
WHERE   MBRContains(LineFromText(CONCAT(
        '('
        , @lon + 700 / ( 111.1 / cos(RADIANS(@lon)))
        , ' '
        , @lat + 700 / 111.1
        , ','
        , @lon - 700 / ( 111.1 / cos(RADIANS(@lat)))
        , ' '
        , @lat - 700 / 111.1 
        , ')' )
        ,geopoints)

再试一次:

SET@lat = 48.88;
SET@lon = 2.34;
SET @kmRange = 172; -- = 50 Miles

SELECT *, (3956 * 2 * ASIN(SQRT(POWER(SIN((@lat - abs(`lat`)) * pi()/180 / 2),2) + COS(@lat * pi()/180 ) * COS(abs(`lat`) *  pi()/180) * POWER(SIN((lon - `lon`) *  pi()/180 / 2), 2)))) as distance
FROM    `geoFRA`
WHERE   MBRContains(LineString(Point(@lat + @kmRange / 111.1, @lon + @kmRange / (111.1 / COS(RADIANS(@lat)))), Point(@lat - @kmRange / 111.1, @lon - @kmRange / (111.1 / COS(RADIANS(@lat))))), `geopoints`)
Order By distance

我开始认为存在mariadb不兼容的问题!还是我错过了什么?

谢谢你的帮助..,flau

朱利安·拉迪施(Julian Ladisch)
CREATE TABLE geoFRA (id int NOT NULL, geopoints point NOT NULL);
INSERT INTO geoFRA (id, geopoints) VALUES
(1, geomFromText('POINT(48 2)')),
(2, geomFromText('POINT(48 3)')),
(3, geomFromText('POINT(48.88 2.34)')),
(4, geomFromText('POINT(49 2)')),
(5, geomFromText('POINT(49 3)'));

SET @p=geomFromText('POINT(48.88 2.34)');
SELECT X(geopoints), Y(geopoints), asText(geopoints), ST_Distance(geopoints, @p) as d
FROM   geoFRA
ORDER BY d;

这将返回按距离排序的地理点。使用不带X(),Y()和asText()的地理点,将以众所周知的二进制(WKB)格式返回它们:http ://dev.mysql.com/doc/refman/5.7/en/gis-data-formats .html#gis-wkb-format

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MySQL搜索与相邻记录之间的单词距离

来自分类Dev

MySQL函数用于计算Haversine距离

来自分类Dev

MySQL搜索多列

来自分类Dev

MySQL过程用于在多列中搜索具有多个参数的表

来自分类Dev

MySQL搜索使用多列

来自分类Dev

在mysql表中搜索列?

来自分类Dev

搜索表的多列MySQL

来自分类Dev

MySQL搜索使用多列

来自分类Dev

在简洁列中的MYSql搜索

来自分类Dev

MYSQL-在多个列中搜索单词

来自分类Dev

MySQL中的多列REGEX搜索

来自分类Dev

在MySQL中搜索varchar列的最快方法

来自分类Dev

优化MySQL查询-多列搜索条件

来自分类Dev

在MySQL列中搜索多个值

来自分类Dev

MySQL多列搜索返回错误结果

来自分类Dev

MySQL / PHP精炼联接查询,用于搜索多个表

来自分类Dev

MySQL全文搜索不适用于某些单词

来自分类Dev

全文搜索不适用于mysql中的varchar

来自分类Dev

MySQL全文搜索不适用于左联接

来自分类Dev

在Google地图半径范围内的MySQL位置搜索-为什么我得到的距离错误?

来自分类Dev

按距离对邮政编码附近搜索进行排序(php / mysql)

来自分类Dev

MySQL-删除用于加入的ID列

来自分类Dev

在mysql中将IN用于结果时添加列

来自分类Dev

MySQL按天搜索

来自分类Dev

MySQL中的复杂搜索

来自分类Dev

高效的MySQL文本搜索

来自分类Dev

Mysql存储过程搜索

来自分类Dev

MySQL-全文搜索

来自分类Dev

PHP MySQL搜索选项