园林绿化
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

296 lines
13 KiB

  1. //官方mapbox-streets-v6 vector样式
  2. // Styles for the mapbox-streets-v6 vector tile data set. Loosely based on
  3. // http://a.tiles.mapbox.com/v4/mapbox.mapbox-streets-v6.json
  4. (function (window) {
  5. class MapboxStreetsV6 {
  6. constructor(options = {}) {
  7. this._type = "mapbox-streets-v6";
  8. }
  9. getStyle(options, urltemplate) {
  10. var fill = new ol.style.Fill({ color: "" });
  11. var stroke = new ol.style.Stroke({ color: "", width: 1 });
  12. var polygon = new ol.style.Style({ fill: fill });
  13. var strokedPolygon = new ol.style.Style({ fill: fill, stroke: stroke });
  14. var line = new ol.style.Style({ stroke: stroke });
  15. var text = new ol.style.Style({
  16. text: new ol.style.Text({
  17. text: "",
  18. fill: fill,
  19. stroke: stroke,
  20. }),
  21. });
  22. var iconCache = {};
  23. function getIcon(iconName) {
  24. var icon = iconCache[iconName];
  25. if (!icon) {
  26. icon = new ol.style.Style({
  27. image: new ol.style.Icon({
  28. src: "https://unpkg.com/@mapbox/maki@4.0.0/icons/" + iconName + "-15.svg",
  29. imgSize: [15, 15],
  30. }),
  31. });
  32. iconCache[iconName] = icon;
  33. }
  34. return icon;
  35. }
  36. var styles = [];
  37. return function (feature, resolution) {
  38. var length = 0;
  39. var layer = feature.get("layer");
  40. var cls = feature.get("class");
  41. var type = feature.get("type");
  42. var scalerank = feature.get("scalerank");
  43. var labelrank = feature.get("labelrank");
  44. var adminLevel = feature.get("admin_level");
  45. var maritime = feature.get("maritime");
  46. var disputed = feature.get("disputed");
  47. var maki = feature.get("maki");
  48. var geom = feature.getGeometry().getType();
  49. if (layer == "landuse" && cls == "park") {
  50. fill.setColor("#d8e8c8");
  51. styles[length++] = polygon;
  52. } else if (layer == "landuse" && cls == "cemetery") {
  53. fill.setColor("#e0e4dd");
  54. styles[length++] = polygon;
  55. } else if (layer == "landuse" && cls == "hospital") {
  56. fill.setColor("#fde");
  57. styles[length++] = polygon;
  58. } else if (layer == "landuse" && cls == "school") {
  59. fill.setColor("#f0e8f8");
  60. styles[length++] = polygon;
  61. } else if (layer == "landuse" && cls == "wood") {
  62. fill.setColor("rgb(233,238,223)");
  63. styles[length++] = polygon;
  64. } else if (layer == "waterway" && cls != "river" && cls != "stream" && cls != "canal") {
  65. stroke.setColor("#a0c8f0");
  66. stroke.setWidth(1);
  67. styles[length++] = line;
  68. } else if (layer == "waterway" && cls == "river") {
  69. stroke.setColor("#a0c8f0");
  70. stroke.setWidth(1);
  71. styles[length++] = line;
  72. } else if (layer == "waterway" && (cls == "stream" || cls == "canal")) {
  73. stroke.setColor("#a0c8f0");
  74. stroke.setWidth(1);
  75. styles[length++] = line;
  76. } else if (layer == "water") {
  77. fill.setColor("#a0c8f0");
  78. styles[length++] = polygon;
  79. } else if (layer == "aeroway" && geom == "Polygon") {
  80. fill.setColor("rgb(242,239,235)");
  81. styles[length++] = polygon;
  82. } else if (layer == "aeroway" && geom == "LineString" && resolution <= 76.43702828517625) {
  83. stroke.setColor("#f0ede9");
  84. stroke.setWidth(1);
  85. styles[length++] = line;
  86. } else if (layer == "building") {
  87. fill.setColor("#f2eae2");
  88. stroke.setColor("#dfdbd7");
  89. stroke.setWidth(1);
  90. styles[length++] = strokedPolygon;
  91. } else if (layer == "tunnel" && cls == "motorway_link") {
  92. stroke.setColor("#e9ac77");
  93. stroke.setWidth(1);
  94. styles[length++] = line;
  95. } else if (layer == "tunnel" && cls == "service") {
  96. stroke.setColor("#cfcdca");
  97. stroke.setWidth(1);
  98. styles[length++] = line;
  99. } else if (layer == "tunnel" && (cls == "street" || cls == "street_limited")) {
  100. stroke.setColor("#cfcdca");
  101. stroke.setWidth(1);
  102. styles[length++] = line;
  103. } else if (layer == "tunnel" && cls == "main" && resolution <= 1222.99245256282) {
  104. stroke.setColor("#e9ac77");
  105. stroke.setWidth(1);
  106. styles[length++] = line;
  107. } else if (layer == "tunnel" && cls == "motorway") {
  108. stroke.setColor("#e9ac77");
  109. stroke.setWidth(1);
  110. styles[length++] = line;
  111. } else if (layer == "tunnel" && cls == "path") {
  112. stroke.setColor("#cba");
  113. stroke.setWidth(1);
  114. styles[length++] = line;
  115. } else if (layer == "tunnel" && cls == "major_rail") {
  116. stroke.setColor("#bbb");
  117. stroke.setWidth(2);
  118. styles[length++] = line;
  119. } else if (layer == "road" && cls == "motorway_link") {
  120. stroke.setColor("#e9ac77");
  121. stroke.setWidth(1);
  122. styles[length++] = line;
  123. } else if (layer == "road" && (cls == "street" || cls == "street_limited") && geom == "LineString") {
  124. stroke.setColor("#cfcdca");
  125. stroke.setWidth(1);
  126. styles[length++] = line;
  127. } else if (layer == "road" && cls == "main" && resolution <= 1222.99245256282) {
  128. stroke.setColor("#e9ac77");
  129. stroke.setWidth(1);
  130. styles[length++] = line;
  131. } else if (layer == "road" && cls == "motorway" && resolution <= 4891.96981025128) {
  132. stroke.setColor("#e9ac77");
  133. stroke.setWidth(1);
  134. styles[length++] = line;
  135. } else if (layer == "road" && cls == "path") {
  136. stroke.setColor("#cba");
  137. stroke.setWidth(1);
  138. styles[length++] = line;
  139. } else if (layer == "road" && cls == "major_rail") {
  140. stroke.setColor("#bbb");
  141. stroke.setWidth(2);
  142. styles[length++] = line;
  143. } else if (layer == "bridge" && cls == "motorway_link") {
  144. stroke.setColor("#e9ac77");
  145. stroke.setWidth(1);
  146. styles[length++] = line;
  147. } else if (layer == "bridge" && cls == "motorway") {
  148. stroke.setColor("#e9ac77");
  149. stroke.setWidth(1);
  150. styles[length++] = line;
  151. } else if (layer == "bridge" && cls == "service") {
  152. stroke.setColor("#cfcdca");
  153. stroke.setWidth(1);
  154. styles[length++] = line;
  155. } else if (layer == "bridge" && (cls == "street" || cls == "street_limited")) {
  156. stroke.setColor("#cfcdca");
  157. stroke.setWidth(1);
  158. styles[length++] = line;
  159. } else if (layer == "bridge" && cls == "main" && resolution <= 1222.99245256282) {
  160. stroke.setColor("#e9ac77");
  161. stroke.setWidth(1);
  162. styles[length++] = line;
  163. } else if (layer == "bridge" && cls == "path") {
  164. stroke.setColor("#cba");
  165. stroke.setWidth(1);
  166. styles[length++] = line;
  167. } else if (layer == "bridge" && cls == "major_rail") {
  168. stroke.setColor("#bbb");
  169. stroke.setWidth(2);
  170. styles[length++] = line;
  171. } else if (layer == "admin" && adminLevel >= 3 && maritime === 0) {
  172. stroke.setColor("#9e9cab");
  173. stroke.setWidth(1);
  174. styles[length++] = line;
  175. } else if (layer == "admin" && adminLevel == 2 && disputed === 0 && maritime === 0) {
  176. stroke.setColor("#9e9cab");
  177. stroke.setWidth(1);
  178. styles[length++] = line;
  179. } else if (layer == "admin" && adminLevel == 2 && disputed === 1 && maritime === 0) {
  180. stroke.setColor("#9e9cab");
  181. stroke.setWidth(1);
  182. styles[length++] = line;
  183. } else if (layer == "admin" && adminLevel >= 3 && maritime === 1) {
  184. stroke.setColor("#a0c8f0");
  185. stroke.setWidth(1);
  186. styles[length++] = line;
  187. } else if (layer == "admin" && adminLevel == 2 && maritime === 1) {
  188. stroke.setColor("#a0c8f0");
  189. stroke.setWidth(1);
  190. styles[length++] = line;
  191. } else if (layer == "country_label" && scalerank === 1) {
  192. text.getText().setText(feature.get("name_en"));
  193. text.getText().setFont('bold 11px "Open Sans", "Arial Unicode MS"');
  194. fill.setColor("#334");
  195. stroke.setColor("rgba(255,255,255,0.8)");
  196. stroke.setWidth(2);
  197. styles[length++] = text;
  198. } else if (layer == "country_label" && scalerank === 2 && resolution <= 19567.87924100512) {
  199. text.getText().setText(feature.get("name_en"));
  200. text.getText().setFont('bold 10px "Open Sans", "Arial Unicode MS"');
  201. fill.setColor("#334");
  202. stroke.setColor("rgba(255,255,255,0.8)");
  203. stroke.setWidth(2);
  204. styles[length++] = text;
  205. } else if (layer == "country_label" && scalerank === 3 && resolution <= 9783.93962050256) {
  206. text.getText().setText(feature.get("name_en"));
  207. text.getText().setFont('bold 9px "Open Sans", "Arial Unicode MS"');
  208. fill.setColor("#334");
  209. stroke.setColor("rgba(255,255,255,0.8)");
  210. stroke.setWidth(2);
  211. styles[length++] = text;
  212. } else if (layer == "country_label" && scalerank === 4 && resolution <= 4891.96981025128) {
  213. text.getText().setText(feature.get("name_en"));
  214. text.getText().setFont('bold 8px "Open Sans", "Arial Unicode MS"');
  215. fill.setColor("#334");
  216. stroke.setColor("rgba(255,255,255,0.8)");
  217. stroke.setWidth(2);
  218. styles[length++] = text;
  219. } else if (layer == "marine_label" && labelrank === 1 && geom == "Point") {
  220. text.getText().setText(feature.get("name_en"));
  221. text.getText().setFont('italic 11px "Open Sans", "Arial Unicode MS"');
  222. fill.setColor("#74aee9");
  223. stroke.setColor("rgba(255,255,255,0.8)");
  224. stroke.setWidth(1);
  225. styles[length++] = text;
  226. } else if (layer == "marine_label" && labelrank === 2 && geom == "Point") {
  227. text.getText().setText(feature.get("name_en"));
  228. text.getText().setFont('italic 11px "Open Sans", "Arial Unicode MS"');
  229. fill.setColor("#74aee9");
  230. stroke.setColor("rgba(255,255,255,0.8)");
  231. stroke.setWidth(1);
  232. styles[length++] = text;
  233. } else if (layer == "marine_label" && labelrank === 3 && geom == "Point") {
  234. text.getText().setText(feature.get("name_en"));
  235. text.getText().setFont('italic 10px "Open Sans", "Arial Unicode MS"');
  236. fill.setColor("#74aee9");
  237. stroke.setColor("rgba(255,255,255,0.8)");
  238. stroke.setWidth(1);
  239. styles[length++] = text;
  240. } else if (layer == "marine_label" && labelrank === 4 && geom == "Point") {
  241. text.getText().setText(feature.get("name_en"));
  242. text.getText().setFont('italic 9px "Open Sans", "Arial Unicode MS"');
  243. fill.setColor("#74aee9");
  244. stroke.setColor("rgba(255,255,255,0.8)");
  245. stroke.setWidth(1);
  246. styles[length++] = text;
  247. } else if (layer == "place_label" && type == "city" && resolution <= 1222.99245256282) {
  248. text.getText().setText(feature.get("name_en"));
  249. text.getText().setFont('11px "Open Sans", "Arial Unicode MS"');
  250. fill.setColor("#333");
  251. stroke.setColor("rgba(255,255,255,0.8)");
  252. stroke.setWidth(1);
  253. styles[length++] = text;
  254. } else if (layer == "place_label" && type == "town" && resolution <= 305.748113140705) {
  255. text.getText().setText(feature.get("name_en"));
  256. text.getText().setFont('9px "Open Sans", "Arial Unicode MS"');
  257. fill.setColor("#333");
  258. stroke.setColor("rgba(255,255,255,0.8)");
  259. stroke.setWidth(1);
  260. styles[length++] = text;
  261. } else if (layer == "place_label" && type == "village" && resolution <= 38.21851414258813) {
  262. text.getText().setText(feature.get("name_en"));
  263. text.getText().setFont('8px "Open Sans", "Arial Unicode MS"');
  264. fill.setColor("#333");
  265. stroke.setColor("rgba(255,255,255,0.8)");
  266. stroke.setWidth(1);
  267. styles[length++] = text;
  268. } else if (layer == "place_label" && resolution <= 19.109257071294063 && (type == "hamlet" || type == "suburb" || type == "neighbourhood")) {
  269. text.getText().setText(feature.get("name_en"));
  270. text.getText().setFont('bold 9px "Arial Narrow"');
  271. fill.setColor("#633");
  272. stroke.setColor("rgba(255,255,255,0.8)");
  273. stroke.setWidth(1);
  274. styles[length++] = text;
  275. } else if (layer == "poi_label" && resolution <= 19.109257071294063 && scalerank == 1 && maki !== "marker") {
  276. styles[length++] = getIcon(maki);
  277. } else if (layer == "poi_label" && resolution <= 9.554628535647032 && scalerank == 2 && maki !== "marker") {
  278. styles[length++] = getIcon(maki);
  279. } else if (layer == "poi_label" && resolution <= 4.777314267823516 && scalerank == 3 && maki !== "marker") {
  280. styles[length++] = getIcon(maki);
  281. } else if (layer == "poi_label" && resolution <= 2.388657133911758 && scalerank == 4 && maki !== "marker") {
  282. styles[length++] = getIcon(maki);
  283. } else if (layer == "poi_label" && resolution <= 1.194328566955879 && scalerank >= 5 && maki !== "marker") {
  284. styles[length++] = getIcon(maki);
  285. }
  286. styles.length = length;
  287. return styles;
  288. };
  289. }
  290. }
  291. //对外接口
  292. window.mars3d.MapboxStreetsV6 = MapboxStreetsV6;
  293. })(window);