使用EPSG5186将米转换为度 [英] PostGIS convert meters to degree using epsg 5186

查看:0
本文介绍了使用EPSG5186将米转换为度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有几个关于PostGIS中的几何和地理的问题。

我当前使用的是PostGIS和PostgreSQL。

我的大部分空间数据来自韩国,基本上是纬度和经度。

为了测试,我创建了两个具有相同纬度和经度数据但数据类型不同的表,一个用于地理的SRID 4326,另一个用于几何的SRID 5186。

create table geometry_stores
(
    id       serial primary key,
    location geometry(POINT, 5186) not null
);

create table geography_stores
(
    id       serial primary key,
    location geography(POINT, 4326) not null
);

您可以在此链接上找到EPSG 5186的更多详细信息https://epsg.io/5186

以下是我收到的问题列表:

  1. PostGIS有此方法

    ST_DWithin(geometry g1, geometry g2, double precision distance_of_srid);

    distance_of_srid是EPSG的单位吗?有没有什么方法可以用EPSG 5186将米(例如1公里)转换为distance_of_srid

  2. 我知道,地理计算将点之间的距离度量为球面上的真实路径,而几何计算将点之间的距离度量为笛卡尔平面上的真实路径。那么,如果我给下面的查询提供完全相同的距离,它们应该产生不同的结果还是相同的结果?因为我的理解是,SRID为5186的几何体已经投影了地球的变形,那么它们应该产生相同的结果?

    select *
    from geography_stores
    where st_dwithin(location, st_setsrid(st_point(126.970769, 37.555479), 4326), same_distance_meter)
    
    select *
    from geometry_stores
    where st_dwithin(location, st_setsrid(st_point(126.970769, 37.555479), 5186), same_distance_degree)
    
  3. 当我使用以下查询在几何表上计算距离时,它给出的是度,而不是米。有没有办法在考虑地球变形的情况下将这个度转换成米?

    select st_distance(location, st_setsrid(st_point(126.970769, 37.555479), 5186))
    from geometry_stores
    where id = 1;
    

    我已尝试使用此查询,但遇到错误Only lon/lat coordinate systems are supported in geography. Where: SQL function "st_distancesphere" during inlining

    select st_distancesphere(location, st_setsrid(st_point(126.970769, 37.555479), 5186))
    from geometry_stores
    where id = 1;
    

我已经阅读了PostGIS网站上的文档和StackOverflow中的一些问题,但仍然有这三个问题。感谢你们的帮助。


-更新-----------------------------------------

  1. 我的空间数据列是GEOMETRY(POINT,5186),因此表定义如下。请注意,在计算时不将其转换为几何图形(点5186)不是几何图形(点4326)。我应该将我的数据存储在几何图形(点4326)中并在计算时转换它吗?
create table geometry_stores
(
    id       serial primary key,
    location geometry(POINT, 5186) not null
);
  1. 我执行了以下查询,得到的结果如下:
select st_distance(st_setsrid(st_makepoint(126.808183, 37.463557), 4326)::geography,
                   st_setsrid(st_makepoint(126.970769, 37.555479), 4326)::geography);


st_distance
--------------
17627.3138509
select st_distance(st_setsrid(st_makepoint(126.808183, 37.463557), 5186)::geometry,
                   st_setsrid(st_makepoint(126.970769, 37.555479), 5186)::geometry)

st_distance
--------------
0.186772218169622

第二个查询似乎给了我学位,而第一个查询给了我米。我是不是在查询中做错了什么?

  1. 对于st_in,我在GEOMETRY_STORES表中填充了3M数据,空间数据分布在至少10公里的范围内。我执行了以下查询。
select *
from users
where st_dwithin(location, st_setsrid(st_point(126.970769, 37.555479), 5186), 0.001)

此查询显示158行,几何查看器如下图所示。

让我们以距离1而不是0.0001来执行相同的查询

select *
from users
where st_dwithin(location, st_setsrid(st_point(126.970769, 37.555479), 5186), 1)

此查询给我32792923行,这是表中的所有数据。

考虑到空间数据分布在至少10千米的范围内,因此st_in查询似乎是以EPSG5186而不是米为单位计算两个几何图形之间的距离。那么,我想知道我是否可以将米转换为EPSG5186的单位(度),因为我想用米来查询,而不是度,因为我不知道EPSG5186的单位(度)有多远。

推荐答案

Distance_of_sRID是EPSG的单位吗?

是的。使用geometry类型几何图形的距离是使用相应空间参考系的测量单位计算的。

有没有什么方法可以用EPSG 5186将米(例如1公里)转换为距离_of_sRID?

根据documentationEPSG:5186的单位已经是米,因此您不必转换任何内容。请记住,使用geography类型几何的距离也是使用metres计算的,例如

SELECT 
  ST_Distance(
   'SRID=4326;POINT(127.49 36.65)'::geometry,
   'SRID=4326;POINT(128.06 36.43)'::geometry) AS geometry_distance,
  ST_Distance(
   'SRID=4326;POINT(127.49 36.65)'::geography,
   'SRID=4326;POINT(128.06 36.43)'::geography) AS geography_distance
   ;
 geometry_distance | geography_distance 
-------------------+--------------------
 0.610982814815612 |     56578.57823391
(1 Zeile)
那么,如果我给以下查询提供完全相同的距离,它们应该产生不同的结果还是相同的结果?因为我的理解是,SRID为5186的几何体已经投影了地球的变形,那么它们应该产生相同的结果?

结果会有所不同。它们可能有相同的测量单位,但它们不会投影在同一表面上。下面的示例将坐标从4326转换为5186并计算距离:

SELECT 
  ST_Distance(
   'SRID=4326;POINT(127.49 36.65)'::geography,
   'SRID=4326;POINT(128.06 36.43)'::geography),
  ST_Distance(
   ST_Transform('SRID=4326;POINT(127.49 36.65)'::geometry,5186),
   ST_Transform('SRID=4326;POINT(128.06 36.43)'::geometry,5186));

  st_distance   |   st_distance    
----------------+------------------
 56578.57823391 | 56582.0899018353
(1 Zeile)

当我使用以下查询在几何表上计算距离时,它给出的是度,而不是米。有没有办法在考虑地球变形的情况下将这个度转换成米?

数据类型geography不是您要查找的类型吗?正如文档所说:

无论您使用哪种空间参考系统,测量返回的单位(ST_Distance、ST_Long、ST_Perieter、ST_Area)和ST_DWiThin的输入单位都是米。

为了好玩,下面的查询使用ST_DistanceSpheroid计算显式定义4326椭球体的两点之间的距离,并将坐标从geometry转换到geography,这基本上也是这样做的:

SELECT 
  ST_DistanceSpheroid(  
   'POINT(127.49 36.65)',
   'POINT(128.06 36.43)',
   'SPHEROID["WGS 84",6378137,298.257223563]'),
  ST_Distance( 
   'SRID=4326;POINT(127.49 36.65)'::geography,
   'SRID=4326;POINT(128.06 36.43)'::geography);

 st_distancespheroid |  st_distance   
---------------------+----------------
    56578.5782339123 | 56578.57823391

关于何时使用geometrygeographydocumentation表示:

您选择的类型应取决于您正在构建的应用程序的预期工作区。您的数据将覆盖全球或大片大陆地区,还是某个州、县或直辖市的本地数据?

注意事项:

  • 用例覆盖区域较小:坚持geometry,使用更适合您所在区域的SRS。
  • 用例覆盖大片区域(国家/大陆):使用geography--尽管可能会慢一点。
  • 您要使用的函数是否支持geography?大多数PostGIS功能不支持!有关详细信息,请查看matrix。如果您想使用的功能不支持geography,您只能使用geometry;-)由于您的用例大多覆盖韩国,我认为使用EPSG 5186没有问题。

编辑:关于问题更新。

您不能简单地更改几何的SRID来将其转换到另一个参考系!您所做的是获得一个WGS84坐标对并简单地交换它的SRID,这不是它的工作方式。为此,您必须始终使用ST_Transform。请看一下应用后的坐标:

SELECT 
  ST_AsText(ST_Transform('SRID=4326;POINT(126.808183 37.463557)'::geometry,5186));

                st_astext                 
------------------------------------------
 POINT(183030.248454493 540476.713582621)
(1 Zeile)

这意味着POINT(183030.248454493 540476.713582621)POINT(126.808183 37.463557)是相同的坐标对,但在不同的参考系中。下面的查询将清楚地表明,geography5186都以米为单位返回结果:

SELECT 
  --Transforming from 4326 to 5186 and calculating the distance
  ST_Distance(
    ST_Transform('SRID=4326;POINT(126.808183 37.463557)'::geometry, 5186),
    ST_Transform('SRID=4326;POINT(126.970769 37.555479)'::geometry, 5186)),
  -- Distance using geography
  ST_Distance(
    'SRID=4326;POINT(126.808183 37.463557)'::geography,
    'SRID=4326;POINT(126.970769 37.555479)'::geography);

   st_distance    |  st_distance  
------------------+---------------
 17627.3383377316 | 17627.3138509

这篇关于使用EPSG5186将米转换为度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆