canvas模拟中国铁路运行图

原理说明

1、在知道canvas画布尺寸的情况下,需要将地理经纬度信息转换为canvas画布x,y坐标,因为中国地图地理经纬度坐标取值范围为73.33-135.05(经度)37-50(维度),所以第一步需要确认的就是画布的中心位置,这里命名为centerX和centerY,同样的确认中国地图经纬度对应的中心位置,这里命名为positionX,positionY。
2、人为定义一个放大值range,这个值主要作用就是等比例的将中国地图在canvas画布中放大,range的数值需要根据画布横向尺寸跨度值与中国地图经纬度中经度跨度值相除来求解出来。
3、根据range值将中国地图等比例的在canvas画布上绘制出来。
4、获取地图上需要展示的轨迹经纬度信息,根据上述2,3在canvas画布上绘制出来。
5、定义一个rate值,用于表示在轨迹上运行物体的速度,为了能够保证运行物体轨迹沿着轨迹运行,需要在轨迹任意两个点之间求出横向宽度和纵向跨度,并且以跨度最大的那个为基准求解出轨迹上需要绘制多少个轨迹点,然后从过跨度较小的那个除以求解出来的轨迹点数量得出相应的速率。
6、在轨迹上点和横纵向运行速度确定之后,通过调用requestAnimationFrame函数实现标记点的运动。

效果图如下(图中轨迹经纬度信息纯属虚构)
在这里插入图片描述
中国地图绘制方法

function drawShapeOptionFun () {
   
   // 绘制中国地图
   chinaGeometry.features.forEach(function (chinaItem, chinaIndex) {
   
      var length = chinaItem.geometry.coordinates.length;
      var multipleBool = length > 1 ? true : false;
      chinaItem.geometry.coordinates.forEach(function (chinaChildItem, wordItemIndex) {
   
          if (multipleBool) {
   
             // 值界可以使用的经纬度信息
             if (chinaChildItem.length && chinaChildItem[0].length == 2) {
   
                 drawCanvasFun(chinaChildItem);
             }
             // 需要转换才可以使用的经纬度信息
             if (chinaChildItem.length && chinaChildItem[0].length > 2) {
   
                 chinaChildItem.forEach(function (countryItem, countryIndex) {
   
                     drawCanvasFun(countryItem);
                 })
             }
          } else {
   
              var countryPos = null;
              if (chinaChildItem.length > 1) {
   
                  countryPos = chinaChildItem;
              } else {
   
                 countryPos = chinaChildItem[0];
              }
              if (countryPos) {
   
                  drawCanvasFun(countryPos);
              }
           }
        })
     })
}
// canvas绘制平面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值