【问题标题】:MySQL - Geo-Spatial ObjectMySQL - 地理空间对象
【发布时间】:2010-11-03 04:06:06
【问题描述】:

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

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

该列是一个多面体(((points)))

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

有人做过这样的事吗?

【问题讨论】:

    标签: mysql postgresql geospatial postgis


    【解决方案1】:

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

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

    我认为contains 的开放规范没有实现,但是有一个MySQL 函数可以使用minimum bounding rectangle 来估计您的点是否在多边形中:

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

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

    更新:在提出这个问题后,nice summary 被发布到 opengeo.org ;似乎即使在不明显或没有声明的地方,MySQL 也经常使用 MBR。如果您想更多地了解 PostGIS 的工作原理以及为什么它的 2d 功能实现者通常需要更短的行来锄头,还可以查看原生 postgres 类型 point, lseg, box, path, polygon,circle

    【讨论】:

    • 谢谢,完美运行。感谢您的帮助和智慧!
    猜你喜欢
    • 2018-04-06
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多