围栏可以从文件导入
This commit is contained in:
+264
-51
@@ -242,6 +242,177 @@ void OPMapWidget::table_clicked(void)
|
||||
}
|
||||
*/
|
||||
}
|
||||
/*
|
||||
void OPMapWidget::AddgeoPolygon(int type,int index,double lat,double lng,double alt,QColor color)
|
||||
{
|
||||
qDebug() << "AddVirtualMargin" << type << index;
|
||||
|
||||
internals::PointLatLng LatLng;
|
||||
LatLng.SetLat(lat);
|
||||
LatLng.SetLng(lng);
|
||||
|
||||
QMap<int,VirtualMargin *> virtualmarginmap = VirtualMarginPoints.value(type);
|
||||
QMap<int,VirtualMarginLine *> virtualmarginlinemap = VirtualMarginlinemapLines.value(type);
|
||||
|
||||
|
||||
VirtualMargin *vm = new VirtualMargin(index,LatLng,alt,color,map);
|
||||
virtualmarginmap.insert(index,vm);
|
||||
|
||||
foreach (VirtualMarginLine *l, virtualmarginlinemap) {
|
||||
if(l){
|
||||
disconnect(l,nullptr,nullptr,nullptr);
|
||||
delete l;
|
||||
}
|
||||
}
|
||||
|
||||
virtualmarginlinemap.clear();
|
||||
|
||||
|
||||
for(QMap<int,VirtualMargin *>::iterator i = virtualmarginmap.begin();i != virtualmarginmap.end();++i)
|
||||
{
|
||||
VirtualMargin *v = i.value();
|
||||
if(v)
|
||||
{
|
||||
if(v->number > 0)
|
||||
{
|
||||
VirtualMarginLine *l = new VirtualMarginLine(virtualmarginmap.value(v->number - 1),v,map,color);
|
||||
l->setOpacity(overlayOpacity);
|
||||
l->show();
|
||||
|
||||
virtualmarginlinemap.insert(virtualmarginlinemap.size(),l);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(virtualmarginmap.size() >= 2)
|
||||
{
|
||||
VirtualMargin *vm_first = virtualmarginmap.first();
|
||||
VirtualMargin *vm_last = virtualmarginmap.last();
|
||||
|
||||
if((vm_first)&&(vm_last))
|
||||
{
|
||||
VirtualMarginLine *l = new VirtualMarginLine(vm_first,vm_last,map,color);
|
||||
l->setOpacity(overlayOpacity);
|
||||
l->show();
|
||||
|
||||
virtualmarginlinemap.insert(virtualmarginlinemap.size(),l);
|
||||
}
|
||||
}
|
||||
|
||||
VirtualMarginPoints.insert(type,virtualmarginmap);
|
||||
VirtualMarginlinemapLines.insert(type,virtualmarginlinemap);
|
||||
|
||||
//FlushVirtualMargin(type);
|
||||
|
||||
|
||||
foreach (VirtualMargin *v, virtualmarginmap) {
|
||||
qDebug() << "create a virtual point" << v->number;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void OPMapWidget::ClosegeoPolygon(int type)
|
||||
{
|
||||
if(type == 0)
|
||||
{
|
||||
if(virtualmarginmap_red.size() >= 2)
|
||||
{
|
||||
VirtualMargin *vm_first = virtualmarginmap_red.first();
|
||||
VirtualMargin *vm_last = virtualmarginmap_red.last();
|
||||
|
||||
if((vm_first)&&(vm_last))
|
||||
{
|
||||
VirtualMarginLine *l = new VirtualMarginLine(vm_first,vm_last,map,WarningColor);
|
||||
l->setOpacity(overlayOpacity);
|
||||
l->show();
|
||||
|
||||
virtualmarginlinemap_red.insert(virtualmarginlinemap_red.size(),l);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(type == 1)
|
||||
{
|
||||
if(virtualmarginmap_orange.size() >= 2)
|
||||
{
|
||||
VirtualMargin *vm_first = virtualmarginmap_orange.first();
|
||||
VirtualMargin *vm_last = virtualmarginmap_orange.last();
|
||||
|
||||
if((vm_first)&&(vm_last))
|
||||
{
|
||||
VirtualMarginLine *l = new VirtualMarginLine(vm_first,vm_last,map,NoticeColor);
|
||||
l->setOpacity(overlayOpacity);
|
||||
l->show();
|
||||
|
||||
virtualmarginlinemap_orange.insert(virtualmarginlinemap_orange.size(),l);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void OPMapWidget::RemovegeoPolygon(int type)
|
||||
{
|
||||
|
||||
QMap<int,VirtualMargin*> virtualmarginmap = VirtualMarginPoints.value(type);
|
||||
QMap<int,VirtualMarginLine *> virtualmarginlinemap = VirtualMarginlinemapLines.value(type);
|
||||
|
||||
//移除虚拟边界
|
||||
foreach (VirtualMargin *vm, virtualmarginmap) {
|
||||
if(vm)
|
||||
{
|
||||
qDebug() << "del vm" << vm->number << vm->coord.Lat() << vm->coord.Lng();
|
||||
disconnect(vm,nullptr,nullptr,nullptr);
|
||||
delete vm;
|
||||
}
|
||||
}
|
||||
//从列表删除所有
|
||||
virtualmarginmap.clear();
|
||||
|
||||
//移除虚拟边界
|
||||
foreach (VirtualMarginLine *l, virtualmarginlinemap) {
|
||||
if(l)
|
||||
{
|
||||
disconnect(l,nullptr,nullptr,nullptr);
|
||||
delete l;
|
||||
}
|
||||
}
|
||||
//从列表删除所有
|
||||
virtualmarginlinemap.clear();
|
||||
|
||||
VirtualMarginPoints.remove(type);
|
||||
VirtualMarginlinemapLines.remove(type);
|
||||
|
||||
}
|
||||
|
||||
void OPMapWidget::FlushgeoPolygon(int type)
|
||||
{
|
||||
|
||||
|
||||
|
||||
if(type == 0)
|
||||
{
|
||||
for(QMap<int,VirtualMargin *>::iterator i = virtualmarginmap_red.begin();i != virtualmarginmap_red.end();++i)
|
||||
{
|
||||
VirtualMargin *vm = i.value();
|
||||
if(vm)
|
||||
{
|
||||
qDebug() << "vm" << vm->number << vm->coord.Lat() << vm->coord.Lng();
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(type == 1)
|
||||
{
|
||||
for(QMap<int,VirtualMargin *>::iterator i = virtualmarginmap_orange.begin();i != virtualmarginmap_orange.end();++i)
|
||||
{
|
||||
VirtualMargin *vm = i.value();
|
||||
if(vm)
|
||||
{
|
||||
qDebug() << "vm" << vm->number << vm->coord.Lat() << vm->coord.Lng();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
@@ -819,6 +990,10 @@ void OPMapWidget::mouseDoubleClickEvent(QMouseEvent *event)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
emit MouseDoubleClickEvent(event);
|
||||
@@ -1337,9 +1512,11 @@ void OPMapWidget::ConnectWP(WayPointItem *item)
|
||||
item, SLOT(setWPProperty(float,float,float,float,int32_t,int32_t,float,uint16_t,uint16_t,uint16_t,uint8_t,uint8_t,uint8_t,uint8_t,uint8_t,uint8_t)),Qt::DirectConnection);
|
||||
|
||||
|
||||
|
||||
/*
|
||||
connect(item, SIGNAL(WPProperty(float,float,float,float,int32_t,int32_t,float,uint16_t,uint16_t,uint16_t,uint8_t,uint8_t,uint8_t,uint8_t,uint8_t,uint8_t)),
|
||||
this, SLOT(find_PointNumber()),Qt::DirectConnection);
|
||||
this, SLOT(find_PointNumber(int)),Qt::DirectConnection);
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
connect(item, SIGNAL(WPFollowPrevious(bool,WayPointItem*)),
|
||||
@@ -1877,46 +2054,13 @@ void OPMapWidget::WPLoad(QString path)//带文件目录参数
|
||||
|
||||
QJsonObject json = doc.object();
|
||||
|
||||
|
||||
/*
|
||||
"circles": [
|
||||
{
|
||||
"circle": {
|
||||
"center": [
|
||||
32.04290131170435,
|
||||
118.81779757301473
|
||||
],
|
||||
"radius": 104.72920614551222
|
||||
},
|
||||
"inclusion": true,
|
||||
"version": 1
|
||||
},
|
||||
{
|
||||
"circle": {
|
||||
"center": [
|
||||
32.04275580264579,
|
||||
118.8194498137916
|
||||
],
|
||||
"radius": 91.2720266761384
|
||||
},
|
||||
"inclusion": true,
|
||||
"version": 1
|
||||
}
|
||||
],
|
||||
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
//安全区解码
|
||||
//栅栏解码
|
||||
QJsonArray circlesArray = json.value("geoFence").toObject().value("circles").toArray();
|
||||
for(QJsonValue item: circlesArray) {
|
||||
|
||||
bool inclusion = item.toObject().value("inclusion").toBool();
|
||||
bool inclusion = item.toObject().value("inclusion").toBool();
|
||||
QJsonObject circle = item.toObject().value("circle").toObject();
|
||||
int version = item.toObject().value("version").toInt();
|
||||
|
||||
QJsonArray center = circle.value("center").toArray();
|
||||
|
||||
@@ -1924,26 +2068,94 @@ void OPMapWidget::WPLoad(QString path)//带文件目录参数
|
||||
qreal lng = center.at(1).toDouble();
|
||||
qreal radius = circle.value("radius").toDouble();
|
||||
|
||||
int version = item.toObject().value("version").toInt();
|
||||
|
||||
qDebug() << "circle" << inclusion << lat << lng << radius << version;
|
||||
//生成一个⚪
|
||||
|
||||
|
||||
geoFenceitem *centeritem = new geoFenceitem(0,1,1, inclusion ,internals::PointLatLng(lat,lng),QColor("#FF8000"),map);
|
||||
|
||||
geoFencecircle *c = new geoFencecircle(0,1,1,inclusion,centeritem,radius,QColor("#FF8000"),map);
|
||||
|
||||
}
|
||||
|
||||
QJsonArray polygonsArray = json.value("geoFence").toObject().value("polygons").toArray();
|
||||
for(QJsonValue item: polygonsArray) {
|
||||
|
||||
//每个item是一个组
|
||||
QList<internals::PointLatLng> points;
|
||||
QList<geoFenceitem *> polyitems;
|
||||
//获得边界
|
||||
bool inclusion = item.toObject().value("inclusion").toBool();
|
||||
QJsonArray polygon = item.toObject().value("polygon").toArray();
|
||||
int version = item.toObject().value("version").toInt();
|
||||
|
||||
qreal lat_sum = 0;
|
||||
qreal lng_sum = 0;
|
||||
|
||||
for (QJsonValue point: polygon) {
|
||||
qreal lat = point.toArray().at(0).toDouble();
|
||||
qreal lng = point.toArray().at(1).toDouble();
|
||||
|
||||
//生成一个多边形
|
||||
points.push_back(internals::PointLatLng(lat,lng));
|
||||
|
||||
qDebug() << "polygon" << inclusion << version << lat << lng;
|
||||
|
||||
|
||||
lat_sum += lat;
|
||||
lng_sum += lng;
|
||||
|
||||
}
|
||||
|
||||
int version = item.toObject().value("version").toInt();
|
||||
internals::PointLatLng center;
|
||||
|
||||
center.SetLat(lat_sum/polygon.size());
|
||||
center.SetLng(lng_sum/polygon.size());
|
||||
|
||||
geoFenceitem *polyitem = new geoFenceitem(0,points.size(),0, inclusion ,center,QColor("#FF8000"),map);
|
||||
|
||||
polyitem->setPoints(points);
|
||||
|
||||
|
||||
/*
|
||||
|
||||
int count = 0;
|
||||
for(internals::PointLatLng p : points)
|
||||
{
|
||||
geoFenceitem *polyitem = new geoFenceitem(0,points.size(),count, inclusion ,p,QColor("#FF8000"),map);
|
||||
count ++;
|
||||
polyitems.push_back(polyitem);
|
||||
|
||||
}
|
||||
|
||||
geoFenceitem *last;
|
||||
|
||||
for(geoFenceitem *p : polyitems)
|
||||
{
|
||||
if(p == polyitems.first())
|
||||
{
|
||||
last = p;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(p == polyitems.last())
|
||||
{
|
||||
geoFenceitemline *polyline = new geoFenceitemline(last, polyitems.first(),map,QColor("#FF8000"));
|
||||
}
|
||||
else
|
||||
{
|
||||
geoFenceitemline *polyline = new geoFenceitemline(last, p,map,QColor("#FF8000"));
|
||||
last = p;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
qDebug() << "polygon" << inclusion << version << item.toObject();
|
||||
|
||||
}
|
||||
|
||||
@@ -2241,9 +2453,6 @@ void OPMapWidget::groupchanged(int value)
|
||||
return;
|
||||
}
|
||||
|
||||
//一下这里判断有问题,有bug
|
||||
|
||||
|
||||
//将不是当前的全部变成灰色,当前的显示
|
||||
foreach(QGraphicsItem * i, map->childItems()) {
|
||||
WayPointItem *w = qgraphicsitem_cast<WayPointItem *>(i);
|
||||
@@ -2400,6 +2609,8 @@ void OPMapWidget::WPGroup(int value)
|
||||
|
||||
emit settableGroup(currentGroup);
|
||||
|
||||
find_PointNumber(currentGroup);
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
@@ -2645,7 +2856,7 @@ void OPMapWidget::updateMessage(void)
|
||||
emit TotalDistanceUpdate(totalDistance);
|
||||
}
|
||||
|
||||
void OPMapWidget::find_PointNumber()
|
||||
void OPMapWidget::find_PointNumber(int group)
|
||||
{
|
||||
QList<int> nums;
|
||||
nums.clear();
|
||||
@@ -2656,12 +2867,14 @@ void OPMapWidget::find_PointNumber()
|
||||
WayPointItem *w = qgraphicsitem_cast<WayPointItem *>(i);
|
||||
if (w)
|
||||
{
|
||||
|
||||
number = w->Number();
|
||||
|
||||
if(w->Command() < MAV_CMD::MAV_CMD_NAV_LAST)
|
||||
if(w->MissionType() == group)//如果组别一样,那么就赋值
|
||||
{
|
||||
nums.append(number);
|
||||
number = w->Number();
|
||||
|
||||
if(w->Command() < MAV_CMD::MAV_CMD_NAV_LAST)
|
||||
{
|
||||
nums.append(number);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user