ol_common.js 3.4 KB

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