【发布时间】:2018-08-28 13:19:12
【问题描述】:
我有一组点,我从中创建了一个多点。
SET @multi_point = ST_GeomFromText('MULTIPOINT(-118.2845938 34.0252385, -118.2867610 34.0221188, -118.2905912 34.0227248, -118.284119 34.021846, -118.2864676 34.0186438, -118.2886342 34.0203211, -118.2907290 34.0193680, -118.2831326 34.0192874, -118.2828242 34.0205473)');
我还有一个要点
SET @home = ST_GeomFromText('POINT(-118.2819136 34.0261177)')
来自@home我想找到最近的3个点。这是多点@multi_point 的一部分。我想首先使用ST_DISTANCE 确定从@home 点到多点中每个点的距离。但我得到以下信息:
SELECT ST_DISTANCE(@home, @multi_point)
+----------------------------------+
| ST_DISTANCE(@home, @multi_point) |
+----------------------------------+
| 0.0028207205958764945 |
+----------------------------------+
看起来我只得到了点到多点的最短距离。问题:
有没有办法获得到每个点的最短距离,并自行确定这些点?
有没有更好的方法来确定从一个点
@home到另一个点@multi_point的最近邻?
编辑我尝试了 Paul Spiegel 将这些点存储在表格中的方法。但是当我存储Point 类型时,它被存储为垃圾值:
+-----------------+---------------------------+
| Name | Coordinates |
+-----------------+---------------------------+
| P1 | [2]pxA@ |
| p2 | +1Z]:PA@ |
| p3 | a]KA@ |
| p4 | X ]qgpA@ |
| p5 | EW3|U]A@ |
| p6 | M]bKzA@ |
| p7 | Ku/]2ƇA@ |
| p9 | =];A@ |
| p8 | u`x]A@ |
+-----------------+---------------------------+
另外,当我查询它时,距离为空。
SELECT P.Name, ST_DISTANCE(@home, P.Coordinates) AS dist
FROM Placemark P ORDER BY dist LIMIT 3;
+--------------+------+
| Name | dist |
+--------------+------+
| p1 | NULL |
| p2 | NULL |
| p3 | NULL |
+--------------+------+
我该如何解决这个问题?
【问题讨论】:
-
你能把这些点保存在一个每点一行的表格中吗?
-
当然。这样就好了。
-
那么解决方案就很明显了:
SELECT p.*, ST_DISTANCE(@home, p.point) as dist FROM points p ORDER BY dist LIMIT 3. -
好的。因此,存储点本身会产生一个相当简单的答案。你能在不存储这些点的情况下做类似的事情吗?
-
积分从何而来?也许您可以将它们存储在临时表中。
标签: mysql database geospatial