使用PHPcoord转换英国6位网格参考至经纬度的问题
解决PHPcoord中6位网格参考转经纬度的衔接问题
我之前在使用PHPcoord处理英国网格参考转换时也踩过类似的坑,其实核心问题是你没必要把第一步的OSRef对象转成字符串——这个对象本身就自带了直接转换到经纬度的方法,而且它的属性就能直接拿到你需要的东向/北向坐标数值。
给你整理一套完整的正确流程:
1. 确保依赖与命名空间正确
首先确认已经通过Composer安装了PHPcoord,并且在代码中引入对应的类:
use PHPCoord\OSRef; use PHPCoord\LatLng;
2. 6位网格参考转OSGB坐标对象
用OSRef::fromSixFigureReference()方法直接生成OSRef实例,这个实例已经包含了所有需要的坐标数据:
// 你的6位网格参考 $sixFigureRef = 'TG514131'; // 第一步转换:得到OSGB坐标对象 $osRef = OSRef::fromSixFigureReference($sixFigureRef); // 如果需要单独获取东向/北向数值,直接访问属性即可 $easting = $osRef->easting; // 651400 $northing = $osRef->northing; // 313100
3. OSGB坐标直接转经纬度
不需要手动传递数值,直接调用OSRef对象的toLatLng()方法就能得到经纬度对象:
// 第二步转换:得到经纬度对象 $latLng = $osRef->toLatLng(); // 获取最终的经纬度数值 $latitude = $latLng->lat; $longitude = $latLng->lng;
为什么你之前的尝试没成功?
你提到尝试转换$os6x->toStri...,应该是想把对象转成字符串再提取坐标,但PHPcoord的OSRef对象的字符串输出是格式化后的文本(比如类似TG 514000, 131000),不是可直接用的数值格式,所以没法作为第二步的输入。直接使用对象自带的方法和属性才是正确的打开方式。
内容的提问来源于stack exchange,提问作者Digital Essence
相关产品推荐
相关产品推荐

