Python 如何计算具有特定中心的方形多边形?
我有一个点的WGS 84坐标,我需要创建一个“正方形”多边形,其中心位于上述点。顶点定义如下:Python 如何计算具有特定中心的方形多边形?,python,google-bigquery,geospatial,geo,spatial-query,Python,Google Bigquery,Geospatial,Geo,Spatial Query,我有一个点的WGS 84坐标,我需要创建一个“正方形”多边形,其中心位于上述点。顶点定义如下: a N a W *---------+---------* E | |a | X | |a | W *---------+---------* E a S a X是起点,a是以米为单
a N a
W *---------+---------* E
|
|a
|
X
|
|a
|
W *---------+---------* E
a S a
X
是起点,a
是以米为单位的给定距离
嗯,这不是一个正方形,由于球面畸变,两个顶角之间的距离将小于
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()
来计算它。顺便说一句,\u to\u lat\u degrees()
似乎是常数。