2.创建一个地图2.1初始化一个openlayersmap对象var map=new Map({})2.2将这个对象添加到div中var map=new Map({ target:'map'})2.3在layers中定义数组中可用的图层tile是瓦片layers:[]layers: [ new ol.layer.Tile({ s_openlayers 百度地图">
当前位置:   article > 正文

openlayers入门添加百度地图绘制点线面_openlayers 百度地图

openlayers 百度地图

1.构建一个地图容器

<div id="map" class="map"></div>

2.创建一个地图
2.1初始化一个openlayersmap对象

var map=new Map({})

2.2将这个对象添加到div中

  1. var map=new Map({
  2. target:'map'
  3. })

2.3在layers中定义数组中可用的图层
tile是瓦片

  1. layers:[]
  2. layers: [
  3. new ol.layer.Tile({
  4. source: new ol.source.OSM()
  5. })
  6. ]

2.4view用于指定中心点和缩放级别

  1. view:new ol.View({
  2. center:ol.proj.fromLonLat(x,y)(或者[x,y],
  3. zoom:12
  4. })
  1. 使用百度地图
  2. <head>
  3. <meta charset="UTF-8">
  4. <meta name="viewport" content="width=device-width" />
  5. <link rel="stylesheet"
  6. href="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.12.0/css/ol.css" type="text/css">
  7. <style>
  8. .map {
  9. height: 400px;
  10. width: 100%;
  11. }
  12. </style>
  13. <script src="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.12.0/build/ol.js"></script>
  14. <title>百度地图</title>
  15. <style>
  16. html,
  17. body,
  18. #map {
  19. width: 100%;
  20. height: 100%
  21. }
  22. </style>
  23. </head>
  24. <body>
  25. <div id="map" class="map"></div>
  26. </body>
  27. <script>
  28. var projection = ol.proj.get("EPSG:3857");
  29. var resolutions = [];
  30. for (var i = 0; i < 19; i++) {
  31. resolutions[i] = Math.pow(2, 18 - i);
  32. }
  33. var tilegrid = new ol.tilegrid.TileGrid({
  34. origin: [0, 0],
  35. resolutions: resolutions
  36. });
  37. var baidu_source = new ol.source.TileImage({
  38. projection: projection,
  39. tileGrid: tilegrid,
  40. tileUrlFunction: function (tileCoord, pixelRatio, proj) {
  41. if (!tileCoord) {
  42. return "";
  43. }
  44. let z = tileCoord[0];
  45. let x = tileCoord[1];
  46. let y = -tileCoord[2] - 1;
  47. if (x < 0) {
  48. x = "M" + (-x);
  49. }
  50. if (y < 0) {
  51. y = "M" + (-y);
  52. }
  53. return "http://online3.map.bdimg.com/onlinelabel/?qt=tile&x=" + x + "&y=" + y + "&z=" + z +
  54. "&styles=pl&udt=20151021&scaler=1&p=1";
  55. }
  56. });
  57. var baidu_layer = new ol.layer.Tile({
  58. source: baidu_source
  59. });
  60. var map = new ol.Map({
  61. target: 'map',
  62. layers: [baidu_layer],
  63. view: new ol.View({
  64. center: [12959773,4853101],
  65. zoom: 12
  66. })
  67. });
  68. </script>

绘制点线面

  1. <head>
  2. <meta charset="UTF-8">
  3. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  4. <link rel="stylesheet"
  5. href="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.12.0/css/ol.css" type="text/css">
  6. <style>
  7. .map {
  8. height: 400px;
  9. width: 100%;
  10. }
  11. </style>
  12. <script src="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.12.0/build/ol.js"></script>
  13. <title>Document</title>
  14. </head>
  15. <body>
  16. <div id="menu">
  17. <label>几何图形类型:&nbsp;</label>
  18. <select id="type">
  19. <option value="None">无</option>
  20. <option value="Point">点</option>
  21. <option value="LineString">线</option>
  22. <option value="Polygon">多边形</option>
  23. <option value="Circle">圆</option>
  24. <option value="Square">正方形</option>
  25. </select>
  26. </div>
  27. <div id="map" class="map"></div>
  28. <script>
  29. var projection = ol.proj.get("EPSG:3857");
  30. var resolutions = [];
  31. for (var i = 0; i < 19; i++) {
  32. resolutions[i] = Math.pow(2, 18 - i);
  33. }
  34. var tilegrid = new ol.tilegrid.TileGrid({
  35. origin: [0, 0],
  36. resolutions: resolutions
  37. });
  38. var baidu_source = new ol.source.TileImage({
  39. projection: projection,
  40. tileGrid: tilegrid,
  41. tileUrlFunction: function (tileCoord, pixelRatio, proj) {
  42. if (!tileCoord) {
  43. return "";
  44. }
  45. let z = tileCoord[0];
  46. let x = tileCoord[1];
  47. let y = -tileCoord[2] - 1;
  48. if (x < 0) {
  49. x = "M" + (-x);
  50. }
  51. if (y < 0) {
  52. y = "M" + (-y);
  53. }
  54. return "http://online3.map.bdimg.com/onlinelabel/?qt=tile&x=" + x + "&y=" + y + "&z=" + z +
  55. "&styles=pl&udt=20151021&scaler=1&p=1";
  56. }
  57. });
  58. var baidu_layer = new ol.layer.Tile({
  59. source: baidu_source
  60. });
  61. var map = new ol.Map({
  62. target: 'map',
  63. layers: [baidu_layer],
  64. view: new ol.View({
  65. center: [12959773,4853101],
  66. zoom: 12
  67. })
  68. });
  69. var typeSelect = document.getElementById('type'); //绘制类型选择对象
  70. var draw; //ol.Interaction.Draw类的对象
  71. //首先需要明白的一点是,Source和Layer是一对一的关系,有一个Source,必然需要一个Layer,然后把这个Layer添加到Map上,就可以显示出来了。通过官网的API搜索ol.source可以发现有很多不同的Source,但归纳起来共三种:ol.source.Tile,ol.source.Image和ol.source.Vector。
  72. //ol.source.Tile对应的是瓦片数据源,现在网页地图服务中,绝大多数都是使用的瓦片地图,而OpenLayers 3作为一个WebGIS引擎,理所当然应该支持瓦片。
  73. //ol.source.Image对应的是一整张图,而不像瓦片那样很多张图,从而无需切片,也可以加载一些地图,适用于一些小场景地图。
  74. //ol.source.Vector对应的是矢量地图源,点,线,面等等常用的地图元素(Feature),就囊括到这里面了。这样看来,只要这两种Source就可以搞定80%的需求了。
  75. //实例化一个矢量图层Vector作为绘制层
  76. var source = new ol.source.Vector();
  77. var vectorLayer = new ol.layer.Vector({
  78. source: source,
  79. style: new ol.style.Style({
  80. fill: new ol.style.Fill({ //填充样式
  81. color: 'rgba(255, 255, 255, 0.2'
  82. }),
  83. stroke: new ol.style.Stroke({ //线样式
  84. color: '#00c033',
  85. width: 2
  86. }),
  87. image: new ol.style.Circle({ //点样式
  88. radius: 7,
  89. fill: new ol.style.Fill({
  90. color: '#00c033'
  91. })
  92. })
  93. })
  94. });
  95. //将绘制层添加到地图容器中
  96. map.addLayer(vectorLayer);
  97. //用户更改绘制类型触发的事件
  98. typeSelect.onchange = function (e) {
  99. map.removeInteraction(draw); //移除绘制图形控件
  100. addInteraction(); //添加绘制图形控件
  101. };
  102. //ol.interaction.Draw的可选参数
  103. //features,绘制的要素的目标集合;
  104. // source,绘制的要素的目标图层来源,即目标图层的 source属性 ;
  105. // snapTolerance,自动吸附完成点的像素距离,也就是说当鼠标位置距离闭合点小于该值设置的时候,会自动吸附到闭合点,默认值是 12;
  106. // type,绘制的地理要素类型,ol.geom.GeometryType类型,包含 Point、 LineString、 Polygon、MultiPoint、MultiLineString 或者 MultiPolygon;
  107. // minPointsPerRing,绘制一个多边形需要的点数最小值,数值类型,默认是 3;
  108. // style,要素素描的样式,是 ol.style.Style对象之一;
  109. // geometryName,绘制的地理要素的名称,string类型;
  110. // condition,一个函数,接受一个ol.MapBrowserEvent类型的参数,返回一个布尔值表示是否应该调用事件处理函数。默认情况下,增加一个顶点,类型为 ol.events.ConditionType。
  111. 绘制完成之后将其添加到
  112. // 添加事件
  113. function addInteraction() {
  114. var typeValue = typeSelect.value; //绘制类型
  115. if (typeValue !== 'None') {
  116. var geometryFunction, maxPoints;
  117. if (typeValue === 'Square') { //正方形
  118. typeValue = 'Circle'; //设置绘制类型为Circle
  119. //设置几何信息变更函数,即创建正方形
  120. geometryFunction = ol.interaction.Draw.createRegularPolygon(4);
  121. }
  122. console.log(typeValue);
  123. //实例化图形绘制控件对象并添加到地图容器中
  124. // 给地图添加该交互功能,首先需要实例化一个ol.interaction.Draw,必须指定 source和type属性:
  125. draw = new ol.interaction.Draw({
  126. source: source,
  127. type: typeValue, //几何图形类型
  128. geometryFunction: geometryFunction, //几何信息变更时的回调函数
  129. maxPoints: maxPoints //最大点数
  130. });
  131. // 最后首先执行绑定函数addInteraction();,然后点击鼠标进行绘制:
  132. map.addInteraction(draw);
  133. } else {
  134. //清空绘制的图形
  135. source.clear();
  136. }
  137. }
  138. </script>
  139. </body>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/155796
推荐阅读
  

闽ICP备14008679号