Openlayers之投影转换
1、投影转换
所谓投影转换,就是将具有某种投影坐标系的地图转换到另一种投影坐标系上显示,一般通过建立这两种投影之间坐标点的数学关系来实现,也可以将一种投影先转换为地理坐标系,再由地理坐标系转换到另一种投影坐标系;
2、代码实现
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<script src="../lib/ol/ol.js"></script>
<script src="../lib/ol/proj4.js"></script>
<link href="../css/ol.css" rel="stylesheet" />
<style type="text/css">
body,html,div{
border:none;padding:0;margin:0;
font-size:14px;
font-family:"微软雅黑";
}
#menu{
width:100%;
height:20px;
padding:5px 10px;
left:10px;
}
.container{
float:left;
width:48%;
height:850px;
margin:0 5px;
margin-left:10px;
}
.map{
float:left;
width:100%;
height:100%;
border:1px dashed red;
}
</style>
<script type="text/javascript">
window.onload = function () {
//定义一个变量,用来存储投影变换后的地图
var transformMap;
//初始化矢量图层
var vector = new ol.layer.Vector({
source: new ol.source.Vector({
url: '../data/geojson/countries-110m.json',
format:new ol.format.GeoJSON()
})
});
//初始化地图
var map = new ol.Map({
layers: [
new ol.layer.Tile({
source:new ol.source.OSM()
}),
vector
],
//渲染方式
render: 'canvas',
target: 'map1',
view: new ol.View({
//EPSG:3857投影
projection: ol.proj.get('EPSG:3857'),
//分辨率
resolutions: [65536, 32768, 16384, 8192, 4096, 2048],
center: [0, 0],
zoom:2
})
});
//显示网格参考
var graticule = new ol.Graticule({
map: map
})
//定义球形摩尔魏特投影坐标系
proj4.defs('ESRI:53009', '+proj=moll +lon_0=0 +x_0=0 +y_0=0 +a=6371000 ' +
'+b=6371000 +units=m +no_defs');
//定义球形摩尔魏特投影
var sphereMollweideProjection = new ol.proj.Projection({
//编号
code: 'ESRI:53009',
//显示范围
extent: [-9009954.605703328, -9009954.605703328, 9009954.605703328, 9009954.605703328],
//世界经纬度范围
worldExtent: [-179, -90, 179, 90]
});
//进行投影转换
document.getElementById('projection').onclick = function () {
//如果当前投影转换的地图为空或者未定义,则创建一个map对象
if (transformMap == null || transformMap == undefined) {
transformMap = new ol.Map({
layers: [
new ol.layer.Vector({
source: new ol.source.Vector({
url: '../data/geojson/countries-110m.json',
format:new ol.format.GeoJSON()
})
})
],
render: 'canvas',
target: 'map2',
view: new ol.View({
//指定投影为球形摩尔魏特投影
projection: sphereMollweideProjection,
resolutions: [65536, 32768, 16384, 8192, 4096, 2048],
center: [0, 0],
zoom: 2
})
});
var graticule = new ol.Graticule({
map:transformMap
})
}
};
};
</script>
</head>
<body>
<div id="menu">
<label class="title" for="projection">
地图投影转换演示:<button id="projection">投影转换</button>
</label>
</div>
<div class="container">
<label>投影坐标系(EPSG:3857)</label>
<div id="map1" class="map"></div>
</div>
<div class="container">
<label>投影坐标系(ESRI:53009)</label>
<div id="map2" class="map"></div>
</div>
</body>
</html>
3、结果展示
初始化界面
单击投影转换按钮,在右边的地图窗口显示投影转换以后的地图
在右边的视口中缩小地图,可以看见其完全在一个球面上
转载自:https://blog.csdn.net/SmileCoffin/article/details/56278882