地图投影和矢量瓦片详解

一.引言

    地图投影的分类很多,世界上目前主流地图都是采用的Web墨卡托投影方式(国际组织称其为3857或900913投影),国内高德和百度地图也是采用的Web墨卡托的投影方式,除了Web墨卡托之外,经纬度投影(简称4326投影)也是比较常用,矢量瓦片通俗来讲就是说数据是以点线面的形式进行存储,目前国内的高德和百度地图都是采用的这种方式,因最近工作中使用这两个概念比较多,在此记录下以便后续查阅和供他人学习。

二.地图投影

2.1.地理坐标系的概念.

这里写图片描述

2.2.投影坐标系的概念.

这里写图片描述

2.3.地理坐标系和投影坐标系的关系.

这里写图片描述

2.4.地图投影的分类.

这里写图片描述

这里写图片描述

2.5Web墨卡托投影概念和经纬度投影坐标与Web墨卡托坐标的相互转化.

这里写图片描述

这里写图片描述

    Web墨卡托和经纬度投影转化的代码.

/**
     * 经纬度坐标转Web墨卡托坐标
     * @param lat
     * @param lon
     * @return
     */
    public static  double [] lonLat2Mercator(double lat,double lon){

        double [] xy = new double[2];
        double x = lon * 20037508.342789 / 180;
        double y = Math.log(Math.tan((90+lat)*Math.PI/360))/(Math.PI/180);
        y = y * 20037508.342789 / 180;
        xy[0] = x;
        xy[1] = y;
        return  xy;
    }

    /**
     * Web墨卡托坐标转经纬度
     * @param mercatorX
     * @param mercatorY
     * @return
     */
    public static double [] mercator2lonLat(double mercatorX,double mercatorY ){
        double [] xy = new double[2];
        double x = mercatorX/20037508.342789*180;
        double y = mercatorY/20037508.342789*180;
        y = 180 /Math.PI*(2*Math.atan(Math.exp(y*Math.PI/180))-Math.PI/2);
        xy[0] = x;
        xy[1] = y;
        return xy;
    }

三.矢量瓦片

3.1.珊格瓦片和矢量瓦片的概念.

珊格瓦片是预先在Server端绘制好固定的PNG和JPG图片集合。
矢量瓦片是将矢量数据通过不同的描述文件来组织和定义,在客户端实时解析数据和完成绘制。

3.2.矢量瓦片的数据格式.

矢量瓦片常用的数据格式有geojson,PBF,MVT等。
数据源的话可以使用Mapbox,也可以使用OSM,亦或是使用自己的数据。

注意:矢量瓦片内存储的数据是相对坐标,并不是地理坐标,这么做的目的是为了减小数据量,加快传输效率和前端渲染效率。

3.3.矢量瓦片相比珊格瓦片的优势.

1.不再需要为不同的样式而反复进行制图、渲染、切片、更新service等过程.
2.在当前各种高分屏、视网膜屏大肆发展的阶段,避开按照特定DPI和分辨率渲染的栅格图片在不同的显示设备上无法以统一清晰的效果呈现.
3.矢量瓦片数据是可交互可在线编辑的,而传统的珊格瓦片数据是不可交互的.
4.矢量瓦片的渲染效率比珊格瓦片要高.

3.4.Mapbox提出的矢量瓦片标准

https://github.com/jingsam/vector-tile-spec/blob/master/2.1/README_zh.md

注意:Mapbox是一块开放源代码的国外地图SDK,我正在研究Mapbox的源代码并修改以实现不同的功能需求,如有朋友也在做这个事情,欢迎联系我沟通讨论,邮箱地址:[email protected]

猜你喜欢

转载自blog.csdn.net/liuxu841911548/article/details/78569519