公交定位应用开发

公交定位 公众号 坐标查询 公交查询

项目介绍

前期做的项目,当时公众号名为”烟台微公交“,现在改名为”烟台公交时刻“。核心功能:微公交首页,公交定位,站点查询,公交查询,网线调整,失物招领,满意度调查,随手拍等。

前端使用微信公众号,后台使用thinkphp5框架。

重点难点

对接第三方api接口实现公交定位,第三方api只提供了线路站点名、站点坐标、公交车信息、公交车坐标等信息。需要自己根据坐标信息进行转换。并实现了公交定位精确到两个站点的具体位置,用户定期刷新可实时看到公交轨迹。支持站点换向功能。

通过linux批处理的方式,定期更新线路站点信息;定期更新公交位置

对接jssdk实现用户定位;使用原生算法计算距离用户距离最近的站点进行推荐显示。

核心:坐标转换为距离;距离用户最近的车算法。

收获

坐标转化为距离算法:

<?php

/**
 * 计算两点之间的距离
 * @param $lng1 经度1
 * @param $lat1 纬度1
 * @param $lng2 经度2
 * @param $lat2 纬度2
 * @param int $unit m,km
 * @param int $decimal 位数
 * @return float
 */
function getDistance($lng1, $lat1, $lng2, $lat2, $unit = 2, $decimal = 2)
{

    $EARTH_RADIUS = 6370.996; // 地球半径系数
    $PI           = 3.1415926535898;

    $radLat1 = $lat1 * $PI / 180.0;
    $radLat2 = $lat2 * $PI / 180.0;

    $radLng1 = $lng1 * $PI / 180.0;
    $radLng2 = $lng2 * $PI / 180.0;

    $a = $radLat1 - $radLat2;
    $b = $radLng1 - $radLng2;

    $distance = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2)));
    $distance = $distance * $EARTH_RADIUS * 1000;

    if ($unit === 2) {
        $distance /= 1000;
    }

    return round($distance, $decimal);
}

致知网络科技© 2020-2025 鲁ICP备20031360号-2