gpt4 book ai didi

Mysql POINT列用于距离搜索

转载 作者:行者123 更新时间:2023-11-29 12:36:42 26 4
gpt4 key购买 nike

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

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

0x00000000010100000085B1852007052040C0B2D2A414684840

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

我使用 mariadb 10 和 Heideisql gui。

我有 2 列经纬度,我创建了一个地理点 POINT 列,像这样填充地理点:

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

之后我的地理点列如下所示:

  0x00000000010100000085B1852007052040C0B2D2A414684840

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

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 不兼容问题?!或者我错过了什么?

感谢您的帮助..,弗劳

最佳答案

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

关于Mysql POINT列用于距离搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26675156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com