/**
* @content 图形对象功能组件
* @author fjl 2019-6-17 下午2:52:36
*/
import { NativeModules } from 'react-native';
import Dot from './Dot.js';
import Rect from './Rect.js';
import Map from './Map.js';
import { SketchEditor } from '@mapgis/mobile-react-native';
let G = NativeModules.JSGraphic;
/**
* @class Graphic
*/
export default class Graphic {
/**
* 构造一个新的 Graphic 对象。
* @memberOf Graphic
* @returns {Promise.<Graphic>}
*/
async createObj() {
try {
let { GraphicId } = await G.createObj();
let graphic = new Graphic();
graphic._MGGraphicId = GraphicId;
return graphic;
} catch (e) {
console.error(e);
}
}
/**
* 获取覆盖物的可见状态
* @memberOf Graphic
* @returns {Number} 返回层的状态 0 不可见 1 可见
*/
async getState() {
try {
if(this.isValid()){
let state = await G.getState(this._MGGraphicId);
return state;
} else {
console.log('Graphic is invalid !');
}
} catch (e) {
console.error(e);
}
}
/**
* 设置覆盖物的可见状态
* @memberOf Graphic
* @param {Number} state 覆盖物的可见状态。0 不可见;1 可见
* @returns {Promise<Void>}
*/
async setState(state) {
try {
if(this.isValid()){
await G.setState(this._MGGraphicId, state);
} else {
console.log('Graphic is invalid !');
}
} catch (e) {
console.error(e);
}
}
/**
* 设置图形颜色
* @memberOf Graphic
* @param {String} color 图形颜色 eg:'rgba(128, 128, 128, 255)'
* @returns {Promise<Void>}
*/
async setColor(color) {
try {
if(this.isValid()){
await G.setColor(this._MGGraphicId, color);
} else {
console.log('Graphic is invalid !');
}
} catch (e) {
console.error(e);
}
}
/**
* 获取图形的颜色
* @memberOf Graphic
* @returns {Promise<String>} 图形颜色 eg:'rgba(128, 128, 128, 255)'
*/
async getColor() {
try {
if(this.isValid()){
let { color } = await G.getColor(this._MGGraphicId);
return color;
} else {
console.log('Graphic is invalid !');
}
} catch (e) {
console.error(e);
}
}
/**
* 获取图形中心点坐标
* @memberOf Graphic
* @returns {Promise<Dot>}
*/
async getCenterPoint() {
try {
if(this.isValid()){
let { point2DId, x, y } = await G.getCenterPoint(this._MGGraphicId);
let dot = new Dot();
dot._MGDotId = point2DId;
dot.x = x;
dot.y = y;
return dot;
} else {
console.log('Graphic is invalid !');
}
} catch (e) {
console.error(e);
}
}
/**
* 获取图形外包矩形
* @memberOf Graphic
* @returns {Promise<Rect>}
*/
async getBoundingRect() {
try {
if(this.isValid()){
let { RectId } = await G.getBoundingRect(this._MGGraphicId);
let rect = new Rect();
rect._MGRectId = RectId;
return rect;
} else {
console.log('Graphic is invalid !');
}
} catch (e) {
console.error(e);
}
}
/**
* 获取图形类型
* @memberOf Graphic
* @returns {Promise<Number>} 图形类型。例:1---GraphicType.PointType
*/
async getGraphicType() {
try {
if(this.isValid()){
let GraphicType = await G.getGraphicType(this._MGGraphicId);
return GraphicType;
} else {
console.log('Graphic is invalid !');
}
} catch (e) {
console.error(e);
}
}
/**
* 设置点是否为像素单位(默认情况下为地图单位)
* @memberOf Graphic
* @param {boolean} pixel 点是否为像素单位
* @returns {Promise<void>}
*/
async setPointByPixel(pixel) {
try {
if(this.isValid()){
await G.setPointByPixel(this._MGGraphicId, pixel);
} else {
console.log('Graphic is invalid !');
}
} catch (e) {
console.error(e);
}
}
/**
* 获取点是否为像素单位
* @memberOf Graphic
* @returns {Promise<boolean>}
*/
async isPointByPixel() {
try {
if(this.isValid()){
let isPointByPixel = await G.isPointByPixel(this._MGGraphicId);
return isPointByPixel;
} else {
console.log('Graphic is invalid !');
}
} catch (e) {
console.error(e);
}
}
/**
* 设置图形的属性
* @memberOf Graphic
* @param {String} name 属性名称
* @param {String} value 属性值
* @returns {Promise<void>}
*/
async setAttributeValue(name, value) {
try {
if(this.isValid()){
await G.setAttributeValue(this._MGGraphicId, name, value);
} else {
console.log('Graphic is invalid !');
}
} catch (e) {
console.error(e);
}
}
/**
* 获取图形属性的数目
* @memberOf Graphic
* @returns {Promise<Number>}
*/
async getAttributeNum() {
try {
if(this.isValid()){
let attributeNum = await G.getAttributeNum(this._MGGraphicId);
return attributeNum;
} else {
console.log('Graphic is invalid !');
}
} catch (e) {
console.error(e);
}
}
/**
* 根据索引获取图形属性名
* @memberOf Graphic
* @param {Number} index 索引
* @returns {Promise<String>}
*/
async getAttributeName(index) {
try {
if(this.isValid()){
let attributeName = await G.getAttributeName(this._MGGraphicId, index);
return attributeName;
} else {
console.log('Graphic is invalid !');
}
} catch (e) {
console.error(e);
}
}
/**
* 根据索引获取图形属性值
* @memberOf Graphic
* @param {Number} index 图形属性的索引,从0开始到属性数目减1
* @returns {Promise<String>}
*/
async getAttributeValueByIndex(index) {
try {
if(this.isValid()){
let attributeValue = await G.getAttributeValue(this._MGGraphicId, index);
return attributeValue;
} else {
console.log('Graphic is invalid !');
}
} catch (e) {
console.error(e);
}
}
/**
* 根据属性名称获取图形属性值
* @memberOf Graphic
* @param {String} name 属性名称
* @returns {Promise<String>}
*/
async getAttributeValueByName(name) {
try {
if(this.isValid()){
let attributeValue = await G.getAttributeValueByName(this._MGGraphicId, name);
return attributeValue;
} else {
console.log('Graphic is invalid !');
}
} catch (e) {
console.error(e);
}
}
/**
* 移除指定名称的属性
* @memberOf Graphic
* @param {String} name 属性名称
* @returns {Promise<void>}
*/
async removeAttribute(name) {
try {
if(this.isValid()){
await G.removeAttribute(this._MGGraphicId, name);
} else {
console.log('Graphic is invalid !');
}
} catch (e) {
console.error(e);
}
}
/**
* 移除所有属性.
* @memberOf Graphic
* @returns {Promise<void>}
*/
async removeAllAttributes() {
try {
if(this.isValid()){
await G.removeAllAttributes(this._MGGraphicId);
} else {
console.log('Graphic is invalid !');
}
} catch (e) {
console.error(e);
}
}
/**
* 将几何对象转换为图形对象.
* 常用于将查询出的要素转换为图形,在地图上做高亮显示.一个几何对象可能会转换出一个或多个图形对象
* @static
* @param {Geoemtry} geometry 待转换的几何对象
* @returns {Promise<Graphics>} 转换出的图形列表
*/
static async toGraphicsFromGeometry(geometry)
{
try {
let { GraphicArr } = await G.toGraphicsFromGeometry(geometry._MGGeometryId);
let objArr = Map.getGraphics(GraphicArr);
return objArr;
} catch (e) {
console.error(e);
}
}
/**
* 将图形对象转换为几何对象
* @static
* @param {Graphic} graphic
* @returns {Promise<Geometry>}
*/
static async toGeometry(graphic)
{
try {
let { GeometryId, GeometryType, GeometryAnnoType } = await G.toGeometry(graphic._MGGraphicId);
let geometry = SketchEditor.getGeometryByType(GeometryId, GeometryType, GeometryAnnoType);
return geometry;
} catch (e) {
console.error(e);
}
}
/**
* 将一组同类型的图形对象转换为多几何对象(GeoPolygons、GeoPoints、GeoLines)
* @statics
* @param {Graphics} graphicArray
* @returns {Promise<Geometry>}
*/
static async toGeometrys(graphicArray)
{
try {
let { GeometryId, GeometryType, GeometryAnnoType } = await G.toGeometrys(graphicArray);
let geometry = SketchEditor.getGeometryByType(GeometryId, GeometryType, GeometryAnnoType);
return geometry;
} catch (e) {
console.error(e);
}
}
/**
* 判断Graphic对象是否有效
*
* @memberOf Graphic
* @returns {boolean} 是否有效。true: 有效;false:无效
*/
isValid(){
try {
if(this._MGGraphicId === undefined || this._MGGraphicId === null){
return false;
}else{
return true;
}
} catch (e) {
console.error(e);
}
}
}