您的位置:

详解墨卡托投影

一、简介

墨卡托投影是一种常见的平面直角坐标系的地图投影,最早是由德国的卡尔·墨卡托在19世纪制定了这一方案,以便于制作海图等应用上。

墨卡托投影是将球面上的点投影到平面上的一种方式,它是典型的“保角”投影方式,它的最大特点是:距离比较真实,角度比较不变,但面积缩小,最常用在“北极-赤道”路线上,如:气象图,环球航线等。

二、数学原理

墨卡托投影采用的是x,y的直角坐标系,其主要的数学原理类似于二维转三维的算法,具体如下图所示:

function lonLat2Mercator(lon, lat) {
  var x = lon * 20037508.34 / 180;
  var y = Math.log(Math.tan((90 + lat) * Math.PI / 360)) / (Math.PI / 180);
  y = y * 20037508.34 / 180;
  return { "x": x, "y": y };
}

该方程式基于参数180和20037508.34对坐标进行缩放,以确保对数据进行非常好的动态投影。

三、投影图形

墨卡托投影是一种常用于卫星图像、地形图、电子地图等地图制作中的投影方式。采用对数方式的网格分布,使得地图的横向长度保持相同,但随着纬度的增加,地图的纵向长度缩小,因此地图上的区域实际面积比真实面积小。

用户可以自己编写代码进行可视化,下面是一个使用d3.js库的代码示例:

var width = 960,
    height = 500;

var scale = 200000,
    offset = [width / 2, height / 2],
    projection = d3.geo.mercator().scale(scale).translate(offset);

var path = d3.geo.path().projection(projection);

var svg = d3.select("body").append("svg")
    .attr("width", width)
    .attr("height", height);

d3.json("countries.json", function(error, topology) {
  svg.selectAll(".country")
      .data(topojson.object(topology, topology.objects.countries)
          .geometries)
    .enter().append("path")
      .attr("class", "country")
      .attr("d", path);
});

四、投影应用

墨卡托投影是一种全球性的地图投影,多应用于在线地图导航等方面,如Google Maps、高德地图、百度地图等。同时,墨卡托投影也广泛应用于数字高程模型、海底地形、卫星遥感影像等方面。

下面是一个使用高德地图接口进行地图展示的代码示例:

var map = new AMap.Map('container', {
  zoom: 11,
  center: [116.397428, 39.90923]
});

AMap.plugin(['AMap.ToolBar','AMap.Scale'],function(){
    map.addControl(new AMap.ToolBar());
    map.addControl(new AMap.Scale());
});

五、总结

墨卡托投影是一种相对常用的地图投影方式,其距离保真度和角度准确度等特点,使得它在数字地图制作与在线地图展示等领域有着广泛的应用。当然,它也有面积缩小这些缺陷,因此在行政区划和地形地貌等方面的应用会受到挑战,需要视场景而定。