一切顺利
我正在尝试使用proj.4库将纬度/经度坐标转换为OSGB36 x和y.
还有其他人成功完成了吗?我需要填充srcPrj4String和destPrj4String变量,例如
string srcPrj4String ="+ proj = longlat + ellps = WGS84 + datum = WGS84 + no_defs";
string destPrj4String ="+ proj = utm + zone = 11 + ellps = GRS80 + datum = NAD83 + units = m";
但我无法弄清楚destPrj4String应该与OSGB36一起使用 - 我知道数据应该是+ datum = OSGB36,但我尝试的一切都不起作用
有任何想法吗?
提前谢谢了
莱迪
谷歌搜索变成了这个由约翰·史蒂文森博士,曼彻斯特大学地球科学学术-谁应该得到它的权利,如果有人做.这是一个引用.
问题是转到OSGB36需要投影和 基准转换.在2007年10月之前,proj只进行了投影,因此产生了很大的偏移.您可以通过运行'proj -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 <>
Run Code Online (Sandbox Code Playgroud)
新版本有+ datum = 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 <>
Run Code Online (Sandbox Code Playgroud)
一个复杂因素是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";
Run Code Online (Sandbox Code Playgroud)
干杯!