• PIE-Engine APP:凉山州火灾高发地异常度分析系统


    这里我们利用凉山州作为火灾边界,同样可以切换我们所需要的区域,可以切换省级代码来进行,需要手动修改。这里我们用到的swith 和case的案例条件判断分析,

    语法

    1. switch(n)
    2. {
    3. case 1:
    4. 执行代码块 1
    5. break;
    6. case 2:
    7. 执行代码块 2
    8. break;
    9. default:
    10. case 1case 2 不同时执行的代码
    11. }

    实例

    显示今天的星期名称。请注意 Sunday=0, Monday=1, Tuesday=2, 等等:

    1. var d=new Date().getDay();
    2. switch (d)
    3. {
    4. case 0:x="今天是星期日";
    5. break;
    6. case 1:x="今天是星期一";
    7. break;
    8. case 2:x="今天是星期二";
    9. break;
    10. case 3:x="今天是星期三";
    11. break;
    12. case 4:x="今天是星期四";
    13. break;
    14. case 5:x="今天是星期五";
    15. break;
    16. case 6:x="今天是星期六";
    17. break;
    18. }
    '
    运行

    这里面所需的函数:

    ui.DateSelect(type,placeholder,value,onChange,disabled,style)

    时间选择。

    方法参数:

    - ui(ui)

    调用者:ui对象。

    - type(String)

    日期选择类型,可选值为date|daterange|year|month|datetime|datetimerange。

    - placeholder(String)

    占位符内容。

    - value(String|List)

    选择具体的日期,格式为:yyyy-MM-dd|yyyy-MM-dd HH:mm:ss

    - onChange(Function)

    更新选择日期触发事件。

    - disabled(Boolean)

    是否禁用日期组件。

    - style(Object)

    组件样式。

    返回值:ui.DateSelect

    这里同样可以导出影像:

    image(image,description,assetId,pyramidingPolicy,dimensions,region,scale,crs,crsTransform,maxPixels)

    导出影像到个人存储空间。

    方法参数:

    - export(Export)

    Export方法。

    - image(Image)

    要导出的影像。

    - description(String, optional)

    导出影像任务的描述。

    - assetId(String, optional)

    导出影像的存储路径。

    - pyramidingPolicy(Object, optional)

    金字塔规则。

    - dimensions(Int, optional)

    维度。

    - region(Geometry, optional)

    导出影像的范围。

    - scale(Float, optional)

    缩放比例,目前默认都是1。

    - crs(Projection, optional)

    投影的基准坐标参考系,暂指定为EPSG:4326或EPSG:3857参考系。

    - crsTransform(List, optional)

    投影坐标系变换值的列表。

    - maxPixels(Long, optional)

    要导出的最大像素数。

    返回值:null

    这个代码的还有提升的结果,如果要发布成为APP,那么就不太容易改变我们的研究区,因为在APP中没有code editor的界面,同样此APP的影像导出结果如果要下载,并没有出现在面板上。另外,对于chart图表的加载并没有加载到MAP上,如果转化为APP的化可能结果都无法显示,所以这个程序只能在code Editor界面中的控制台查看

    代码:

    1. /**
    2. * @Name : 凉山州火灾高发地异常度分析系统
    3. * @Author : 西南大学天生一队
    4. * @Source : 航天宏图第四届 “航天宏图杯”PIE软件二次开发大赛云开发组三等奖获奖作品
    5. */
    6. //定义程序运行过程需要用到的变量
    7. var date = ["2018-03-20", "2018-04-20"]; //开始日期和结束日期
    8. var mapID = null; //当前图层ID
    9. var maplegend = null; //当前图层图例ID
    10. var roiID = null; //当前研究范围ID
    11. var selectTag = "LST"; //选择的计算项目
    12. var areaCode = "0"; //行政区划代码,默认为0
    13. var roi = null; //研究区,在程序运行时动态变化
    14. var default_roi = null; //默认研究区,凉山州
    15. var sec_year = 2018; //要显示TVDI变化图的年份
    16. var animationlayerID = []; //如果显示了动态图,则用此数组记录动态图的图层ID
    17. var currentImg = null; //当前图层所对应的影像,导出时使用
    18. var exportScale = 500; //导出分辨率
    19. //获得凉山州矢量
    20. roi = pie
    21. .FeatureCollection("NGCC/CHINA_CITY_BOUNDARY")
    22. .filter(pie.Filter.eq("name", "凉山彝族自治州"))
    23. .getAt(0)
    24. .geometry();
    25. default_roi = roi; //将默认研究区设置为凉山彝族自治州
    26. //设置渲染样式(默认拉伸渲染,参数为最小值为最大值)
    27. function setVis(minvalue, maxvalue) {
    28. var newVis = {
    29. min: minvalue,
    30. max: maxvalue,
    31. palette: [
    32. "217303",
    33. "268303",
    34. "2a9203",
    35. "2fa203",
    36. "33b203",
    37. "37c203",
    38. "3bd203",
    39. "40e203",
    40. "44f203",
    41. "4bfc09",
    42. "56fd18",
    43. "6dfe37",
    44. "79fe47",
    45. "8cff05",
    46. "98ff04",
    47. "a5fe04",
    48. "b1fe03",
    49. "befe02",
    50. "cbfe02",
    51. "d7fd02",
    52. "e3fc02",
    53. "effb02",
    54. "faf802",
    55. "f9eb02",
    56. "f7dd03",
    57. "f6cf03",
    58. "f5c203",
    59. "f4b503",
    60. "f3a803",
    61. "f29b04",
    62. "f18e04",
    63. "f08104",
    64. "ef7404",
    65. "ee6804",
    66. "ed5b05",
    67. "ec4f05",
    68. "eb4305",
    69. "e93705",
    70. "e82b05",
    71. "e72006",
    72. "e61406",
    73. "e50906",
    74. ],
    75. };
    76. return newVis;
    77. }
    78. //按顺序输入影像集,起始时间、结束时间,要提取的波段名,研究区矢量【仅限单个波段提取】
    79. function loadCol(nameCol, start, end, bandname, roi) {
    80. var rCol = pie
    81. .ImageCollection(nameCol)
    82. .filterDate(start, end)
    83. .filterBounds(roi)
    84. .select(bandname)
    85. .mean()
    86. .clip(roi);
    87. return rCol;
    88. }
    89. //更改行政区划后调用的函数
    90. function getROI(code) {
    91. var new_roi = null;
    92. if (code !== 0) {
    93. var fCol = pie.FeatureCollection("NGCC/CHINA_PROVINCE_BOUNDARY");
    94. new_roi = fCol
    95. .filter(pie.Filter.eq("code", parseInt(code)))
    96. .first()
    97. .geometry();
    98. } else {
    99. new_roi = default_roi;
    100. }
    101. return new_roi;
    102. }
    103. //下载landsat8影像
    104. function l8Col_load(start, end) {
    105. var l8Col = pie
    106. .ImageCollection("LC08/01/T1")
    107. .filterDate(start, end)
    108. .select(["B2", "B3", "B4", "B5", "B6", "BQA"])
    109. .filterBounds(roi)
    110. .map(function (image) {
    111. var qa = image.select("BQA");
    112. var cloudMask = qa.bitwiseAnd(1 << 3).eq(0);
    113. return image.updateMask(cloudMask);
    114. });
    115. return l8Col;
    116. }
    117. //定义Landsat8不同指数计算方式
    118. var landsat8 = {
    119. //NDWI: (B03 - B05)/(B03 + B05)
    120. NDWI: function (image) {
    121. var b3 = image.select("B3");
    122. var b5 = image.select("B5");
    123. var ndvi = b3.subtract(b5).divide(b3.add(b5));
    124. return ndvi.rename("NDVI");
    125. },
    126. //MNDWI: (G - SWIR)/(G + SWIR)
    127. MNDWI: function (image) {
    128. var b3 = image.select("B3");
    129. var b6 = image.select("B6");
    130. var ndvi = b3.subtract(b6).divide(b3.add(b6));
    131. return ndvi.rename("MNDWI");
    132. },
    133. //NDVI: (B05 - B04)/(B05 + B04)
    134. NDVI: function (image) {
    135. var b5 = image.select("B5");
    136. var b4 = image.select("B4");
    137. var ndvi = b5.subtract(b4).divide(b5.add(b4));
    138. return ndvi.rename("NDVI");
    139. },
    140. //EVI: 2.5*(B05 - B04) / (B05 + 6*B04 - 7.5*B02 + 1)
    141. EVI: function (image) {
    142. var nir = image.select("B5").divide(10000);
    143. var red = image.select("B4").divide(10000);
    144. var blue = image.select("B2").divide(10000);
    145. var evi = nir
    146. .subtract(red)
    147. .multiply(2.5)
    148. .divide(nir.add(red.multiply(6)).subtract(blue.multiply(7.5)).add(1));
    149. return evi.rename("EVI");
    150. },
    151. };
    152. //点击“确定”按钮后调用的计算函数,用于计算选择的指标
    153. function calcuate(roi, startDate, endDate, tag) {
    154. //影像集合
    155. var l8Col = pie.ImageCollection("LC08/01/T1");
    156. //通过日期过滤影像集合,并计算
    157. l8Col = l8Col
    158. .filterDate(startDate, endDate)
    159. .select(["B2", "B3", "B4", "B5", "B6", "BQA"])
    160. .filterBounds(roi)
    161. .map(function (image) {
    162. var qa = image.select("BQA");
    163. var cloudMask = qa.bitwiseAnd(1 << 4).eq(0);
    164. return image.updateMask(cloudMask);
    165. });
    166. var image = null;
    167. var vis = null;
    168. switch (tag) {
    169. case "LST":
    170. image = loadCol("USGS/MOD11A1/006", date[0], date[1], "LST_Day_1km", roi)
    171. .multiply(0.02)
    172. .subtract(273.15);
    173. vis = setVis(0, 40);
    174. addLegend("地表温度(°C)", [10, 20, 30, 40]);
    175. break;
    176. case "NDVI":
    177. image = l8Col.map(landsat8.NDVI).mean().clip(roi);
    178. vis = setVis(-0.2, 0.8);
    179. addLegend("NDVI Value", ["0", "0.6"]);
    180. break;
    181. case "NDWI":
    182. image = l8Col.map(landsat8.NDWI).mean().clip(roi);
    183. vis = setVis(-1, 0.3);
    184. addLegend("NDWI Value", ["-0.8", "0.1"]);
    185. break;
    186. case "MNDWI":
    187. image = l8Col.map(landsat8.MNDWI).mean().clip(roi);
    188. vis = setVis(-1, 0.3);
    189. addLegend("MNDWI Value", ["-0.8", "0.1"]);
    190. break;
    191. case "EVI":
    192. image = l8Col.map(landsat8.EVI).mean().clip(roi);
    193. vis = setVis(-0.2, 0.8);
    194. addLegend("EVI Value", ["0", "0.6"]);
    195. break;
    196. case "TVDI": //调用TVDI数据产品
    197. image = loadCol("BNU/GLOBAL_1KM_TVDI", date[0], date[1], "B1", roi);
    198. image = image.divide(10000);
    199. vis = setVis(0, 1);
    200. addLegend("TVDI Value(0~1)", ["0.25", "0.75"]);
    201. break;
    202. case "火点": //调用MODIS数据产品
    203. image = loadCol("USGS/MOD14A2/006", date[0], date[1], "FireMask", roi);
    204. vis = setVis(3, 8);
    205. addLegend("置信等级", ["<3", 4, 5, 6, 7, 8]);
    206. break;
    207. }
    208. if (mapID !== null) {
    209. Map.removeLayer(mapID); //如果有图层ID则将其移除,保证只有1个图层显示
    210. }
    211. mapID = Map.addLayer(image, vis, tag);
    212. currentImg = image;
    213. }
    214. //添加图例样式的函数,作用在于计算的项目发生改变时动态调整图例,参数:1)titile:string;2)labels:object[]
    215. function addLegend(title, labels) {
    216. var data = {
    217. title: title,
    218. colors: [
    219. "#217303",
    220. "#268303",
    221. "#2a9203",
    222. "#2fa203",
    223. "#33b203",
    224. "#37c203",
    225. "#3bd203",
    226. "#40e203",
    227. "#44f203",
    228. "#4bfc09",
    229. "#56fd18",
    230. "#6dfe37",
    231. "#79fe47",
    232. "#8cff05",
    233. "#98ff04",
    234. "#a5fe04",
    235. "#b1fe03",
    236. "#befe02",
    237. "#cbfe02",
    238. "#d7fd02",
    239. "#e3fc02",
    240. "#effb02",
    241. "#faf802",
    242. "#f9eb02",
    243. "#f7dd03",
    244. "#f6cf03",
    245. "#f5c203",
    246. "#f4b503",
    247. "#f3a803",
    248. "#f29b04",
    249. "#f18e04",
    250. "#f08104",
    251. "#ef7404",
    252. "#ee6804",
    253. "#ed5b05",
    254. "#ec4f05",
    255. "#eb4305",
    256. "#e93705",
    257. "#e82b05",
    258. "#e72006",
    259. "#e61406",
    260. "#e50906",
    261. ],
    262. labels: labels,
    263. step: 30,
    264. };
    265. var style = {
    266. right: "150px",
    267. bottom: "10px",
    268. height: "70px",
    269. width: "350px",
    270. };
    271. if (maplegend !== null) {
    272. Map.removeUI(maplegend); //如果存在图例则将其移除,保证只有一个图例
    273. }
    274. maplegend = ui.Legend(data, style);
    275. Map.addUI(maplegend);
    276. }
    277. //导出当前图层所对应的影像
    278. function exportCurrentMap(img, description, roi, scale) {
    279. if (currentImg !== null && animationlayerID.length == 0) {
    280. Export.image({
    281. image: img,
    282. description: description,
    283. region: roi,
    284. scale: scale,
    285. });
    286. print("导出成功!");
    287. } else {
    288. print("当前图层为空或图层不唯一!");
    289. }
    290. }
    291. //根据年份计算每个月的TVDI,并显示折线图。TVDI值越大,土壤湿度越低,反之土壤湿度越高
    292. function calculateTVDI(start, end) {
    293. var img = pie
    294. .ImageCollection("BNU/GLOBAL_1KM_TVDI")
    295. .filterDate(start, end)
    296. .select("B1")
    297. .filterBounds(roi)
    298. .mean()
    299. .clip(roi)
    300. .divide(10000);
    301. return img;
    302. }
    303. function showTVDI(year) {
    304. var month = [
    305. "-01",
    306. "-02",
    307. "-03",
    308. "-04",
    309. "-05",
    310. "-06",
    311. "-07",
    312. "-08",
    313. "-09",
    314. "-10",
    315. "-11",
    316. "-12",
    317. ];
    318. var day = [
    319. "-31",
    320. "-28",
    321. "-31",
    322. "-30",
    323. "-31",
    324. "-30",
    325. "-31",
    326. "-31",
    327. "-30",
    328. "-31",
    329. "-30",
    330. "-31",
    331. ];
    332. var data = [];
    333. for (var i = 0; i < 12; i++) {
    334. var t1 = calculateTVDI(year + month[i] + "-01", year + month[i] + day[i]);
    335. var t2 = t1.reduceRegion(pie.Reducer.mean(), roi, 1000);
    336. data.push(t2);
    337. }
    338. var line_a = {
    339. title: year + "年TVDI变化",
    340. legend: ["TVDI"],
    341. xAxisName: "月份",
    342. yAxisName: "TVDI值",
    343. chartType: "line",
    344. yMin: 0,
    345. yMax: 1,
    346. smooth: true,
    347. };
    348. // 显示折线图
    349. var mark = [
    350. "01",
    351. "02",
    352. "03",
    353. "04",
    354. "05",
    355. "06",
    356. "07",
    357. "08",
    358. "09",
    359. "10",
    360. "11",
    361. "12",
    362. ];
    363. ChartImage(data, mark, line_a);
    364. }
    365. //显示某年动态图的函数
    366. function showAnimation(year) {
    367. var month = [
    368. "-01",
    369. "-02",
    370. "-03",
    371. "-04",
    372. "-05",
    373. "-06",
    374. "-07",
    375. "-08",
    376. "-09",
    377. "-10",
    378. "-11",
    379. "-12",
    380. ];
    381. var day = [
    382. "-31",
    383. "-28",
    384. "-31",
    385. "-30",
    386. "-31",
    387. "-30",
    388. "-31",
    389. "-31",
    390. "-30",
    391. "-31",
    392. "-30",
    393. "-31",
    394. ];
    395. var data = [];
    396. if (mapID !== null) {
    397. Map.removeLayer(mapID);
    398. }
    399. if (animationlayerID.length > 0) {
    400. for (var i = 0; i < animationlayerID.length; i++) {
    401. Map.removeLayer(animationlayerID[i]);
    402. }
    403. animationlayerID = [];
    404. }
    405. switch (selectTag) {
    406. case "TVDI":
    407. for (var i = 0; i < 12; i++) {
    408. var img = null;
    409. var start = year + month[i] + "-01";
    410. var end = year + month[i] + day[i];
    411. img = calculateTVDI(start, end);
    412. var map = Map.addLayer(
    413. img,
    414. setVis(0, 1),
    415. year + month[i] + "TVDI",
    416. false
    417. );
    418. animationlayerID.push(map);
    419. data.push(year + month[i] + "TVDI");
    420. }
    421. addLegend("TVDI Value(0~1)", ["0.25", "0.75"]);
    422. break;
    423. case "LST":
    424. for (var i = 0; i < 12; i++) {
    425. var img = null;
    426. var start = year + month[i] + "-01";
    427. var end = year + month[i] + day[i];
    428. img = loadCol("USGS/MOD11A1/006", start, end, "LST_Day_1km", roi)
    429. .multiply(0.02)
    430. .subtract(273.15);
    431. var map = Map.addLayer(
    432. img,
    433. setVis(0, 40),
    434. year + month[i] + "LST",
    435. false
    436. );
    437. animationlayerID.push(map);
    438. data.push(year + month[i] + "LST");
    439. }
    440. addLegend("地表温度(°C)", [10, 20, 30, 40]);
    441. break;
    442. case "火点":
    443. for (var i = 0; i < 12; i++) {
    444. var img = null;
    445. var start = year + month[i] + "-01";
    446. var end = year + month[i] + day[i];
    447. img = loadCol("USGS/MOD14A2/006", start, end, "FireMask", roi);
    448. var map = Map.addLayer(
    449. img,
    450. setVis(3, 8),
    451. year + month[i] + "火点",
    452. false
    453. );
    454. animationlayerID.push(map);
    455. data.push(year + month[i] + "火点");
    456. }
    457. addLegend("置信等级", ["<3", 4, 5, 6, 7, 8]);
    458. break;
    459. case "NDVI":
    460. for (var i = 0; i < 12; i++) {
    461. var img = null;
    462. var start = year + month[i] + "-01";
    463. var end = year + month[i] + day[i];
    464. img = l8Col_load(start, end).map(landsat8.NDVI).mean().clip(roi);
    465. var map = Map.addLayer(
    466. img,
    467. setVis(-0.2, 0.8),
    468. year + month[i] + "NDVI",
    469. false
    470. );
    471. animationlayerID.push(map);
    472. data.push(year + month[i] + "NDVI");
    473. }
    474. addLegend("NDVI Value", ["0", "0.6"]);
    475. break;
    476. case "NDWI":
    477. for (var i = 0; i < 12; i++) {
    478. var img = null;
    479. var start = year + month[i] + "-01";
    480. var end = year + month[i] + day[i];
    481. img = l8Col_load(start, end).map(landsat8.NDWI).mean().clip(roi);
    482. var map = Map.addLayer(
    483. img,
    484. setVis(-1, 0.3),
    485. year + month[i] + "NDWI",
    486. false
    487. );
    488. animationlayerID.push(map);
    489. data.push(year + month[i] + "NDWI");
    490. }
    491. addLegend("NDWI Value", ["-0.8", "0.1"]);
    492. break;
    493. case "MNDWI":
    494. for (var i = 0; i < 12; i++) {
    495. var img = null;
    496. var start = year + month[i] + "-01";
    497. var end = year + month[i] + day[i];
    498. img = l8Col_load(start, end).map(landsat8.MNDWI).mean().clip(roi);
    499. var map = Map.addLayer(
    500. img,
    501. setVis(-1, 0.3),
    502. year + month[i] + "MNDWI",
    503. false
    504. );
    505. animationlayerID.push(map);
    506. data.push(year + month[i] + "MNDWI");
    507. }
    508. addLegend("MNDWI Value", ["-0.8", "0.1"]);
    509. break;
    510. case "EVI":
    511. for (var i = 0; i < 12; i++) {
    512. var img = null;
    513. var start = year + month[i] + "-01";
    514. var end = year + month[i] + day[i];
    515. img = l8Col_load(start, end).map(landsat8.EVI).mean().clip(roi);
    516. var map = Map.addLayer(
    517. img,
    518. setVis(-0.2, 0.8),
    519. year + month[i] + "EVI",
    520. false
    521. );
    522. animationlayerID.push(map);
    523. data.push(year + month[i] + "EVI");
    524. }
    525. addLegend("EVI Value", ["0", "0.6"]);
    526. break;
    527. }
    528. Map.playLayersAnimation(data, 1, -1); //动图间隔时间1秒,无限次循环。
    529. }
    530. Map.centerObject(roi, 5); //将地图中心转到研究范围
    531. /* -------------------------以下代码是控件的布局以及事件的绑定等参数设置----------------------------- */
    532. function funDateSelect(value) {
    533. date[0] = value[0];
    534. date[1] = value[1];
    535. }
    536. var dateSelect = ui.DateSelect({
    537. type: "daterange",
    538. placeholder: "请输入数值",
    539. value: ["2018-03-20", "2018-04-20"],
    540. onChange: funDateSelect,
    541. disabled: false,
    542. });
    543. function changeSelect(value) {
    544. selectTag = value;
    545. }
    546. var select1 = ui.Select({
    547. items: ["LST", "TVDI", "火点", "NDVI", "NDWI", "MNDWI", "EVI"],
    548. placeholder: "请选择",
    549. value: selectTag,
    550. multiple: false,
    551. onChange: changeSelect,
    552. });
    553. var selectIndex = ui.Label("选择项目:");
    554. var selectPanel = ui.Panel({
    555. widgets: [selectIndex, select1],
    556. layout: ui.Layout.flow("horizontal"),
    557. });
    558. function inputArea(value) {
    559. areaCode = value;
    560. roi = getROI(areaCode);
    561. }
    562. var textBox3 = ui.TextBox({
    563. placeholder: "请输入行政区划编码",
    564. value: areaCode,
    565. onChange: inputArea,
    566. disabled: false,
    567. });
    568. var textboxName3 = ui.Label("更改行政区划(省级):");
    569. var txtPanel1 = ui.Panel({
    570. widgets: [textboxName3, textBox3],
    571. layout: ui.Layout.flow("horizontal"),
    572. });
    573. var selecDateLabel = ui.Label("选择日期范围:");
    574. var txtPanel2 = ui.Panel({
    575. widgets: [selecDateLabel, dateSelect],
    576. layout: ui.Layout.flow("horizontal"),
    577. });
    578. //点击“确定”按钮调用的函数
    579. function click_BtnOK() {
    580. print("当前计算项目:", selectTag + "," + date[0] + "~" + date[1]);
    581. //调用计算函数计算选择的指标添加到地图
    582. calcuate(roi, date[0], date[1], selectTag);
    583. if (animationlayerID.length > 0) {
    584. for (var i = 0; i < animationlayerID.length; i++) {
    585. Map.removeLayer(animationlayerID[i]);
    586. }
    587. animationlayerID = [];
    588. }
    589. }
    590. var btnOK = ui.Button({
    591. label: "确定",
    592. type: "success",
    593. onClick: click_BtnOK,
    594. style: { left: "50px" },
    595. });
    596. function click_btnExport() {
    597. exportCurrentMap(
    598. currentImg,
    599. date[0] + "-" + date[1] + selectTag,
    600. roi,
    601. exportScale
    602. );
    603. }
    604. var btnExport = ui.Button({
    605. label: "导出当前图层",
    606. type: "success",
    607. onClick: click_btnExport,
    608. style: { left: "50px" },
    609. });
    610. function changeScale(value) {
    611. exportScale = value;
    612. }
    613. var select2 = ui.Select({
    614. items: [30, 50, 100, 200, 500, 1000, 2000],
    615. placeholder: "请选择",
    616. value: exportScale,
    617. multiple: false,
    618. onChange: changeScale,
    619. });
    620. var selectPanel2 = ui.Panel({
    621. widgets: [ui.Label("选择导出分辨率(米):"), select2],
    622. layout: ui.Layout.flow("horizontal"),
    623. });
    624. function click_btnMonthly() {
    625. showAnimation(sec_year);
    626. }
    627. var btnMonthly = ui.Button({
    628. label: "显示当前指标每月动态图",
    629. type: "success",
    630. onClick: click_btnMonthly,
    631. style: { left: "10px" },
    632. });
    633. function click_showBtn() {
    634. //画出选择的年份TVDI变化图
    635. showTVDI(sec_year);
    636. }
    637. var btnShow = ui.Button({
    638. label: "显示TVDI变化折线图",
    639. type: "success",
    640. onClick: click_showBtn,
    641. style: { left: "10px" },
    642. });
    643. var btnPanel1 = ui.Panel({
    644. widgets: [btnOK, btnExport],
    645. layout: ui.Layout.flow("horizontal"),
    646. });
    647. function inputYear(value) {
    648. sec_year = value;
    649. }
    650. var txtBoxyear = ui.TextBox({
    651. placeholder: "请输入年份",
    652. value: sec_year,
    653. onChange: inputYear,
    654. disabled: false,
    655. });
    656. var labelyear = ui.Label("输入年份:");
    657. var txtPanel3 = ui.Panel({
    658. widgets: [labelyear, txtBoxyear],
    659. layout: ui.Layout.flow("horizontal"),
    660. });
    661. var btnPanel2 = ui.Panel({
    662. widgets: [btnShow, btnMonthly],
    663. layout: ui.Layout.flow("horizontal"),
    664. });
    665. var panel = ui.Panel({
    666. widgets: [
    667. ui.Label("凉山彝族自治州火灾异常监测", { "font-size": "18px" }),
    668. ui.Label(
    669. "默认区域为凉山彝族自治州,若想更换区域请输入行政区代码(省级),若输入0则为默认区域",
    670. { "font-size": "18px" }
    671. ),
    672. selectPanel,
    673. txtPanel1,
    674. txtPanel2,
    675. btnPanel1,
    676. selectPanel2,
    677. txtPanel3,
    678. btnPanel2,
    679. ],
    680. style: {
    681. width: "400px",
    682. height: "500px",
    683. backgroundColor: "#fff",
    684. },
    685. });
    686. ui.root.add(panel);
    687. /* 以上是网页上的整体框架布局*/

    结果: 

     

     

  • 相关阅读:
    中科大遭钓鱼邮件攻击了?3500名师生中招
    Docker 镜像库国内加速的几种方法
    java 20 Stream流
    【华为OD机考B卷 | 100分】整数编码(JAVA题解——也许是全网最详)
    Acise : A CAx Industrial Software Ecology
    骑行上下坡,如何分配重心?让你的骑行更稳定、更安全
    python究竟可以用来做些什么
    emqx 启动正常,但是1883端口无法telnet,emqx无法正常工作
    Python 搭建虚拟环境
    vue+element plus 使用table组件,清空用户的选择项
  • 原文地址:https://blog.csdn.net/qq_31988139/article/details/127035792