数据库 - Model 前置说明
官方开源项目 抓取代理IP

介绍

地理位置常用操作,从v2.5.13版本起支持,依赖\x\common\Geography组件。

百度转腾讯/高德坐标

$longitude = 103.834118;
$latitude = 36.069094;
var_dump(\x\common\Geography::baidu_to_tencent($longitude, $latitude));

// 输出
array(2) {
  ["longitude"]=>
  string(19) "103.827634505829849"
  ["latitude"]=>
  string(18) "36.063056310546145"
}

腾讯/高德转百度坐标

$longitude = 103.827634505829849;
$latitude = 36.063056310546145;
var_dump(\x\common\Geography::tencent_to_baidu($longitude, $latitude));

// 输出
array(2) {
  ["longitude"]=>
  string(10) "103.834118"
  ["latitude"]=>
  string(9) "36.069094"
}

计算两点之间的直线距离

// 起点
$longitude1 = 76.000675;
$latitude1 = 39.462105;
// 终点
$longitude2 = 75.969844;
$latitude2 = 39.463154;
$unit='m'; // 返回值单位 km.公里【默认】 m.米
var_dump(\x\common\Geography::distance($longitude1, $latitude1, $longitude2, $latitude2, $unit));

// 输出
float(2649.1859)

判断经纬度是否在地理围栏内

// 围栏集合,可以用百度/腾讯地图API绘制获得
$list = [
    ["longitude"=>113.382204,"latitude"=>23.132168],
    ["longitude"=>113.382168,"latitude"=>23.128479],
    ["longitude"=>113.388025,"latitude"=>23.128047],
    ["longitude"=>113.388492,"latitude"=>23.134627]
];
// 检测的经纬度
$longitude = 75.969844;
$latitude = 39.463154;
var_dump(\x\common\Geography::is_fence($longitude, $latitude, $list));

// 输出 true.围栏内   false.围栏外
bool(false)

判断经纬度是否在中国大陆内

// 检测的经纬度
$longitude = 75.969844;
$latitude = 39.463154;
var_dump(\x\common\Geography::is_chinese_mainland($longitude, $latitude));

// 输出 true.是   false.否
bool(true)

经纬度纠偏

$list参数二维结构说明:

参数名称 必须 说明
longitude 经度
latitude 纬度
create_time 轨迹点的上传时间戳
error_circle 误差圈
speed 速度

// 经纬度集合
$list = json_decode('[{"latitude":"36.069094","longitude":"103.834118","error_circle":"61","create_time":"1589126727","speed":"0"},{"latitude":"36.069094","longitude":"103.834118","error_circle":"61","create_time":"1589126737","speed":"0"},{"latitude":"36.069077","longitude":"103.834114","error_circle":"61","create_time":"1589126747","speed":"0"},{"latitude":"36.069120","longitude":"103.834120","error_circle":"61","create_time":"1589126757","speed":"0"},{"latitude":"36.069120","longitude":"103.834120","error_circle":"61","create_time":"1589126767","speed":"0"},{"latitude":"36.069106","longitude":"103.834161","error_circle":"62","create_time":"1589126777","speed":"0"},{"latitude":"36.069106","longitude":"103.834161","error_circle":"62","create_time":"1589126787","speed":"0"},{"latitude":"36.069106","longitude":"103.834161","error_circle":"62","create_time":"1589126797","speed":"0"},{"latitude":"36.069053","longitude":"103.834157","error_circle":"62","create_time":"1589126807","speed":"0"},{"latitude":"36.068989","longitude":"103.834130","error_circle":"64","create_time":"1589126817","speed":"0"},{"latitude":"36.068953","longitude":"103.834191","error_circle":"63","create_time":"1589126827","speed":"0"},{"latitude":"36.068924","longitude":"103.834191","error_circle":"63","create_time":"1589126837","speed":"0"},{"latitude":"36.068760","longitude":"103.834241","error_circle":"64","create_time":"1589126847","speed":"0"},{"latitude":"36.068747","longitude":"103.834245","error_circle":"61","create_time":"1589126857","speed":"0"},{"latitude":"36.068861","longitude":"103.833887","error_circle":"63","create_time":"1589126878","speed":"0"},{"latitude":"36.068769","longitude":"103.834193","error_circle":"59","create_time":"1589126881","speed":"0"},{"latitude":"36.068932","longitude":"103.833557","error_circle":"67","create_time":"1589126887","speed":"0"},{"latitude":"36.069275","longitude":"103.832262","error_circle":"60","create_time":"1589126897","speed":"0"},{"latitude":"36.069352","longitude":"103.831911","error_circle":"58","create_time":"1589126907","speed":"0"},{"latitude":"36.069357","longitude":"103.831821","error_circle":"60","create_time":"1589126917","speed":"0"},{"latitude":"36.069169","longitude":"103.831213","error_circle":"40","create_time":"1589126927","speed":"0"},{"latitude":"36.069110","longitude":"103.831211","error_circle":"40","create_time":"1589126937","speed":"0"}]', true);
// 开始纠偏
var_dump(\x\common\Geography::longitude_latitude_correction($list));

// 返回值示例
array(3) {
  ["list"]=>
  array(10) {
    [0]=>
    array(7) {
      ["latitude"]=>
      string(9) "36.069094"
      ["longitude"]=>
      string(10) "103.834118"
      ["error_circle"]=>
      string(2) "61"
      ["create_time"]=>
      string(10) "1589126737"
      ["speed"]=>
      string(1) "0"
      ["angle"]=>
      int(0)
      ["delete"]=>
      int(1)
    }
    [1]=>
    array(6) {
      ["latitude"]=>
      string(9) "36.069120"
      ["longitude"]=>
      string(10) "103.834120"
      ["error_circle"]=>
      string(2) "61"
      ["create_time"]=>
      string(10) "1589126757"
      ["speed"]=>
      string(1) "0"
      ["angle"]=>
      int(22)
    }
    [2]=>
    array(6) {
      ["latitude"]=>
      string(9) "36.068760"
      ["longitude"]=>
      string(10) "103.834241"
      ["error_circle"]=>
      string(2) "64"
      ["create_time"]=>
      string(10) "1589126847"
      ["speed"]=>
      string(1) "0"
      ["angle"]=>
      int(55)
    }
    [3]=>
    array(6) {
      ["latitude"]=>
      string(9) "36.068861"
      ["longitude"]=>
      string(10) "103.833887"
      ["error_circle"]=>
      string(2) "63"
      ["create_time"]=>
      string(10) "1589126878"
      ["speed"]=>
      string(1) "0"
      ["angle"]=>
      int(176)
    }
    [4]=>
    array(6) {
      ["latitude"]=>
      string(9) "36.068932"
      ["longitude"]=>
      string(10) "103.833557"
      ["error_circle"]=>
      string(2) "67"
      ["create_time"]=>
      string(10) "1589126887"
      ["speed"]=>
      string(1) "0"
      ["angle"]=>
      int(177)
    }
    [5]=>
    array(6) {
      ["latitude"]=>
      string(9) "36.069275"
      ["longitude"]=>
      string(10) "103.832262"
      ["error_circle"]=>
      string(2) "60"
      ["create_time"]=>
      string(10) "1589126897"
      ["speed"]=>
      string(1) "0"
      ["angle"]=>
      int(177)
    }
    [6]=>
    array(6) {
      ["latitude"]=>
      string(9) "36.069352"
      ["longitude"]=>
      string(10) "103.831911"
      ["error_circle"]=>
      string(2) "58"
      ["create_time"]=>
      string(10) "1589126907"
      ["speed"]=>
      string(1) "0"
      ["angle"]=>
      int(170)
    }
    [7]=>
    array(6) {
      ["latitude"]=>
      string(9) "36.069357"
      ["longitude"]=>
      string(10) "103.831821"
      ["error_circle"]=>
      string(2) "60"
      ["create_time"]=>
      string(10) "1589126917"
      ["speed"]=>
      string(1) "0"
      ["angle"]=>
      int(159)
    }
    [8]=>
    array(6) {
      ["latitude"]=>
      string(9) "36.069169"
      ["longitude"]=>
      string(10) "103.831213"
      ["error_circle"]=>
      string(2) "40"
      ["create_time"]=>
      string(10) "1589126927"
      ["speed"]=>
      string(1) "0"
      ["angle"]=>
      int(109)
    }
    [9]=>
    array(6) {
      ["latitude"]=>
      string(9) "36.069110"
      ["longitude"]=>
      string(10) "103.831211"
      ["error_circle"]=>
      string(2) "40"
      ["create_time"]=>
      string(10) "1589126937"
      ["speed"]=>
      string(1) "0"
      ["angle"]=>
      int(0)
    }
  }
  ["num_rate"]=>
  float(54.55)
  ["km"]=>
  float(0.3372)
}

返回值说明:

参数名称 说明
list 纠偏后的经纬度集合
list 纠偏后的公里数(KM)
num_rate 抛点率(%)

SW-X

企业级 - 高性能 PHP 框架

最后更新:3年前 . 作者-小黄牛

本篇目录