在MySQL中将Multipoint转换为Point

时间:2015-09-06 19:27:33

标签: mysql sql gis point multipoint

如果许多点在作为多点的字段中存储为几何,那么如何选择(和转换)所有点?

但没有过程,while或循环,因为它们太慢,而且没有字符串转换。

例如:在#1表

MULTIPOINT(48 16,49 16,50 16)

我想达到如下结果:

id |     point
1  |  POINT(48 16)
2  |  POINT(49 16)
3  |  POINT(50 16)

1 个答案:

答案 0 :(得分:0)

唯一的"技巧"这里生成一系列自然数。为此 - 您最好的选择是创建一个numbers表,只需保存 1 中的数字。您认为每个MultiPoint可能存在的最大点数

CREATE TABLE `numbers` (
  id int,
  PRIMARY KEY (`id`)
);
INSERT INTO `numbers` VALUES (1),(2),(3),(4),(5); /* ... as many as needed */

现在我们已经解决了这个问题,您可以使用以下查询将MultiPoint分解为点:

SELECT `numbers`.`id`, AsText(GeometryN(`geometryFieldName`, `numbers`.`id`))
FROM `geometryTableName`
INNER JOIN `numbers` ON
  (`numbers`.`id` <= NumGeometries(`geometryFieldName`))