imobile_for_reactnative
Version:
iMobile for ReactNative,是SuperMap iMobile推出的一款基于React-Native框架的移动应用开发工具。基于该开发工具,用户可以使用JavaScript开发语言,开发出在Android和IOS操作系统下运行的原生移动GIS应用,入门门槛低,一次开发,处处运行。
83 lines (76 loc) • 5.36 kB
text/typescript
/**
* 缓冲分析
* Author: ysl
*
* 该类用于为点、线、面数据集(或记录集)创建缓冲区,包括单边缓冲区、多重缓冲区和线单边多重缓冲区。
* 缓冲区分析是围绕空间对象,使用一个或多个与这些对象的距离值(称为缓冲区半径)作为半径,生成一个或多个区域的过程。缓冲区也可以理解为空间对象的一种影响或服务范围。
* 缓冲区分析的基本作用对象是点、线、面。Super支持对二维点、线、面数据集(或记录集)和网络数据集进行缓冲区分析。
* 缓冲区分析在 GIS 空间分析中经常用到,且往往结合叠加分析来共同解决问题。缓冲区分析在农业、城市规划、生态保护、防洪抗灾、军事、地质、环境等诸多领域都有应用。
* 例如扩建道路时,可根据道路扩宽宽度对道路创建缓冲区,然后将缓冲区图层与建筑图层叠加,通过叠加分析查找落入缓冲区而需要被拆除的建筑;又如,为了保护环境和耕地,可对湿地、森林、草地和耕地进行缓冲区分析,在缓冲区内不允许进行工业建设。
* <p><b>说明:</b></p>
* <p>对于面对象,在做缓冲区分析前最好先经过拓扑检查,排除面内橡胶的情况,所谓面内相交,指的是面对象自身相交。</p>
* <p>对“负半径”的说明:</p>
* <p>1. 如果缓冲区半径为数值型,则仅面数据支持负半径;</p>
* <p>2 如果缓冲区半径为字段或字段表达式,如果字段或字段表达式的值为负值,对于点、线数据取其绝对值;对于面数据,若合并缓冲区,则取其绝对值,若不合并,则按照负半径处理。</p>
* <p>关于缓冲区的参数设置,请参见<BufferAnalystParameter>
*/
import {
NativeModules,
} from 'react-native'
import { DatasetInfo } from '../data/SData'
import { OptionParameter, ResultDatasetInfo } from './SAnalystType'
const Analyst = NativeModules.SBufferAnalyst
/** 缓冲分析参数 */
export interface BufferParameter {
/** 1是圆头, 2是平头 */
endType: 1 | 2,
/** 左缓冲半径 */
leftDistance: number,
/** 右缓冲半径 */
rightDistance: number,
}
export interface IBufferRadiusUnit {
MiliMeter: 10
CentiMeter: 100
DeciMeter: 1000
Meter: 10000
KiloMeter: 10000000
Yard: 9144
Inch: 254
Foot: 3048
Mile: 16090000
}
/** 缓冲半径 */
export type TBufferRadiusUnit = IBufferRadiusUnit[keyof IBufferRadiusUnit]
/** 缓冲分析半径单位 */
export const BufferRadiusUnit: IBufferRadiusUnit = Analyst.BufferRadiusUnit
/*********************************************** 缓冲分析 *************************************************/
/**
* 缓冲区分析
* @param sourceData 指定的创建缓冲区的源矢量数据集,支持点、线、面数据集
* @param resultData 指定的存储缓冲区分析结果的数据集,必须是面数据集
* @param bufferParameter 指定的缓冲区分析参数对象
* @param isUnion 是否合并缓冲区,即是否将源数据各对象生成的所有缓冲区域进行合并运算后返回。对于面对象而言,要求源数据集中的面对象不相交
* @param isAttributeRetained 是否保留进行缓冲区分析的对象的字段属性。当合并结果面数据集时,该参数无效。即当 isUnion 参数为 false 时有效
* @param optionParameter 分析结果是否显示/结果样式
* @returns 分析成功返回true,否则返回false
*/
export async function createBuffer(sourceData: DatasetInfo, resultData: ResultDatasetInfo, bufferParameter: BufferParameter, isUnion: boolean, isAttributeRetained: boolean, optionParameter: OptionParameter): Promise<boolean> {
return Analyst.createBuffer(sourceData, resultData, bufferParameter, isUnion, isAttributeRetained, optionParameter)
}
/**
* 多重缓冲区分析
* @param sourceData 指定的创建多重缓冲区的源矢量数据集。支持点、线、面数据集。
* @param resultData 指定的用于存储缓冲区分析结果的数据集。
* @param bufferRadiuses 指定的多重缓冲区半径列表。
* @param bufferRadiusUnit 指定的缓冲区半径单位。
* @param semicircleSegment 指定的弧段拟合数。
* @param isUnion 是否合并缓冲区,即是否将源数据各对象生成的所有缓冲区域进行合并运算后返回。
* @param isAttributeRetained 是否保留进行缓冲区分析的对象的字段属性。当合并结果面数据集时,该参数无效,即当 isUnion 为 false 时有效。
* @param isRing 是否生成环状缓冲区。
* @param optionParameter 分析结果是否显示/结果样式
* @returns 分析成功返回true,否则返回false
*/
export async function createMultiBuffer(sourceData: DatasetInfo, resultData: ResultDatasetInfo, bufferRadiuses: number[], bufferRadiusUnit: TBufferRadiusUnit, semicircleSegment: number, isUnion: boolean, isAttributeRetained: boolean, isRing: boolean, optionParameter: OptionParameter): Promise<boolean> {
return Analyst.createMultiBuffer(sourceData, resultData, bufferRadiuses, bufferRadiusUnit, semicircleSegment, isUnion, isAttributeRetained, isRing, optionParameter)
}