地理位置常用操作,从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 | 抛点率(%) |