最后修改时间:2022-12-15 18:35
Highmaps 从 1.1.0 开始支持经纬度定位功能,该功能依赖第三方库 proj4js(需要在 Highmaps 之前引入),最新版的文件可以从 cdnjs 上获取
<script src="https://cdn.bootcdn.net/ajax/libs/proj4js/2.7.2/proj4.js"></script>
有了经纬度支持后,我们可以通过 lon
和 lat
属性来指定经纬度进行描点
series: [{
type: 'mappoint',
name: 'cities',
data: [{
name: '北京',
lat: 39.9032724643, // 经纬度查询请到 http://www.gpsspg.com/maps.htm
lon: 116.4009203787
},{
name: '杭州',
lon: 120.1551656314,
lat: 30.2741702308
}]
}]
为了方便国内用户使用,我们将国内主要城市(338 个)的经纬度信息收集汇总并转换成 Highmaps 坐标值,最终的结果提供数据接口和文件下载,相关文件及调用方法如下:
JSON 调用(JSONP)
$.getJSON('https://data.jianshukeji.com/jsonp?filename=geochina/cities.json&callback=?', function(cities) {
// ...
series: [{
type: 'mappoint',
name: 'cities',
data: [{
name: '北京',
x: cities['北京'].x, // 直接使用转换好的坐标轴
y: -cities['北京'].y,
}]
}]
})
JS 调用
<script src="https://data.jianshukeji.com/geochina/cities.js"></script>
<script>
var cities = Highcharts.map['china-cities'],
mappoint = Highcharts.geojson(cities, 'mappoint');
// ...
series: [{
type: 'mapbubble',
mapData: mappoint,
data: [{
name: '北京',
z: 1000
},{
name: '上海',
z: 800
}],
joinBy: 'name'
}]
</script>
Highmaps 提供了 Chart.transformFromLatLon 和 Chart.transformToLatLon 这个两个函数用于经纬度值和 Highmaps 坐标轴进行互相转换。
如果不想依赖 Highmaps 直接进行经纬度转换,可以使用 proj4js
提供的函数进行转换,下面是简单的示例代码:
<script src="https://cdn.bootcdn.net/ajax/libs/proj4js/2.7.2/proj4.js"></script>
<script>
// Highmaps 默认的坐标系统参数
var transform = {
"crs": "+proj=lcc +lat_1=18 +lat_2=24 +lat_0=21 +lon_0=114 +x_0=500000 +y_0=500000 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs",
"scale": 0.000129831107685,
"jsonres": 15.5,
"jsonmarginX": -999,
"jsonmarginY": 9851.0,
"xoffset": -3139937.49309,
"yoffset": 4358972.7486
};
/**
* 经纬度转换函数
* @param float lon 经度
* @param float lat 纬度
* @return [x, y]
*/
function lonlatToXY(lon, lat) {
if(typeof lon === 'string') {
lon = parseFloat(lon);
}
if(typeof lat === 'string') {
lat = parseFloat(lat);
}
var projected = proj4(transform.crs, [lon, lat]),
cosAngle = transform.cosAngle || (transform.rotation && Math.cos(transform.rotation)),
sinAngle = transform.sinAngle || (transform.rotation && Math.sin(transform.rotation)),
rotated = transform.rotation ? [projected[0] * cosAngle + projected[1] * sinAngle, -projected[0] * sinAngle + projected[1] * cosAngle] : projected;
return [
parseInt(((rotated[0] - (transform.xoffset || 0)) * (transform.scale || 1) + (transform.xpan || 0)) * (transform.jsonres || 1) + (transform.jsonmarginX || 0)),
-parseInt((((transform.yoffset || 0) - rotated[1]) * (transform.scale || 1) + (transform.ypan || 0)) * (transform.jsonres || 1) - (transform.jsonmarginY || 0))
];
}
</script>
本教程仅用于学习、研究和交流目的,欢迎非商业转载。转载请注明出处及完整的链接。
订阅更新
尊敬的用户您好:
由于域名备案调整,我们将于 2023-01-01 ~ 2023-01-07 日陆续停用 highcharts.com.cn 域名,受影响的网站及域名如下:
网站或服务名称 | 域名 | 替代的网站 |
---|---|---|
主站 | www.highcharts.com.cn | www.hcharts.cn |
静态资源服务/CDN | cdn.highcharts.com.cn code.highcharts.com.cn | code.hcharts.cn |
img.highcharts.com.cn | img.hcharts.cn | |
API 文档 | api.highcharts.com.cn | api.hcharts.cn |
导出服务 | export.highcharts.com.cn | export.hcharts.cn |
以上网站服务及 highcharts.com.cn 域名下的网站将于 2023-01-08 日全部下线,未来一段时间将不可访问,后续我们将上线新的网站。
如果您的应用中有使用到相关服务,请抓紧时间对链接进行调整(特别是静态资源/CDN 服务的链接),以免影响您的网站或应用的正常运行,由此给您带来的不便,敬请谅解。
如需帮助,请及时与我们联系:0571-86208605 / 18106595564(微信)。
简数科技 2022-12-22