ol_common.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import sourceWMTS from 'ol/source/WMTS';
  2. import WMTSTileGrid from 'ol/tilegrid/WMTS';
  3. import * as olExtent from 'ol/extent';
  4. import TileLayer from 'ol/layer/Tile';
  5. import XYZ from 'ol/source/XYZ.js';
  6. import {WKT} from "ol/format";
  7. import BufferOp from 'jsts/org/locationtech/jts/operation/buffer/BufferOp.js'
  8. import {OL3Parser} from "jsts/org/locationtech/jts/io"
  9. import * as geom from "ol/geom";
  10. let jstsParser = new OL3Parser();
  11. jstsParser.inject(geom.Point, geom.LineString, geom.LinearRing, geom.Polygon, geom.MultiPoint, geom.MultiLineString, geom.MultiPolygon);
  12. //Code To RGB
  13. function CodeToRGB(code){
  14. let result = [];
  15. result.push(parseInt(code.substring(1, 3), 16));
  16. result.push(parseInt(code.substring(3, 5), 16));
  17. result.push(parseInt(code.substring(5) , 16));
  18. return result;
  19. }
  20. //创建图层(WMTS方式)
  21. function createGDWmts(){
  22. let AMapLayer = new TileLayer({
  23. source: new XYZ({
  24. url: 'http://wprd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}'
  25. }),
  26. visible: false,
  27. });
  28. return AMapLayer;
  29. }
  30. function crtLayerWMTS(wmtsData, opacity, projection){
  31. let projectionExtent = projection.getExtent();
  32. let size = olExtent.getWidth(projectionExtent) / 256;
  33. let resolutions = new Array(19);
  34. let matrixIds = new Array(19);
  35. for (var z = 1; z < 19; ++z) {
  36. // generate resolutions and matrixIds arrays for this WMTS
  37. resolutions[z] = size / Math.pow(2, z);
  38. matrixIds[z] = z;
  39. }
  40. let source = new sourceWMTS({
  41. url: wmtsData.url,
  42. layer: wmtsData.layer,
  43. matrixSet: wmtsData.matrixSet,
  44. format: 'tiles',
  45. projection: projection,
  46. tileGrid: new WMTSTileGrid({
  47. origin: olExtent.getTopLeft(projectionExtent),
  48. resolutions: resolutions,
  49. matrixIds: matrixIds
  50. }),
  51. style: 'default',
  52. wrapX: true
  53. })
  54. let layer = new TileLayer({
  55. zIndex:wmtsData.zIndex,
  56. source: source,
  57. visible: false,
  58. });
  59. layer.id = wmtsData.layer+"_"+wmtsData.matrixSet;
  60. return layer;
  61. }
  62. function wktCastGeom(wkt){
  63. return new WKT().readGeometry(wkt);
  64. }
  65. function fit(wkt,view,zoom){
  66. let extent = wktCastGeom(wkt).getExtent()
  67. extent[0] = extent[0] / zoom;
  68. extent[1] = extent[1] / zoom;
  69. extent[2] = extent[2] * zoom;
  70. extent[3] = extent[3] * zoom;
  71. view.fit(extent,{duration:700})
  72. }
  73. function fitExtent(extent, view, zoom){
  74. let extent2 = [];
  75. extent2[0] = extent[0] / zoom;
  76. extent2[1] = extent[1] / zoom;
  77. extent2[2] = extent[2] * zoom;
  78. extent2[3] = extent[3] * zoom;
  79. view.fit(extent2,{duration:700})
  80. }
  81. const fitBuffer = (pointWkt, map, meter)=>{
  82. let geom = new WKT().readGeometry(pointWkt);
  83. let degree = meter / (2 * Math.PI * 6371004) * 360;
  84. geom = jstsParser.write(BufferOp.bufferOp(jstsParser.read(geom), degree, 8))
  85. map.getView().fit(geom,{duration: 1000})
  86. }
  87. export{
  88. crtLayerWMTS,CodeToRGB,createGDWmts,wktCastGeom,fit,fitBuffer,fitExtent
  89. };