MapX常用功能代码逻辑

2024-02-02 06:32
文章标签 代码 功能 逻辑 常用 mapx

本文主要是介绍MapX常用功能代码逻辑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

例程参见DET中的CMapXOP类和CRoadAttrCompReplaceDlg类。

1. 创建控件

   if ( !CMapX::Create( lpszWindowName , dwStyle , rect ,pParentWnd , nID , pPersist , bStorage , bstrLicKey ) )
return FALSE;
CMapX::SetMapUnit( miUnitMeter );
CMapX::SetAreaUnit( miUnitSquareMeter );
CMapX::SetDefaultConversionResolution(100);
CMapX::SetMousewheelSupport( miFullMousewheelSupport );
CMapX::GetLayers().RemoveAll();
CMapXCoordSys cs = CMapX::GetDisplayCoordSys();
double y = cs.GetOriginLatitude();
double x = cs.GetOriginLongitude();
short s = cs.GetType();
CMapXRectangle Rect;
CMapXCoordSys CurrentCoordsys;
COptionalVariant vEmpty; 
VARIANT MapUnit,MapBounds;
if(!Rect.CreateDispatch(Rect.GetClsid()))
{
TRACE0("Could not Create object"); 
} 
if(!CurrentCoordsys.CreateDispatch(CurrentCoordsys.GetClsid())) 
{
TRACE0("Could not Create object"); 
} 
MapUnit.vt=VT_I4;
MapUnit.lVal=miUnitMeter; 
//设置坐标范围(MBR).为求一致,这里取当GeosetManager中设置为non-earth(meters)时,
//gst文件中的参数"\GEOSET\MBR\LOWERLEFT" ,"\GEOSET\MBR\UPPERRIGHT"。
Rect.Set( 0,0,180,90 );
MapBounds.vt=VT_DISPATCH;
MapBounds.pdispVal=Rect.m_lpDispatch;
MapBounds.pdispVal->AddRef(); 
// 经纬度投影
CMapXDatum datum;
datum.CreateDispatch( datum.GetClsid() );
datum.Set( 28,0,0,0,0,0,0,0,0 );
CurrentCoordsys.Set( miLongLat, datum,MapUnit,
vEmpty, vEmpty, vEmpty,vEmpty, vEmpty, 
vEmpty, vEmpty, vEmpty, vEmpty,MapBounds, vEmpty);
CMapX::SetNumericCoordSys(CurrentCoordsys.m_lpDispatch);
CMapX::SetDisplayCoordSys(CMapX::GetNumericCoordSys().m_lpDispatch); 
CMapX::SetTitleText( _T("") );

2.加载图层

    CMapXLayer lyrTemp = CMapX::GetLayers().Add( tcsTbFile );
    VARIANT vr;
    vr.vt = VT_DISPATCH;
    vr.pdispVal = lyrTemp;
    CMapX::GetDatasets().Add( miDataSetLayer , vr , lyrTemp.GetName() );

3.卸载图层

     m_pMapXOP->GetDatasets().Remove(_T("navi_arc"));
     m_pMapXOP->GetLayers().Remove(_T("navi_arc")); 

4.读取属性值

(1) 整型字段值

       //cd traffic flow
       VARIANT var = rowvlus_cd.Item(_T("TrafficFlo")).GetValue();
       int iTrfcFlw = var.dblVal;

(2)字符串型字段值
       //sw direction
       VARIANT var1 = rowvlus_sw.Item(_T("Direction")).GetValue();
       string strdir = m_StringOp.ConverVariantToMBCS(var1);

5.更新属性值

(1) 获取到要更新的图层的rowvalues

      CMapXRowValues rowvlus_cd = dstNavi_cd.GetRowValues(k);

(2)更新相应的字段值

        rowvlus_cd.Item(_T("TrafficFlo")).SetValue( COleVariant(long(iTrfcFlw)) );
        ftr_cd.Update( true, rowvlus_cd );

6.创建新表

 //创建空字段对象
CMapXFields Flds;
if(!Flds.CreateDispatch(Flds.GetClsid()))
{
TRACE0("failed to create Flds");
return 0;
}
 //根据字段类型在空对象中加入字段
switch( fieldType )
{
case miTypeString:
{
int width = appendField.fieldWidth;
Flds.AddStringField( lpszFileName , width );
break;
}
case miTypeNumeric:
{
Flds.AddNumericField( lpszFileName , 11 , 2 );
break;
}
case miTypeDate:
{
Flds.AddDateField( lpszFileName );
break; 
}
case miTypeInteger:
case miTypeSmallInt:
{
Flds.AddIntegerField( lpszFileName );
break;
}
case miTypeFloat:
{
Flds.AddFloatField( lpszFileName );
break;
}
case miTypeLogical:
{
Flds.AddLogicalField( lpszFileName );
break;
}
  CMapXLayerInfo LayerInfo;
if(!LayerInfo.CreateDispatch(LayerInfo.GetClsid()))
{
TRACE0("Failed to create LayerInfo");
return 0;
}
  LayerInfo.SetType( miLayerInfoTypeNewTable );
lpszFileName = pStringOp->ConvertMcbsToWideChar( lpBuffer );
LayerInfo.AddParameter( _T("FileSpec"),COleVariant( lpszFileName ));
lpszFileName = pStringOp->ConvertMcbsToWideChar( ptcsElemName );
LayerInfo.AddParameter(_T("Name"),COleVariant( lpszFileName ) );
  VARIANT vtFlds;
vtFlds.vt = VT_DISPATCH;
vtFlds.pdispVal = Flds.m_lpDispatch;

LayerInfo.AddParameter(_T("Fields"),vtFlds);

  //UnloadMap(); lyr = CMapX::GetLayers().Add(LayerInfo.m_lpDispatch); vr.pdispVal = lyr;    CMapX::GetDatasets().Add( miDataSetLayer,vr,lpszFileName ); 

7.紧缩表

(1)、将以下申明加入例子自带的MapX.h,位置在CMapXLayer类申明的Operations之Public:中即可
BOOL SupportsPack(long PackType);//sdy080520
void Pack(long PackType);//sdy080520


(2)、将以下声明加入例子自带的MapX.h的对应位置(最上边有一处是专门声明enum的,放在那个位置即可)
enum LayerPackConstants
{
               miPackGraphics = 1,
miRebuildGraphics = 2,
miPackIndex = 4,
miPackRebuildIndex = 8,
miPackData = 16,
miPackCompactDB = 32,
miPackAll = 21 //miPackGraphics & miPackIndex & miPackData;
};   //sdy080520


(3)、将以下代码加入例子自带的MapX.cpp
BOOL CMapXLayer::SupportsPack(long PackType)//sdy080520
{
BOOL result;
static BYTE parms[] =
   VTS_I4;
InvokeHelper(0x35, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms,
   PackType);
return result;
}
void CMapXLayer::Pack(long PackType)//sdy080520
{
static BYTE parms[] =
   VTS_I4;
InvokeHelper(0x36, DISPATCH_METHOD, VT_EMPTY, NULL, parms,
   PackType);
}


(4)、使用方式
CMapXLayer layer = m_ctrlMapX.GetLayers().Item(index);
layer.Pack(miPackAll);


这篇关于MapX常用功能代码逻辑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/669745

相关文章

基于Spring Boot 的小区人脸识别与出入记录管理系统功能

《基于SpringBoot的小区人脸识别与出入记录管理系统功能》文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型... 目录系统功能概述技术栈选择核心依赖配置数据模型设计出入记录实体类出入记录查询表单出入记录 VO 类(用于

Qt中实现多线程导出数据功能的四种方式小结

《Qt中实现多线程导出数据功能的四种方式小结》在以往的项目开发中,在很多地方用到了多线程,本文将记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示多线程不同的实现方... 目录前言导出文件的示例工具类QThreadQObject的moveToThread方法实现多线程QC

Python跨文件实例化、跨文件调用及导入库示例代码

《Python跨文件实例化、跨文件调用及导入库示例代码》在Python开发过程中,经常会遇到需要在一个工程中调用另一个工程的Python文件的情况,:本文主要介绍Python跨文件实例化、跨文件调... 目录1. 核心对比表格(完整汇总)1.1 自定义模块跨文件调用汇总表1.2 第三方库使用汇总表1.3 导

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1