You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:05:32