为什么使用 PostGIS 时英国县的几何图形会出现在几内亚湾?

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

我在 AWS Postgres 服务器中有两个表(我正在使用 DBeaver 进行查询)。

  • 表 1 是我从名为

    uk_counties
    的 S3 存储桶导入的 shapefile,其中列出了英国所有县的几何图形(SRID = 27700 - 可以在此处找到 shapefile)。

  • 表 2 称为

    demand_origin
    ,包含字段
    origin_city
    (英国的地点)和两个字段
    latitude
    longitude
    (其中包含
    origin_city
    中地点的纬度和经度)。

通过加入

uk_counties
(shapefile)和
demand_origin
,我想通过查找各自的经度与县的 shapefile 相交的位置,将一个县分配给英国的各个地方。

问题是这个连接一直显示为空。经过大量调查后,shapefile 中的几何形状似乎被映射到几内亚湾(纬度 = 0,经度 = 0 及其周围)。

请参阅莱斯特的 shapefile 作为示例:

我的猜测是,几何图形使用的是北距/西距,而不是纬度/经度,因此 PostGIS 将这些形状映射到 lat=0、long=0 左右,因此可能需要重新校准。

这是莱斯特和其他县的几何形状的片段:

ctyua23nm 几何
约克 多边形 ((464216.99650000036 462110.9015999995、464266.20299999975 462093.0965999998、464270.3008000003 462094.3962999992、 464289.8992999997 4
德比 多边形 ((434972.3005999997 341311.7999000009、434986.3008000003 341310.40029999986、435000.0536000002 341314.6991000008、 435015.29860000033 3
莱斯特城 多边形 ((457057.1997999996 310757.2960000001, 457090.5016000001 310726.5047999993, 457074.2011000002 310704.1012999993, 4 57103.5039999997 310
拉特兰 多边形 ((493934.8219999997 318917.9001000002、493958.61730000004 318915.10089999996、493992.2159000002 318917.1002999991、 493998.72119999956
诺丁汉 多边形 ((454895.60030000005 346916.29560000077, 454878.09609999973 346857.5024999995, 454844.00270000007 346750.303099999 2、454809.5960999997
赫里福德郡多边形 (342023.89639999997 277833.5003999993、342103.60140000004 277823.8030999992、342105.7039000001 277831.3010000009、 342188.6986999996 2
剑桥郡 多多边形 (((529832.0997000001 300053.7999000009, 529880.2013999997 300039.1041000001, 529903.7987000002 300036.6048000008 ,529914.20399999
德比郡 多边形 (409407.5981999999 404118.1018000003、409420.79860000033 404098.09750000015、409451.00019999966 404037.2050000001、 409495.2019999996
米德尔斯堡 多多边形 ((446854.7000000002 517192.69999999925, 446854.28139999975 517190.0275999997, 446853.7965000002 517195.703700000 4、446858.357499
特尔福德和雷金 多边形 ((371253.05030000024 325634.0976, 371253.0007999996 325619.1019000001, 371253.50380000006 325613.0035999995, 37125 9.8030000003 325591.8
特伦特河畔斯托克 多边形 (386974.19689999986 354963.50210000016、386978.0968000004 354963.40220000036、386989.7965000002 354965.2017000001、 386993.9025999997
巴斯和东北萨默塞特 多边形 (376262.7988999998 171210.70079999976、376272.9979999997 171210.30089999922、376299.8026999999 171210.5008000005、 376307.29750000034
布里斯托尔市 多多边形 (352548.5558000002 175971.75489999913, 352557.1923000002 175970.77720000036, 352560.45139999967 175972.732599999 76、352567.2955
北萨默塞特 多多边形 (((323057.9967 160841.4989, 323061.50090000033 160841.09899999946, 323064.7988999998 160841.1989999991, 323072.3 019000003 160850.5

出了什么问题?

postgresql amazon-web-services amazon-rds postgis spatial-query
1个回答
0
投票

几何图形使用北距/西距,而不是纬度/经度

正确!

SRID 27700 / EPSG:27700Ordnance Survey National Grid (OSGB) 或更通称的英国国家电网 (BNG) 一致。它基本上使用以米为单位的投影东距和北距,而不是以度为单位的纬度和经度。

您可以通过执行

SELECT srtext FROM spatial_ref_sys WHERE srid = 27700;
:

来看到这一点
PROJCS["OSGB 1936 / British National Grid",
  GEOGCS["OSGB 1936",
    DATUM["OSGB_1936",
      SPHEROID["Airy 1830", 6377563.396, 299.3249646,
        AUTHORITY["EPSG", "7001"]],
      TOWGS84[446.448, -125.157, 542.06, 0.15, 0.247, 0.842, -20.489],
      AUTHORITY["EPSG", "6277"]],
    PRIMEM["Greenwich", 0, AUTHORITY["EPSG", "8901"]],
    UNIT["degree", 0.0174532925199433, AUTHORITY["EPSG", "9122"]],
    AUTHORITY["EPSG", "4277"]],
  PROJECTION["Transverse_Mercator"],
  PARAMETER["latitude_of_origin", 49],
  PARAMETER["central_meridian", -2],
  PARAMETER["scale_factor", 0.9996012717],
  PARAMETER["false_easting", 400000],
  PARAMETER["false_northing", -100000],
  UNIT["metre", 1, AUTHORITY["EPSG", "9001"]],
  AXIS["Easting", EAST],
  AXIS["Northing", NORTH],
  AUTHORITY["EPSG", "27700"]]

注意

UNIT["metre"
AXIS["Easting", EAST]
AXIS["Northing", NORTH]

您很可能希望使用 SRID 4326 / EPSG:4326 来投影数据,这与 WGS84 即 GPS 标准一致。

它是一个 2D 地理坐标系,即使用纬度和经度。


要投影您的表,首先使用

geometry
 验证 
Find_SRID
列的 SRID 是否设置为 SRID 27700。

SELECT Find_SRID('public', 'uk_counties', 'geometry');

如果没有,请使用

UpdateGeometrySRID
:

设置列的 SRID
SELECT UpdateGeometrySRID('uk_counties', 'geometry', 27700);

然后,使用PostGIS中的

ST_Transform
函数进行转换:

返回一个新的几何图形,其坐标转换为不同的空间参考系统。

ALTER TABLE 'uk_counties'
  ALTER COLUMN 'geometry'
  TYPE geometry(Geometry, 4326)
  USING ST_Transform(geometry, 4326);
© www.soinside.com 2019 - 2024. All rights reserved.