07_graphiclayer_webgl2.html 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <!--********************************************************************
  2. * Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
  3. *********************************************************************-->
  4. <!DOCTYPE html>
  5. <html>
  6. <head>
  7. <meta charset="UTF-8">
  8. <meta http-equiv="X-UA-Compatible" content="IE=Edge">
  9. <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
  10. <title data-i18n="resources.title_graphicLayer_webgl"></title>
  11. <style>
  12. #title {
  13. position: absolute;
  14. color: white;
  15. text-align: center;
  16. width: 600px;
  17. left: 0;
  18. top: 0;
  19. right: 0;
  20. margin: auto
  21. }
  22. #title > h3 {
  23. margin: 10px 0;
  24. letter-spacing: 0.1em;
  25. }
  26. #title > h6 {
  27. margin: 0;
  28. font-weight: normal;
  29. }
  30. .ol-popup {
  31. position: absolute;
  32. background-color: white;
  33. -webkit-filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
  34. filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
  35. padding: 15px;
  36. border-radius: 10px;
  37. border: 1px solid #cccccc;
  38. bottom: 12px;
  39. left: -50px;
  40. min-width: 50px;
  41. }
  42. .ol-popup:after, .ol-popup:before {
  43. top: 100%;
  44. border: solid transparent;
  45. content: " ";
  46. height: 0;
  47. width: 0;
  48. position: absolute;
  49. pointer-events: none;
  50. }
  51. .ol-popup:after {
  52. border-top-color: white;
  53. border-width: 10px;
  54. left: 48px;
  55. margin-left: -10px;
  56. }
  57. .ol-popup:before {
  58. border-top-color: #cccccc;
  59. border-width: 11px;
  60. left: 48px;
  61. margin-left: -11px;
  62. }
  63. .ol-panel {
  64. position: absolute;
  65. top: .5em;
  66. right:0;
  67. z-index: 10;
  68. }
  69. </style>
  70. </head>
  71. <body style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%; position: absolute;top: 0;">
  72. <div id="map" style="width: 100%;height:100%"></div>
  73. <div id="popup" class="ol-popup">
  74. <div id="popup-content"></div>
  75. </div>
  76. <div id="title">
  77. <h3 data-i18n="resources.text_graphicLayer_title"></h3>
  78. <h6 data-i18n="resources.text_graphicLayer_subTitle"></h6>
  79. </div>
  80. <div id="control" class="ol-panel"></div>
  81. <script type="text/javascript" include="papaparse,dat-gui,widgets" src="../js/include-web.js"></script>
  82. <script type="text/javascript" include="deck" src="../../dist/ol/include-ol.js"></script>
  83. <script type="text/javascript">
  84. var url = (window.isLocal ? window.server : "https://iserver.supermap.io") + "/iserver/services/map-china400/rest/maps/ChinaDark";
  85. var map, overlay, graphicLayer;
  86. new ol.supermap.MapService(url).getMapInfo(function (serviceResult) {
  87. var mapJSONObj = serviceResult.result;
  88. var container = document.getElementById('popup');
  89. overlay = new ol.Overlay(({
  90. element: container,
  91. autoPan: true,
  92. autoPanAnimation: {
  93. duration: 250
  94. }
  95. }));
  96. map = new ol.Map({
  97. target: 'map',
  98. controls: ol.control.defaults({attributionOptions: {collapsed: false}})
  99. .extend([new ol.supermap.control.Logo()]),
  100. view: new ol.View({
  101. center: ol.proj.transform([-73.9286, 40.75], 'EPSG:4326', 'EPSG:3857'),
  102. zoom: 11,
  103. projection: 'EPSG:3857',
  104. multiWorld: true
  105. }),
  106. overlays: [overlay]
  107. });
  108. var options = ol.source.TileSuperMapRest.optionsFromMapJSON(url, mapJSONObj);
  109. var layer = new ol.layer.Tile({
  110. source: new ol.source.TileSuperMapRest(options)
  111. });
  112. map.addLayer(layer);
  113. // var raster = new ol.layer.Tile({
  114. // source: new ol.source.OSM()
  115. // });
  116. // map.addLayer(raster);
  117. widgets.loader.showLoader("data loading...");
  118. Papa.parse('../data/nyc-taxi.csv', {
  119. download: true,
  120. skipEmptyLines: true,
  121. header: true,
  122. error: function () {
  123. widgets.loader.removeLoader();
  124. alert("parse error")
  125. },
  126. complete: function (results) {
  127. widgets.loader.removeLoader();
  128. addGraphicLayer(results.data);
  129. }
  130. });
  131. });
  132. function addGraphicLayer(data) {
  133. var graphics = [], count = data.length;
  134. for (var i = 0; i < count; ++i) {
  135. var coods = data[i];
  136. var coordinates = [parseFloat(coods.lng), parseFloat(coods.lat)];
  137. if (coordinates[0] === coordinates[1]) {
  138. continue;
  139. }
  140. coordinates = ol.proj.transform(coordinates, 'EPSG:4326', 'EPSG:3857');
  141. graphics[i] = new ol.Graphic(new ol.geom.Point(coordinates));
  142. }
  143. var graphicStyle = {
  144. color: [0, 255, 128, 255],
  145. highlightColor: [255, 0, 0, 255],
  146. radius: 0.5
  147. };
  148. map.once('postrender', function () {
  149. var content = document.getElementById('popup-content');
  150. graphicLayer = new ol.layer.Image({
  151. source: new ol.source.Graphic({
  152. render: "webgl",
  153. graphics: graphics,
  154. color: graphicStyle.color,
  155. highlightColor: graphicStyle.highlightColor,
  156. radius: graphicStyle.radius,
  157. map: map,
  158. onClick: function (graphic) {
  159. if (graphic) {
  160. var coords = graphic.lngLat;
  161. content.innerHTML = resources.text_coordinate + ":[" + coords[0] + "," + coords[1] + "]";
  162. overlay.setPosition(ol.proj.transform(coords, 'EPSG:4326', 'EPSG:3857'));
  163. return;
  164. }
  165. overlay.setPosition(undefined);
  166. }
  167. })
  168. });
  169. map.addLayer(graphicLayer);
  170. });
  171. initDatGui(graphicStyle)
  172. }
  173. //设置面板
  174. function initDatGui(options) {
  175. var gui = new dat.GUI();
  176. var popup = document.getElementById('control');
  177. popup.appendChild(gui.domElement);
  178. var control = new ol.control.Control({element: popup});
  179. control.setMap(map);
  180. map.addControl(control);
  181. gui.addColor(options, 'color').onChange(finished);
  182. gui.add(options, 'radius', 0, 2).onChange(finished);
  183. function finished() {
  184. graphicLayer.getSource().setStyle(options);
  185. }
  186. }
  187. </script>
  188. </body>
  189. </html>