2

我一直在 Postgis 中工作,我有这个功能:

select * from table_name where st_contains(column, st_setsrid(st_makepoint(-92.095109, 46.804100),4326));

该列是一个 multipoly(((points)))

我正在尝试找到一种方法来使用 MySQL 进行类似的练习,并想知道是否有类似的功能可以这样做。MySQL 的开发站点对 Multipolys 的描述和文档非常有限。

有没有人做过这样的事情?

4

1 回答 1

2

MySQL 没有实现很多空间查询——我不确定包含,但有一些方法可以近似它和其他功能。例如,您可以通过使用给定矩形中的坐标拉取所有结果,然后按照此处所述计算距离来计算点之间的距离。 您还可以使用矩形来近似您的contains问题。首先,为您的选择提供更通用的 WKT 语法:

select * from table_name where contains(the_polygon, GeomFromText('POINT(12.3 45.6)');

我认为开放规范contains没有实现,但是有一个 MySQL 函数使用最小边界矩形来近似你的点是否在多边形中:

select * from table_name where MBRContains(the_polygon, GeomFromText('POINT(12.3 45.6)');

我最终在 MySQL 上使用了很多矩形,因为它很容易计算坐标集的外部边界。总体而言,PostGIS 要好得多,但如果必须,您可以做一些跨数据库的事情。

更新:在提出这个问题后,一个很好的总结被发布到 opengeo.org ;似乎即使在不明显或不明确的情况下,MySQL 也经常使用 MBR。还要查看本机 postgres 类型point, lseg, box, path, polygon,circle如果您想了解更多关于 PostGIS 的工作原理以及为什么它的 2d 功能实现者通常有更短的行来锄头。

于 2009-06-16T01:32:32.943 回答