You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
185 lines
5.5 KiB
C++
185 lines
5.5 KiB
C++
2 years ago
|
#include "layeroperator.h"
|
||
|
#include "qdebug.h"
|
||
|
#include "routeglobalvariant.h"
|
||
|
|
||
|
#include "translator.h"
|
||
|
#include "Geometry/UGGeoLine.h"
|
||
|
#include "Geometry/UGGeoPoint.h"
|
||
|
|
||
|
LayerOperator::LayerOperator()
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
QMap<int,QStringList> LayerOperator::getSelectedFeature(UGMap *pMap)
|
||
|
{
|
||
|
RouteGlobalVariant routeGVar;
|
||
|
|
||
|
UGLayer* layer = NULL;
|
||
|
UGString layerName;
|
||
|
UGSelection* selection = NULL;
|
||
|
UGRecordsetPtr res;
|
||
|
UGVariant v;
|
||
|
QStringList num;
|
||
|
QMap<int,QStringList> 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指针移动
|
||
|
}
|
||
|
}
|
||
|
|