使用PHPCoord执行坐标转换示例时触发TypeError错误
解决PHPCoord v5.2.0中的TypeError坐标转换问题
嘿,我来帮你搞定这个头疼的TypeError!从错误信息来看,你大概率是在调用GeographicPoint::create()的时候,不小心把**地理坐标系实例(Geographic2D)当成了方法要求的角度参数(Angle)**传进去了——这俩类型完全不匹配,难怪会触发报错。
我给你梳理下正确的操作流程,附上完整的示例代码,帮你把NAD83坐标转成佛罗里达平面坐标:
第一步:确认依赖安装正确
先确保你装了兼容版本的扩展包,在项目根目录执行:
composer require phpcoord/phpcoord:^5.2 phpcoord/datapack-northamerica:^5.2
这样能保证主库和北美数据扩展包版本一致,避免兼容性问题。
第二步:正确的坐标转换代码
别直接照搬文档片段时漏了关键步骤,完整的转换逻辑应该是这样的:
<?php require 'vendor/autoload.php'; use PHPCoord\GeographicPoint; use PHPCoord\CoordinateReferenceSystem\Geographic2D; use PHPCoord\CoordinateReferenceSystem\Projected; use PHPCoord\UnitOfMeasure\Angle\Degree; // 1. 定义源坐标系:NAD83 $nad83CRS = Geographic2D::fromSRID(Geographic2D::SRID_NAD83); // 2. 创建经纬度的角度实例(这才是GeographicPoint::create需要的核心参数!) // 替换成你实际的经纬度数值 $lat = new Degree(28.5383); $lon = new Degree(-81.3792); // 3. 创建带坐标系的地理点 $geographicPoint = GeographicPoint::create($lat, $lon, null, $nad83CRS); // 4. 定义目标坐标系:佛罗里达平面坐标系(这里以东区为例,根据你的需求换对应的SRID) $floridaCRS = Projected::fromSRID(Projected::SRID_NAD83_FLORIDA_EAST); // 5. 执行转换 $projectedPoint = $geographicPoint->convertTo($floridaCRS); // 输出转换结果 echo "佛罗里达平面坐标(东区):\n"; echo "东向坐标:" . $projectedPoint->getEasting()->getValue() . "\n"; echo "北向坐标:" . $projectedPoint->getNorthing()->getValue() . "\n";
错误原因复盘
你之前的代码应该是误将$nad83CRS(Geographic2D实例)传给了GeographicPoint::create()的第一个参数,但这个方法的第一个参数要求是纬度的Angle实例(比如Degree),第二个是经度的Angle实例,第四个才是坐标系参数——顺序和类型都不能错!
额外检查点
- 确认你的use语句没有写错,比如不要把
Geographic2D和GeographicPoint搞混; - 如果还是有问题,执行
composer dump-autoload刷新自动加载缓存,确保类能被正确找到。
内容的提问来源于stack exchange,提问作者morgyface
相关产品推荐
相关产品推荐

