#include "layeroperator.h" #include "qdebug.h" #include "routeglobalvariant.h" #include "translator.h" #include "Geometry/UGGeoLine.h" #include "Geometry/UGGeoPoint.h" LayerOperator::LayerOperator() { } QMap LayerOperator::getSelectedFeature(UGMap *pMap) { RouteGlobalVariant routeGVar; UGLayer* layer = NULL; UGString layerName; UGSelection* selection = NULL; UGRecordsetPtr res; UGVariant v; QStringList num; QMap featureInfo; for(int i=1;i<=routeGVar.getRouteType().count();i++) { layerName = Translator::QStr2UGStr("RouteLayer" + QString::number(i)); if(!pMap->m_Layers.IsLayerExisted(layerName)) continue; layer = pMap->m_Layers.GetLayer(layerName); selection = layer->GetSelection(); if(selection->IsEmpty()) continue; //获取选中要素的航线编号以及航线类型,用于数据集查询 res = selection->ToRecordset(false); res->MoveFirst(); while(!res->IsEOF()) { res->GetFieldValue(_U("RouteNumber"),v); num << Translator::UGStr2QStr(v.ToString()); res->MoveNext(); } featureInfo.insert(i,num); num.clear(); selection = NULL; } return featureInfo; } //设置图层风格 void LayerOperator::setVectorLayerStyle(UGLayer *layer, UGDataset::DatasetType m_nType) { UGStyle sty; switch(m_nType){ case (UGDataset::Point): sty.SetMarkerStyle(1110);//设置点符号 sty.SetMarkerHeight(10); //设置符号高度 sty.SetMarkerWidth(10); //设置符号宽度 sty.SetLineColor(UGRGB(255,0,255)); //设置符号颜色 layer->SetStyle(sty); //给图层设置风格 break; case (UGDataset::Line): sty.SetLineStyle(6); //设置线样式 sty.SetLineColor(UGRGB(255,0,122)); //设置符号颜色 sty.SetLineWidth(1); //设置线宽度 layer->SetStyle(sty); //给图层设置风格 break; case (UGDataset::Region): sty.SetFillStyle(54); //设置填充符号样式 sty.SetLineStyle(19); //设置线条符号样式 sty.SetFillForeColor(UGRGB(122,50,63)); //设置填充符号颜色 sty.SetFillBackColor(UGRGB(1,1,1)); //设置背景填充颜色 layer->SetStyle(sty); //给图层设置风格 break; default: break; }; } void LayerOperator::addGeometryInTrackingLayer(UGTrackingLayer *pTrackingLayer, UGRecordsetPtr res,UGStyle &sty) { res->MoveFirst(); UGGeometry* pGeometry = NULL; int i = 1; while (!res->IsEOF()) { res->GetGeometry(pGeometry); pGeometry->SetStyle(&sty); pTrackingLayer->Add(pGeometry,Translator::QStr2UGStr("Geometry"+QString::number(i))); qDebug()<<"*************:"<< ("Geometry"+QString::number(i)); res->MoveNext(); i++; } pGeometry = NULL; } void LayerOperator::addGeometryInDynamicLayer(UGDynamicLayer *pDyLayer, UGRecordsetPtr res, UGStyle &sty) { res->MoveFirst(); UGGeometry* pGeometry = NULL; int i = 1; while (!res->IsEOF()) { res->GetGeometry(pGeometry); pGeometry->SetStyle(&sty); pDyLayer->Add(Translator::QStr2UGStr("Geometry"+QString::number(i)),pGeometry); res->MoveNext(); i++; pGeometry = NULL; } // pGeometry = NULL; } void LayerOperator::getDynamicLayer(UGMap *pMap, UGDynamicLayer *&pDyLayer, UGString dyLayerName) { if(pMap->m_DynamicLayers.GetDynamicLayer(dyLayerName)==NULL) { pDyLayer = new UGDynamicLayer(); pDyLayer->SetLayerName(dyLayerName); } else { pDyLayer = pMap->m_DynamicLayers.GetDynamicLayer(dyLayerName); } } UGLayer *LayerOperator::appendDatasetToMap(UGDatasetPtr pDataset, UGMap *m_pMap) { // 判断数据有效性 if(pDataset == NULL) { return NULL; } //获取到用于显示的qMapControl中的map UGMap* pMap = m_pMap; // 将Dataset添加到地图中 UGLayer* pLayer = pMap->m_Layers.AddDataset(pDataset, pDataset->GetType()); return pLayer; } //添加航点标记 void LayerOperator::addNodeLabel(UGGeoLine *pGeoline, UGDynamicLayer *pLabelDyLayer, QString routeType, QString routeNum) { int pointNum = pGeoline->GetPointCount(); const UGPoint2D* nodePoints = pGeoline->GetPoints(); //节点指针 if(pGeoline->GetStartNode() == pGeoline->GetEndNode()) pointNum--; UGPoint2D point; //labelStyle RouteGlobalVariant routeGVar; UGTextStyle tSty; tSty.SetBackColor(routeGVar.getRouteTypeColor(routeType.toInt())); tSty.SetForeColor(routeGVar.getRouteTypeColor(routeType.toInt())); tSty.SetSize(25); tSty.SetFixedSize(true); UGStyle sty; sty.SetMarkerSize(8); sty.SetFillForeColor(routeGVar.getRouteTypeColor(routeType.toInt())); for(int i=1;i<=pointNum;i++) { point.x = nodePoints->x; point.y = nodePoints->y; auto pGeoText(new UGGeoText); QString geoTextName = routeNum + "-" + QString::number(i); auto text = UGSubText(Translator::QStr2UGStr(geoTextName)); pGeoText->Make(point, text); pGeoText->SetTextStyle(tSty); auto pGeoNode(new UGGeoPoint); pGeoNode->Make(point); pGeoNode->SetStyle(&sty); pLabelDyLayer->Add(Translator::QStr2UGStr("LB"+geoTextName),pGeoText); pLabelDyLayer->Add(Translator::QStr2UGStr("PT"+geoTextName),pGeoNode); nodePoints++; //Node指针移动 } }