使用缓冲区和转换投影,PostGIS

问题描述 投票:0回答:1

我正在创建一个缓冲区,并试图将我的SRID转换为Geog,然后再回到原来的投影和Geom.我的点层有我的WKT惯例,如是。

POINT (-73.73891083685496 40.59593727361931)

CREATE TABLE intrsct_buff AS ( 
  SELECT
    ST_Transform(ST_Buffer(ST_Transform(pt.geom,2263), 60),4326) as geom, pt.count
  FROM public.intrsct_pts as pt
);

但当我使用这段代码时,我的新缓冲区表有这样的WKT。

POLYGON ((-77.51963927750339 40.11249512168173..

我是不是用错了地理学的SRID?WGS84=4326。它需要的投影是2263,因为这是我的积分表和数据库中所有其他表的SRID。

sql geospatial postgis wkt
1个回答
0
投票

对于这样的情况,拿一张纸和一支笔,写下你需要的(输入)和你期望的(输出),每一个涉及的步骤。

几乎每一个假设都有错误。

1) Geography 不等于 Geometry. 虽然两者都是使用WGS84 4326 CRS,但前者的单位是米,后者的单位是度。前者使用大圆弧,后者使用直线连接两点(距离计算、交点等大距离影响很大)。

2)你说你的数据在CRS中。2263 (纽约长岛(ftUS)),其边界如下。

WGS84界线:-74.2700、40.4700、-71.7500、41.3100 -74.2700,40.4700,-71.7500,41.3100 预测界线: 909126.0155, 110626.2880, 1610215.3590, 424498.0529

你所显示的坐标不在这个CRS中,而更可能在WGS84中。

让我们来验证一下这个假设:如果我们(错误地)假设你提供的坐标在2263中,如果我们把它们投影到4326中会发生什么?

select st_asText(st_transform(st_geomFromEWKT('SRID=2263;POINT (-73.73891083685496 40.59593727361931)'),4326));
                st_astext
------------------------------------------
 POINT(-77.5198536012811 40.112488506058)

Bingo,这就是你得到的结果。 ==> 首先,要么修正你使用的CRS,要么修正坐标。其中有一个是错误的。

但即使你有正确的CRS,查询也不会如期进行。

你说你想1)把点改成地理,2)缓冲60米,3)转换回原来的CRS。

你所做的是:1)将点改为2263(它已经在CRS中,没有影响)2)缓冲60英尺3)转换为WGS84(几何图形)

要达到你所说的目的,宁可。

SELECT ST_Transform(
     ST_Buffer(
      ST_Transform(pt.geom,4326)::geography, -- change to 4326 and cast to geography
      60), -- buffer 60 meters
    2263) as geom -- change back to original CRS
© www.soinside.com 2019 - 2024. All rights reserved.