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

相关文章

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

使用Python实现全能手机虚拟键盘的示例代码

《使用Python实现全能手机虚拟键盘的示例代码》在数字化办公时代,你是否遇到过这样的场景:会议室投影电脑突然键盘失灵、躺在沙发上想远程控制书房电脑、或者需要给长辈远程协助操作?今天我要分享的Pyth... 目录一、项目概述:不止于键盘的远程控制方案1.1 创新价值1.2 技术栈全景二、需求实现步骤一、需求

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

jupyter代码块没有运行图标的解决方案

《jupyter代码块没有运行图标的解决方案》:本文主要介绍jupyter代码块没有运行图标的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录jupyter代码块没有运行图标的解决1.找到Jupyter notebook的系统配置文件2.这时候一般会搜索到

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

Java String字符串的常用使用方法

《JavaString字符串的常用使用方法》String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表... 目录一、什么是String二、如何定义一个String1. 用双引号定义2. 通过构造函数定义三、St

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Mybatis 传参与排序模糊查询功能实现

《Mybatis传参与排序模糊查询功能实现》:本文主要介绍Mybatis传参与排序模糊查询功能实现,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、#{ }和${ }传参的区别二、排序三、like查询四、数据库连接池五、mysql 开发企业规范一、#{ }和${ }传参的