2024-05-29 02:24:36 发布
网友
我正在使用python 3.6和postgresDB
python 3.6
postgres
我有一个表名:test_table,其中包含以下字段: 姓名(text),地理位置(geometry)
test_table
text
geometry
地质场的srid为32636
srid
32636
我想写一个python函数,它得到点X(wkt)和返回点Y,点之间的距离为10米。i、 e:
X和Y是WKT格式
WKT
如何计算以X为输入的点Y
似乎我不能使用欧几里德距离,因为srid是32636
那我怎么做呢
您可以将geometry投射到geography和^{}上(以您想要的方位角)。这样,您可以轻松提供以米为单位的距离:
geography
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)
可以使用^{}检查距离:
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,否则我们将得到一个错误:
ST_Transform
SELECT geo::geography FROM test_table; ERROR: Only lon/lat coordinate systems are supported in geography.
进一步阅读:Caculate point 50 miles away (North, 45% NE, 45% SW)
您可以将} 上(以您想要的方位角)。这样,您可以轻松提供以米为单位的距离:
geometry
投射到geography
和^{可以使用^{} 检查距离:
注意:我正在使用
ST_Transform
从您的投影SRS获取lon/lat SRS,以便我们可以将其强制转换为geography
,否则我们将得到一个错误:进一步阅读:Caculate point 50 miles away (North, 45% NE, 45% SW)
相关问题 更多 >
编程相关推荐