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

2024-05-15 13:53:33 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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

Tags: 方法距离定义单位functionsbigquery多边形中心
1条回答
网友
1楼 · 发布于 2024-05-15 13:53:33

嗯,这不是一个正方形,由于球面畸变,两个顶角之间的距离将小于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)

相关问题 更多 >