组保留的标签 余下为需要删除的标签
unset($oldtag[$key]);
}
}
}
if (!empty($oldtag)) {
$tagids = array();
foreach ($oldtag as $tagid => $tagname) {
$tagids[] = $tagid;
}
well_oldtag_delete($tagids, $tid);
}
$r = well_tag_process($tid, $fid, $create_tag, $tagarr);
return $r;
}
// 删除标签和绑定的主题
function well_oldtag_delete($tagids, $tid)
{
$pagesize = count($tagids);
$arrlist = well_tag_find_by_tagids($tagids, 1, $pagesize);
$delete_tagids = array(); // 删除
$tagids = array();
$n = 0;
foreach ($arrlist as $val) {
++$n;
if (1 == $val['count']) {
// 只有一个主题
$delete_tagids[] = $val['tagid'];
} else {
$tagids[] = $val['tagid'];
}
}
!empty($delete_tagids) and well_tag_delete($delete_tagids);
$arlist = well_tag_thread_find_by_tid($tid, 1, $n);
if ($arlist) {
$ids = array();
foreach ($arlist as $val) $ids[] = $val['id'];
well_tag_thread_delete($ids);
}
!empty($tagids) and well_tag_update($tagids, array('count-' => 1));
}
// 标签数据处理 $arr=新提交的数组 $tagarr=保留的旧标签
function well_tag_process($tid, $fid, $new_tags = array(), $tagarr = array())
{
if (empty($tid)) return '';
// 新标签处理入库
if ($new_tags) {
$threadarr = array();
$tagids = array();
$i = 0;
$size = 5;
$n = count($tagarr);
$n = $n > $size ? $size : $size - $n;
foreach ($new_tags as $name) {
++$i;
$name = trim($name);
$name = stripslashes($name);
$name = strip_tags($name);
$name = str_replace(array(' ', '#', "@", "$", "%", "^", '&', '·', '<', '>', ';', '`', '~', '!', '¥', '……', ';', '?', '?', '-', '—', '_', '=', '+', '.', '{', '}', '|', ':', ':', '、', '/', '。', '[', ']', '【', '】', '‘', ' ', ' ', ' ', ' ', ' '), '', $name);
$name = htmlspecialchars($name, ENT_QUOTES);
if ($name && $i <= $n) {
// 查询标签
$read = well_tag_read_name($name);
if ($read) {
// 存在 count+1
$tagids[] = $read['tagid'];
} else {
// 入库
$arr = array('name' => $name, 'count' => 1);
$tagid = well_tag_create($arr);
FALSE === $tagid and message(-1, lang('create_failed'));
$read = array('tagid' => $tagid, 'name' => $name);
}
$tag_thread = array('tagid' => $read['tagid'], 'tid' => $tid);
$threadarr[] = $tag_thread;
$tagarr[$read['tagid']] = $read['name'];
}
}
!empty($threadarr) and tag_thread_big_insert($threadarr);
!empty($tagids) and well_tag_update($tagids, array('count+' => 1));
}
$json = empty($tagarr) ? '' : xn_json_encode($tagarr);
return $json;
}
?> $v = implode(",", $v);
$temp[] = $v;
}
// 去掉重复的字符串,也就是重复的一维数组
$temp = array_unique($temp);
// 再将拆开的数组重新组装
$output = array();
foreach ($temp as $k => $v) {
if ($stkeep) $k = $starr[$k];
if ($ndformat) {
$temparr = explode(",", $v);
foreach ($temparr as $ndkey => $ndval) $output[$k][$ndarr[$ndkey]] = $ndval;
} else $output[$k] = explode(",", $v);
}
return $output;
}
// 合并二维数组 如重复 值以第一个数组值为准
function array2_merge($array1, $array2, $key = '')
{
if (empty($array1) || empty($array2)) return NULL;
$arr = array();
foreach ($array1 as $k => $v) {
isset($v[$key]) ? $arr[$v[$key]] = array_merge($v, $array2[$k]) : $arr[] = array_merge($v, $array2[$k]);
}
return $arr;
}
/*
* 对二维数组排序 两个数组必须有一个相同的键值
* $array1 需要排序数组
* $array2 按照该数组key排序
* */
function array2_sort_key($array1, $array2, $key = '')
{
if (empty($array1) || empty($array2)) return NULL;
$arr = array();
foreach ($array2 as $k => $v) {
if (isset($v[$key]) && $v[$key] == $array1[$v[$key]][$key]) {
$arr[$v[$key]] = $array1[$v[$key]];
} else {
$arr[] = $v;
}
}
return $arr;
}
?>
精灵3P+Pix4D简单航测详细应用教程编程频道|福州电脑网
精灵3P+Pix4D简单航测详细应用教程
编程之家460
更新时间:2026-04-03 20:29:35 本文章摘自网络网站~~只为学习!
最近遇到一个项目,某地要做一个小城镇沙盘,需要航拍摄影资料作参考,第一次因为沟通不到位(甲方-委托方-我),委托方没来,也没和甲方详细沟通好,只电话里和我说了一下怎么拍,结果委托方满意甲方不满意,说看着头晕。需要二次补拍,甲方提出俯拍分区域几张图能看清每个小区建筑。因为甲地长宽约是3KMX4KM,我利用休息时间做了拍摄实验,因为做过全景,就准备俯拍完了用PTGUI去拼,先百米高度拍,使用精灵3手动飞的有风航线不好控制,拍下来效果不好,拼接因为照片重复率角度问题效果不好。设定定时拍照速度自己控制。先用PTGUI处理,因为角度和覆盖率的问题效果不好,PTGUI对拍摄角度很讲究,一个角度拍的拼接最好。通过查询航测技术资料,发现现在常用的一款航测图片处理软件PIX4D,遂用Pix4Dmapper电脑版进行处理,虽然照片也不理想但拼接效果比PTGUI强很多了。专业版才能输出正摄影像,免费版只能输出视频。
想想手动飞航线不可能控制的那么好那么直(航测要求高),精灵3也有航点功能但很鸡肋,要飞到某个点设定或者拿到那个位置设定,才能加载航点,同时航点也不是为航测类用的。继续求教各个论坛。最终发现有精灵航测相关帖子,但都是主要面向后期内业处理一个大概的流程的,具体的航测软件应用和操作不是很详细,我也是折腾了好多天泡在航测群里请教交流才搞成的。遂把详细的使用教程分享给大家。目前只研究了两个适用于精灵航测的软件Pix4Dmapper (BETA)2.07、altizure2.4.1,前者侧重于正摄影像和建模(电脑端处理软件正版贵好几万,手机端免费),后者主要侧重于云三维建模,把按照三维建模要求的照片上传的官网进行云端处理,只需要拍照上传就不用管了(官方网站https://www.altizure/explore)
下面是我实验的结果,没有拍俯拍,也没有按要求五个角度航线拍所以精细度很一般。
这期的重点在Pix4Dmapper (BETA)2.07(测试版使用有风险,2.0以下老版本不支持精灵3和悟),因为PDF说明文档也是翻译讲的也很粗重要的细节没讲到,最关键的运行环境没有讲到,导致我折腾许久都没搞成,现在就来详细说说怎么连接精灵3P进行航测拍照。重要的话说三遍,一定要在手机上安装谷歌框架服务商店套件 一定要在手机上安装谷歌框架服务商店套件 一定要在手机上安装谷歌框架服务商店套件 学学最近流行语,因为我只有安卓的机子,IOS用户请自行搜索相关软件。我也是好久不玩游戏,忘了想起来装装这个套件,还是群里有人提醒。现在国产手机都没有谷歌套件,原因大家都知道,但这个套件作用很大,现在所有安卓软件都是基于谷歌的标准去开发的,这个套件能起到兼容性作用,同时很多应用要使用谷歌服务。手机没有的下载谷歌安装神器进行安装或者卡刷的形式。如果不能运行,就需要对手机进行root,相关教程百度自家手机。我手上目前试验了MX4取得root权限成功安装,小米4C正在折腾中,Pix4Dmapper
(BETA)2.07和altizure2.4.1正常使用,这两个软件都需要谷歌套件。还有就是刷国际版手机固件自带谷歌套件
有了运行环境基础再安装Pix4Dmapper (BETA)2.07、altizure2.4.1,实验手机魅族MX4,手机打开GPS和网络(必须的),需要下载卫星地图,如果你对拍摄区域很熟可以不需要卫星地图。Pix4Dmapper (BETA)2.07{目前精灵3使用开发者固件1.64,因为提前刷了不能退回官方固件所以无法实验官方固件是否支持}、altizure2.4.1支持官方固件(官网介绍)
实际室外使用步骤(室内可以去桨,altizure软件能够实验链接情况,Pix4Dmapper必须室外各个条件达到才能连上耐心往后看),打开手机调试模式,开启遥控链接手机提示如下
这里不要勾选“下次默认选择此项,不再提示”,勾了就不再提示选择软件了。先选择DJIGO 启动精灵电源,在DJIGO中对相机参数进行设置,等待返航点锁定用GPS模式起飞,飞到近处安全高度,完全退出DJIGO(结束该进程)。拔掉数据线,再次链接数据线,还是上图提示,选Pix4Dmapper(Capture)
初次进入软件
最好注册
选择机型,这两步提前做好
任务编辑,进入软件就把模式开关拨到F档(任何第三方通过大疆SDK开发的APP必须打开F档)
设定好任务准备起飞
开始任务界面,个人理解的通俗翻译 ,不正之处请大家指正
上图是首次试飞的,该软件飞行器最远点里起飞点不超过150M,同时中间不要让信号干扰遮挡导致收不到实时飞行数据,如果断掉信号假如准备继续任务不要退出该软件,调整天线等待飞回来信号恢复,如果中途退出软件将导致自动拍照失败。同时任务执行中点击相机没有实时图像显示(应该是个BUG)再切回任务界面丢失信号反而会卡顿几秒才会重新有信号显示同时飞行器图标按照航线实时变动的画面。
这是我第一次没有锁定返航点(因为中间软件退出了,所以执行完任务悬停,我手动飞回来的,当有这种情况不要慌张,任务结束是可控的,打方向感杆看飞行器图标跟不跟着动,红色机臂是头绿色机臂是尾,这时候应该能看见起飞点,朝起飞点飞,怕不保险切GPS档暂时定点,退出软件再次运行DJIGO,通过DJIGO看图像飞回来。(电足够你切换软件采用)
第二次试验,完成任务自动返航
如果有网络传输图片到手机,可以关掉,相机内存卡有原始照片,第二次试验因为天色很晚,相机没调好快门只有8,导致照片模糊。实际航测是有拍摄环境标准的,大家感兴趣可以在附件里下来看。
重复率80%
用PIX4D电脑版处理的,因为照片不行又用PS拼了下,大家将就看 ,等星期天天气好再拍一组
21.jpg (124.2 KB, 下载次数: 1)
下载附件 保存到相册
2016-1-9 00:32 上传
现在软件在测试阶段,使用有风险,软件开发者和大疆不会承担因此造成的事故,有需要的看风险自行决定,本帖作者也不负责因用以上软件造成的后果。
本文发布于:2025-08-09,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:精灵简单教程详细Pix4D
发布评论