import { defaultValue } from '../../util'
import Zondy from '../Zondy'
import { SymbolType } from '../enum'
import MarkerSymbol from './MarkerSymbol'
/**
* 图片Marker符号,支持点几何对象,参考示例:<a href='#new-PictureMarkerSymbol'>[图片Marker样式]</a>
* <br><br>[ES5引入方式]:<br/>
* Zondy.Symbol.PictureMarkerSymbol() <br/>
* [ES6引入方式]:<br/>
* import { PictureMarkerSymbol } from "@mapgis/webclient-common" <br/>
* <br/>
* @class PictureMarkerSymbol
* @moduleEX SymbolModule
* @extends MarkerSymbol
* @param {Object} options 构造参数
* @param {Color|String} [options.color = new Color(255, 255, 255, 1)] 覆盖颜色,默认为白色
* @param {Number} [options.width = 20] 图片宽度,单位像素
* @param {Number} [options.height = 20] 图片高度,单位像素
* @param {String} [options.url = ''] 图片url,支持图片base64编码加载
* @param {Number} [options.xoffset = 0] marker的x轴偏移,单位像素
* @param {Number} [options.yoffset = 0] marker的y轴偏移,单位像素
* @param {Number} [options.angle = 0 ] 旋转角度,单位度,0~360度
*
* @summary <h5>支持如下方法:</h5>
* [1、克隆并返回新的符号对象]{@link Symbol#clone} <br/>
* [2、导出一个JSON对像]{@link Symbol#toJSON} <br/>
* <a href='#fromJSON'>[3、通过json构造并返回一个新的PictureMarkerSymbol对象]</a>
*
* @example <caption><h7 id='new-PictureMarkerSymbol'>创建图片Marker样式对象</h7></caption>
* // ES5引入方式
* const { PictureMarkerSymbol } = Zondy.Symbol
* const { Color } = Zondy
* // ES6引入方式
* import { PictureMarkerSymbol, Color } from "@mapgis/webclient-common"
* const pictureMarkerSymbol = new PictureMarkerSymbol({
* // 覆盖颜色
* color: new Color(252, 100, 22, 1),
* // 旋转角度,单位度,0~360度
* angle: 90,
* // marker的x轴偏移,单位像素
* xoffset: -1,
* // marker的y轴偏移,单位像素
* yoffset: 5,
* // 图片高度,单位像素
* height: 20,
* // 图片宽度,单位像素
* width: 30,
* // 图片url
* url: "图片url"
* });
*/
class PictureMarkerSymbol extends MarkerSymbol {
constructor(options) {
super(options)
options = defaultValue(options, {})
/**
* 符号类型
* @member {String} PictureMarkerSymbol.prototype.type
*/
this.type = SymbolType.pictureMarker
/**
* 图片宽度
* @member {Number} PictureMarkerSymbol.prototype.width
*/
this.width = defaultValue(options.width, 20)
/**
* 图片高度
* @member {Number} PictureMarkerSymbol.prototype.height
*/
this.height = defaultValue(options.height, 20)
/**
* 图片url
* @member {String} PictureMarkerSymbol.prototype.url
*/
this.url = defaultValue(options.url, '')
}
/**
* 通过json构造并返回一个新的PictureMarkerSymbol对象<a id='fromJSON'></a>
* @param {Object} json 符号的实例化JSON
* @return {PictureMarkerSymbol} 新的PictureMarkerSymbol对象
* @example <caption><h7>通过json构造并返回一个新的PictureMarkerSymbol对象</h7></caption>
*/
static fromJSON(json) {
json = defaultValue(json, {})
return new PictureMarkerSymbol(json)
}
/**
* 克隆并返回新的符号对象
* @return {PictureMarkerSymbol} 克隆后的新符号对象
*/
clone() {
return new PictureMarkerSymbol(this.toJSON())
}
/**
* 导出为JSON对象
* @return {Object} JSON对像
*/
toJSON() {
const json = super.toJSON()
json.width = this.width
json.height = this.height
json.url = this.url
return json
}
}
Zondy.Symbol.PictureMarkerSymbol = PictureMarkerSymbol
export default PictureMarkerSymbol