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

相关文章

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3

MySQL 添加索引5种方式示例详解(实用sql代码)

《MySQL添加索引5种方式示例详解(实用sql代码)》在MySQL数据库中添加索引可以帮助提高查询性能,尤其是在数据量大的表中,下面给大家分享MySQL添加索引5种方式示例详解(实用sql代码),... 在mysql数据库中添加索引可以帮助提高查询性能,尤其是在数据量大的表中。索引可以在创建表时定义,也可

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe

Python实现一键PDF转Word(附完整代码及详细步骤)

《Python实现一键PDF转Word(附完整代码及详细步骤)》pdf2docx是一个基于Python的第三方库,专门用于将PDF文件转换为可编辑的Word文档,下面我们就来看看如何通过pdf2doc... 目录引言:为什么需要PDF转Word一、pdf2docx介绍1. pdf2docx 是什么2. by

Spring Security介绍及配置实现代码

《SpringSecurity介绍及配置实现代码》SpringSecurity是一个功能强大的Java安全框架,它提供了全面的安全认证(Authentication)和授权(Authorizatio... 目录简介Spring Security配置配置实现代码简介Spring Security是一个功能强

SpringCloud使用Nacos 配置中心实现配置自动刷新功能使用

《SpringCloud使用Nacos配置中心实现配置自动刷新功能使用》SpringCloud项目中使用Nacos作为配置中心可以方便开发及运维人员随时查看配置信息,及配置共享,并且Nacos支持配... 目录前言一、Nacos中集中配置方式?二、使用步骤1.使用$Value 注解2.使用@Configur

通过cmd获取网卡速率的代码

《通过cmd获取网卡速率的代码》今天从群里看到通过bat获取网卡速率两段代码,感觉还不错,学习bat的朋友可以参考一下... 1、本机有线网卡支持的最高速度:%v%@echo off & setlocal enabledelayedexpansionecho 代码开始echo 65001编码获取: >

Java集成Onlyoffice的示例代码及场景分析

《Java集成Onlyoffice的示例代码及场景分析》:本文主要介绍Java集成Onlyoffice的示例代码及场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 需求场景:实现文档的在线编辑,团队协作总结:两个接口 + 前端页面 + 配置项接口1:一个接口,将o

SpringBoot实现Kafka动态反序列化的完整代码

《SpringBoot实现Kafka动态反序列化的完整代码》在分布式系统中,Kafka作为高吞吐量的消息队列,常常需要处理来自不同主题(Topic)的异构数据,不同的业务场景可能要求对同一消费者组内的... 目录引言一、问题背景1.1 动态反序列化的需求1.2 常见问题二、动态反序列化的核心方案2.1 ht