rn_supermap
Version:
rn_supermap 一款基于React-Native框架的移动应用开发工具。基于该开发工具,用户可以使用JavaScript开发语言,开发出在Android和IOS操作系统下运行的原生移动GIS应用,入门门槛低,一次开发,处处运行。
292 lines (265 loc) • 5.24 kB
JavaScript
/*********************************************************************************
Copyright © SuperMap. All rights reserved.
Author: Yang Shanglong
E-mail: yangshanglong@supermap.com
Description: 地图工具类
**********************************************************************************/
import { NativeModules, Platform, NativeEventEmitter, DeviceEventEmitter } from 'react-native'
import { EventConst } from '../../constains/index'
let SMap = NativeModules.SMap
const Action = NativeModules.JSAction
const nativeEvt = new NativeEventEmitter(SMap);
/** 选择 **/
function select() {
try {
SMap.setAction(Action.SELECT)
} catch (e) {
console.error(e)
}
}
/** 添加节点 **/
function addNode() {
try {
SMap.setAction(Action.VERTEXADD)
} catch (e) {
console.error(e)
}
}
/** 编辑节点 **/
function editNode() {
try {
SMap.setAction(Action.VERTEXEDIT)
} catch (e) {
console.error(e)
}
}
/** 删除节点 **/
function deleteNode() {
try {
SMap.setAction(Action.VERTEXDELETE)
} catch (e) {
console.error(e)
}
}
/** 撤销 **/
function undo() {
try {
SMap.undo()
} catch (e) {
console.error(e)
}
}
/** 重做 **/
function redo() {
try {
SMap.redo()
} catch (e) {
console.error(e)
}
}
/** 绘制直线 **/
function createPolyline() {
try {
SMap.setAction(Action.CREATEPOLYLINE)
} catch (e) {
console.error(e)
}
}
/** 绘制多边形 **/
function createPolygon() {
try {
SMap.setAction(Action.CREATEPOLYGON)
} catch (e) {
console.error(e)
}
}
/** 删除 **/
function remove(id) {
try {
SMap.remove(id)
} catch (e) {
console.error(e)
}
}
/** 平移 **/
function move() {
try {
SMap.setAction(Action.MOVE_GEOMETRY)
} catch (e) {
console.error(e)
}
}
/** 切割面 **/
function splitRegion() {
try {
SMap.setAction(Action.SPLIT_BY_LINE)
} catch (e) {
console.error(e)
}
}
/** 合并面 **/
function unionRegion() {
try {
SMap.setAction(Action.UNION_REGION)
} catch (e) {
console.error(e)
}
}
/** 擦除面 **/
function eraseRegion() {
try {
SMap.setAction(Action.ERASE_REGION)
} catch (e) {
console.error(e)
}
}
/** 手绘擦除面 **/
function drawRegionEraseRegion() {
try {
SMap.setAction(Action.DRAWREGION_ERASE_REGION)
} catch (e) {
console.error(e)
}
}
/** 生成岛洞 **/
function drawHollowRegion() {
try {
SMap.setAction(Action.DRAW_HOLLOW_REGION)
} catch (e) {
console.error(e)
}
}
/** 手绘岛洞 **/
function drawRegionHollowRegion() {
try {
SMap.setAction(Action.DRAWREGION_HOLLOW_REGION)
} catch (e) {
console.error(e)
}
}
/** 填充岛洞 **/
function fillHollowRegion() {
try {
SMap.setAction(Action.FILL_HOLLOW_REGION)
} catch (e) {
console.error(e)
}
}
/** 补充岛洞 **/
function patchHollowRegion() {
try {
SMap.setAction(Action.PATCH_HOLLOW_REGION)
} catch (e) {
console.error(e)
}
}
/** 补充岛洞 **/
function submit() {
try {
SMap.submit()
} catch (e) {
console.error(e)
}
}
/** 距离量算 **/
function measureLength(callBack = () => {}) {
try {
SMap.setAction(Action.MEASURELENGTH)
addMeasureListener({
lengthMeasured: callBack,
})
} catch (e) {
console.error(e)
}
}
/** 面积量算 **/
function measureArea(callBack = () => {}) {
try {
SMap.setAction(Action.MEASUREAREA)
addMeasureListener({
areaMeasured: callBack,
})
} catch (e) {
console.error(e)
}
}
/** 角度量算 **/
function measureAngle(callBack = () => {}) {
try {
SMap.setAction(Action.MEASUREANGLE)
addMeasureListener({
angleMeasured: callBack,
})
} catch (e) {
console.error(e)
}
}
/** 量算监听 **/
function addMeasureListener(events) {
try {
SMap.addMeasureListener().then(result => {
if (!result) return
let emitter = Platform.OS === 'ios' ? nativeEvt : DeviceEventEmitter
if (typeof events.lengthMeasured === 'function') {
emitter.addListener(EventConst.MEASURE_LENGTH, function (e) {
events.lengthMeasured(e)
})
}
if (typeof events.areaMeasured === 'function') {
emitter.addListener(EventConst.MEASURE_AREA, function (e) {
events.areaMeasured(e)
})
}
if (typeof events.angleMeasured === 'function') {
emitter.addListener(EventConst.MEASURE_ANGLE, function (e) {
events.angleMeasured(e)
})
}
})
} catch (e) {
console.error(e)
}
}
/** 停止量算监听 **/
function removeMeasureListener() {
try {
SMap.removeMeasureListener()
} catch (e) {
console.error(e)
}
}
/** 无操作 **/
function pan() {
try {
SMap.setAction(Action.PAN)
} catch (e) {
console.error(e)
}
}
export {
select,
addNode,
editNode,
deleteNode,
undo,
redo,
createPolyline,
createPolygon,
remove,
move,
splitRegion,
unionRegion,
eraseRegion,
drawRegionEraseRegion,
drawHollowRegion,
drawRegionHollowRegion,
fillHollowRegion,
patchHollowRegion,
submit,
measureLength,
measureArea,
measureAngle,
pan,
addMeasureListener,
removeMeasureListener,
}