12_graphiclayer_webgl.html 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <!--********************************************************************
  2. * Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
  3. *********************************************************************-->
  4. <!DOCTYPE html>
  5. <html>
  6. <head>
  7. <title data-i18n="resources.title_graphicLayer_webgl"></title>
  8. <script type="text/javascript" include="papaparse,dat-gui,widgets" src="../js/include-web.js"></script>
  9. <style>
  10. body {
  11. margin: 0;
  12. overflow: hidden;
  13. background: #fff;
  14. width: 100%;
  15. height: 100%;
  16. position: absolute;
  17. top: 0;
  18. }
  19. #map {
  20. margin: 0 auto;
  21. width: 100%;
  22. height: 100%
  23. }
  24. #title {
  25. position: absolute;
  26. color: white;
  27. left: 0;
  28. top: 30px;
  29. text-align: center;
  30. width: 100%;
  31. z-index: 500;
  32. }
  33. #title > h3 {
  34. margin: 10px 0;
  35. letter-spacing: 0.1em;
  36. }
  37. #title > h6 {
  38. margin: 0;
  39. font-weight: normal;
  40. }
  41. </style>
  42. </head>
  43. <body>
  44. <div id="title">
  45. <h3 data-i18n="resources.text_graphicLayer_title"></h3>
  46. <h6 data-i18n="resources.text_graphicLayer_subTitle"></h6>
  47. </div>
  48. <div id="map"></div>
  49. <script type="text/javascript" include="deck" src="../../dist/leaflet/include-leaflet.js"></script>
  50. <script type="text/javascript">
  51. var host = window.isLocal ? window.server : "https://iserver.supermap.io";
  52. var map, graphicLayer;
  53. map = L.map('map', {
  54. preferCanvas: true,
  55. closePopupOnClick: false,
  56. center: [40.7594, -73.91426],
  57. maxZoom: 18,
  58. zoom: 11
  59. });
  60. var url = host + "/iserver/services/map-china400/rest/maps/ChinaDark";
  61. L.supermap.tiledMapLayer(url).addTo(map);
  62. addLayer();
  63. function addLayer() {
  64. widgets.loader.showLoader("data loading...");
  65. $.get('../data/nyc-taxi.csv', function (csvstr) {
  66. widgets.loader.removeLoader();
  67. var nycData = Papa.parse(csvstr, {skipEmptyLines: true, header: true});
  68. var data = nycData.data;
  69. addGraphicLayer(data);
  70. })
  71. }
  72. function addGraphicLayer(data) {
  73. window.graphics = [], popup = L.popup({keepInView: true, autoClose: false});
  74. //设置每个点的经纬度
  75. for (var i = 0; i < data.length; ++i) {
  76. var coordinates = data[i];
  77. if (coordinates.lng === coordinates.lat) {
  78. continue;
  79. }
  80. graphics[i] = L.supermap.graphic({
  81. latLng: L.latLng(coordinates.lat, coordinates.lng)
  82. });
  83. }
  84. var graphicStyle = {
  85. color: [0, 255, 128, 255],
  86. highlightColor: [255, 0, 0, 255],
  87. radius: 0.5
  88. };
  89. //绘制图层
  90. graphicLayer = L.supermap.graphicLayer(graphics, {
  91. render: "webgl",
  92. color: graphicStyle.color,
  93. highlightColor: graphicStyle.highlightColor,
  94. radius: graphicStyle.radius,
  95. onClick: function (graphic) {
  96. if (graphic.lngLat) {
  97. popup.setLatLng(L.latLng(graphic.lngLat[1], graphic.lngLat[0]))
  98. .setContent('<p>' + resources.text_latLng + ': ' + JSON.stringify(graphic.lngLat) + '<p>')
  99. .addTo(map);
  100. }
  101. }
  102. }).addTo(map);
  103. initDatGui(graphicStyle)
  104. }
  105. //设置面板
  106. function initDatGui(options) {
  107. var gui = new dat.GUI();
  108. var control = createConfigControl(gui.domElement, 'topright');
  109. map.addControl(control);
  110. gui.addColor(options, 'color').onChange(finished);
  111. gui.add(options, 'radius', 0, 2).onChange(finished);
  112. function finished() {
  113. graphicLayer.setStyle(options);
  114. }
  115. }
  116. //创建样式更改操作控件
  117. function createConfigControl(domElement, position) {
  118. var infoView = L.control({position: position});
  119. infoView.onAdd = function () {
  120. this._div = domElement;
  121. handleMapEvent(this._div, this._map);
  122. return this._div;
  123. };
  124. function handleMapEvent(div, map) {
  125. if (!div || !map) {
  126. return;
  127. }
  128. div.addEventListener('mouseover', function () {
  129. map.dragging.disable();
  130. map.scrollWheelZoom.disable();
  131. map.doubleClickZoom.disable();
  132. });
  133. div.addEventListener('mouseout', function () {
  134. map.dragging.enable();
  135. map.scrollWheelZoom.enable();
  136. map.doubleClickZoom.enable();
  137. });
  138. }
  139. return infoView;
  140. }
  141. </script>
  142. </body>
  143. </html>