如何计算具有特定中心的正方形多边形?

Posted

技术标签:

【中文标题】如何计算具有特定中心的正方形多边形?【英文标题】:How to calculate a square polygon with a specific center? 【发布时间】:2021-08-17 06:05:55 【问题描述】:

我有一个点的 WGS 84 坐标,我需要创建一个中心在上述点的“方形”多边形。顶点定义如下:

       a    N    a
W *---------+---------* E
            |
            |a
            |
            X
            |
            |a
            |
W *---------+---------* E
       a    S    a

X 是起点,a 是以米为单位的给定距离。

    由于点坐标与其他地理信息一起存储在 BigQuery 中,因此最好在查询中计算这些多边形。我可以使用 BigQuery 的geography functions 生成它们吗? (我没有找到一种方法来计算从起点到 N/E/S/W 的点 X 米的坐标)。 如果 #1 不可行,我可以使用哪些 Python 库和方法来做到这一点?

【问题讨论】:

【参考方案1】:

嗯,这不是一个正方形,由于球面变形,两个顶角之间的距离将比2a 短,并且不同于两个底角之间的距离,也不同于侧角之间的距离。但是如果a 足够小,它就足够接近一个正方形,并且有合理的误差范围你可以做到。我认为在 BigQuery 中避免显式三角函数的最简单方法是采用较小的偏移量,测量距离,然后按比例采用较大的偏移量:

-- computes distance in degrees along parallel at specified latitude
create temp function _to_lng_degrees(lat FLOAT64, a FLOAT64) AS
(
    a / ST_Distance(ST_GeogPoint(0, lat), ST_GeogPoint(1, lat))
);

-- computes distance in degrees along meridian
create temp function _to_lat_degrees(a FLOAT64) AS
(
    a / ST_Distance(ST_GeogPoint(0, 0), ST_GeogPoint(0, 1))
);

create temp function rect(point GEOGRAPHY, a FLOAT64) AS
((
    SELECT ST_MakePolygon(ST_MakeLine(
        [ST_GeogPoint(x - dx, y - dy), ST_GeogPoint(x + dx, y - dy),
         ST_GeogPoint(x + dx, y + dy), ST_GeogPoint(x - dx, y + dy),
         ST_GeogPoint(x - dx, y - dy)]))
    FROM (
      SELECT ST_X(point) x, _to_lng_degrees(ST_Y(point), a) dx, 
             ST_Y(point) y, _to_lat_degrees(a) dy)
));

select rect(ST_GeogPoint(-122.1555771, 47.6858382), 1000)

【讨论】:

哦,这很聪明。我通过手动计算米度比来做到这一点,但现在我看到了如何使用ST_Distance() 来计算它。顺便说一句,_to_lat_degrees() 似乎是不变的。

以上是关于如何计算具有特定中心的正方形多边形?的主要内容,如果未能解决你的问题,请参考以下文章

ArcGIS如何捕捉多边形的中心

多边形和方形纹理的纹理坐标

如何确定一个点是不是在二维凸多边形内?

已知四点坐标如何求四边形面积

iphone多边形显示数

给定一条射线和多边形,计算多边形内最大的圆,其中中心位于射线上,端点位于圆上