244 lines
6.9 KiB
Markdown
244 lines
6.9 KiB
Markdown
---
|
||
title: 公共网络地图服务
|
||
date: 2020-10-20
|
||
author: ac
|
||
tags:
|
||
- geojson
|
||
- kml
|
||
- OpenLayers
|
||
categories:
|
||
- GIS
|
||
---
|
||
|
||
> WebGIS最基础的工作就是将所需要的地图数据加载出来,然后才有后面和业务相关的操作。工作中常常数据是多种多样的,像KML、GeoJSON这类文件类型,栅格瓦片的WMTS服务类型,还有公共网络的地图服务,如百度地图,天地图等。
|
||
|
||
## 1. 简介
|
||
|
||
国内互联网上有像天地图、百度、高德等地图厂商,国外也有微软的Bing、Mapbox、Google等公司提供地图服务,这些服务都可以根据其提供的Web API接口进行调用。
|
||
|
||
## 2. 百度地图
|
||
|
||
<img src="./images/image-20210910203015252.png" alt="image-20210910203015252" style="zoom: 50%;" />
|
||
|
||
示例:
|
||
|
||
```html
|
||
<!doctype html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<link rel="stylesheet" href="css/ol.css" type="text/css">
|
||
<style>
|
||
.map {
|
||
height: 800px;
|
||
width: 100%;
|
||
}
|
||
</style>
|
||
<script src="lib/ol.js"></script>
|
||
<title>ol加载百度地图</title>
|
||
</head>
|
||
<body>
|
||
<h2>ol加载百度地图</h2>
|
||
<div id="map" class="map"></div>
|
||
<script>
|
||
|
||
var resolutions = [];
|
||
for(var i=0;i<19;i++){
|
||
resolutions[i] = Math.pow(2,18 - i)
|
||
}
|
||
var map = new ol.Map({
|
||
target:"map",
|
||
layers:[
|
||
new ol.layer.Tile({
|
||
id:"BMap",
|
||
source:new ol.source.TileImage({
|
||
//设置坐标参考
|
||
projection:ol.proj.get('EPSG:3857'),
|
||
//设置分辨率
|
||
tileGrid:new ol.tilegrid.TileGrid({
|
||
origin:[0,0],
|
||
resolutions:resolutions
|
||
}),
|
||
//设置百度地图的瓦片地图请求地址
|
||
tileUrlFunction:function (tileCoord,pixelRatio,proj) {
|
||
if(!tileCoord){
|
||
return "";
|
||
}
|
||
var z = tileCoord[0];
|
||
var x = tileCoord[1];
|
||
var y = tileCoord[2];
|
||
|
||
if(x < 0){
|
||
x = "M" + (-x);
|
||
}
|
||
if(y < 0){
|
||
x = "M" + (-y);
|
||
}
|
||
return "http://online3.map.bdimg.com/onlinelabel/?qt=tile&x=" + x + "&y=" + y + "&z=" + z + "&style=pl&udt=20151021&scale=1&p=1";
|
||
}
|
||
})
|
||
})
|
||
],
|
||
view:new ol.View({
|
||
center: [12698769.380277092, 2579510.250552084],
|
||
zoom: 11
|
||
})
|
||
});
|
||
</script>
|
||
</body>
|
||
</html>
|
||
```
|
||
|
||
|
||
|
||
## 3.天地图
|
||
|
||
<img src="./images/image-20210910203230554.png" alt="image-20210910203230554" style="zoom: 80%;" />
|
||
|
||
示例:
|
||
|
||
```html
|
||
<!doctype html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<link rel="stylesheet" href="css/ol.css" type="text/css">
|
||
<style>
|
||
.map {
|
||
height: 400px;
|
||
width: 100%;
|
||
}
|
||
</style>
|
||
<script src="lib/ol.js"></script>
|
||
<title>Layer</title>
|
||
</head>
|
||
<body>
|
||
<h2>tdtDemo</h2>
|
||
<div id="map" class="map"></div>
|
||
<script>
|
||
var key = "bf156eb3c72350d62b008dc8a4ae1016";
|
||
var map = new ol.Map({
|
||
target:"map",
|
||
layers:[
|
||
new ol.layer.Tile({
|
||
id:"tdt_vec",
|
||
title:"天地图矢量图层",
|
||
source:new ol.source.XYZ({
|
||
// url:"http://t0.tianditu.gov.cn/vec_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILECOL={x}&TILEROW={y}&TILEMATRIX={z}&tk="+key,
|
||
url: 'http://t' + Math.round(Math.random() * 7) + '.tianditu.com/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk='+key,
|
||
crossOrigin:"anonymous",
|
||
wrapX:false
|
||
})
|
||
}),
|
||
new ol.layer.Tile({
|
||
id:"tdt_cva",
|
||
title:"天地图矢量注记图层",
|
||
source:new ol.source.XYZ({
|
||
url:"https://t2.tianditu.gov.cn/DataServer?T=cva_w&x={x}&y={y}&l={z}&tk="+key,
|
||
crossOrigin:"anonymous",
|
||
wrapX:false
|
||
})
|
||
})
|
||
],
|
||
view:new ol.View({
|
||
center: [12698769.380277092, 2579510.250552084],
|
||
zoom: 11
|
||
})
|
||
});
|
||
</script>
|
||
</body>
|
||
</html>
|
||
```
|
||
|
||
|
||
|
||
## 4. Mapbox
|
||
|
||
加载在线的矢量瓦片
|
||
|
||
> 矢量瓦片的本质是矢量地图,等效于在网页上绘制的栅格图片(矢量块)
|
||
|
||
矢量瓦片的常用数据格式:GeoJson、TopoJSON、PBF、MVT等。`ol`中提供了加载矢量瓦片的渲染器(Layer)、数据源(Source)、解析器(Format):
|
||
|
||
- `ol.layer.VectorTile`
|
||
- ` ol.source.VectorTile`
|
||
- `ol.format.MVT`
|
||
|
||
```html
|
||
<!doctype html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<link rel="stylesheet" href="css/ol.css" type="text/css">
|
||
<style>
|
||
.map {
|
||
height: 800px;
|
||
width: 100%;
|
||
}
|
||
</style>
|
||
<script src="lib/ol.js"></script>
|
||
<title>Layer</title>
|
||
</head>
|
||
<body>
|
||
<h2>ol加载矢量瓦片</h2>
|
||
<p>矢量瓦片是指不仅能够提供完整的样式设计灵活性,还能够快速渲染海量数据的矢量地图</p>
|
||
<p>矢量瓦片的本质是矢量地图,等效于在网页上绘制的栅格图片(矢量块)</p>
|
||
<p>矢量瓦片的常用数据格式:GeoJson、TopoJSON、PBF、MVT等</p>
|
||
<p>ol.layer.VectorTile + ol.source.VectorTile + ol.format.MVT</p>
|
||
<p>ol.format.MVT可以解析PBF、MVT格式的数据</p>
|
||
<div id="map" class="map"></div>
|
||
<script>
|
||
|
||
var key = "pk.eyJ1IjoicWl1c2hpamllIiwiYSI6ImNrYTYzNmlhdDAzb2YydG13YjZic2t2M3AifQ.XiCKl8HOEAy0MBo5v2yjvA";
|
||
var map = new ol.Map({
|
||
target:"map",
|
||
layers:[
|
||
new ol.layer.Tile({
|
||
id:"mapbox_v1",
|
||
source: new ol.source.XYZ({
|
||
url: 'https://api.mapbox.com/styles/v1/mapbox/streets-v11/tiles/256/{z}/{x}/{y}?access_token='+key
|
||
})
|
||
}),
|
||
new ol.layer.VectorTile({
|
||
declutter:true,
|
||
source:new ol.source.VectorTile({
|
||
url:"http://a.tiles.mapbox.com/v4/mapbox.mapbox-streets-v6/{z}/{x}/{y}.mvt?access_token="+key,
|
||
format:new ol.format.MVT(),
|
||
// style:createMapboxStreesV6Style(ol.style.Style,ol.style.Fill,ol.style.Stroke,ol.style.Icon,ol.style.Text)
|
||
style:"mapbox://styles/mapbox/streets-v11"
|
||
})
|
||
}),
|
||
],
|
||
view:new ol.View({
|
||
center: [12698769.380277092, 2579510.250552084],
|
||
zoom: 11
|
||
})
|
||
});
|
||
</script>
|
||
</body>
|
||
</html>
|
||
```
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|