UNPKG

imobile_for_reactnative

Version:

iMobile for ReactNative,是SuperMap iMobile推出的一款基于React-Native框架的移动应用开发工具。基于该开发工具,用户可以使用JavaScript开发语言,开发出在Android和IOS操作系统下运行的原生移动GIS应用,入门门槛低,一次开发,处处运行。

83 lines (76 loc) 5.36 kB
/** * 缓冲分析 * 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) }