我在AWS Postgres服务器中有两个表(我使用DBeaver查询)。
- 表1是我从名为
uk_counties
的S3存储桶中导入的shapefile,其中列出了英国所有县的几何图形(SRID = 27700 - shapefile可以在here中找到)。 - 表2称为
demand_origin
,包含字段origin_city
(英国的地点)和两个字段latitude
和longitude
(包含origin_city
中地点的纬度和对数)。
通过连接uk_counties
(shapefile)和demand_origin
,我想通过查找它们各自的纬度与县的shapefile相交的位置,将县分配给英国的各个地方。
问题是这个连接一直显示为空。经过大量调查,似乎shapefile中的几何图形Map到了几内亚湾(在lat = 0,long = 0的范围内和周围)。
以莱斯特的shapefile为例:
x1c 0d1x的数据
我的猜测是,几何图形使用的是北/西,而不是纬度/经度,因此PostGIS将这些形状Map到纬度=0,经度=0左右,因此可能需要重新校准。
以下是莱斯特和其他县的几何形状的片段:
| 公司简介|几何|
| --|--|
| 约克|POLYGON((464216.99650000036 462110.9015999995,464266.20299999975 462093.0965999998,464270.3008000003 462094.39629999992,464289.8992999997 4|
| 德比|POLYGON((434972.3005999997 341311.7999000009,434986.3008000003 341310.40029999986,435000.053600002 341314.6991000008,435015.29860000033 3 3|
| 剑桥郡|多多边形(529832.0997000001 300053.7999000009,529880.201399997 300039.1041000001,529903.7987000002 300036.6048000008,529914.2039999|
有什么问题吗?
1条答案
按热度按时间yxyvkwin1#
FWIW,当我从上面的链接下载了Shapefile,并导入它这样:
字符串
我得到了一个非常不同模式:
的数据
而且我可以很容易地得到一个正确的经纬度值:
的字符串
重新导入Shapefile可能会更容易,因为我不确定您是如何导入的。
如果您无法使用当前的模式,请继续。
几何图形使用北距/西距,而不是纬度/经度
正确.
SRID 27700 /EPSG:27700与Ordnance Survey National Grid(OSGB)或更常见的英国国家格网(BNG)对齐。它基本上使用以米为单位的投影东距和北距,而不是以度为单位的纬度和经度。
您可以通过运行以下命令来查看:
的字符串
请注意
UNIT["metre"
、AXIS["Easting", EAST]
和AXIS["Northing", NORTH]
。您很可能希望使用SRID 4326 /EPSG:4326来投影数据,该数据与WGS 84(即GPS标准)一致。
它是一个二维地理坐标系,即使用纬度和经度。
要将SRID 27700表投影到纬度和经度坐标(SRID 4326),请首先使用
Find_SRID
验证geometry
列的SRID是否设置为SRID 27700。型
输出应为:
型
如果没有,请使用
UpdateGeometrySRID
设置列的SRID:的内存
然后,使用PostGIS中的
ST_Transform
函数进行转换:返回一个新几何图形,该几何图形的坐标已转换为其他空间参考系。
,
,
,
,
,
,
,
,
,
,
完成后,我们可以通过以下方法从几何图形中获取经纬度:
1.使用
ST_Centroid
获取几何图形的质心-点1.应用
ST_Y
函数获得纬度1.应用
ST_X
函数获取经度。让我们创建2个新列来存储数据:
的第一个字符
然后,填充列...
的数据库
现在,您有两个新列:
latitude
个longitude
个新列应具有正确的值:
的第一个字符
最后但并非最不重要的一点,回到莱斯特的例子...
个
个
莱斯特来了!
x1c 0d1x的数据