Initial commit of antigravity2 project

This commit is contained in:
Danial HB
2026-06-11 22:52:58 +07:00
commit de35383342
3016 changed files with 484480 additions and 0 deletions
File diff suppressed because one or more lines are too long
@@ -0,0 +1,14 @@
{"type":"FeatureCollection", "features": [
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[314521.60057640076,9998154.700859072],[314421.05110168457,9998049.885692598],[314388.1771583557,9998019.855064394],[314344.9432544708,9998004.080043795],[314249.8510093689,9997969.383150103],[314174.19275283813,9997955.982141497],[314033.3031806946,9997931.027002336],[313941.4779472351,9997914.762409212],[313853.4138870239,9997899.164016725],[313787.4442577362,9997887.47911072],[313712.2918186188,9997874.167696001],[313587.3576011658,9997852.038656237],[313502.8240146637,9997837.06560135],[313347.0409069061,9997809.472435],[313251.6684551239,9997787.3151989],[313152.28201293945,9997772.062028887],[312969.24397468567,9997730.316513063],[312794.48579216003,9997700.270542147],[312697.9893054962,9997676.433454515],[312638.69236183167,9997665.711921694],[312585.7064380646,9997651.828990938],[312526.95247650146,9997634.661928179],[312475.5623817444,9997619.0202446],[312446.27569770813,9997612.51308632],[312434.724357605,9997608.097908022],[312394.2809123993,9997592.639528276],[312368.706987381,9997586.941791536],[312334.300321579,9997579.276166918],[312315.5562572479,9997576.70501137],[312262.1749763489,9997569.38032532],[312227.6575126648,9997558.128938677],[312144.6368999481,9997528.522024157],[312011.40233802795,9997470.143724443],[311946.3921699524,9997449.12105179],[311719.5494480133,9997353.768432619],[311501.45815849304,9997267.370271685],[311289.3762207031,9997184.178476335],[311160.66100502014,9997120.187873842],[311108.94652557373,9997088.466590883],[311057.29211616516,9997063.134672167],[310981.82005500793,9997026.54755211],[310955.91555023193,9997007.312637331],[310932.1421470642,9996989.660133364],[310886.7222251892,9996964.120925905],[310838.1604499817,9996937.267313005],[310787.42181777954,9996906.029228212],[310724.47378730774,9996861.851970674],[310674.37724876404,9996824.095762255],[310627.6181316376,9996786.864681246],[310597.4402580261,9996763.320621492],[310558.1979255676,9996743.339595797],[310523.02782821655,9996725.199048998],[310492.8935432434,9996709.384025576],[310464.8529396057,9996693.721357347],[310432.9163570404,9996670.616437914],[310391.5527667999,9996633.73946953],[310352.01423454285,9996598.22401047],[310303.2755641937,9996556.778200151],[310276.1997318268,9996533.094781877],[310242.7111606598,9996511.310644152],[310205.1197528839,9996486.857631685],[310174.0961704254,9996463.751422884],[310147.5795593262,9996444.001985552],[310118.6841773987,9996418.727613451],[310079.5505657196,9996384.764982225],[310061.8521499634,9996369.490749361],[310038.232378006,9996352.736156465],[310017.5298137665,9996338.050872805],[310002.2546977997,9996324.260185244],[309992.8975124359,9996315.812326433],[309973.2076225281,9996298.035888674],[309933.17652511597,9996265.16716385],[309897.4350337982,9996225.150571825],[309873.1154098511,9996204.314714434],[309837.3866825104,9996173.704099657],[309785.9188518524,9996132.260021212],[309758.75440597534,9996102.2475338],[309719.6990814209,9996057.283111574],[309696.17391204834,9996023.753860475],[309659.1018104553,9996000.790521624],[309634.6967391968,9995976.385448458],[309458.7233276367,9995801.696514132],[309289.1723022461,9995639.852355959],[309148.9561653137,9995509.776206972]]},"properties":{"Uniq_ID":1,"Length":17899.07182605}},
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[309252.66421722533,9995605.50040514],[309252.4218826294,9995605.759611132],[309289.1723022461,9995639.852355959],[309458.7233276367,9995801.696514132],[309634.6967391968,9995976.385448458],[309659.1018104553,9996000.790521624],[309696.17391204834,9996023.753860475],[309719.6990814209,9996057.283111574],[309758.75440597534,9996102.2475338],[309785.9188518524,9996132.260021212],[309837.3866825104,9996173.704099657],[309873.1154098511,9996204.314714434],[309897.4350337982,9996225.150571825],[309933.17652511597,9996265.16716385],[309973.2076225281,9996298.035888674],[309992.8975124359,9996315.812326433],[310002.2546977997,9996324.260185244],[310017.5298137665,9996338.050872805],[310038.232378006,9996352.736156465],[310061.8521499634,9996369.490749361],[310079.5505657196,9996384.764982225],[310118.6841773987,9996418.727613451],[310147.5795593262,9996444.001985552],[310174.0961704254,9996463.751422884],[310205.1197528839,9996486.857631685],[310242.7111606598,9996511.310644152],[310276.1997318268,9996533.094781877],[310303.2755641937,9996556.778200151],[310352.01423454285,9996598.22401047],[310391.5527667999,9996633.73946953],[310432.9163570404,9996670.616437914],[310464.8529396057,9996693.721357347],[310492.8935432434,9996709.384025576],[310523.02782821655,9996725.199048998],[310558.1979255676,9996743.339595797],[310597.4402580261,9996763.320621492],[310627.6181316376,9996786.864681246],[310674.37724876404,9996824.095762255],[310724.47378730774,9996861.851970674],[310787.42181777954,9996906.029228212],[310838.1604499817,9996937.267313005],[310886.7222251892,9996964.120925905],[310932.1421470642,9996989.660133364],[310955.91555023193,9997007.312637331],[310981.82005500793,9997026.54755211],[311057.29211616516,9997063.134672167],[311108.94652557373,9997088.466590883],[311160.66100502014,9997120.187873842],[311289.3762207031,9997184.178476335],[311501.45815849304,9997267.370271685],[311719.5494480133,9997353.768432619],[311946.3921699524,9997449.12105179],[312011.40233802795,9997470.143724443],[312144.6368999481,9997528.522024157],[312227.6575126648,9997558.128938677],[312262.1749763489,9997569.38032532],[312315.5562572479,9997576.70501137],[312334.300321579,9997579.276166918],[312368.706987381,9997586.941791536],[312394.2809123993,9997592.639528276],[312434.724357605,9997608.097908022],[312446.27569770813,9997612.51308632],[312475.5623817444,9997619.0202446],[312526.95247650146,9997634.661928179],[312585.7064380646,9997651.828990938],[312638.69236183167,9997665.711921694],[312697.9893054962,9997676.433454515],[312794.48579216003,9997700.270542147],[312969.24397468567,9997730.316513063],[313152.28201293945,9997772.062028887],[313251.6684551239,9997787.3151989],[313347.0409069061,9997809.472435],[313502.8240146637,9997837.06560135],[313587.3576011658,9997852.038656237],[313712.2918186188,9997874.167696001],[313787.4442577362,9997887.47911072],[313853.4138870239,9997899.164016725],[313941.4779472351,9997914.762409212],[314033.3031806946,9997931.027002336],[314174.19275283813,9997955.982141497],[314249.8510093689,9997969.383150103],[314344.9432544708,9998004.080043795],[314388.1771583557,9998019.855064394],[314421.05110168457,9998049.885692598],[314521.31298510404,9998154.401067056]]},"properties":{"Uniq_ID":2,"Length":17591.22139857}},
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[313469.87634218764,9991106.238774922],[313547.2465839386,9991219.228366854],[313664.46368026733,9991386.939405443],[313847.80117988586,9991659.201086046],[314044.57510375977,9991951.416261675],[314155.9860610962,9992121.568428041],[314239.76326942444,9992249.517004015],[314331.7237815857,9992359.611190798],[314415.5744590759,9992459.996366503],[314508.20093917847,9992566.499824526],[314617.7957572937,9992692.513759615],[314738.90675354004,9992842.072740557],[314857.2842941284,9992988.256198885],[314944.66068840027,9993096.15659714],[315060.5928134918,9993220.49842644],[315201.4268608093,9993378.189699175],[315346.31335639954,9993545.95762253],[315454.92703819275,9993663.840604784],[315599.0159187317,9993831.56549454],[315714.8545150757,9993966.405986788],[315868.6842517853,9994136.94161606],[316026.7993469238,9994312.227993013],[316044.8492012024,9994333.393375399],[316067.61516571045,9994360.088901522],[316085.30002593994,9994381.800693514],[316095.05888938904,9994396.332963945],[316108.3843269348,9994415.320756914],[316120.846534729,9994433.078510286],[316135.0591278076,9994458.748222353],[316147.14126968384,9994480.570074083],[316152.9551849365,9994489.954448702],[316163.1815071106,9994505.320632936],[316171.20415878296,9994517.375556948],[316181.60376930237,9994533.002126696],[316186.8150615692,9994542.01592064],[316196.7272567749,9994559.16070366],[316212.90348243713,9994585.734216692],[316222.4851474762,9994602.181549074],[316233.2265815735,9994619.582656862],[316241.377784729,9994633.534313204],[316250.23764801025,9994648.698913576],[316255.05448913574,9994655.371158602],[316264.0342693329,9994667.809865953],[316280.2178058624,9994690.227148058],[316289.061876297,9994703.073406221],[316301.99567222595,9994721.860107424],[316311.40815734863,9994734.06806946],[316319.94064712524,9994746.320627214],[316331.62937927246,9994758.968582155],[316346.3877849579,9994774.938121798],[316357.29647254944,9994785.706817629],[316368.09067726135,9994797.72186661],[316374.7840080261,9994805.172227861],[316385.1329212189,9994815.63451195],[316391.4216957092,9994822.327850344],[316396.9606895447,9994828.223176958],[316404.342628479,9994836.08000374],[316408.9978866577,9994841.034742357],[316414.69825935364,9994847.101827623],[316422.1595630646,9994855.04312897],[316436.290391922,9994870.083011629],[316439.65465545654,9994873.555360796],[316442.87509536743,9994876.879262926],[316446.2798900604,9994880.811618807],[316449.6535720825,9994884.708036425],[316453.9240550995,9994889.640213015],[316456.896856308,9994893.07363701],[316458.76072502136,9994895.226301195],[316464.607585907,9994901.97911072],[316468.2173309326,9994906.148168566],[316469.3009624481,9994907.399703981],[316474.1910572052,9994912.590461733],[316478.4941444397,9994917.051071169],[316483.26410865784,9994922.141477587],[316487.0791568756,9994926.212818148],[316492.47068214417,9994931.9665432],[316497.2907409668,9994937.110410692],[316501.47651290894,9994941.577379229],[316504.50592041016,9994944.93735695],[316508.31387901306,9994949.160842897],[316512.718580246,9994954.046188356],[316518.0694465637,9994959.980945589],[316521.5292034149,9994963.818233492],[316525.6303215027,9994968.366867067],[316530.6823005676,9994973.970123293],[316535.9653301239,9994979.829639437],[316542.1315250397,9994986.668693544],[316548.37590408325,9994993.59446335],[316554.67636299133,9995000.582431795],[316556.9972896576,9995003.543106081],[316564.7363586426,9995009.875026705],[316576.50082969666,9995019.500434877],[316586.40116882324,9995032.70067978],[316586.50021743774,9995037.001056673],[316586.0182094574,9995037.85911751],[316586.0439853668,9995037.88646126],[316585.98994636536,9995037.90943146],[316581.50099372864,9995045.900590898],[316572.8004131317,9995051.500038149],[316563.4004898071,9995061.80068207],[316560.5007305145,9995070.20094681],[316566.67756843567,9995075.446392061],[316583.16205596924,9995088.513246538],[316615.8764152527,9995113.66082001],[316626.1808414459,9995123.372970583],[316645.7098617554,9995141.779508593],[316681.6601448059,9995175.66345215],[316708.6331996918,9995201.086158754],[316727.1757659912,9995218.242179872],[316743.40936660767,9995233.596603395],[316763.9161911011,9995252.992822649],[316776.3276786804,9995264.732130053],[316793.10925865173,9995281.829393389],[316806.68276023865,9995295.377824785],[316818.6286315918,9995307.30163193],[316829.3798561096,9995318.307052614],[316836.56771087646,9995325.664854052],[316847.0357437134,9995336.380388262],[316850.5650959015,9995339.993186953],[316867.18394088745,9995321.648469927],[316883.5282211304,9995303.015954973]]},"properties":{"Uniq_ID":4,"Length":16010.61755851}},
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[313670.7414550781,9991399.57723427],[313469.7067718506,9991105.99088669]]},"properties":{"Uniq_ID":3,"Length":16516.86015253}},
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[315795.4972835992,9997125.626937622],[315733.21722602844,9997091.060024263],[315617.9124031067,9997028.491516115],[315509.758266449,9996955.196977617],[315339.03562164307,9996854.193527224],[315181.7205142975,9996749.614734652],[315046.4192466736,9996645.813648226],[315023.182723999,9996639.83289528],[315005.3069820404,9996623.360460283],[314885.7271118164,9996509.767637255],[314705.6198673248,9996339.513212206],[314564.8661518097,9996202.300987246],[314480.4895324707,9996121.259052278],[314433.79165267944,9996073.213611605],[314306.2872867584,9995963.780729296],[314182.5840473175,9995857.610231401],[314123.45561027527,9995806.8622036],[313974.61142349243,9995679.114044191],[313853.4403038025,9995575.116783144],[313742.71930503845,9995480.088523867],[313591.3631038666,9995350.184383394],[313445.5305233002,9995199.18915558],[313306.5274181366,9995066.540477755],[313097.9657230377,9994867.513031008],[312985.8904209137,9994747.295080187],[312910.85608673096,9994676.82805443],[312773.80125808716,9994548.115694048],[312692.9683113098,9994458.493982317],[312604.7751350403,9994373.900529863],[312506.84228897095,9994279.964942934],[312331.6504650116,9994111.923805239],[312235.1161956787,9994011.81419182],[312193.40385627747,9993977.252538683],[312144.9687576294,9993919.36917496],[312107.59561538696,9993887.868955614],[312024.1709384918,9993817.55386925],[311933.5955734253,9993711.485351564],[311872.81473731995,9993657.855199816],[311791.38656044006,9993562.84773636],[311698.8146934509,9993476.70447159],[311613.0064525604,9993396.855136873],[311549.4153499603,9993321.18881035],[311432.92050743103,9993206.289787294],[311332.0771083832,9993106.827806475],[311328.0338832059,9993110.430680389]]},"properties":{"Uniq_ID":2,"Length":17591.22139857}},
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[311336.5806184394,9993111.26962307],[311432.92050743103,9993206.289787294],[311549.4153499603,9993321.18881035],[311613.0064525604,9993396.855136873],[311698.8146934509,9993476.70447159],[311791.38656044006,9993562.84773636],[311872.81473731995,9993657.855199816],[311933.5955734253,9993711.485351564],[312024.1709384918,9993817.55386925],[312107.59561538696,9993887.868955614],[312144.9687576294,9993919.36917496],[312193.40385627747,9993977.252538683],[312235.1161956787,9994011.81419182],[312331.6504650116,9994111.923805239],[312506.84228897095,9994279.964942934],[312604.7751350403,9994373.900529863],[312692.9683113098,9994458.493982317],[312773.80125808716,9994548.115694048],[312910.85608673096,9994676.82805443],[312985.8904209137,9994747.295080187],[313097.9657230377,9994867.513031008],[313306.5274181366,9995066.540477755],[313445.5305233002,9995199.18915558],[313591.3631038666,9995350.184383394],[313742.71930503845,9995480.088523867],[313853.4403038025,9995575.116783144],[313974.61142349243,9995679.114044191],[314123.45561027527,9995806.8622036],[314182.5840473175,9995857.610231401],[314306.2872867584,9995963.780729296],[314433.79165267944,9996073.213611605],[314480.4895324707,9996121.259052278],[314564.8661518097,9996202.300987246],[314705.6198673248,9996339.513212206],[314885.7271118164,9996509.767637255],[315005.3069820404,9996623.360460283],[315023.182723999,9996639.83289528],[315046.4192466736,9996645.813648226],[315181.7205142975,9996749.614734652],[315339.03562164307,9996854.193527224],[315509.758266449,9996955.196977617],[315617.9124031067,9997028.491516115],[315733.21722602844,9997091.060024263],[315795.52985191345,9997125.645013811],[315796.89960861206,9997123.10033417]]},"properties":{"Uniq_ID":3,"Length":16516.86015253}},
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[315821.9064781999,9997489.442715868],[316055.02538108104,9997500.907579945],[316265.2145558108,9997527.658929456],[316460.1172451055,9997581.161628477],[316582.40912858443,9997619.377842065],[316704.7010120632,9997621.288652744],[316869.0307304885,9997642.307570217],[316949.2847790214,9997693.89945856],[317039.0928809522,9997730.204861468],[317266.4793517968,9997753.13458962],[317541.6360896227,9997791.350803208],[317774.7549925046,9997821.923774077],[318084.3063225614,9997821.923774077],[319042.86096132395,9997576.573323822],[319356.8944398869,9997449.752111325]]},"properties":{"Uniq_ID":0,"Length":0}},
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[315821.90647827496,9997489.442715868],[315700.741209017,9997483.881065955],[315836.40876725235,9997271.781080548],[315910.9303837472,9997105.540551443],[315979.719568204,9996914.459483506],[316092.4573982856,9996710.002740815],[316230.03576719936,9996398.540600078],[316470.7979127999,9996008.735221488],[316713.4708690784,9995674.343352601],[317173.97624280397,9995175.621765288],[317445.31135927234,9994890.910974063],[317904.79055689386,9994435.691128094],[318108.77811561804,9994178.022632862],[318312.76567434205,9993845.20082652],[318450.4442315204,9993588.794766385]]},"properties":{"Uniq_ID":0,"Length":0}},
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[315798.8672419134,9997119.506540416],[315884.6335796791,9997164.202652998]]},"properties":{"Uniq_ID":0,"Length":0}},
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[316846.5207036942,9995349.862082517],[316915.19199866685,9995455.881880388]]},"properties":{"Uniq_ID":0,"Length":0}},
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[315700.7412090935,9997483.881065955],[315368.73909123876,9997732.8935393],[314724.5678531609,9998296.54337262],[313492.59036033496,9999343.3216345],[313089.9833365359,9999689.563674966],[312703.48059368914,9999890.867186867],[312091.5179175147,10000116.327120194],[310690.4454746947,10000269.317789238],[310416.6726985108,10000317.630632095],[309820.814303289,10000559.194846375],[309547.0415271048,10000623.611970183]]},"properties":{"Uniq_ID":0,"Length":0}},
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[314525.5003376818,9998154.799375536],[314646.08702065784,9998363.226432985]]},"properties":{"Uniq_ID":0,"Length":0}}
]}
@@ -0,0 +1,16 @@
{"type":"FeatureCollection", "features": [
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[318381.8011302948,9993538.80093384],[318149.79971313477,9993336.000789644],[318019.14962768555,9993051.278217318],[317982.1044559479,9992970.54657364],[317927.0395145416,9992850.544878008],[317821.3312320709,9992632.203598024],[317779.6479320526,9992546.106416704],[317743.9063606262,9992479.226123812],[317722.2317504883,9992438.668188097],[317696.33488845825,9992390.209495546],[317670.35562705994,9992341.596616747],[317624.9329338074,9992263.730283739],[317556.4211807251,9992160.582696917],[317476.2140865326,9992039.827238085],[317392.6399898529,9991914.00260544],[317372.0557155609,9991883.012035372],[317340.67178344727,9991827.700719835],[317294.0364894867,9991752.127609255],[317283.83664894104,9991735.598634722],[317219.71258735657,9991631.684741976],[317207.05765914917,9991611.177263262],[317114.3152599335,9991460.886980059],[317030.8084144592,9991314.159557344],[316972.1324748993,9991211.06178856],[316951.36698532104,9991174.575357439],[316920.1012210846,9991125.400617601],[316845.30097579956,9991025.79976082],[316728.1584854126,9990857.759838106],[316645.9560146332,9990739.841079714],[316548.62264442444,9990592.717054369],[316437.14667892456,9990424.215826036],[316363.32533836365,9990312.631355288],[316150.3292312622,9989981.908527376],[316134.932516098,9989958.00177765],[316105.2569847107,9989911.924053194],[316038.1546535492,9989800.842035295],[315998.82266044617,9989735.731374742],[315986.36651039124,9989715.111309053],[315955.93148231506,9989654.061449053],[315936.3721809387,9989614.827293398],[315932.9049949646,9989610.339706423],[315931.729637146,9989610.920129778],[315932.04613113403,9989609.449085237],[315861.7512321472,9989517.439331057],[315563.45124435425,9989126.991252901],[314068.2377471924,9990531.163038256],[313466.2122210888,9991093.977400579]]},"properties":{"Uniq_ID":4,"Length":16010.61755851,"Ket":"Batas"}},
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[318580.2947292676,10001025.71367264],[318599.2017574662,10001018.856203081],[318635.23476985586,10001023.823278429],[318654.00606921734,10001005.175743105],[318665.8736515391,10000959.454631807],[318667.97998050356,10000945.442689897],[318678.7880211216,10000873.544298174],[318689.93212894024,10000803.453872683],[318712.23438075697,10000784.795982363],[318736.11075213994,10000761.07928467],[318747.41793445207,10000699.13448334],[318758.5260010103,10000638.280511858],[318774.73990253045,10000549.45494652],[318792.42657092726,10000452.561035158],[318795.6470833174,10000444.288637163],[318803.5057258948,10000424.102464678],[318809.05239871616,10000406.864162447],[318827.68623546406,10000334.009040834],[318836.12389186525,10000286.606336595],[318843.2322636,10000246.671550753],[318866.2640419347,10000179.92056656],[318871.70310786855,10000164.157001497],[318892.99474719574,10000116.890083315],[318901.0953674662,10000098.90690613],[318927.17665675667,10000057.592306139],[318931.9892902723,10000046.886053087],[318938.98448566056,10000031.324438097],[318946.98228458024,10000001.993896486],[318948.76058391127,9999963.323728563],[318970.13231853093,9999927.39552498],[318994.65754321625,9999900.943944933],[319016.0866680492,9999891.270380022],[319026.8934231142,9999874.497558596],[319038.0358791677,9999859.884405138],[319052.1683140143,9999854.42996216],[319061.16263393045,9999848.66107178],[319067.4047165263,9999838.723588945],[319067.63138011517,9999838.728343965],[319079.19128802785,9999819.680105211],[319099.771600757,9999801.988147737],[319123.04537395044,9999786.39240265],[319139.12777522573,9999776.43442917],[319151.43630794267,9999770.88384247],[319168.7168827393,9999768.846874239],[319195.0310230589,9999765.745061876],[319213.49722865596,9999762.193420412],[319236.6291885715,9999750.921728136],[319260.62562373665,9999732.343467714],[319277.42974475445,9999714.345718386],[319278.6664562567,9999701.926792147],[319274.91464045993,9999691.349620821],[319265.6263885833,9999684.844703676],[319252.9463520391,9999681.51189232],[319241.71869281266,9999678.061597826],[319237.27112582687,9999668.27054024],[319243.55030063237,9999646.737840654],[319256.11035350437,9999630.49028206],[319265.08555415645,9999614.477689745],[319268.0755691866,9999596.758089067],[319261.10418132297,9999582.772096636],[319248.5215835916,9999562.694114687],[319239.91692737106,9999546.645206453],[319242.68951419345,9999535.459882738],[319255.63115123264,9999520.256378176],[319269.3089790676,9999501.008989336],[319280.2427521093,9999473.197736742],[319286.25464633555,9999458.819826128],[319290.65153697686,9999448.304323198],[319303.82181552495,9999431.360801699],[319311.5551262237,9999410.441463472],[319314.63681605784,9999390.55864525],[319315.945404086,9999375.266614916],[319321.9428119997,9999358.778902056],[319329.75785640243,9999346.489580156],[319362.143341098,9999319.739234926],[319370.78284457745,9999308.858018877],[319380.5947208734,9999286.867504122],[319387.79752925376,9999267.404651644],[319396.4353866908,9999229.714260103],[319407.0233173701,9999202.777807238],[319411.3071785311,9999187.899801256],[319417.01931956736,9999177.300201418],[319422.49491694977,9999163.811838152],[319428.85240558104,9999142.904609682],[319432.0303345046,9999118.880544664],[319449.30863765185,9999066.575193407],[319465.9258976318,9999023.192131044],[319468.6880703302,9999012.06211281],[319469.1681862217,9998995.513929369],[319470.617166552,9998982.972347261],[319470.90347865585,9998964.271900179],[319474.9250259753,9998916.561283113],[319476.70027163933,9998866.338163378],[319477.6868610715,9998838.426786425],[319484.84498027386,9998804.182079317],[319485.9758758878,9998798.771841051],[319494.0787983272,9998788.285055162],[319495.035516773,9998776.48121834],[319492.1881904936,9998771.783506395],[319480.34480861214,9998770.240579607],[319465.7323627803,9998765.23354149],[319450.6677151057,9998754.013584139],[319433.9820404386,9998730.290040972],[319423.8125286433,9998703.598814012],[319418.77731326595,9998690.383230211],[319412.56553844037,9998674.079607012],[319413.2560844762,9998658.675535204],[319419.1995869023,9998648.400764467],[319429.69153216796,9998640.852378847],[319449.87697223236,9998638.698022844],[319474.32557490794,9998642.910375597],[319497.741430316,9998648.21712494],[319515.7973690346,9998654.793943407],[319529.1453399989,9998650.61464882],[319536.33770755306,9998640.196489336],[319541.2202320439,9998623.135200502],[319543.2606544828,9998600.695474626],[319539.93339541915,9998575.123344423]]},"properties":{"Uniq_ID":6,"Length":28958.15518318,"Ket":"Batas"}},
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[313471.83040969947,9991109.092197716],[313469.7067718506,9991105.99088669],[312431.4754066467,9992002.247104647],[311342.6509513855,9993104.947437288],[311335.8008747101,9993110.500560762],[311335.9305833767,9993110.628492597]]},"properties":{"Uniq_ID":3,"Length":16516.86015253,"Ket":"Batas"}},
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[311336.2113269447,9993110.905391831],[311332.0771083832,9993106.827806475]]},"properties":{"Uniq_ID":2,"Length":17591.22139857,"Ket":"Batas"}},
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[311332.0771083832,9993106.827806475],[311113.93304634094,9993301.213603975],[311019.58229637146,9993401.463054659],[311010.9039001465,9993440.80256653],[310989.34717941284,9993538.520017626],[310953.40094566345,9993701.465684893],[310900.3572731018,9993793.624414446],[310826.2771320343,9993922.332159044],[310723.77063941956,9994031.975181581],[310471.6750526428,9994301.621726992],[309574.654876709,9995261.092674257],[309252.4218826294,9995605.759611132]]},"properties":{"Uniq_ID":2,"Length":17591.22139857,"Ket":"Batas"}},
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[309252.52411178756,9995605.854446828],[309148.9561653137,9995509.776206972],[309089.39676856995,9995593.925167086],[309055.0448856354,9995563.772407534],[309044.8529281616,9995556.060792925],[309021.26209259033,9995527.255851747],[308983.6750049591,9995481.361171724],[308951.6251926422,9995457.631853106],[308723.9707107544,9995779.947261812],[308501.8232936859,9996094.465711595],[308373.4062976837,9996423.119108202],[308170.8024482727,9996941.636484148],[308169.8983783722,9996941.877304079],[308150.96274375916,9996990.145772936],[308188.05498695374,9997036.446802141],[308222.7809524536,9997084.97134781],[308246.3241958618,9997113.034900667],[308271.17697143555,9997148.27169037],[308310.29388809204,9997203.732481005],[308340.17947387695,9997240.863292696],[308389.0137901306,9997306.391277315],[308433.36411094666,9997365.902441027],[308469.98027038574,9997417.050748827],[308515.7728652954,9997477.627872469],[308540.9965953827,9997510.995298387],[308568.2704029083,9997548.59575081],[308596.69827079773,9997582.823518755],[308614.93803977966,9997604.784593584],[308652.3980026245,9997642.901903154],[308686.20603752136,9997677.30319977],[308710.70604896545,9997704.111087801],[308737.68218421936,9997724.897436144],[308774.2244758606,9997753.054944994],[308811.4491119385,9997777.825813295],[308856.8350315094,9997808.027549746],[308921.9092655182,9997841.130542757],[309008.5237522125,9997880.090267183],[309050.901927948,9997900.553167345],[309121.3597049713,9997927.443473818],[309200.3315925598,9997958.981012346],[309209.3570213318,9997963.961929323],[309206.2051448822,9997996.162296297],[309205.3160953522,9998005.245046617],[309195.8169250488,9998047.129430773],[309193.5440711975,9998057.151060106],[309179.34321403503,9998098.233272554],[309174.44452667236,9998141.048381807],[309188.1867866516,9998223.173936846],[309193.88715934753,9998257.240108492],[309200.6631851196,9998286.439447405],[309200.6663322449,9998286.439094545],[309200.69244384766,9998286.565525057],[309201.82866859436,9998292.06722069],[309212.15946388245,9998342.089832308],[309229.7918510437,9998402.907167437],[309237.62940216064,9998461.291666033],[309230.7703552246,9998513.887891771],[309217.7991218567,9998549.576656343],[309210.69222450256,9998584.09034157],[309204.81005859375,9998612.65627289],[309207.3967323303,9998638.315248491],[309209.80376052856,9998647.53631592],[309218.03471183777,9998679.068210604],[309225.5184173584,9998695.671432497],[309250.95743751526,9998755.678960802],[309269.3290634155,9998799.015369417],[309282.0724468231,9998839.87742615],[309286.0104312897,9998852.504695894],[309293.1350288391,9998869.604049684],[309305.038312912,9998898.172468187],[309315.25683784485,9998922.697383882],[309316.94665527344,9998922.610849382],[309317.936208725,9998930.45915413],[309331.67685317993,9998965.244695665],[309344.40780067444,9999000.09080887],[309350.43681526184,9999048.949987413],[309354.9263858795,9999095.77529526],[309359.3472137451,9999163.583164217],[309362.73056411743,9999243.10387993],[309364.85314941406,9999292.992177965],[309363.8031101227,9999294.236961367],[309365.4200267792,9999307.060985567],[309365.467880249,9999307.440530779],[309367.917011261,9999313.278806688],[309354.20307159424,9999340.524587633],[309354.20302963257,9999354.148363115],[309350.873626709,9999383.567764284],[309350.5726928711,9999386.230318071],[309350.2839374542,9999388.790929796],[309344.8950176239,9999420.900526049],[309330.19992256165,9999493.836509706],[309322.36360549927,9999527.504589083],[309316.9746990204,9999563.508674623],[309314.03667259216,9999608.269306185],[309311.58746910095,9999637.705995562],[309312.566652298,9999722.850730898],[309317.95369148254,9999765.569103243],[309319.52614212036,9999780.115535738],[309325.7916030884,9999838.064546587],[309327.2718677521,9999854.672254564],[309330.68987083435,9999893.043451311],[309338.52435302734,9999944.08294678],[309343.82794189453,9999986.550777437],[309345.50810432434,9999999.999841692],[309348.6097011566,10000024.826938631],[309350.2830581665,10000038.227828981],[309357.2026233673,10000093.844282152],[309360.56847953796,10000120.891407015],[309363.9969558716,10000140.35344887],[309363.04200553894,10000154.115449907]]},"properties":{"Uniq_ID":1,"Length":17899.07182605,"Ket":"Batas"}},
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[318381.8011303999,9993538.80093384],[318450.444231485,9993588.794766385],[318563.6597642358,9993451.216397472],[318792.9570457585,9993164.594795568],[318913.3381185578,9993041.347506749]]},"properties":{"Uniq_ID":0,"Length":0,"Ket":"Batas"}},
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[319539.93339545315,9998575.123344423],[319515.66937705106,9998552.459091783],[319504.4466298558,9998540.896261338],[319490.84329992294,9998533.754513122],[319477.9201364848,9998530.01359739],[319459.5556410735,9998516.750350704],[319453.77422585123,9998507.908186248],[319451.05355986534,9998495.665189307],[319449.69322687224,9998479.681276634],[319454.7944755965,9998465.057696955],[319469.75813852507,9998456.895698994],[319479.2804694779,9998468.458529439],[319506.1470460978,9998490.563940581],[319515.66937705234,9998499.06602179],[319534.7140389592,9998513.68960147],[319554.7789506132,9998522.191682678],[319566.6818643046,9998523.211932423],[319579.264944494,9998522.871849176],[319589.1273586943,9998515.73010096],[319605.86366314074,9998500.140897864],[319606.47160436236,9998486.82302485],[319607.1517708587,9998468.798612688],[319604.0910216238,9998460.296531478],[319599.32985614653,9998440.911786322],[319593.2083576762,9998430.029122375],[319584.7062764675,9998413.024959957],[319576.544278507,9998402.822462507],[319562.9409485728,9998387.858799579],[319555.11903386144,9998382.417467605],[319540.4954541817,9998376.295969134],[319515.3292938045,9998369.494304167],[319498.3251313863,9998364.052972194],[319490.5032166742,9998360.99222296],[319468.73788877984,9998348.40914277],[319456.83497508644,9998338.886811815],[319449.3531436249,9998331.404980352],[319445.6122278915,9998319.50206666],[319447.652727382,9998305.558653478],[319454.7944755972,9998297.056572268],[319468.73788877926,9998292.295406792],[319475.87963699433,9998292.63549004],[319500.36563087633,9998291.955323543],[319506.8272125944,9998291.955323543],[319514.98921055585,9998291.615240294],[319526.55204099906,9998288.55449106],[319539.4752044369,9998281.752826093],[319549.67770188616,9998273.590828132],[319565.3215313117,9998264.748663675],[319572.4632795266,9998256.586665714],[319575.52402876236,9998247.404418008],[319575.8641120108,9998236.181670813],[319574.503779017,9998228.3597561],[319569.74261354003,9998218.837425148],[319563.2810318208,9998212.375843428],[319554.77895061276,9998208.975010945],[319546.2768694038,9998203.87376222],[319538.79503794,9998199.452679992],[319529.9528734827,9998192.310931776],[319521.79087552265,9998183.468767319],[319502.40613036696,9998164.764188658],[319493.5639659096,9998149.800525732],[319491.18338317063,9998136.537279045],[319490.16313342575,9998119.19303338],[319489.0904016987,9998075.383173442],[319490.2995865813,9998043.339774042],[319488.4858092567,9998019.156076381],[319483.0444772822,9998007.064227551],[319473.9755906603,9997993.763193838],[319463.69751915406,9997985.903492099],[319448.5827081164,9997975.02082815],[319436.49085928523,9997965.951941527],[319423.79441801563,9997948.418760724],[319416.5393087151,9997923.630470622],[319404.4474598855,9997889.168701455],[319389.3326488475,9997864.985003794],[319383.89131687337,9997852.893154964],[319379.0545773419,9997828.709457304],[319380.2637622245,9997782.760431748],[319380.26376222493,9997728.951704454],[319377.24080001743,9997704.768006792],[319371.2433922781,9997509.122639129],[319348.31366412545,9997440.33345467],[319310.70370892773,9997296.55100874]]},"properties":{"Uniq_ID":0,"Length":0,"Ket":"Batas"}},
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[309745.83311090706,10000938.758602144],[309605.8353528148,10000609.778128862],[309363.042005638,10000154.115449907]]},"properties":{"Uniq_ID":0,"Length":0,"Ket":"Batas"}},
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[319310.7037087167,9997296.551008226],[319295.09421736596,9997277.819618227],[319252.4847679799,9997226.6882782],[319232.4763985358,9997202.67823601],[319215.8224373536,9997136.66625023],[319215.4316578593,9997125.53386307],[319214.2171707826,9997090.936071398],[319214.2293358528,9997090.915210726],[319213.6036701896,9997073.458921434],[319211.28808600514,9997008.85334015],[319214.07107741514,9996987.29494095],[319225.43977362796,9996899.227508547],[319232.446024009,9996844.953693392],[319242.5038986881,9996767.040512087],[319246.92775733146,9996744.163612368],[319257.26479918737,9996690.708135607],[319264.1127911288,9996656.484870913],[319268.894241401,9996632.589271547],[319271.18946272996,9996598.734748842],[319273.7408085551,9996561.10240555],[319275.330831595,9996537.649574282],[319268.5246086792,9996525.852159502],[319245.703275749,9996503.772983553],[319204.7043152532,9996464.107322695],[319171.18900305836,9996432.868398668],[319140.37736136385,9996398.113954546],[319117.97433669167,9996372.844133379],[319092.1326828678,9996347.002477648],[319033.8643475262,9996288.734144213],[318950.2375298226,9996205.107324602],[318914.79675108986,9996176.17607689],[318881.2238598556,9996147.007192614],[318844.3560772623,9996113.05963135],[318778.268346853,9996057.999097826],[318754.8175469136,9996035.126823427],[318735.4459305487,9996020.300657274],[318707.8110485768,9995999.15015793]]},"properties":{"Uniq_ID":5,"Length":14436.7646144,"Ket":"Batas"}},
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[318707.81104864477,9995999.15015793],[318879.5941144298,9995825.817137258],[319022.09735748835,9995674.653746959],[319187.72511056607,9995506.80386122],[319379.0474325632,9995287.715435082],[319808.78005676554,9994767.125632077],[320247.1415380788,9994097.035439083],[320255.5749027274,9994071.906895999]]},"properties":{"Uniq_ID":0,"Length":0,"Ket":"Batas"}},
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[320255.57490276,9994071.906895999],[319899.38833847764,9993791.990527594],[319562.0865592073,9993540.692757063],[319147.48587633215,9993241.92620912],[319008.42264754605,9993128.543081297],[318913.3381185918,9993041.347506749]]},"properties":{"Uniq_ID":0,"Length":0,"Ket":"Batas"}},
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[309694.0888124531,10000943.353812467],[310631.0000001406,10003569],[312100.00000013213,10004380],[314543.000000122,10003538],[316615.0000001121,10002986],[318690.0000001028,10002304]]},"properties":{"Uniq_ID":0,"Length":0,"Ket":"Batas Tapem 2010"}},
{"type":"Feature","geometry":{"type":"LineString","coordinates":[[318687.85770423023,10002297.23822611],[318709.41792682244,10002290.498565676],[318712.1028309219,10002272.123546602],[318709.3886223181,10002255.04850197],[318704.6430855138,10002225.194391252],[318700.3713646274,10002198.321052553],[318699.1834678991,10002192.063240053],[318698.9130325656,10002176.904691698],[318693.8825321555,10002154.6376915],[318696.2635422098,10002133.775268557],[318686.03625491564,10002111.722833635],[318681.4622898449,10002101.860286715],[318656.36500934267,10002064.350061418],[318665.0790367469,10002035.895908358],[318680.0252647748,10002007.455524446],[318683.3627510422,10001970.986885073],[318684.2087917679,10001961.74221802],[318682.2789306982,10001928.241374971],[318680.8816604957,10001903.985876085],[318664.4720764505,10001858.243206026],[318658.5085716591,10001841.619592668],[318636.51919177594,10001811.802158358],[318624.4978218429,10001795.501268389],[318616.6664104802,10001776.908777239],[318616.66626361443,10001758.351169588],[318632.9310284,10001736.08916855],[318634.4102707259,10001726.12555504],[318637.5664310801,10001704.866855623],[318642.0773315771,10001685.24028206],[318645.269950901,10001671.349452974],[318645.07812884985,10001662.04914284],[318644.5015926701,10001634.096128466],[318632.86391070974,10001599.929788591],[318644.12627795874,10001583.752920153],[318664.1342010831,10001561.333684923],[318660.343820606,10001521.870508196],[318636.55764773965,10001498.525508882],[318629.69968990114,10001475.41996956],[318621.3276577336,10001447.21327019],[318607.890373265,10001413.139276506],[318582.14903644053,10001372.268117907],[318597.5927524909,10001333.207372667],[318587.01522830676,10001272.391132357],[318577.13755611144,10001229.860055925],[318569.577434575,10001197.307834627],[318552.6444816943,10001163.371177675],[318559.4331245774,10001132.857595446],[318552.7520027491,10001100.500587465],[318530.5973682769,10001069.923219683],[318580.29472926754,10001025.71367264]]},"properties":{"Uniq_ID":6,"Length":28958.15518318,"Ket":"Batas"}}
]}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,621 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pontianak WebGIS - Cloropleth & Layers</title>
<!-- Leaflet CSS -->
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"
integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin="" />
<!-- Leaflet JS -->
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"
integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""></script>
<!-- Proj4js for UTM Zone 49S to WGS84 coordinates projection -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.9.0/proj4.js"></script>
<style>
html,
body {
height: 100%;
margin: 0;
padding: 0;
overflow: hidden;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: #f8f9fa;
}
#map {
height: 100vh;
width: 100vw;
z-index: 1;
}
/* Premium Floating Header overlay */
.map-header {
position: absolute;
top: 20px;
left: 50%;
transform: translateX(-50%);
z-index: 1000;
background: rgba(255, 255, 255, 0.85);
backdrop-filter: blur(10px);
padding: 10px 24px;
border-radius: 30px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
border: 1px solid rgba(255, 255, 255, 0.25);
text-align: center;
pointer-events: auto;
transition: all 0.3s ease;
}
.map-header h1 {
margin: 0;
font-size: 16px;
font-weight: 700;
color: #1a1a1a;
letter-spacing: 0.5px;
text-transform: uppercase;
}
.map-header p {
margin: 2px 0 0 0;
font-size: 11px;
color: #666;
font-weight: 500;
}
/* Glassmorphic Layer Control custom overrides */
.leaflet-control-layers {
background: rgba(255, 255, 255, 0.85) !important;
backdrop-filter: blur(10px) !important;
border: 1px solid rgba(255, 255, 255, 0.25) !important;
border-radius: 12px !important;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15) !important;
font-family: 'Segoe UI', sans-serif !important;
padding: 10px 14px !important;
}
.leaflet-control-layers-list label {
margin-bottom: 6px;
font-weight: 500;
font-size: 12px;
color: #444;
display: flex;
align-items: center;
cursor: pointer;
}
.leaflet-control-layers-list input {
margin-right: 8px;
cursor: pointer;
}
/* Custom zoom controls alignment */
.leaflet-bar {
border: none !important;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15) !important;
border-radius: 10px !important;
overflow: hidden;
}
.leaflet-bar a {
background-color: rgba(255, 255, 255, 0.85) !important;
backdrop-filter: blur(10px) !important;
border-bottom: 1px solid rgba(0, 0, 0, 0.1) !important;
color: #333 !important;
transition: all 0.2s;
}
.leaflet-bar a:hover {
background-color: #ffffff !important;
color: #007bff !important;
}
/* Loading indicator spinner */
#loader {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background: #ffffff;
z-index: 9999;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
transition: opacity 0.5s ease;
}
.spinner {
width: 50px;
height: 50px;
border: 5px solid rgba(0, 123, 255, 0.1);
border-radius: 50%;
border-top-color: #007bff;
animation: spin 1s ease-in-out infinite;
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}
.loading-text {
margin-top: 20px;
font-size: 14px;
color: #555;
font-weight: 600;
letter-spacing: 0.5px;
}
</style>
</head>
<body>
<!-- Spinner Loader -->
<div id="loader">
<div class="spinner"></div>
<div class="loading-text">Loading WebGIS Environment...</div>
</div>
<!-- Floating Top Header Overlay -->
<div class="map-header">
<h1>Pontianak City WebGIS</h1>
<p>Interactive Cloropleth Administration Map</p>
</div>
<!-- CORS Server Warning Overlay fall back -->
<div id="cors-warning"
style="display: none; position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; background: rgba(0, 0, 0, 0.75); backdrop-filter: blur(8px); z-index: 99999; justify-content: center; align-items: center; color: white;">
<div
style="background: rgba(30, 30, 30, 0.95); border: 1px solid rgba(255, 255, 255, 0.15); border-radius: 16px; padding: 30px; max-width: 500px; text-align: center; box-shadow: 0 20px 50px rgba(0,0,0,0.6); font-family: 'Segoe UI', sans-serif;">
<div style="font-size: 54px; margin-bottom: 15px;">🌐</div>
<h3 style="margin-top: 0; font-size: 22px; font-weight: 600; color: #ff7800;">Local Web Server Required</h3>
<p style="font-size: 14px; line-height: 1.6; color: #ddd; margin-bottom: 20px;">
Browser security blocks loading local GeoJSON data files directly from a <code>file://</code> URL.
</p>
<div
style="font-size: 13.5px; line-height: 1.6; color: #ccc; margin-bottom: 25px; text-align: left; background: rgba(0,0,0,0.4); padding: 15px; border-radius: 8px; border-left: 4px solid #ff7800;">
<strong>Quick Fixes to run locally:</strong><br>
1. If in VS Code, click the <strong>"Go Live"</strong> button in the bottom right corner (Live
Server).<br>
2. Run <code>python -m http.server</code> in this folder and visit
<code>http://localhost:8000</code>.<br>
3. Run <code>npx serve</code> in this directory in your terminal.
</div>
<button onclick="document.getElementById('cors-warning').style.display='none'"
style="background: #ff7800; border: none; color: white; padding: 12px 28px; font-size: 14px; font-weight: 600; border-radius: 8px; cursor: pointer; transition: background 0.3s; box-shadow: 0 4px 12px rgba(255, 120, 0, 0.3);">Dismiss</button>
</div>
</div>
<!-- Leaflet Container -->
<div id="map"></div>
<script>
// ------------------------------------------------------------------
// INITIALIZE MAP & BASE LAYERS
// ------------------------------------------------------------------
var map = L.map('map', {
zoomControl: false,
attributionControl: true
}).setView([-0.0258, 109.3323], 13); // Centered around Pontianak
// Zoom control in bottom right for cleaner aesthetics
L.control.zoom({ position: 'bottomleft' }).addTo(map);
// OSM Map Layer
var osmLayer = L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 19,
attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
// ------------------------------------------------------------------
// PROJ4 COORDINATE CONVERSION (UTM Zone 49S to WGS84)
// ------------------------------------------------------------------
// Define UTM Zone 49S (which Pontianak falls into) and standard Lat/Lng projections
const utm49S = "+proj=utm +zone=49 +south +datum=WGS84 +units=m +no_defs";
const wgs84 = "+proj=longlat +datum=WGS84 +no_defs";
// Dynamic conversion logic for various GeoJSON geometry types
function convertCoords(coords, type) {
const isLatLng = (c) => Math.abs(c[0]) <= 180 && Math.abs(c[1]) <= 90;
if (type === "Point") {
if (isLatLng(coords)) return coords;
const [lng, lat] = proj4(utm49S, wgs84, coords);
return [lng, lat];
} else if (type === "LineString" || type === "MultiPoint") {
if (coords.length > 0 && isLatLng(coords[0])) return coords;
return coords.map(c => {
const [lng, lat] = proj4(utm49S, wgs84, c);
return [lng, lat];
});
} else if (type === "Polygon" || type === "MultiLineString") {
if (coords.length > 0 && coords[0].length > 0 && isLatLng(coords[0][0])) return coords;
return coords.map(ring =>
ring.map(c => {
const [lng, lat] = proj4(utm49S, wgs84, c);
return [lng, lat];
})
);
} else if (type === "MultiPolygon") {
if (coords.length > 0 && coords[0].length > 0 && coords[0][0].length > 0 && isLatLng(coords[0][0][0])) return coords;
return coords.map(polygon =>
polygon.map(ring =>
ring.map(c => {
const [lng, lat] = proj4(utm49S, wgs84, c);
return [lng, lat];
})
)
);
}
return coords;
}
// Deep copies the GeoJSON and converts coordinates recursively
function convertGeoJSON(geojson) {
if (!geojson) return geojson;
const cloned = JSON.parse(JSON.stringify(geojson));
const convertFeature = (feature) => {
if (feature.geometry && feature.geometry.coordinates) {
feature.geometry.coordinates = convertCoords(
feature.geometry.coordinates,
feature.geometry.type
);
}
};
if (cloned.type === "FeatureCollection" && cloned.features) {
cloned.features.forEach(convertFeature);
} else if (cloned.type === "Feature") {
cloned.features = [cloned];
cloned.type = "FeatureCollection";
cloned.features.forEach(convertFeature);
}
return cloned;
}
// ------------------------------------------------------------------
// DUMMY POPULATION DATA — Kecamatan Pontianak (2024 Estimate)
// ------------------------------------------------------------------
const populationData = {
'Pontianak Timur': { population: 108_450, area_km2: 8.72, density: 12437 },
'Pontianak Selatan': { population: 87_320, area_km2: 14.54, density: 6005 },
'Pontianak Barat': { population: 142_610, area_km2: 16.81, density: 8484 },
'Pontianak Kota': { population: 65_180, area_km2: 5.13, density: 12706 },
'Pontianak Utara': { population: 98_760, area_km2: 40.94, density: 2412 },
'Pontianak Tenggara': { population: 73_540, area_km2: 11.26, density: 6531 }
};
// ------------------------------------------------------------------
// CHOROPLETH COLOR SCALE — Sequential blue-green by population
// ------------------------------------------------------------------
// Breaks based on population ranges across the 6 kecamatan
function getColor(ket) {
const data = populationData[ket];
if (!data) return '#8E9AAF';
const pop = data.population;
return pop > 130_000 ? '#084594' :
pop > 110_000 ? '#2171b5' :
pop > 95_000 ? '#4292c6' :
pop > 80_000 ? '#6baed6' :
pop > 65_000 ? '#9ecae1' :
'#c6dbef';
}
// ------------------------------------------------------------------
// LAYER GEOMETRY STYLING & INTERACTION Handlers
// ------------------------------------------------------------------
// 1. Administrative Kecamatan styling & interaction
function styleAdminKecamatan(feature) {
return {
fillColor: getColor(feature.properties.Ket),
weight: 1.5,
opacity: 1,
color: 'white',
dashArray: '',
fillOpacity: 0.5
};
}
function highlightFeature(e) {
var layer = e.target;
layer.setStyle({
weight: 3,
color: '#666',
dashArray: '',
fillOpacity: 0.7
});
layer.bringToFront();
info.update(layer.feature.properties);
}
function resetHighlight(e) {
adminKecamatanLayer.resetStyle(e.target);
info.update();
}
function onEachFeatureAdmin(feature, layer) {
layer.on({
mouseover: highlightFeature,
mouseout: resetHighlight,
click: function (e) {
map.fitBounds(e.target.getBounds());
}
});
if (feature.properties && feature.properties.Ket) {
const ket = feature.properties.Ket;
const pop = populationData[ket];
const popStr = pop ? pop.population.toLocaleString('id-ID') : 'N/A';
const areaStr = pop ? pop.area_km2.toFixed(2) : ((feature.properties.Plan_Area / 1000000).toFixed(2));
const densStr = pop ? pop.density.toLocaleString('id-ID') : 'N/A';
const color = getColor(ket);
layer.bindPopup(`
<div style="font-family: 'Segoe UI', sans-serif; padding: 3px; min-width: 200px;">
<div style="display:flex; align-items:center; gap:8px; margin-bottom:8px; border-bottom: 1.5px solid #eee; padding-bottom:6px;">
<span style="display:inline-block; width:12px; height:12px; border-radius:3px; background:${color}; flex-shrink:0;"></span>
<h4 style="margin:0; color:#111; font-weight:700; font-size:13.5px;">${ket}</h4>
</div>
<table style="width:100%; border-collapse:collapse; font-size:12px; color:#444;">
<tr>
<td style="padding:3px 0;">👥 <strong>Jumlah Penduduk</strong></td>
<td style="padding:3px 0; text-align:right; color:#2171b5; font-weight:700;">${popStr} jiwa</td>
</tr>
<tr>
<td style="padding:3px 0;">📐 <strong>Luas Wilayah</strong></td>
<td style="padding:3px 0; text-align:right; color:#555; font-weight:600;">${areaStr} km²</td>
</tr>
<tr>
<td style="padding:3px 0;">🏙️ <strong>Kepadatan</strong></td>
<td style="padding:3px 0; text-align:right; color:#555; font-weight:600;">${densStr} jiwa/km²</td>
</tr>
</table>
<div style="margin-top:8px; font-size:10.5px; color:#aaa; text-align:right;">*Data Estimasi 2024</div>
</div>
`);
}
}
// Declaring Leaflet layers as placeholder layer groups
var adminKecamatanLayer = L.geoJSON(null);
var batasKecamatanLayer = L.geoJSON(null);
var batasWilayahLayer = L.geoJSON(null);
var poligonKotaLayer = L.geoJSON(null);
// ------------------------------------------------------------------
// INTERACTIVE HUD CONTROLS (District Info Panel & Legend)
// ------------------------------------------------------------------
// Custom Hover HUD Info Panel
var info = L.control({ position: 'topright' });
info.onAdd = function (map) {
this._div = L.DomUtil.create('div', 'info');
this._div.style.background = 'rgba(255, 255, 255, 0.85)';
this._div.style.backdropFilter = 'blur(10px)';
this._div.style.padding = '12px 18px';
this._div.style.borderRadius = '14px';
this._div.style.boxShadow = '0 10px 30px rgba(0, 0, 0, 0.15)';
this._div.style.border = '1px solid rgba(255, 255, 255, 0.25)';
this._div.style.fontSize = '13px';
this._div.style.color = '#333';
this._div.style.minWidth = '200px';
this._div.style.fontFamily = "'Segoe UI', Tahoma, Geneva, Verdana, sans-serif";
this.update();
return this._div;
};
info.update = function (props) {
if (!props) {
this._div.innerHTML = '<h4 style="margin: 0 0 8px 0; font-size: 13.5px; font-weight: 700; color: #111; border-bottom: 1px solid rgba(0,0,0,0.06); padding-bottom: 4px;">Informasi Kecamatan</h4>' +
'<span style="color:#777; font-style:italic; font-size:12px;">Arahkan kursor ke kecamatan</span>';
return;
}
const ket = props.Ket;
const pop = populationData[ket];
const popStr = pop ? pop.population.toLocaleString('id-ID') : '—';
const areaStr = pop ? pop.area_km2.toFixed(2) : (props.Plan_Area ? (props.Plan_Area / 1000000).toFixed(2) : '—');
const densStr = pop ? pop.density.toLocaleString('id-ID') : '—';
const color = getColor(ket);
this._div.innerHTML =
'<h4 style="margin: 0 0 8px 0; font-size: 13.5px; font-weight: 700; color: #111; border-bottom: 1px solid rgba(0,0,0,0.06); padding-bottom: 4px;">Informasi Kecamatan</h4>' +
`<div style="display:flex; align-items:center; gap:7px; margin-bottom:6px;">
<span style="display:inline-block; width:11px; height:11px; border-radius:3px; background:${color}; flex-shrink:0;"></span>
<b style="font-size: 14px; color: #1a1a2e; font-weight: 700;">${ket}</b>
</div>
<table style="width:100%; font-size:12px; color:#444; border-collapse:collapse;">
<tr>
<td style="padding:2px 0;">👥 Penduduk</td>
<td style="padding:2px 0; text-align:right; color:#2171b5; font-weight:700;">${popStr} jiwa</td>
</tr>
<tr>
<td style="padding:2px 0;">📐 Luas</td>
<td style="padding:2px 0; text-align:right; font-weight:600;">${areaStr} km²</td>
</tr>
<tr>
<td style="padding:2px 0;">🏙️ Kepadatan</td>
<td style="padding:2px 0; text-align:right; font-weight:600;">${densStr} jiwa/km²</td>
</tr>
</table>`;
};
info.addTo(map);
// Custom Choropleth Population Legend Control
var legend = L.control({ position: 'bottomright' });
legend.onAdd = function (map) {
var div = L.DomUtil.create('div', 'info legend');
div.style.background = 'rgba(255, 255, 255, 0.9)';
div.style.backdropFilter = 'blur(10px)';
div.style.padding = '14px 18px';
div.style.borderRadius = '14px';
div.style.boxShadow = '0 10px 30px rgba(0, 0, 0, 0.15)';
div.style.border = '1px solid rgba(255, 255, 255, 0.25)';
div.style.fontSize = '12px';
div.style.color = '#333';
div.style.fontFamily = "'Segoe UI', Tahoma, Geneva, Verdana, sans-serif";
div.style.minWidth = '195px';
// Population break labels (matching getColor thresholds)
const grades = [0, 65_001, 80_001, 95_001, 110_001, 130_001];
const colors = ['#c6dbef', '#9ecae1', '#6baed6', '#4292c6', '#2171b5', '#084594'];
const labels = [
'< 65.000',
'65.001 80.000',
'80.001 95.000',
'95.001 110.000',
'110.001 130.000',
'> 130.000'
];
var html = '<h4 style="margin: 0 0 10px 0; font-size: 13px; font-weight: 700; color: #111; border-bottom: 2px solid #eaeaea; padding-bottom: 6px;">🗺️ Legenda Penduduk</h4>';
html += '<div style="font-size: 11px; color: #888; margin-bottom: 8px;">Jumlah Penduduk (jiwa)</div>';
colors.forEach((color, i) => {
html += `
<div style="display: flex; align-items: center; margin-bottom: 5px;">
<span style="display:inline-block; width:16px; height:16px; margin-right:10px; border-radius:4px; background:${color}; border:1px solid rgba(0,0,0,0.1); box-shadow: 0 1px 3px rgba(0,0,0,0.1); flex-shrink:0;"></span>
<span style="font-weight:500; color:#444; font-size:11.5px;">${labels[i]}</span>
</div>
`;
});
// Per-kecamatan summary table
html += '<div style="margin-top:12px; border-top:1px solid #eee; padding-top:10px;">';
html += '<div style="font-size:11px; font-weight:700; color:#555; margin-bottom:6px;">Data Per Kecamatan</div>';
const sortedKec = Object.entries(populationData).sort((a, b) => b[1].population - a[1].population);
sortedKec.forEach(([name, data]) => {
const shortName = name.replace('Pontianak ', '');
html += `
<div style="display:flex; align-items:center; gap:7px; margin-bottom:4px;">
<span style="display:inline-block; width:10px; height:10px; border-radius:2px; background:${getColor(name)}; flex-shrink:0;"></span>
<span style="font-size:11px; color:#555; flex:1;">${shortName}</span>
<span style="font-size:11px; font-weight:700; color:#2171b5;">${data.population.toLocaleString('id-ID')}</span>
</div>
`;
});
html += '</div>';
div.innerHTML = html;
return div;
};
legend.addTo(map);
// ------------------------------------------------------------------
// FETCH DATA & INTEGRATE LAYERS
// ------------------------------------------------------------------
async function loadGeoJSONLayers() {
try {
// Fetch all four local GeoJSON files simultaneously
const [adminRes, batasKecRes, batasWilRes, poligonRes] = await Promise.all([
fetch('Admin_Kecamatan.json'),
fetch('Batas_Kecamatan.json'),
fetch('Batas_Wilayah.json'),
fetch('Poligon_Kota.json')
]);
// Ensure HTTP calls were successful
if (!adminRes.ok || !batasKecRes.ok || !batasWilRes.ok || !poligonRes.ok) {
throw new Error("HTTP resource fetching failed.");
}
// Parse into JSON format
const rawAdmin = await adminRes.json();
const rawBatasKec = await batasKecRes.json();
const rawBatasWil = await batasWilRes.json();
const rawPoligon = await poligonRes.json();
// Convert UTM coordinates to WGS84 recursively
const adminData = convertGeoJSON(rawAdmin);
const batasKecData = convertGeoJSON(rawBatasKec);
const batasWilData = convertGeoJSON(rawBatasWil);
const poligonData = convertGeoJSON(rawPoligon);
// --- 1. ADMINISTRATIVE KECAMATAN LAYER ---
adminKecamatanLayer = L.geoJSON(adminData, {
style: styleAdminKecamatan,
onEachFeature: onEachFeatureAdmin
}).addTo(map);
// --- 2. DISTRICT BOUNDARIES LAYER ---
batasKecamatanLayer = L.geoJSON(batasKecData, {
style: {
color: '#495057', // Slate dark boundary color
weight: 2,
dashArray: '5, 5',
opacity: 0.85
}
}).addTo(map);
// --- 3. TERRITORY BOUNDARIES LAYER ---
batasWilayahLayer = L.geoJSON(batasWilRes, {
style: {
color: '#e67e22', // Vivid orange boundary
weight: 3,
opacity: 0.9
}
}).addTo(map);
// --- 4. CITY POLIGON MUNICIPAL LAYER ---
poligonKotaLayer = L.geoJSON(poligonData, {
style: {
color: '#2d3748',
weight: 1.5,
fillColor: '#cbd5e0',
fillOpacity: 0.15
}
}).addTo(map);
// Combine bounds from all active layers to focus correctly
const combinedBounds = L.latLngBounds();
[adminKecamatanLayer, batasKecamatanLayer, batasWilayahLayer, poligonKotaLayer].forEach(layer => {
if (layer.getBounds().isValid()) {
combinedBounds.extend(layer.getBounds());
}
});
if (combinedBounds.isValid()) {
map.fitBounds(combinedBounds, { padding: [30, 30] });
}
// Add glassmorphic base layer toggle control panel
var baseMaps = {
"OpenStreetMap": osmLayer
};
var overlayMaps = {
"Administrative districts": adminKecamatanLayer,
"District boundaries": batasKecamatanLayer,
"Territory boundary lines": batasWilayahLayer,
"City polygon limits": poligonKotaLayer
};
L.control.layers(baseMaps, overlayMaps, { collapsed: false }).addTo(map);
// Transition loader off screen
const loader = document.getElementById('loader');
loader.style.opacity = '0';
setTimeout(() => loader.style.display = 'none', 500);
} catch (error) {
console.error("Error loading WebGIS layers:", error);
// Remove loader spinner and show elegant CORS server overlay details
document.getElementById('loader').style.display = 'none';
document.getElementById('cors-warning').style.display = 'flex';
}
}
// Execute dynamic WebGIS loader upon page boot
window.addEventListener('DOMContentLoaded', loadGeoJSONLayers);
</script>
</body>
</html>