proj~Crs(srid, options)

本类用于坐标系对象的定义。
每种坐标系在EPSG中都拥有唯一的标识,即srid。已经支持的坐标系srid有:4326(或4490)、3857(或900913),其他坐标系需传options参数进行定义或通过添加到hmap.proj.defs中来定义。
参考http://epsg.io/ 或 https://spatialreference.org/

Summary

Methods:
fromString

把坐标系定义的字符串转换为json对象。

forward

从地理坐标转换到投影坐标,针对投影坐标系有效,如果Crs是地理坐标系返回地理坐标本身。

getCrsType

获取坐标系的类型

getDegreePerMeter

计算某纬度处一米代表多少度

getExtent

获取坐标系的范围

getFlattening
getMeterPerDegree

计算在某纬度附近时一经度代表多少米

getName

获取坐标系名称

getRadius

获取坐标系使用椭球体的地球半径

getSemiMajorAxis

获取坐标系采用的椭球体的长半轴长度

getSemiMinorAxis

获取坐标系采用椭球体的短半轴长度

getSrid

获取坐标系的空间参考标识srid

getUnit

获取当前坐标系的单位,米或者度

init

初始化投影坐标系需要赋值的参数

inverse

从投影坐标转换到地理坐标,针对投影坐标系有效,如果Crs是地理坐标系返回坐标本身。

Constructor

new Crs(srid, options)

构造函数

Parameters:
Name Type Description
srid String | Number

必选项,坐标系在EPSG中的唯一标识,比如srid为4326,3857等

options Object | String

坐标系定义需要的参数。

Name Type Description
a Number

坐标系采用的椭球体的长半轴的长度

b Number

坐标系采用的椭球体的短半轴的长度

datumCode String

基准面的编码

units String

坐标的单位

extent Extent

坐标系的范围

crsType String

坐标系的类型

metersPerUnit Number

每个坐标单位对应多少米

worldExtent Extent

坐标系的世界范围

axisOrientation String
Throws:

当第一个参数srid没有提供时,抛出异常:'The param srid must be supplied!'

Example
let crs1 = new hmap.proj.Crs('4326');
let crs2 = new hmap.proj.Crs('3857');
或者
let options = {
     a: 6378137,
     b: 6378137,
     datumCode: "none",
     k0: 1,
     lat_ts: 0,
     long0: 0,
     no_defs: true,
     projName: "merc",
     title: "WGS 84 / Pseudo-Mercator",
     units: "m",
     x0: 0,
     y0: 0
}
let crs3 = new hmap.proj.Crs('1234',options);
defs['EPSG:4214'] = "+proj=longlat +ellps=krass +datum=Beijing54 +no_defs"//Beijing54
let crs4 = new hmap.proj.Crs('4214');

Methods

static fromString(defString) → {Object}

把坐标系定义的字符串转换为json对象。

Parameters:
Name Type Description
defString String

字符串格式的坐标系定义,参考http://epsg.io网站上坐标系中Proj4js格式的坐标系定义。

Returns:
Object -

返回json格式的坐标系定义。

Example
const crsStr = "+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs";
let crsJson = hmap.proj.Crs.fromString(crsStr);

forward(coord) → {module:basetype~Coordinate}

从地理坐标转换到投影坐标,针对投影坐标系有效,如果Crs是地理坐标系返回地理坐标本身。

Parameters:
Name Type Description
coord module:basetype~Coordinate

地理坐标对象

Returns:
module:basetype~Coordinate -

投影坐标对象

getCrsType() → {String}

获取坐标系的类型

Returns:
String -

若是地理坐标系,返回"GeoCRS";若是投影坐标系,返回"ProjCRS"。

getDegreePerMeter(atLat) → {Number}

计算某纬度处一米代表多少度

Parameters:
Name Type Description
atLat Number

所在的纬度,单位是度,可选参数,纬度范围为-90 ~ 90,当不传时按纬度为0进行计算。

Returns:
Number -

每一米代表多少度

getExtent() → {module:basetype~Extent}

获取坐标系的范围

Returns:
module:basetype~Extent -

坐标系的范围

getFlattening(a, b) → {Number}

Parameters:
Name Type Description
a Number

长轴

b Number

短轴
获取坐标系采用椭球体的扁率

Returns:
Number -

扁率

getMeterPerDegree(atLat) → {Number}

计算在某纬度附近时一经度代表多少米

Parameters:
Name Type Default Description
atLat Number 0

所在的纬度,单位是度,可选参数,纬度范围为-90 ~ 90,当不传时按纬度为0进行计算。
由于地球为球状,故不同纬度状态下度和米的转换关系并不相同。整体趋势为由赤道向两极每度转换为米的数值越来越小,不建议使用默认值。

Returns:
Number -

指定纬度处每一经度代表多少米

Example
//假设地图对象坐标系为4326
let lat=map.getCenter().getOrdinate("Y");//获取地图的中心点的纬度
let crs=new hmap.proj.Crs("4326");//坐标系对象,不同坐标系使用椭球体的地球半径不同
let m=crs.getMeterPerDegree(lat);//计算当前地图中心点对应纬度的每度对应的米

getName() → {String}

获取坐标系名称

Returns:
String -

坐标系名称

getRadius() → {Number}

获取坐标系使用椭球体的地球半径

Returns:
Number -

地球半径

getSemiMajorAxis() → {Number}

获取坐标系采用的椭球体的长半轴长度

Returns:
Number -

长半轴长度

getSemiMinorAxis() → {Number}

获取坐标系采用椭球体的短半轴长度

Returns:
Number -

短半轴长度

getSrid() → {String}

获取坐标系的空间参考标识srid

Returns:
String -

唯一标识srid

getUnit() → {String}

获取当前坐标系的单位,米或者度

Returns:
String -

坐标系的单位

init()

初始化投影坐标系需要赋值的参数

inverse(coord) → {module:basetype~Coordinate}

从投影坐标转换到地理坐标,针对投影坐标系有效,如果Crs是地理坐标系返回坐标本身。

Parameters:
Name Type Description
coord module:basetype~Coordinate

投影坐标对象

Returns:
module:basetype~Coordinate -

地理坐标对象