You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.5 KiB
56 lines
1.5 KiB
4 years ago
|
/**
|
||
|
* echarts地图投射算法
|
||
|
*
|
||
|
* @desc echarts基于Canvas,纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据统计图表。
|
||
|
* @author Kener (@Kener-林峰, kener.linfeng@gmail.com)
|
||
|
*
|
||
|
*/
|
||
|
define(function() {
|
||
|
// 墨卡托投射
|
||
|
function _mercator() {
|
||
|
var radians = Math.PI / 180;
|
||
|
var scale = 500;
|
||
|
var translate = [480, 250];
|
||
|
|
||
|
function mercator(coordinates) {
|
||
|
var x = coordinates[0] / 360;
|
||
|
var y = -(Math.log(Math.tan(
|
||
|
Math.PI / 4 + coordinates[1] * radians / 2
|
||
|
)) / radians) / 360;
|
||
|
return [
|
||
|
scale * x + translate[0],
|
||
|
scale * Math.max(-0.5, Math.min(0.5, y)) + translate[1]
|
||
|
];
|
||
|
}
|
||
|
|
||
|
|
||
|
mercator.invert = function (coordinates) {
|
||
|
var x = (coordinates[0] - translate[0]) / scale;
|
||
|
var y = (coordinates[1] - translate[1]) / scale;
|
||
|
return [
|
||
|
360 * x,
|
||
|
2 * Math.atan(Math.exp(-360 * y * radians)) / radians - 90
|
||
|
];
|
||
|
};
|
||
|
|
||
|
mercator.scale = function (x) {
|
||
|
if (!arguments.length) {
|
||
|
return scale;
|
||
|
}
|
||
|
scale = +x;
|
||
|
return mercator;
|
||
|
};
|
||
|
|
||
|
mercator.translate = function (x) {
|
||
|
if (!arguments.length) {
|
||
|
return translate;
|
||
|
}
|
||
|
translate = [+x[0], +x[1]];
|
||
|
return mercator;
|
||
|
};
|
||
|
|
||
|
return mercator;
|
||
|
}
|
||
|
|
||
|
return _mercator;
|
||
|
});
|