地图/路况图Tile计算和拼装方法

1. 基础介绍

在线地图服务提供的图片下载和组织方式与google map基本相同。下载图片时,客户端需要指定缩放级别和下载图片的 tile 编号(即

tile所在的行号和列号),下载完成后自行拼装成前台显示的地图。

Tile与显示窗口的关系如下图所示:

   黄色小方块表示一个tile,大小固定,一般取256*256。

  红色方框表示前端的地图显示窗口。

  紫色方框表示为了完成地图显示窗口的地图拼装所需要下载的 tile组。

 

2.        坐标转换方法

2.1 基本换算

1)       墨卡托正变换  通过墨卡托投影法将球面经纬度坐标变换成平面坐标:

 public static Point2D convertLonLat2MercXY(LonLat lonlat)

         {

                       Point2D result = new Point2D();

                 

                       result.X = lonlat.lon * DEG2RAD;

                 

                 double phi = lonlat.lat * DEG2RAD;                

                 result.Y = 0.5 * Math.log((1 + Math.sin(phi)) / (1 - Math.sin(phi)));

                 return (result);

         }

 其中的数据结构和常量定义如下:

public class LonLat { 

      public double lon; 

      public double lat;

}

public class Point2D { 

      public double X; 

      public double Y;

}

// 度换算成弧度

public static double DEG2RAD = 0.017453293;

 

2)         墨卡托逆变换将墨卡托平面坐标变换成经纬度坐标:

   public static LonLat convertMercXY2LonLat(Point2D mercXY){

                        LonLat result = new LonLat();

                       result.lon = mercXY.X / DEG2RAD;

                        result.lat = Math.atan(Math.sinh(mercXY.Y)) / DEG2RAD;

                      return (result);

}

 

3)         墨卡托坐标到pixel坐标的变换根据显示级别和墨卡托坐标,取得像素坐标:

public

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值