PROJ.4库和OSGB36(PROJ.4 library and OSGB36)

2019-07-18 02:01发布

一切顺利

我试图经/纬度坐标转换为OSGB36 x和y使用PROJ.4库。

有没有其他人成功地做到了这一点? 我需要填写srcPrj4String和destPrj4String变量,如

串srcPrj4String = “+ PROJ = longlat + ellps = WGS84 +基准= WGS84 + no_defs”;
串destPrj4String = “+ PROJ = UTM +区= 11 + ellps = GRS80 +基准= NAD83 +单位= M”;

但我想不通的destPrj4String应与OSGB36的东西 - 我知道的数据应该是+基准= OSGB36,但一切我试试,不行

有任何想法吗?

提前谢谢了

莱迪

Answer 1:

谷歌搜索变成了这个由约翰·史蒂文森博士,曼彻斯特大学地球科学学术-谁应该得到它的权利,如果有人做。 这里有一个报价。


问题是,要OSGB36既需要投影和基准转换 。 此前2007年10月 ,凸出只进行投影,从而导致大的偏移。 您可以通过运行“凸出-v”或者通过查看EPSG文件检查是否有新的版本:

cat /usr/share/proj/epsg | grep -A 1 "British National Grid" 

# OSGB 1936 / British National Grid 
<27700> +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 
+y_0=-100000 +ellps=airy +datum=OSGB36 +units=m +no_defs  <> 

新版本有+基准= OSGB36。

如果你有一个旧版本,您可以通过更换线路更正:

+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.999601 +x_0=400000 +y_0=-100000 
+ellps=airy 
+towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894 +units=m 
+no_defs <> 

复杂性在于OSGB36被稍微扭曲相对于GPS突起(如WGS84和ETRS89)。 此偏移量小,是更高的精度测量唯一重要的。 约OSGB36偏移许多搜索弹出与此页面。 如果要弥补这一点也可以下载nadgrid文件,并使用它 。 对于我的数据,这个由1米左右移动的点。



Answer 2:

得到它了:

string srcPrj4String = "+proj=longlat +ellps=WGS84 +towgs84=0,0,0 +no_defs";
string destPrj4String = "+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894 +units=m +no_defs";

干杯!



Answer 3:

EPSG:27700上spatialreference.org给出了不同的字符串来定义这一点,其中包括一个proj4。

下面是使用红宝石 proj4绑定示例代码:

#!/usr/bin/ruby
require 'rubygems'
require 'proj4'

#Some example WGS84 lat lon coordinates to convert:
lon = -0.10322
lat = 51.52237

srcPoint = Proj4::Point.new(Math::PI * lon.to_f / 180, 
                            Math::PI * lat.to_f / 180)

srcPrj  = Proj4::Projection.new("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs") 
destPrj = Proj4::Projection.new("+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.999601 +x_0=400000 +y_0=-100000 +ellps=airy +towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894 +units=m +no_defs <>")

point = srcPrj.transform(destPrj, srcPoint)

puts "http://www.openstreetmap.org/?mlat=" + lat.to_s + "&mlon=" + lon.to_s + "&zoom=16"
puts "Converts to:";
puts "http://streetmap.co.uk/grid/" + point.x.round.to_s + "_" + point.y.round.to_s + "_106"

输出:

http://www.openstreetmap.org/?mlat=51.52237&mlon=-0.10322&zoom=16
转换为:
http://streetmap.co.uk/grid/531691_182089_106

所以,这是现在的工作准确。 本来我是想只是“destPrj”字符串,并呼吁“前进”的方法,但这种拒绝做基准转换,造成的一切是百米了。 这似乎是必要使用“srcPrj”字符串和“改造”的方法,来获得数据转换发生。

另请参见我的博客文章: Ruby代码从WGS84转换为英国陆军测量局坐标系? 其包括用于做同样的纯红宝石版本(未proj4)



文章来源: PROJ.4 library and OSGB36