PHP经纬度距离计算函数调用无结果问题求助
解决经纬度字符串传递给距离计算函数的问题
你这是踩了个新手常遇到的小坑:从数据库拿到的ride_from和ride_to是合并了纬度和经度的字符串(比如32.9697, -96.80322),但你的distance函数需要的是四个独立的数值参数(lat1, lon1, lat2, lon2),再加上单位参数,直接传整个字符串肯定得不到结果。
我给你一步步梳理解决方案:
1. 先拆分经纬度字符串
首先要把每个位置的字符串拆成单独的纬度和经度值,用explode()分割逗号,再去掉多余空格并转成浮点型:
// 拆分单个位置的经纬度字符串为数值 function parseCoordinates($coordStr) { // 按逗号分割字符串 $parts = explode(',', $coordStr); // 去除空格并转成浮点型 $lat = (float)trim($parts[0]); $lon = (float)trim($parts[1]); return ['lat' => $lat, 'lon' => $lon]; }
2. 正确调用distance函数
在你的数据库循环里,先拆分ride_from和ride_to的坐标,再传入distance函数:
if (!empty($usersInfo)) { foreach($usersInfo as $key => $users) { // 拆分出发地和目的地的经纬度 $fromCoords = parseCoordinates($users['ride_from']); $toCoords = parseCoordinates($users['ride_to']); // 调用distance函数,这里示例选公里作为单位("K") $calcDistance = distance( $fromCoords['lat'], $fromCoords['lon'], $toCoords['lat'], $toCoords['lon'], "K" ); // 格式化输出结果 echo "从出发地到目的地的距离:" . number_format($calcDistance, 2) . " 公里<br>"; } }
3. 可选的错误处理(推荐添加)
为了避免数据库里的坐标格式错误导致代码崩溃,可以在拆分函数里加个简单校验:
function parseCoordinates($coordStr) { $parts = explode(',', $coordStr); // 校验是否是合法的经纬度格式(两个值) if(count($parts) !== 2) { return ['lat' => 0, 'lon' => 0]; } $lat = (float)trim($parts[0]); $lon = (float)trim($parts[1]); // 校验经纬度的数值范围 if($lat < -90 || $lat > 90 || $lon < -180 || $lon > 180) { return ['lat' => 0, 'lon' => 0]; } return ['lat' => $lat, 'lon' => $lon]; }
为什么你之前的调用无效?
你之前写的$ridefrom = distance($users['ride_from']);只传了1个参数,但distance函数需要5个参数($lat1, $lon1, $lat2, $lon2, $unit),参数数量不匹配,函数无法正常执行,自然没有输出结果。
内容的提问来源于stack exchange,提问作者new developer
相关产品推荐
相关产品推荐

