diff --git a/htmlsample/TWGRID_WGS84.js b/htmlsample/TWGRID_WGS84.js
index 0856db6..7fd4119 100644
--- a/htmlsample/TWGRID_WGS84.js
+++ b/htmlsample/TWGRID_WGS84.js
@@ -1,99 +1,105 @@
-//由WGS84座標(與層級)取得網格編號
-function girdcode(lat,lng,level=4){
- var code = [];
- var init_x = 116; //起啟經度
- var init_y = 20; //啟始緯度
- var unit_x = 0.01; //最小網格之單位經度
- var unit_y = (50/60)/100; //最小網格之單位緯度
-
- //只在經度116~124及緯度20~26.66666範圍內作圖
- if(lng < init_x){lng = 116.00001;}
- if(lng > 124){lng = 123.99999;}
- if(lat < init_y){lat = 20.00001;}
- if(lat > 26.66666666){lat = 26.66666;}
-
- //Level1網格編號
- var code1_x = Math.floor(init_x - 100) + Math.floor((lng-init_x)/(unit_x*100))
- var code1_y = Math.floor(init_y * 1.2) + Math.floor((lat-init_y)/(unit_y*100))
- code[0] = code1_y.toString() + code1_x.toString()
-
- //Level2網格編號
- var code2_x = Math.floor(((lng-init_x)%(unit_x*100))/(unit_x*10))
- var code2_y = Math.floor(((lat-init_y)%(unit_y*100))/(unit_y*10))
- code[1] = code[0] + "-" + code2_y.toString() + code2_x.toString()
-
- //Level3網格編號
- var code3_x = Math.floor((((lng-init_x)%(unit_x*100))%(unit_x*10))/(unit_x*5))
- var code3_y = Math.floor((((lat-init_y)%(unit_y*100))%(unit_y*10))/(unit_y*5))
- code[2] = code[1] + "-" + code3_y.toString() + code3_x.toString()
-
- //Level4網格編號
- var code4_x = Math.floor(((((lng-init_x)%(unit_x*100))%(unit_x*10))%(unit_x*5))/unit_x)
- var code4_y = Math.floor(((((lat-init_y)%(unit_y*100))%(unit_y*10))%(unit_y*5))/unit_y)
- code[3] = code[2] + "-" + code4_y.toString() + code4_x.toString()
-
- //回傳指定層級之網格編號
- return code[level-1]
-}
+ //由WGS84座標(與層級)取得網格編號
+ //2024.1.17藝鴻修正
+ function girdcode(lat, lng, level = 4) {
+ let x = lng;
+ let y = lat;
+ let code = [];
+ const init_x = 116;
+ const init_y = 20;
+ const max_x = 125;
+ const max_y = 26 + 40 / 60;
+ //只在經度116~124及緯度20~26.66666範圍內作圖
+ if (lng < init_x) {
+ lng = 116.00001;
+ }
+ if (lng > 124) {
+ lng = 123.99999;
+ }
+ if (lat < init_y) {
+ lat = 20.00001;
+ }
+ if (lat > 26.66666666) {
+ lat = 26.66666;
+ }
+ const code1_y = Math.floor((y - 20) / (50 / 60)) + 24;
+ const y1 = (code1_y - 24) * (50 / 60) + 20;
+ const code1_x = Math.floor((x - 100));
+ const x1 = code1_x + 100;
+ const code2_y = Math.floor((y - y1) / (5 / 60));
+ const y2 = code2_y * (5 / 60) + y1;
+ const code2_x = Math.floor((x - x1) / (6 / 60));
+ const x2 = code2_x * (6 / 60) + x1;
+ const code3_y = Math.floor((y - y2) / (150 / 3600));
+ const y3 = code3_y * (150 / 3600) + y2;
+ const code3_x = Math.floor((x - x2) / (3 / 60));
+ const x3 = code3_x * (3 / 60) + x2;
+ const code4_y = Math.floor((y - y3) / (30 / 3600));
+ const code4_x = Math.floor((x - x3) / (36 / 3600));
+ code[0] = code1_y + '' + code1_x
+ code[1] = code[0] + '-' + code2_y + code2_x
+ code[2] = code[1] + '-' + code3_y + code3_x
+ code[3] = code[2] + '-' + code4_y + code4_x
+ return code[level - 1]
+ }
-//由編號取得西南角座標
-function baselatlng(code){
- var base = {level:"",lat:"",lng:""};
- unit_x = 0.01; //最小網格之單位經度
- unit_y = (50/60)/100; //最小網格之單位緯度
- //計算網格層級
- codes = code.split("-");
- base.level = codes.length;
-
- //Level1座標
- if (base.level > 0) {
- base.lat = parseInt(codes[0].substr(0,2)) / 1.2;
- base.lng = parseInt(codes[0].substr(2,2)) + 100;
- }
-
- //Level2座標
- if (base.level > 1 ){
- base.lat += parseInt(codes[1].substr(0,1)) * unit_y * 10;
- base.lng += parseInt(codes[1].substr(1,1)) * unit_x * 10;
- }
-
- //Level3座標
- if (base.level > 2 ){
- base.lat += parseInt(codes[2].substr(0,1)) * unit_y * 5;
- base.lng += parseInt(codes[2].substr(1,1)) * unit_x * 5;
- }
-
- //Level4座標
- if (base.level > 3 ){
- base.lat += parseInt(codes[3].substr(0,1)) * unit_y;
- base.lng += parseInt(codes[3].substr(1,1)) * unit_x;
- }
-
- //回傳座標
- return base
-}
+ //由編號取得西南角座標
+ function baselatlng(code) {
+ var base = { level: "", lat: "", lng: "" };
+ unit_x = 0.01; //最小網格之單位經度
+ unit_y = (50 / 60) / 100; //最小網格之單位緯度
+ //計算網格層級
+ let codes = code.split("-");
+ base.level = codes.length;
-//繪製網格
-function grid(lat,lng,level=1){
- var g = [];
- var unit_x = 0.01;
- var unit_y = (50/60)/100;
- if(level==1){
- unit_x = unit_x * 100;
- unit_y = unit_y * 100;
- }else if(level==2){
- unit_x = unit_x * 10;
- unit_y = unit_y * 10;
- }else if(level==3){
- unit_x = unit_x * 5;
- unit_y = unit_y * 5;
- }
-
- //計算網格的4個端點
- g[0] = [lat,lng];
- g[1] = [lat,lng+unit_x];
- g[2] = [lat+unit_y,lng+unit_x];
- g[3] = [lat+unit_y,lng];
-
- return g
-}
\ No newline at end of file
+ //Level1座標
+ if (base.level > 0) {
+ base.lat = parseInt(codes[0].substr(0, 2)) / 1.2;
+ base.lng = parseInt(codes[0].substr(2, 2)) + 100;
+ }
+
+ //Level2座標
+ if (base.level > 1) {
+ base.lat += parseInt(codes[1].substr(0, 1)) * unit_y * 10;
+ base.lng += parseInt(codes[1].substr(1, 1)) * unit_x * 10;
+ }
+
+ //Level3座標
+ if (base.level > 2) {
+ base.lat += parseInt(codes[2].substr(0, 1)) * unit_y * 5;
+ base.lng += parseInt(codes[2].substr(1, 1)) * unit_x * 5;
+ }
+
+ //Level4座標
+ if (base.level > 3) {
+ base.lat += parseInt(codes[3].substr(0, 1)) * unit_y;
+ base.lng += parseInt(codes[3].substr(1, 1)) * unit_x;
+ }
+
+ //回傳座標
+ return base
+ }
+
+ //繪製網格
+ function grid(lat, lng, level = 1) {
+ var g = [];
+ var unit_x = 0.01;
+ var unit_y = (50 / 60) / 100;
+ if (level == 1) {
+ unit_x = unit_x * 100;
+ unit_y = unit_y * 100;
+ } else if (level == 2) {
+ unit_x = unit_x * 10;
+ unit_y = unit_y * 10;
+ } else if (level == 3) {
+ unit_x = unit_x * 5;
+ unit_y = unit_y * 5;
+ }
+
+ //計算網格的4個端點
+ g[0] = [lat, lng];
+ g[1] = [lat, lng + unit_x];
+ g[2] = [lat + unit_y, lng + unit_x];
+ g[3] = [lat + unit_y, lng];
+
+ return g
+ }
\ No newline at end of file