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

计算一米近似等于的多少度。度一般用来表示球状坐标系下的单位,米一般用来表示平面坐标系中单位。由于球状与平面两种坐标系转换过程产生误差,特别是这种误差受纬度影响最大,
例如赤道地区(0度纬线处),经度方向每跨一度,大约等于实际距离110.94公里;越往两极地区每跨一个经度,其能代表的实际距离越小,到南北极时则近似等于0。
因此需要传入纬度来尽量抵消这一影响,最大程度上使转化结果逼近真实值。

getExtent

获取坐标系的范围

getFlattening
getMeterPerDegree

计算一度近似等于多少米。
度一般用来表示球状坐标系下的单位,米一般用来表示平面坐标系中单位。由于球状与平面两种坐标系转换过程产生误差,特别是这种误差受纬度影响最大,
例如赤道地区(0度纬线处),经度方向每跨一度,大约等于实际距离110.94公里;越往两极地区每跨一个经度,其能代表的实际距离越小,到南北极时则近似等于0。
因此需要传入纬度来尽量抵消这一影响,最大程度上使转化结果逼近真实值。

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

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

k0 Number

比例因子,默认为1

lat_0 Number

纬度起点

lat_1 Number

标准平行纬度第一条

lat_2 Number

标准平行纬度第二条

lat_ts Number

有效经纬度范围Latitude of true scale

long0 Number

中央经线

datumCode String

基准面的编码

no_defs Boolean

不使用proj_def.dat确省文件

projName String

投影名称

title String

坐标系标题

units String

坐标的单位

extent Extent

坐标系的范围

crsType String

坐标系的类型

metersPerUnit Number

每个坐标单位对应多少米

worldExtent Extent

坐标系的世界范围

x0 Number

东伪偏移

y0 Number

北伪偏移

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}

计算一米近似等于的多少度。度一般用来表示球状坐标系下的单位,米一般用来表示平面坐标系中单位。由于球状与平面两种坐标系转换过程产生误差,特别是这种误差受纬度影响最大,
例如赤道地区(0度纬线处),经度方向每跨一度,大约等于实际距离110.94公里;越往两极地区每跨一个经度,其能代表的实际距离越小,到南北极时则近似等于0。
因此需要传入纬度来尽量抵消这一影响,最大程度上使转化结果逼近真实值。

Parameters:
Name Type Description
atLat Number

纬度,单位为度,取值范围[-90,90]。不传时默认为45,尽可能兼顾南北半球转换精度。

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}

计算一度近似等于多少米。
度一般用来表示球状坐标系下的单位,米一般用来表示平面坐标系中单位。由于球状与平面两种坐标系转换过程产生误差,特别是这种误差受纬度影响最大,
例如赤道地区(0度纬线处),经度方向每跨一度,大约等于实际距离110.94公里;越往两极地区每跨一个经度,其能代表的实际距离越小,到南北极时则近似等于0。
因此需要传入纬度来尽量抵消这一影响,最大程度上使转化结果逼近真实值。

Parameters:
Name Type Default Description
atLat Number 0

纬度,单位为度,取值范围[-90,90]。不传时默认为45,尽可能兼顾南北半球转换经度。

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 -

地理坐标对象