3

如果我在 MySQL 中有一个名为 Poly 的多边形类型的列,并且我想获得 NW 角和 NE 角以及 SE 角和 SW 角,我该怎么做?从 Envelope() 应该有 lat1、lat2、lon1 和 lon2 形成四个角,如下所示 lat1,lon1 是 NW;lat1,lon2 是东北; lat2,lon2 是 SE;lat2,lon1 是 SW。当我尝试 X(PointN(Envelope(Poly),1)) AS lat1 时,它总是返回 NULL。这可以在 MySQL 中完成吗?

SELECT
    X(PointN(Envelope(Poly),1)) AS lat1, X(PointN(Envelope(Poly),3)) AS lat2,
    Y(PointN(Envelope(Poly),1)) AS lon1, Y(PointN(Envelope(Poly),2)) AS lon2
FROM boundaries.mt_us_zip5_2013_boundaries_polys_bin
WHERE zip = '00601';

上面的查询返回:

NULL,NULL,NULL,NULL

这是信封的样子:

SELECT AsText(Envelope(Poly))
FROM boundaries.mt_us_zip5_2013_boundaries_polys_bin
WHERE zip = '00601';

最后一个查询返回:

POLYGON((18.111929 -66.836366,18.250344 -66.836366,18.250344 -66.659293,18.111929 -66.659293,18.111929 -66.836366))

我正在使用 MySQL 5.5.36 版本,升级到新版本的 MySQL 是否会给我所需的功能?

4

2 回答 2

2

PointN仅定义在 上LineString,但幸运的是您可以调用ExteriorRingPolygon获得LineString. 在您的示例中:

SELECT
    X(PointN(ExteriorRing(Envelope(Poly)),1)) AS lat1,
    X(PointN(ExteriorRing(Envelope(Poly)),3)) AS lat2,
    Y(PointN(ExteriorRing(Envelope(Poly)),1)) AS lon1, 
    Y(PointN(ExteriorRing(Envelope(Poly)),2)) AS lon2
FROM boundaries.mt_us_zip5_2013_boundaries_polys_bin
WHERE zip = '00601';
于 2014-06-04T10:39:06.773 回答
0

如果 MySQL 有这个内置的,我对它还不够熟悉,但我的第一个想法是首先在多边形的中心找到,然后从中心计算多边形上每个点的方位角。0 的方位角是北,90 度的方位角是东,因此东北是 45 度。找到最接近 45 度角的点会为您提供角点。

多边形的中心在这里:Computing latitude longitude center point of a Polygon in PHP

从 2 个纬度/经度点计算方位:http ://www.movable-type.co.uk/scripts/latlong.html

于 2014-05-09T12:36:41.500 回答