一切顺利
我试图经/纬度坐标转换为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,但一切我试试,不行
有任何想法吗?
提前谢谢了
莱迪
谷歌搜索变成了这个由约翰·史蒂文森博士,曼彻斯特大学地球科学学术-谁应该得到它的权利,如果有人做。 这里有一个报价。
问题是,要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米左右移动的点。
得到它了:
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";
干杯!
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)