虽然SRID相同,但在地图上放置点,经度/纬度不在它们应该的位置

时间:2013-09-06 08:49:35

标签: postgresql latitude-longitude postgis srid

感谢您关注此事 - 我确信这是一个简单的问题,但这对我来说都很新鲜,经过大量的互联网搜索,我的观点仍在海中!

我有一套英国邮政编码数据,我已将其转换为纬度和经度。我还有一个英国县形状文件。

我用来将纬度/经度转换为几何点列的代码如下:

ALTER TABLE colic ADD COLUMN longlat geometry(POINT,27700);
update colic set longlat = st_setsrid(st_point( longitude, latitude), 27700);

这会产生一个具有如下值的列(我只包括一对!):

  

“0101000020346C000048BF7D1D3867E83FC05B2041F1334A40”   “0101000020346C0000F085C954C1A8F7BFA1F831E6AE954A40”   “0101000020346C000020D26F5F07CEF4BFE3361AC05B504A40”   “0101000020346C00007D3F355EBA49F73FB6847CD0B3614A40”

我的shape文件中的.prj是:

  

PROJCS [“British_National_Grid”,GEOGCS [“GCS_OSGB_1936”,   DATUM [“D_OSGB_1936”,SPHEROID [“Airy_1830”,6377563.396,299.3249646]],   PRIMEM [ “格林威治”,0.0],单位[ “度”,0.0174532925199433]]   投影[ “Transverse_Mercator”],   PARAMETER [ “False_Easting”,400000.0]   参数[ “False_Northing”, - 100000.0]   PARAMETER [ “Central_Meridian”, - 2.0],   PARAMETER [ “Scale_Factor”,0.9996012717]   PARAMETER [“Latitude_Of_Origin”,49.0],UNIT [“Meter”,1.0]]

当我使用PostGIS shapefile上传器上传它时,我将其SRID设置为27700。

在PG Admin中,当我问:

select st_srid(geom) from counties limit 1;
select st_srid(longlat) from colic limit 1;

两者都得到27700。

但是...当我尝试任何空间查询时,我得不到任何响应,当我将图层加载到量子中时,点数据不在北大西洋的康沃尔尖端,并且仅表示为比例上的一个点县的地图。如果我放大它们,它们就是'那里',但不是在东方安格利亚它们应该在哪里!

这是我第一次尝试SQL和映射 - 我确信有一些我错过的非常简单。

1 个答案:

答案 0 :(得分:1)

您正在混合空间参考(SRS)。 .prj文件中的SRS(又名SRID=27700)是东向和北向的,它们以米为单位。这是纬度和经度!此外,如果不是经度/纬度坐标,则调用列longlat是一种欺骗。

如果您尝试在SRID = 27700的列中插入纬度/经度,则点将不会按预期运行,例如,它们将位于地图的最左下角。

如果你有来自WGS84 (SRID=4326)的纬度/经度数据,你可以将其转换为东边和北边:

UPDATE colic SET
  geom = ST_Transform(ST_SetSRID(ST_Point(longitude, latitude), 4326), 27700);