我正在创建一个缓冲区,并试图将我的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。
对于这样的情况,拿一张纸和一支笔,写下你需要的(输入)和你期望的(输出),每一个涉及的步骤。
几乎每一个假设都有错误。
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