一、简介
墨卡托投影是一种常见的平面直角坐标系的地图投影,最早是由德国的卡尔·墨卡托在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()); });
五、总结
墨卡托投影是一种相对常用的地图投影方式,其距离保真度和角度准确度等特点,使得它在数字地图制作与在线地图展示等领域有着广泛的应用。当然,它也有面积缩小这些缺陷,因此在行政区划和地形地貌等方面的应用会受到挑战,需要视场景而定。