如何添加 2 个点和它们之间的距离 (SRID = 32636)?
How to add 2 points with distance between them (SRID = 32636)?
我正在使用 python 3.6
和 postgres
数据库
我有一个 table 名称:test_table
包含以下字段:
名称 (text
)、地理位置 (geometry
)
地理字段的srid
是32636
我想编写一个 python 函数来获取点 X (wkt) 和 return 点 Y,两点之间的距离为 10 米。即:
X 和 Y 的格式为 WKT
如何计算以 X 为输入的点 Y?
好像不能用欧式距离,因为srid
是32636
那我该怎么做呢?
您可以将 geometry
投射到 geography
并 ST_Project
它(以您想要的方位角)。这样做您可以轻松地提供以米为单位的距离:
CREATE TEMPORARY TABLE test_table (name text, geo geometry(point,(32636)));
INSERT INTO test_table VALUES ('foo','SRID=32636;POINT(2076155.32235105 4828109.18280588)');
SELECT
ST_AsText(
ST_Transform(
ST_Project(
ST_Transform(geo,4326)::geography,10,radians(45.0))::geometry,
32636)
)
FROM test_table;
st_astext
------------------------------------------
POINT(2076150.11319696 4828116.26815917)
(1 Zeile)
您可以使用ST_Distance
查看距离:
SELECT
ST_Distance(
ST_Transform(geo,4326)::geography,
ST_Project(ST_Transform(geo,4326)::geography,10,radians(45.0))::geometry )
FROM test_table;
st_distance
-------------
10
注意:我正在使用 ST_Transform
将您预计的 SRS 转换为 lon/lat SRS,以便我们可以将其转换为 geography
,否则我们会得到一个错误:
SELECT geo::geography FROM test_table;
ERROR: Only lon/lat coordinate systems are supported in geography.
进一步阅读:
我正在使用 python 3.6
和 postgres
数据库
我有一个 table 名称:test_table
包含以下字段:
名称 (text
)、地理位置 (geometry
)
地理字段的srid
是32636
我想编写一个 python 函数来获取点 X (wkt) 和 return 点 Y,两点之间的距离为 10 米。即:
X 和 Y 的格式为 WKT
如何计算以 X 为输入的点 Y?
好像不能用欧式距离,因为srid
是32636
那我该怎么做呢?
您可以将 geometry
投射到 geography
并 ST_Project
它(以您想要的方位角)。这样做您可以轻松地提供以米为单位的距离:
CREATE TEMPORARY TABLE test_table (name text, geo geometry(point,(32636)));
INSERT INTO test_table VALUES ('foo','SRID=32636;POINT(2076155.32235105 4828109.18280588)');
SELECT
ST_AsText(
ST_Transform(
ST_Project(
ST_Transform(geo,4326)::geography,10,radians(45.0))::geometry,
32636)
)
FROM test_table;
st_astext
------------------------------------------
POINT(2076150.11319696 4828116.26815917)
(1 Zeile)
您可以使用ST_Distance
查看距离:
SELECT
ST_Distance(
ST_Transform(geo,4326)::geography,
ST_Project(ST_Transform(geo,4326)::geography,10,radians(45.0))::geometry )
FROM test_table;
st_distance
-------------
10
注意:我正在使用 ST_Transform
将您预计的 SRS 转换为 lon/lat SRS,以便我们可以将其转换为 geography
,否则我们会得到一个错误:
SELECT geo::geography FROM test_table;
ERROR: Only lon/lat coordinate systems are supported in geography.
进一步阅读: