Abr*_*hin 6 mysql algorithm location geolocation query-builder
我有这样一个DB Schema(来自Google的这个教程) -
所以图中的实际点就像这样 -
我想要的是找到靠近距离排序的给定点(by point_id)点附近的点
点的位置
(x,y)是(point_x,point_y)在DB中
我想用MySQL解决它,因为我的数据库已经在MySQL中了.
找到2点的距离就像这样容易 -
我想根据MySQL的距离进行排序.
为了消除混淆,我想要稍后在圆圈内的点.但现在我只想找到排序点.
所以你可以忽略这些圈子.
我不知道怎么做,有人可以帮忙吗?
我找到了比@ 1000111解决方案更好的解决方案.
MySQL中有自定义数据库类型用于此类数据,可提供更好的性能.
MySQL中的OpenGIS非常适合这种情况.
StackOverflow问题给出了一个说明性的定义.
我的解决方案是这样的 -
数据库表 -
CREATE TABLE geoTable
(
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
geoPoint POINT NOT NULL,
SPATIAL INDEX(geoPoint)
) ENGINE=MyISAM;
INSERT INTO geoTable (name, geoPoint)
VALUES
( "A", GeomFromText('POINT(0.1 -1.01)') ),
( "B", ST_GeomFromText('POINT(56.31 2.81)') ),
( "C", ST_GeomFromText('POINT(11.1 1.176)') ),
( "ui", ST_GeomFromText('POINT(9.1 2.1)') );
Run Code Online (Sandbox Code Playgroud)
SQL查询 -
SELECT
id,
name,
X(geoPoint) AS "latitude",
Y(geoPoint) AS "longitude",
(
GLength(
LineStringFromWKB(
LineString(
geoPoint,
GeomFromText('POINT(51.5177 -0.0968)')
)
)
)
)
AS distance
FROM geoTable
ORDER BY distance ASC;
Run Code Online (Sandbox Code Playgroud)
查看执行时间 -
150次入场,仅13ms.