当前位置:   article > 正文

OpenLayer加载百度坐标偏移问题解决(方案一)_openlayers百度底图 图层偏移 怎么转baidu莫卡托

openlayers百度底图 图层偏移 怎么转baidu莫卡托

思路:方案一的问题就是解决百度坐标加载OSM地图或者天地图偏移的问题,我们通过百度api获取的坐标,用OL去加载的时候有坐标偏移的问题,百度坐标获取的是BD-9经过二次加密的坐标系,而OL是WGS-84要想不偏移我们应该将BD-9转到WGS-84,在这里我们用到了一个大牛编写的转换插件。

插件地址:https://github.com/wandergis/coordtransform

坐标不转换叠加图:

坐标转换之后叠加图:

一、坐标转换js文件引入

<script src="../script/index.js"></script>

二、代码部分

  1. //切片图层
  2. var vec_c = getTdtLayer("vec_w");
  3. //注记图层
  4. var cva_c = getTdtLayer("cva_w");
  5. var source = new ol.source.Vector();
  6. //矢量图层
  7. var vector = new ol.layer.Vector({
  8. source: source,
  9. style: new ol.style.Style({
  10. fill: new ol.style.Fill({
  11. color: 'rgba(255, 255, 255, 0.1)'
  12. }),
  13. stroke: new ol.style.Stroke({
  14. color: 'red',
  15. width: 2
  16. }),
  17. image: new ol.style.Circle({
  18. radius: 10,
  19. fill: new ol.style.Fill({
  20. color: '#ffcc33'
  21. })
  22. })
  23. })
  24. });
  25. var view = new ol.View({
  26. center: [116.46, 39.92],
  27. zoom: 4,
  28. projection: "EPSG:4326"
  29. });
  30. var map = new ol.Map({
  31. layers: [vec_c,cva_c,vector],
  32. view: view,
  33. target: "map"
  34. });
  35. var coordinatesPolygon = new Array();
  36. //定义查询按钮触发的函数
  37. function getBoundary() {
  38. var coordinates = [];
  39. //bdary存储行政区域边界,name存储查询名称
  40. var bdary = new BMap.Boundary();
  41. var name = document.getElementById("districtName").value;
  42. //get方法,获取行政区域的边界
  43. //rs是获取到的结果
  44. bdary.get(name, function (rs) {
  45. //存储行政区域边界的点数
  46. var count = rs.boundaries[0].toString().split(";").length;
  47. for (var i = 0; i < count ; i++) {
  48. var result = rs.boundaries[0].toString().split(";")[i].split(",");
  49. var arry = coordtransform.bd09togcj02(result[0], result[1]);
  50. //var arry = [result[0], result[1]];
  51. arry = coordtransform.gcj02towgs84(arry[0], arry[1]);
  52. //var arry = GPS.bd_decrypt();
  53. //arry = GPS.gcj_decrypt_exact(arry[0],arry[1]);
  54. coordinates.push(arry);
  55. }
  56. console.log(coordinates);
  57. //多边形此处注意一定要是[坐标数组]
  58. var plygon = new ol.geom.Polygon([coordinates])
  59. //多边形要素类
  60. var feature = new ol.Feature({
  61. geometry: plygon,
  62. });
  63. console.log(feature);
  64. source.addFeature(feature);
  65. console.log(vector.getSource().getFeatures().length);
  66. });
  67. }

底图加载的天地图,也可以是OSM,这样的转换还是有一点差距,但是完全可以达到需要的结果,如果需要让这个边界更加完善贴合底图,我们可以加载百度地图作为底图,但是在加载百度地图的我们需要解决一个问题,那就是切片偏移的问题,这个是方案二,我在下一篇文章会介绍这个。

 

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

闽ICP备14008679号