rn_supermap
Version:
rn_supermap 一款基于React-Native框架的移动应用开发工具。基于该开发工具,用户可以使用JavaScript开发语言,开发出在Android和IOS操作系统下运行的原生移动GIS应用,入门门槛低,一次开发,处处运行。
443 lines (410 loc) • 11.9 kB
JavaScript
/*********************************************************************************
Copyright © SuperMap. All rights reserved.
Author: Will
E-mail: pridehao@gmail.com
**********************************************************************************/
import { NativeModules } from 'react-native';
let W = NativeModules.JSWorkspace;
let WT = NativeModules.JSWorkspaceType;
import DS from './Datasources.js';
import Ds from './Datasource.js';
import Maps from './Maps.js';
import Map from './Map.js';
import WorkspaceConnectionInfo from './WorkspaceConnectionInfo';
import Datasource from './Datasource';
/**
* @class Workspace
* @description 工作空间是用户的工作环境,主要完成数据的组织和管理,包括打开、关闭、创建、保存工作空间文件(SXW,SMW,SXWU,SMWU,DEFAULT)。工作空间 Workspace 是 SuperMap 中的一个重要的概念,工作空间存储了一个工程项目(同一个事务过程)中所有的数据源,地图的组织关系,工作空间通过其中的数据源集合对象 Datasources ,地图集合对象 Maps 来管理其下的数据源,地图。
* @property {number} DEFAULT - 默认SMWU类型。
* @property {number} SMWU - SMWU工作空间,文件型工作空间。
* @property {number} SXWU - SXWU工作空间。
* @property {number} UDB - 数据库类型。
*/
export default class Workspace {
/**
* 创建workspace实例
* @memberOf Workspace
* @returns {Promise.<Workspace>}
*/
async createObj() {
try {
var { workspaceId } = await W.createObj();
var workspace = new Workspace();
workspace._SMWorkspaceId = workspaceId;
return workspace;
} catch (e) {
console.error(e);
}
}
/**
* 获得数据源集合(内部方法,不开放接口)
* @memberOf Workspace
* @deprecated Workspace.js:getDatasources() function has been deprecated. If you want to get datasource , please call the getDatasource() function
* @returns {Promise.<Datasources>}
*/
async getDatasources() {
try {
var { datasourcesId } = await W.getDatasources(this._SMWorkspaceId);
console.debug("datasourcesId:" + datasourcesId);
var ds = new DS();
ds._SMDatasourcesId = datasourcesId;
return ds;
} catch (e) {
console.error(e);
}
}
/**
* 重命名数据源
* @param oldName
* @param newName
* @returns {Promise.<void>}
*/
async renameDatasource(oldName, newName) {
try {
await W.renameDatasource(this._SMWorkspaceId, oldName, newName);
} catch (e) {
console.error(e);
}
}
/*
* 通过数据源链接信息打开数据源
* @memberOf Workspace
* @deprecated 可直接通过{@link Workspace.openDatasource}方法传参数,不在需要构建datasourceConnectionInfo对象。
* @param {object} datasourceConnectionInfo 数据源链接信息
* @returns {Promise.<Datasource>}
*/
/* async openDatasourceConnectionInfo(datasourceConnectionInfo){
try {
var {datasourceId} = await W.openDatasourceConnectionInfo(this.workspaceId,datasourceConnectionInfo.datasourceConnectionInfoId);
var ds = new Ds();
ds.datasourceId = datasourceId;
return ds;
}catch (e){
console.error(e);
}
} */
/**
* 通过序号或者名字(别名)获取数据源
* @memberOf Worksapce
* @param {number | string} index|name - 既可以是序号,也可以是数据源名称
* @returns {Promise.<Datasource>}
*/
async getDatasource(index) {
try {
var datasource = new Ds();
if (typeof index != 'string') {
//get datasource through index.
var { datasourceId } = await W.getDatasource(this._SMWorkspaceId, index);
} else {
//get datasource through datasource name(Alias).
var { datasourceId } = await W.getDatasourceByName(this._SMWorkspaceId, index);
}
datasource._SMDatasourceId = datasourceId;
return datasource;
} catch (e) {
console.error(e);
}
}
async getDatasourcesCount() {
try {
return await W.getDatasourcesCount(this._SMWorkspaceId);
} catch (e) {
console.error(e);
}
}
async getDatasourceAlias(index) {
try {
return await W.getDatasourceAlias(this._SMWorkspaceId, index);
} catch (e) {
console.error(e);
}
}
/**
* 根据定义好的工作空间连接信息对象,打开工作空间。
* @memberOf Workspace
* @param {object} workspaceConnectionInfo
* @param {string} passWord - 数据源密码(可选参数)
* @returns {Promise.<void>}
*/
async open(workspaceConnectionInfo, passWord) {
try {
var WorkspaceConnectionInfoModule = new WorkspaceConnectionInfo();
if (typeof workspaceConnectionInfo === 'string') {
var wci = await WorkspaceConnectionInfoModule.createJSObj();
var str = workspaceConnectionInfo.split('.').pop();
console.log("工作空间类型字符串:" + str);
var type = this.workspaceType(str);
console.log("工作空间类型:" + type);
await wci.setType(type);
await wci.setServer(workspaceConnectionInfo);
if (passWord) {
await wci.setPassWord(passWord);
}
var { isOpen } = await W.open(this._SMWorkspaceId, wci._SMWorkspaceConnectionInfoId)
return isOpen;
} else {
var { isOpen } = await W.open(this._SMWorkspaceId, workspaceConnectionInfo._SMWorkspaceConnectionInfoId);
console.log('workspace open connectionInfo:' + isOpen);
return isOpen;
}
} catch (e) {
console.error(e);
}
}
/**
* 获取工作空间下的Maps对象
* @memberOf Worksapce
* @deprecated Maps类已不推荐使用
* @memberOf Workspace
* @returns {Promise.<Maps>}
*/
async getMaps() {
try {
var { mapsId } = await W.getMaps(this._SMWorkspaceId);
var maps = new Maps();
maps._SMMapsId = mapsId;
return maps;
} catch (e) {
console.error(e);
}
}
/**
* 根据地图序号获得地图名称
* @memberOf Workspace
* @param {number} mapIndex
* @returns {string}
*/
async getMapName(mapIndex) {
try {
var { mapName } = await W.getMapName(this._SMWorkspaceId, mapIndex);
return mapName;
} catch (e) {
console.error(e);
}
}
/**
* 打开数据源 jsonObject 获取网络数据源
* @memberOf Workspace
* @param {object} jsonObject {engineType:<int>引擎类型 ,server:<sring>文件/服务器路径 ,driver:<string>驱动名称(可选参数)}
* @returns {Promise.<datasource>}
*/
async openDatasource(jsonObject) {
try {
if (jsonObject.webBBox) {
var rect = jsonObject.webBBox;
if (typeof rect !== 'string') jsonObject.webBBox = rect._SMRectangle2DId;
}
var { datasourceId } = await W.openDatasource(this._SMWorkspaceId, jsonObject);
var datasource = new Datasource();
datasource._SMDatasourceId = datasourceId;
return datasource;
} catch (e) {
console.error(e);
}
}
/*
* 打开WMS协议类型数据源
* @memberOf Workspace
* @param {string} server
* @param {number} engineType
* @param {string} driver
* @param {string} version
* @param {string} visibleLayers
* @param {object} webBox
* @param {object} webCoordinate
* @returns {Promise.<void>}
*/
/*
async openWMSDatasource(server,engineType,driver,version,visibleLayers,webBox,webCoordinate){
try{
await W.openWMSDatasource(this._SMWorkspaceId,server,engineType,driver,
version,visibleLayers,webBox,webCoordinate);
}catch(e){
console.error(e);
}
} */
/**
* 保存工作空间
* @memberOf Workspace
* @param {object} info - {path: 另存url(可选参数), caption: 工作空间名称}
* @returns {boolean}
*/
async saveWorkspace(info) {
try {
if (info && typeof info === 'object' && Object.getOwnPropertyNames(info).length > 0) {
var { saved } = await W.saveWorkspaceWithInfo(this._SMWorkspaceId, info.path, info.caption, info.type || WT.SMWU);
} else {
var { saved } = await W.saveWorkspace(this._SMWorkspaceId);
}
return saved;
} catch (e) {
console.error(e);
}
}
/**
* 关闭工作空间
* @memberOf Workspace
* @returns {boolean}
*/
async closeWorkspace() {
try {
var { closed } = await W.closeWorkspace(this._SMWorkspaceId);
return closed;
} catch (e) {
console.error(e);
}
}
/**
* 创建数据集
* @memberOf Workspace
* @param filePath 指定创建数据集路径
* @param engineType 数据集引擎类型
* @returns {Promise.<Datasource>}
*/
async createDatasource(filePath, engineType) {
try {
let datasourceId = await W.createDatasource(this._SMWorkspaceId, filePath, engineType);
if (datasourceId) {
let datasource = new Ds();
datasource._SMDatasourceId = datasourceId;
return datasource;
} else {
return null
}
} catch (e) {
console.error(e);
}
}
/**
* 关闭指定名称的数据源
* @memberOf Workspace
* @param datasourceName 数据源名称
* @returns {Promise.<boolean>}
*/
async closeDatasource(datasourceName) {
try {
var { closed } = await W.closeDatasource(this._SMWorkspaceId, datasourceName);
return closed;
} catch (e) {
console.error(e);
}
}
/**
* 关闭所有数据集
* @memberOf Workspace
*/
async closeAllDatasource() {
try {
await W.closeAllDatasource(this._SMWorkspaceId);
} catch (e) {
console.error(e);
}
}
/**
* 移除地图
* @memberOf Workspace
* @param mapName
* @returns {boolean}
*/
async removeMap(mapName) {
try {
var { removed } = await W.removeMap(this._SMWorkspaceId, mapName);
return removed;
} catch (e) {
console.error(e);
}
}
/**
* 清空所有地图
* @memberOf Workspace
*/
async clearMap() {
try {
await W.clearMap(this._SMWorkspaceId);
} catch (e) {
console.error(e);
}
}
async getSceneName(index) {
try {
var { name } = await W.getSceneName(this._SMWorkspaceId, index);
return name;
} catch (e) {
console.error(e);
}
}
async isModified() {
try {
let { isModified } = await W.isModified(this._SMWorkspaceId);
return isModified
} catch (e) {
console.error(e);
}
}
async getConnectionInfo() {
try {
let infoId = await W.getConnectionInfo(this._SMWorkspaceId);
let wcInfo = new WorkspaceConnectionInfo()
wcInfo._SMWorkspaceConnectionInfoId = infoId
return wcInfo
} catch (e) {
console.error(e);
}
}
async getSceneCount() {
try {
return await W.getSceneCount(this._SMWorkspaceId);
} catch (e) {
console.error(e);
}
}
workspaceType = (type) => {
var value;
switch (type) {
case 'SMWU':
case 'smwu':
value = 9;
break;
case 'SXWU':
case 'sxwu':
value = 8;
break;
case 'SMW':
case 'smw':
value = 5;
break;
case 'SXW':
case 'sxw':
value = 4;
break;
case 'UDB':
case 'udb':
value = 219;
break;
default:
value = 1;
break;
}
return value;
}
async dispose() {
try {
return await W.dispose(this._SMWorkspaceId);
} catch (e) {
console.error(e);
}
}
async addMap(name, mapXML) {
try {
return await W.addMap(this._SMWorkspaceId, name, mapXML);
} catch (e) {
console.error(e);
}
}
}
Workspace.SMWU = 9;
Workspace.SXWU = 8;
Workspace.SMW = 5;
Workspace.SXW = 4;
Workspace.UDB = 219;
Workspace.DEFAULT = 1;