【二次开发】CITYMAKER授权方法

**

CityMaker授权方法

**
  在使用CityMaker SDK开发的过程中如果出现异常或者水印,则有可能是runtime授权的问题。基础接口是不需要授权的,需要授权的接口请参见本章第三节。本章主要将介绍在开发过程中,如何给程序设置软授权。

一:CityMaker 系列产品的授权方式

1. 软授权

采用文件(.lic)形式,用户安装完成产品后,利用RunTime安装目录下的cmdiag.exe工具提取机器码。
  在这里插入图片描述
将机器码发送给CityMaker技术支持人员,会生成对应该机器的授权文件(.lic)

2. 硬件授权

授权信息将写入加密硬件锁中,插入硬件锁即可,程序会自动读取。

3. 网络授权

已经安装加密硬件锁的验证服务器可以为局域网内的多个节点终端提供浮动软件授权。

4. 查看本机(软/硬)授权

使用工具:RockeyViewer(Runtime安装目录下)。
  
  加密锁中存储了CityMaker各软件的授权信息,直接运行RockeyViewer.exe可以查看各模块是否可使用,如下图:   在这里插入图片描述

5. 本机是授权服务器为其它用户提供网络授权。

下载链接:LicenseManager

运行LicenseManage.exe,添加本机的授权文件,设置端口与密码即可,局域网内其它客户端则使用网络授权即可,我们可以使用ClientTest.exe查看网络授权是否设置成功,如下图:
在这里插入图片描述

二:设置授权

1. .Net步骤

(1) 新建VS窗体应用程序。
(2) 添加引用CityMaker Runtime安装目录下\Assemblies文件夹所有程序集。
(3) 主要接口:

HRESULT ILicenseServer::SetHost(BSTR Server, ULONG Port, BSTR Password) 
参数详解:
    Server:本地授权文件地址或者网络授权IP;
    Port:网络授权端口,若为本地文件授权,则为0即可;
    Password:网络授权密码,若为本地文件授权,则为null即可。

详情请参考SDK中ILicenseServer接口。

(4) 在主窗体初始化函数后面添加以下代码:

//设置本地文件授权
ILicenseServer licenseServer = new LicenseServer();        
string filepath = "D:\\citymakerbookdata\\test.lic";//本地授权文件地址
licenseServer.SetHost(filepath,0, null);    //进行本地文件授权时,后两项参数忽略    

//设置网络授权
ILicenseServer licenseServer = new LicenseServer();
string serverIp = "192.168.1.200";    //设置授权服务ip
uint port = 8588;                    //授权服务端口,默认为8588
string password = "123456";            //授权服务密码
licenseServer.SetHost(serverIp, port, password);

(5) 验证授权是否有效
  设置完授权文件或者服务后,需验证是否有效。继续添加以下代码:

//验证授权是否有效
long encryptionLock = 0;
bool isPass = false;
licenseServer.InternalGetData(out encryptionLock, out isPass);
if (isPass)
{
    MessageBox.Show("网络授权成功!");
}

2. JS步骤

(1) 设置授权:

/**设置本地文件授权*/
 function setlocallicense(){
     __g = document.getElementById("__g");
     var licenseServer = __g.new_LicenseServer;
     var filepath = "D:\\citymakerbookdata\\test.lic";//本地授权文件地址
     licenseServer.setHost(filepath, 0, "");
   }
 /**设置网络授权*/
function setnetworklicense(ip,port,pwd){
  __g = document.getElementById("__g");
  var licenseServer = __g.new_LicenseServer;
  //   var ip = "192.168.1.200";    //授权服务ip
  // var port = 8588;    //授权服务端口,默认为8588
  // var pwd = "123456";
  licenseServer.setHost(ip, port, pwd);
 }

(2) 验证授权是否有效

/*验证授权是否成功*/
 function checklicenseissuccess(licenseServer){
   var isPass = licenseServer.internalGetData()["pVal2"];
   if(isPass){
     alert("授权成功!");
   }
 }

三:注意事项(需要授权的接口)

1. GcmFdeCore

•IDataSourceFactory::CreateDataSource 对于Mysql、Oracle、ArcSDE数据源,需要标准Runtime授权,如果无授权,就会抛出异常。
•IDataSourceFactory::OpenDataSource 对于Mysql、Oracle、ArcSDE数据源,需要标准Runtime授权,如果无授权,就会抛出异常。
•IDataSourceFactory::OpenDataSourceByString 对于Mysql、Oracle、ArcSDE数据源,需要标准Runtime授权,如果无授权,就会抛出异常。
•IResourceManager 服务数据源和内存数据库不需要授权,其他类型都需要标准Runtime授权,如果无授权,就会抛出异常。

2. GcmFdeDataInterop

•IDataInteropFactory::CreateDataInterop 需要标准Runtime授权,如果无授权,就会抛出异常。

3. GcmFdeGeometry

•IParametricModelling 需要标准Runtime授权,如果无授权,就会抛出异常。
•IGeometryConvertor 需要标准Runtime授权,如果无授权,就会抛出异常。

4. GcmRenderControl

•IExportManager::ExportImage 当出图尺寸大于4096时,需要“高级出图”授权模块支持,如果无授权,将会出水印。
•IExportManager::ExportOrthoImage 当出图尺寸大于4096时,需要“高级出图”授权模块支持,如果无授权,将会出水印。
•IExportManager::ExportDOM 需要“高级出图”授权模块支持,如果无授权,将会出水印。
•IExportManager::ExportDEM 需要“高级出图”授权模块支持,如果无授权,将会出水印。
•IExportManager::Export25D/Export25DEx 需要“高级出图”授权模块支持,如果无授权,将会出水印。
•IExportManager::ExportPanorama 需要“高级出图”授权模块支持,如果无授权,将会出水印。
•IRenderControl::Initialize & Initialize2 
   1) QuadBufferStereo 开启四缓冲立体时,需要“高级立体”授权模块支持,如果无授权,将会出水印。
   2) MultiTouch 开启多点触摸时,需要“多点触控”授权模块支持,如果无授权,将会出水印。
•IRenderControl::InteractMode set成gviInteractClipPlane时需要标准Runtime授权,如果无授权,将会出水印。
•ICameraTour::ExportFrameSequence 当出图尺寸大于2048时,需要“高级出图”授权模块支持,如果无授权,将会出水印。
•ICameraTour::ExportPanoramaFrameSequence 需要“高级出图”授权模块支持,如果无授权,将会出水印。
•IViewport::LogoVisible set成false时需要标准Runtime授权,如果无授权,将会出水印。
•IViewport::ViewportMode 
     1) 设置为gviViewportStereoQuadbuffer、gviViewportStereoDualView时,需要“高级立体”授权模块支持,如果无授权,将会出水印。
     2) 设置为gviViewportStereoHtcVive时,需要“高级立体”授权模块支持,如果无授权,视口模式切换不生效。
     3) 设置为其它枚举值免费。
•IObjectManager::Create3DTileLayer 根据数据源类型分3种情况,授权判断通过即不出水印,未通过即出水印。 
     1) 本地TDB: 数据本身经过授权 或者 有标准Runtime授权,二种情况有一种存在,则通过授权判断不出水印。
     bCheck = bMetaPass || bEnvPass;
     若未通过授权判断,日志会有warn信息输出:Both local tilelayer and environment are unauthorized!
     2) Gmap(e.g: "tdb:[email protected]"): 数据本身是否授权,决定是否通过授权判断。
     bCheck = bMetaPass;
     若未通过授权判断,日志会有warn信息输出:Gmap tilelayer data is unauthorized!
     3) Http服务数据: 服务经过授权,并且 数据本身 或者 有标准Runtime授权二者有一个授权,则通过授权判断不出水印。
     bCheck = bServerPass && (bMetaPass || bEnvPass);
     若未通过授权判断,日志会有warn信息输出:
     Server原因: Tilelayer server is unauthorized!
     数据或环境原因: Both tilelayer and environment are unauthorized!
•IObjectManager::CreateHeatMap 需要标准Runtime授权,如果无授权,将会出水印。