अपनी भूमि को जानो
KNOW YOUR LAND
Measure your land on a map, convert units, and keep plot notes & photos — all in one private tool.
Detecting location…
अपनी भूमि को जानो
All 28 States · GPS · Camera · Offline-ready
🗺️ Measure Land
?
🔍
🎙️
EN
🌙
🗺️ Default ▾
◎
🧭
📐
↶
📌
🚶
N
🌾
Loading satellite map…
Tap map to place boundary points · पहला बिंदु रखें
0 Bigha
0 Acres · 0 m²
Reset
★ Save
Report →
Land Report
📸
WhatsApp
⬇ PDF
?
VIEW STATE:
📸 GPS Photo
?
📷
Tap to enable camera
Enable Camera
🔄
⬇ Save
★ To Plot
📤 WA
✕
📸
★ My Saved Plots
Save, compare & manage your land parcels
?
🗺️ Show all on map
⬇ PDF
⬇ CSV
📌 Pins
Newest
Largest area
Name A-Z
Compare Selected Plots
📐 Unit Converter
?
अनुमानित है (माना जाता है कि कोने एक वृत्त पर हैं)। सटीक माप के लिए पेशेवर सर्वे कराएं।', units:{ft:'फुट',m:'मीटर',yd:'गज',in:'इंच',link:'लिंक'}, share:'व्हाट्सएप',priceTitle:'💰 भूमि मूल्य कैलकुलेटर',totalValue:'कुल मूल्य',priceHint:'अपनी ज़मीन का कुल मूल्य देखने के लिए प्रति इकाई कीमत डालें।',perUnit:'प्रति', histTitle:'🕘 हाल की गणनाएँ',histClear:'साफ़ करें',histEmpty:'अभी कोई गणना नहीं।', splitTitle:'✂️ प्लॉट को बराबर हिस्सों में बाँटें',parts:'हिस्से',eachPart:'हर हिस्से का क्षेत्रफल', copyAll:'सभी कॉपी करें',allCopied:'सभी मान कॉपी हुए',emiTitle:'🏦 लोन / EMI कैलकुलेटर',emiLoan:'लोन राशि (₹)',emiRate:'ब्याज %/वर्ष',emiYears:'वर्ष',emiMonthly:'मासिक EMI',emiHint:'सुझाव: ऊपर भूमि मूल्य पर टैप करें — लोन राशि अपने आप भर जाएगी।',emiSub:'कुल देय {T} · {N} महीनों में · ब्याज {I}', onbTitle:'AgriZameen में आपका स्वागत है',onbBtn:'शुरू करें', onb:['⇄ 18+ भूमि इकाइयाँ बदलें — एकड़, बीघा, गज','🏛️ सही स्थानीय बीघा के लिए अपना राज्य चुनें','💰 भूमि मूल्य और लोन EMI निकालें','📐 किसी भी आकार के प्लॉट का क्षेत्रफल','📲 व्हाट्सएप पर शेयर करें · ऑफलाइन काम करता है']}, mwr:{enterArea:'क्षेत्रफळ लिखो',from:'इकाई',convertsTo:'इणमें बदळो',tapCopy:'कॉपी करो',chooseUnit:'इकाई चुणो',searchPh:'एकड़, बीघा, गज ढूंढो…',fromTag:'स्रोत',copied:'कॉपी कर्यो',groups:{common:'सामान्य',bigha:'बीघा / बिस्वा',north:'उत्तर भारत',west:'पश्चिम भारत',south:'दक्षिण भारत',east:'पूर्व भारत'}, calcArea:'गणना कर्यो क्षेत्रफळ',sqFeet:'वर्ग फुट',pdf:'PDF डाउनलोड करो',rect:'आयत',tri:'त्रिभुज',poly:'बहुभुज', length:'लंबाई',width:'चौड़ाई',base:'आधार',height:'ऊंचाई',side:'भुजा',addSide:'+ एक और भुजा जोड़ो', hintRect:'लंबाई अर चौड़ाई लिखो — हर एक री अलग इकाई हो सके।',hintTri:'आधार अर ऊंचाई लिखो — हर एक री अलग इकाई हो सके।', hintPoly:'हर भुजा नै उण री इकाई साथै लिखो। बहुभुज प्लॉट रो क्षेत्रफळ
अंदाजन
है। सटीक माप वास्तै पेशेवर सर्वे करावो।', units:{ft:'फुट',m:'मीटर',yd:'गज',in:'इंच',link:'लिंक'}, share:'व्हाट्सएप',priceTitle:'💰 भूमि मोल कैलकुलेटर',totalValue:'कुल मोल',priceHint:'आपरी ज़मीन रो कुल मोल देखण वास्तै प्रति इकाई भाव लिखो।',perUnit:'प्रति', histTitle:'🕘 हाल री गणनावां',histClear:'साफ करो',histEmpty:'अजै कोई गणना कोनी।', splitTitle:'✂️ प्लॉट नै बरोबर हिस्सां में बांटो',parts:'हिस्सा',eachPart:'हर हिस्सै रो क्षेत्रफळ', copyAll:'सगळा कॉपी करो',allCopied:'सगळा मान कॉपी हुया',emiTitle:'🏦 लोन / EMI कैलकुलेटर',emiLoan:'लोन रकम (₹)',emiRate:'ब्याज %/साल',emiYears:'साल',emiMonthly:'महीनै री EMI',emiHint:'सुझाव: ऊपर भूमि मोल पर टैप करो — लोन रकम अपणै आप भर सी।',emiSub:'कुल देय {T} · {N} महीनां में · ब्याज {I}', onbTitle:'AgriZameen में थारो स्वागत है',onbBtn:'शुरू करो', onb:['⇄ 18+ भूमि इकाइयां बदळो — एकड़, बीघा, गज','🏛️ सही स्थानीय बीघा वास्तै आपरो राज्य चुणो','💰 भूमि मोल अर लोन EMI निकाळो','📐 कोई भी आकार रै प्लॉट रो क्षेत्रफळ','📲 व्हाट्सएप पर शेयर करो · ऑफलाइन चालै']}, gu:{enterArea:'વિસ્તાર દાખલ કરો',from:'એકમ',convertsTo:'આમાં બદલો',tapCopy:'કૉપિ કરો',chooseUnit:'એકમ પસંદ કરો',searchPh:'એકર, વીઘા, ગજ શોધો…',fromTag:'સ્રોત',copied:'કૉપિ થયું',groups:{common:'સામાન્ય',bigha:'વીઘા / બિસ્વા',north:'ઉત્તર ભારત',west:'પશ્ચિમ ભારત',south:'દક્ષિણ ભારત',east:'પૂર્વ ભારત'}, calcArea:'ગણતરી કરેલ વિસ્તાર',sqFeet:'ચોરસ ફૂટ',pdf:'PDF ડાઉનલોડ કરો',rect:'લંબચોરસ',tri:'ત્રિકોણ',poly:'બહુકોણ', length:'લંબાઈ',width:'પહોળાઈ',base:'આધાર',height:'ઊંચાઈ',side:'બાજુ',addSide:'+ બીજી બાજુ ઉમેરો', hintRect:'લંબાઈ અને પહોળાઈ દાખલ કરો — દરેકનું અલગ એકમ હોઈ શકે.',hintTri:'આધાર અને ઊંચાઈ દાખલ કરો — દરેકનું અલગ એકમ હોઈ શકે.', hintPoly:'દરેક બાજુ તેના એકમ સાથે દાખલ કરો. બહુકોણ પ્લોટનો વિસ્તાર
અંદાજિત
છે. ચોક્કસ માપ માટે વ્યાવસાયિક સર્વે કરાવો.', units:{ft:'ફૂટ',m:'મીટર',yd:'ગજ',in:'ઇંચ',link:'લિંક'}, share:'વોટ્સએપ',priceTitle:'💰 જમીન ભાવ કેલ્ક્યુલેટર',totalValue:'કુલ કિંમત',priceHint:'તમારી જમીનની કુલ કિંમત જોવા માટે પ્રતિ એકમ ભાવ દાખલ કરો.',perUnit:'પ્રતિ', histTitle:'🕘 તાજેતરની ગણતરીઓ',histClear:'સાફ કરો',histEmpty:'હજુ કોઈ ગણતરી નથી.', splitTitle:'✂️ પ્લોટને સરખા ભાગમાં વહેંચો',parts:'ભાગ',eachPart:'દરેક ભાગનો વિસ્તાર', copyAll:'બધું કૉપિ કરો',allCopied:'બધા મૂલ્યો કૉપિ થયા',emiTitle:'🏦 લોન / EMI કેલ્ક્યુલેટર',emiLoan:'લોન રકમ (₹)',emiRate:'વ્યાજ %/વર્ષ',emiYears:'વર્ષ',emiMonthly:'માસિક EMI',emiHint:'ટિપ: ઉપર જમીન કિંમત પર ટેપ કરો — લોન રકમ આપમેળે ભરાશે.',emiSub:'કુલ ચૂકવવાપાત્ર {T} · {N} મહિનામાં · વ્યાજ {I}', onbTitle:'AgriZameen માં આપનું સ્વાગત છે',onbBtn:'શરૂ કરો', onb:['⇄ 18+ જમીન એકમો બદલો — એકર, વીઘા, ગજ','🏛️ સાચા સ્થાનિક વીઘા માટે તમારું રાજ્ય પસંદ કરો','💰 જમીન કિંમત અને લોન EMI ગણો','📐 કોઈપણ આકારના પ્લોટનો વિસ્તાર','📲 વોટ્સએપ પર શેર કરો · ઓફલાઇન ચાલે']}, pa:{enterArea:'ਖੇਤਰਫਲ ਭਰੋ',from:'ਇਕਾਈ',convertsTo:'ਇਸ ਵਿੱਚ ਬਦਲੋ',tapCopy:'ਕਾਪੀ ਕਰੋ',chooseUnit:'ਇਕਾਈ ਚੁਣੋ',searchPh:'ਏਕੜ, ਵਿੱਘਾ, ਗਜ਼ ਲੱਭੋ…',fromTag:'ਸਰੋਤ',copied:'ਕਾਪੀ ਕੀਤਾ',groups:{common:'ਆਮ',bigha:'ਵਿੱਘਾ / ਬਿਸਵਾ',north:'ਉੱਤਰ ਭਾਰਤ',west:'ਪੱਛਮੀ ਭਾਰਤ',south:'ਦੱਖਣ ਭਾਰਤ',east:'ਪੂਰਬੀ ਭਾਰਤ'}, calcArea:'ਗਣਨਾ ਕੀਤਾ ਖੇਤਰਫਲ',sqFeet:'ਵਰਗ ਫੁੱਟ',pdf:'PDF ਡਾਊਨਲੋਡ ਕਰੋ',rect:'ਆਇਤ',tri:'ਤਿਕੋਣ',poly:'ਬਹੁਭੁਜ', length:'ਲੰਬਾਈ',width:'ਚੌੜਾਈ',base:'ਆਧਾਰ',height:'ਉਚਾਈ',side:'ਪਾਸਾ',addSide:'+ ਹੋਰ ਪਾਸਾ ਜੋੜੋ', hintRect:'ਲੰਬਾਈ ਅਤੇ ਚੌੜਾਈ ਭਰੋ — ਹਰ ਇੱਕ ਦੀ ਆਪਣੀ ਇਕਾਈ ਹੋ ਸਕਦੀ ਹੈ।',hintTri:'ਆਧਾਰ ਅਤੇ ਉਚਾਈ ਭਰੋ — ਹਰ ਇੱਕ ਦੀ ਆਪਣੀ ਇਕਾਈ ਹੋ ਸਕਦੀ ਹੈ।', hintPoly:'ਹਰ ਪਾਸਾ ਆਪਣੀ ਇਕਾਈ ਨਾਲ ਭਰੋ। ਬਹੁਭੁਜ ਪਲਾਟ ਦਾ ਖੇਤਰਫਲ
ਅੰਦਾਜ਼ਨ
ਹੈ। ਸਹੀ ਮਾਪ ਲਈ ਪੇਸ਼ੇਵਰ ਸਰਵੇ ਕਰਵਾਓ।', units:{ft:'ਫੁੱਟ',m:'ਮੀਟਰ',yd:'ਗਜ਼',in:'ਇੰਚ',link:'ਲਿੰਕ'}, share:'ਵਟਸਐਪ',priceTitle:'💰 ਜ਼ਮੀਨ ਮੁੱਲ ਕੈਲਕੁਲੇਟਰ',totalValue:'ਕੁੱਲ ਮੁੱਲ',priceHint:'ਆਪਣੀ ਜ਼ਮੀਨ ਦਾ ਕੁੱਲ ਮੁੱਲ ਵੇਖਣ ਲਈ ਪ੍ਰਤੀ ਇਕਾਈ ਭਾਅ ਭਰੋ।',perUnit:'ਪ੍ਰਤੀ', histTitle:'🕘 ਹਾਲੀਆ ਗਣਨਾਵਾਂ',histClear:'ਸਾਫ਼ ਕਰੋ',histEmpty:'ਅਜੇ ਕੋਈ ਗਣਨਾ ਨਹੀਂ।', splitTitle:'✂️ ਪਲਾਟ ਨੂੰ ਬਰਾਬਰ ਹਿੱਸਿਆਂ ਵਿੱਚ ਵੰਡੋ',parts:'ਹਿੱਸੇ',eachPart:'ਹਰ ਹਿੱਸੇ ਦਾ ਖੇਤਰਫਲ', copyAll:'ਸਭ ਕਾਪੀ ਕਰੋ',allCopied:'ਸਾਰੇ ਮੁੱਲ ਕਾਪੀ ਹੋਏ',emiTitle:'🏦 ਲੋਨ / EMI ਕੈਲਕੁਲੇਟਰ',emiLoan:'ਲੋਨ ਰਕਮ (₹)',emiRate:'ਵਿਆਜ %/ਸਾਲ',emiYears:'ਸਾਲ',emiMonthly:'ਮਾਸਿਕ EMI',emiHint:'ਸੁਝਾਅ: ਉੱਪਰ ਜ਼ਮੀਨ ਕੀਮਤ ਤੇ ਟੈਪ ਕਰੋ — ਲੋਨ ਰਕਮ ਆਪੇ ਭਰ ਜਾਵੇਗੀ।',emiSub:'ਕੁੱਲ ਦੇਣਯੋਗ {T} · {N} ਮਹੀਨਿਆਂ ਵਿੱਚ · ਵਿਆਜ {I}', onbTitle:'AgriZameen ਵਿੱਚ ਤੁਹਾਡਾ ਸੁਆਗਤ ਹੈ',onbBtn:'ਸ਼ੁਰੂ ਕਰੋ', onb:['⇄ 18+ ਜ਼ਮੀਨ ਇਕਾਈਆਂ ਬਦਲੋ — ਏਕੜ, ਵਿੱਘਾ, ਗਜ਼','🏛️ ਸਹੀ ਸਥਾਨਕ ਵਿੱਘਾ ਲਈ ਆਪਣਾ ਰਾਜ ਚੁਣੋ','💰 ਜ਼ਮੀਨ ਕੀਮਤ ਅਤੇ ਲੋਨ EMI ਗਿਣੋ','📐 ਕਿਸੇ ਵੀ ਆਕਾਰ ਦੇ ਪਲਾਟ ਦਾ ਖੇਤਰਫਲ','📲 ਵਟਸਐਪ ਤੇ ਸਾਂਝਾ ਕਰੋ · ਆਫਲਾਈਨ ਚੱਲਦਾ ਹੈ']} }; var GROUPS=['common','bigha','north','west','south','east']; var CHIPS=['acre','bgRP','sqyd','sqft','hect','bsRP','gunt']; /* ════════════════ STATE ════════════════ */ var lcLang='en', lcFrom='acre', lcMode='conv'; var customBigha=null; // overrides bgRP when a state is chosen function $(id){return document.getElementById(id);} function T(){return I18N[lcLang]||I18N.en;} function U(u){return u[lcLang]||u.en;} function factor(id){ if(id==='bgRP'&&customBigha)return customBigha; return FACT[id]; } function fmt(v){ if(!isFinite(v))return'—';if(v===0)return'0'; var d=v>=1000?2:v>=1?4:v>=0.01?6:8; return new Intl.NumberFormat('en-IN',{maximumFractionDigits:d}).format(v); } // Indian lakh/crore short notation for large numbers (used as a hint) function fmtIndian(v){ if(!isFinite(v)||v===0)return''; var abs=Math.abs(v); if(abs>=1e7)return (v/1e7).toFixed(2).replace(/\.00$/,'')+' Cr'; if(abs>=1e5)return (v/1e5).toFixed(2).replace(/\.00$/,'')+' Lakh'; if(abs>=1e3)return (v/1e3).toFixed(1).replace(/\.0$/,'')+' K'; return ''; } function fmtMoney(v){return '₹ '+new Intl.NumberFormat('en-IN',{maximumFractionDigits:0}).format(Math.round(v));} /* state dropdown */ function buildStateSel(){ var s=$('stateSel'); STATE_BIGHA.forEach(function(b){ if(b.sqft===0)return; var o=document.createElement('option'); o.value=b.id; o.textContent=b.st+' — '+b.rg+' ('+b.sqft.toLocaleString('en-IN')+' sq ft)'; s.appendChild(o); }); } function onStateChange(){ var v=$('stateSel').value; var b=STATE_BIGHA.find(function(x){return x.id===v;}); if(b){ customBigha=b.sqft; lcFrom='bgRP'; $('stateNote').textContent=(lcLang==='hi'?'चयनित: ':'Selected: ')+b.st+' · '+b.rg+' — '+b.note; } else { customBigha=null; $('stateNote').textContent=''; } sync(); } /* converter render */ function renderChips(){ var c=$('lcChips');c.innerHTML=''; CHIPS.forEach(function(id){ var u=UNITS.find(function(x){return x.id===id;});if(!u)return; var el=document.createElement('button'); el.className='lc-chip'+(id===lcFrom?' lc-on':''); el.textContent=U(u).s||U(u).n; el.onclick=function(){lastUnit=lcFrom;lcFrom=id;sync();}; c.appendChild(el); }); } function renderResults(){ var t=T(); var amt=parseFloat(($('lcAmount').value||'').replace(/,/g,'')); var valid=isFinite(amt);var base=valid?amt*factor(lcFrom):0; var box=$('lcResults');box.innerHTML=''; GROUPS.forEach(function(grp){ var items=UNITS.filter(function(u){return u.g===grp;}); if(!items.length)return; var lab=document.createElement('div');lab.className='lc-grp-label';lab.textContent=t.groups[grp];box.appendChild(lab); var list=document.createElement('div');list.className='lc-res-list'; items.forEach(function(u){ var out=valid?base/factor(u.id):0; var info=U(u); var row=document.createElement('div'); row.className='lc-row'+(u.id===lcFrom?' lc-src':''); var tag=u.id===lcFrom?'
'+t.fromTag+'
':''; row.innerHTML='
'+info.n+'
'+(info.note||'')+'
'+fmt(out)+'
'+(info.s||info.n)+tag+'
'; row.onclick=function(){copy(fmt(out)+' '+info.n);}; list.appendChild(row); }); box.appendChild(list); }); } function renderOpts(filter){ var t=T();filter=(filter||'').toLowerCase(); var box=$('lcUnitOpts');box.innerHTML=''; GROUPS.forEach(function(grp){ var items=UNITS.filter(function(u){var i=U(u);return u.g===grp&&(i.n.toLowerCase().indexOf(filter)>-1||(i.note||'').toLowerCase().indexOf(filter)>-1);}); if(!items.length)return; var lab=document.createElement('div');lab.className='lc-grp-label';lab.textContent=t.groups[grp];box.appendChild(lab); items.forEach(function(u){ var i=U(u);var o=document.createElement('div'); o.className='lc-opt'+(u.id===lcFrom?' lc-sel':''); o.innerHTML='
'+i.n+'
'+(i.note||'')+'
✓
'; o.onclick=function(){lastUnit=lcFrom;lcFrom=u.id;closeModal();sync();}; box.appendChild(o); }); }); } function applyText(){ var t=T(); $('lcEnterLabel').textContent=t.enterArea;$('lcFromLabel').textContent=t.from; $('lcConvertsTo').textContent=t.convertsTo; if($('lcTapCopy'))$('lcTapCopy').textContent=t.tapCopy; if($('copyAllLabel'))$('copyAllLabel').textContent=t.copyAll; $('lcChooseUnit').textContent=t.chooseUnit;$('lcSearch').placeholder=t.searchPh; // sync language dropdowns if($('langDD'))$('langDD').value=lcLang; if($('langDDc'))$('langDDc').value=lcLang; // calculator labels if($('crLabel')){$('crLabel').textContent=t.calcArea;$('crUnit').textContent=t.sqFeet;$('calcPdfLabel').textContent=t.pdf;} document.querySelectorAll('[data-ct]').forEach(function(el){ var k=el.getAttribute('data-ct');el.textContent=t[k]||el.textContent; }); // new feature labels if($('convPdfLabel'))$('convPdfLabel').textContent=t.pdf; if($('convShareLabel'))$('convShareLabel').textContent=t.share; if($('calcShareLabel'))$('calcShareLabel').textContent=t.share; if($('priceTitle'))$('priceTitle').textContent=t.priceTitle; if($('priceHintTxt'))$('priceHintTxt').textContent=t.priceHint; if($('histTitle'))$('histTitle').textContent=t.histTitle; if($('histClear'))$('histClear').textContent=t.histClear; if($('splitTitle'))$('splitTitle').textContent=t.splitTitle; if($('splitLabel'))$('splitLabel').textContent=t.parts; if($('srSub'))$('srSub').textContent=t.eachPart; if($('copyAllLabel'))$('copyAllLabel').textContent=t.copyAll; if($('emiTitle'))$('emiTitle').textContent=t.emiTitle; if($('emiLoanLbl'))$('emiLoanLbl').textContent=t.emiLoan; if($('emiRateLbl'))$('emiRateLbl').textContent=t.emiRate; if($('emiYearsLbl'))$('emiYearsLbl').textContent=t.emiYears; if($('emiHintTxt'))$('emiHintTxt').textContent=t.emiHint; buildPriceUnits();calcPrice();renderHistory();calcSplit();if(typeof calcEMI==='function')calcEMI(); } function setLcLang(l){lcLang=l;try{localStorage.setItem('lc_lang',l);}catch(e){}applyText();onStateChange();sync();renderCalcFields();drawShape();doCalc();} function sync(){ var u=UNITS.find(function(x){return x.id===lcFrom;}); $('lcUnitName').textContent=u?U(u).n:''; $('lcClr').classList.toggle('lc-show',!!$('lcAmount').value); renderChips();renderResults(); if(typeof calcPrice==='function')calcPrice(); } function openModal(){$('lcModalBg').classList.add('lc-open');$('lcModal').classList.add('lc-open');$('lcSearch').value='';renderOpts('');} function closeModal(){$('lcModalBg').classList.remove('lc-open');$('lcModal').classList.remove('lc-open');} var toastT; function toast(m){var t=$('lcToast');t.textContent=m;t.classList.add('lc-show');clearTimeout(toastT);toastT=setTimeout(function(){t.classList.remove('lc-show');},1600);} function copy(text){if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(text).then(function(){toast(T().copied+' '+text);},function(){toast(T().copied);});}else{toast(T().copied);}} $('lcAmount').addEventListener('input',function(){this.value=this.value.replace(/[^0-9.]/g,'').replace(/(\..*)\./g,'$1');sync();}); $('lcClr').onclick=function(){$('lcAmount').value='';sync();$('lcAmount').focus();}; $('lcUnitSel').onclick=openModal; /* ════════════════ MODE ════════════════ */ function setMode(m){ lcMode=m; $('tabConv').classList.toggle('on',m==='conv'); $('tabCalc').classList.toggle('on',m==='calc'); $('panelConv').classList.toggle('on',m==='conv'); $('panelCalc').classList.toggle('on',m==='calc'); } /* ════════════════ AREA CALCULATOR ════════════════ */ var shape='rect'; var UNIT_FT={ft:1,m:3.28084,yd:3,in:1/12,link:0.66}; // linear → feet var UNIT_KEYS=['ft','m','yd','in','link']; // each shape stores fields as {tkey, val, u} (tkey = translation key for label) var SHAPE_DEF={ rect:[{tkey:'length',val:'',u:'ft'},{tkey:'width',val:'',u:'ft'}], tri:[{tkey:'base',val:'',u:'ft'},{tkey:'height',val:'',u:'ft'}], irr:[{tkey:'side',val:'',u:'ft'},{tkey:'side',val:'',u:'ft'},{tkey:'side',val:'',u:'ft'},{tkey:'side',val:'',u:'ft'}] }; function curFields(){return SHAPE_DEF[shape];} function fieldLabel(f,i){ var t=T(); if(shape==='irr')return t.side+' '+(i+1); return t[f.tkey]||f.tkey; } function setShape(s){ shape=s; document.querySelectorAll('.calc-shape').forEach(function(b){b.classList.toggle('on',b.dataset.shape===s);}); renderCalcFields();drawShape();doCalc(); } function unitOptions(sel){ var t=T(); return UNIT_KEYS.map(function(u){return'
'+t.units[u]+'
';}).join(''); } function renderCalcFields(){ var box=$('calcFields');box.innerHTML='';var t=T(); var fields=curFields(); fields.forEach(function(f,i){ var div=document.createElement('div');div.className='calc-field'; var delBtn=(shape==='irr'&&fields.length>3)?'
✕
':''; div.innerHTML='
'+fieldLabel(f,i)+'
' +'
' +'
' +'
'+unitOptions(f.u)+'
' +delBtn+'
'; box.appendChild(div); }); if(shape==='irr'){ var addWrap=document.createElement('div'); addWrap.innerHTML='
'+t.addSide+'
'; box.appendChild(addWrap); $('calcHint').innerHTML=t.hintPoly; } else { $('calcHint').innerHTML=(shape==='rect'?t.hintRect:t.hintTri); } } function updField(i,v){curFields()[i].val=v;drawShape();doCalc();} function updFieldU(i,v){curFields()[i].u=v;doCalc();} function addSide(){SHAPE_DEF.irr.push({tkey:'side',val:'',u:'ft'});renderCalcFields();drawShape();doCalc();} function delSide(i){if(SHAPE_DEF.irr.length>3){SHAPE_DEF.irr.splice(i,1);renderCalcFields();drawShape();doCalc();}} // value in feet for field i function vf(i){var f=curFields()[i];return (parseFloat(f.val)||0)*(UNIT_FT[f.u]||1);} /* ── VISUAL SHAPE DIAGRAM ── */ function drawShape(){ var box=$('calcVisual');var t=T(); var GO='#9A7B2E',FO='#2A5C40',FILL='rgba(42,92,64,0.16)',LBL='#6B4F3A'; var svg=''; function dim(f,i){var v=f.val||'0';return v+' '+t.units[f.u];} if(shape==='rect'){ var f=curFields(); svg='
' +'
'+t.length+': '+dim(f[0])+'
' +'
'+t.width+': '+dim(f[1])+'
' +'
' +'
'; } else if(shape==='tri'){ var f=curFields(); svg='
' +'
'+t.base+': '+dim(f[0])+'
' +'
' +'
'+t.height+': '+dim(f[1])+'
' +'
'; } else { // polygon: draw regular n-gon, label each side var f=curFields();var n=f.length;var cx=150,cy=92,r=64; var pts=[];for(var k=0;k
'; for(var k=0;k
' +'
'+(k+1)+'
'; } svg+='
'+n+' '+t.side.toLowerCase()+'s
'; } box.innerHTML=svg; } // cyclic polygon area from side lengths (feet) function cyclicArea(sides){ var n=sides.length; if(n<3)return 0; for(var k=0;k
=rest)return 0; function ang(R){var t=0;for(var k=0;k
1)x=1;t+=2*Math.asin(x);}return t;} var lo=mx/2+1e-9, hi=mx*100, R=lo; for(var it=0;it<100;it++){ R=(lo+hi)/2;var a=ang(R); if(a>2*Math.PI)lo=R;else hi=R; } var area=0; for(var k=0;k
1)x=1;var ca=2*Math.asin(x);area+=0.5*R*R*Math.sin(ca);} return area; } function doCalc(){ var areaFt=0; if(shape==='rect'){ areaFt=vf(0)*vf(1); } else if(shape==='tri'){ areaFt=0.5*vf(0)*vf(1); } else if(shape==='irr'){ var ft=curFields().map(function(_,i){return vf(i);}); if(ft.length===3){ var a=ft[0],b=ft[1],c=ft[2],s=(a+b+c)/2,p=(s-a)*(s-b)*(s-c); areaFt=p>0?Math.sqrt(p):0; } else { areaFt=cyclicArea(ft); } } $('crVal').textContent=areaFt>0?fmt(areaFt):'—'; var alts=$('crAlts'); if(areaFt>0){ var acre=areaFt/43560, hect=areaFt/107639.104, gaj=areaFt/9, bigha=areaFt/27225; alts.innerHTML= '
'+fmt(gaj)+'
Gaj
'+ '
'+fmt(acre)+'
Acre
'+ '
'+fmt(bigha)+'
Bigha (Raj)
'+ '
'+fmt(hect)+'
Hectare
'; } else alts.innerHTML=''; if(typeof calcSplit==='function')calcSplit(); } /* ════════════════ PDF (with watermark) ════════════════ */ function pdfHeader(doc,W,title){ // green band doc.setFillColor(15,36,25);doc.rect(0,0,W,30,'F'); doc.setTextColor(200,169,81);doc.setFont('helvetica','bold');doc.setFontSize(18); doc.text('AgriZameen',14,14); doc.setTextColor(232,212,139);doc.setFontSize(9);doc.setFont('helvetica','normal'); doc.text('Invest in Land · Grow Your Future',14,21); doc.setTextColor(232,212,139);doc.setFontSize(11);doc.setFont('helvetica','bold'); doc.text(title,W-14,14,{align:'right'}); doc.setFontSize(8);doc.setFont('helvetica','normal');doc.setTextColor(180,200,180); doc.text('www.agrizameen.com',W-14,20,{align:'right'}); } function pdfWatermark(doc,W,H){ doc.saveGraphicsState&&doc.saveGraphicsState(); try{ doc.setGState(new doc.GState({opacity:0.08})); }catch(e){} doc.setTextColor(26,60,42);doc.setFont('helvetica','bold');doc.setFontSize(60); // diagonal watermark text repeated for(var y=70;y
H-30){doc.addPage();pdfWatermark(doc,W,H);y=20;} doc.setDrawColor(232,223,208);doc.line(14,y+1,W-14,y+1); doc.setTextColor(20,52,42);doc.setFont('helvetica',u.id===lcFrom?'bold':'normal');doc.setFontSize(9.5); doc.text(u.en.n,18,y); doc.setTextColor(u.id===lcFrom?154:30,u.id===lcFrom?123:52,u.id===lcFrom?46:42); doc.setFont('helvetica','bold'); doc.text(fmt(out)+' '+(u.en.s||''),W-18,y,{align:'right'}); y+=8; }); pdfFooter(doc,W,H); doc.save('AgriZameen-Land-Conversion.pdf'); toast('PDF downloaded'); } function downloadCalcPDF(){ var doc=getDoc();var W=210,H=297; pdfHeader(doc,W,'Plot Area Report'); pdfWatermark(doc,W,H); doc.setTextColor(15,36,25);doc.setFont('helvetica','bold');doc.setFontSize(13); doc.text('Shape: '+({rect:'Rectangle',tri:'Triangle',irr:'Polygon ('+curFields().length+' sides)'})[shape],14,44); doc.setFontSize(9);doc.setFont('helvetica','normal');doc.setTextColor(107,79,58); var y=54; var ULAB={ft:'Feet',m:'Meter',yd:'Yard',in:'Inch',link:'Link'}; curFields().forEach(function(f){ doc.text(f.label+': '+(f.val||0)+' '+(ULAB[f.u]||f.u),18,y);y+=7; }); doc.setFontSize(8);doc.setTextColor(120,120,120);doc.text('Generated: '+new Date().toLocaleString('en-IN'),18,y+2); y+=14; var areaFt=parseFloat(($('crVal').textContent||'0').replace(/,/g,''))||0; doc.setFillColor(15,36,25);doc.roundedRect(14,y,W-28,30,3,3,'F'); doc.setTextColor(200,169,81);doc.setFontSize(9);doc.text('CALCULATED AREA',W/2,y+10,{align:'center'}); doc.setTextColor(232,212,139);doc.setFont('helvetica','bold');doc.setFontSize(22); doc.text($('crVal').textContent+' sq ft',W/2,y+24,{align:'center'}); y+=40; // full unit value table doc.setFillColor(26,60,42);doc.rect(14,y-5,W-28,8,'F'); doc.setTextColor(232,212,139);doc.setFont('helvetica','bold');doc.setFontSize(9); doc.text('Area in different units',18,y);doc.text('Value',W-18,y,{align:'right'}); y+=8; UNITS.forEach(function(u){ var out=areaFt/factor(u.id); if(y>H-30){doc.addPage();pdfWatermark(doc,W,H);y=20;} doc.setDrawColor(232,223,208);doc.line(14,y+1,W-14,y+1); doc.setTextColor(20,52,42);doc.setFont('helvetica','normal');doc.setFontSize(9.5); doc.text(u.en.n,18,y); doc.setTextColor(30,52,42);doc.setFont('helvetica','bold'); doc.text(fmt(out)+' '+(u.en.s||''),W-18,y,{align:'right'}); y+=8; }); pdfFooter(doc,W,H); doc.save('AgriZameen-Plot-Area.pdf'); toast('PDF downloaded'); } /* ════════════════ NEW FEATURES ════════════════ */ /* — Dark mode — */ function toggleTheme(){ var on=document.body.classList.toggle('dark'); $('themeTog').textContent=on?'☀️':'🌙'; try{localStorage.setItem('lc_theme',on?'dark':'light');}catch(e){} } /* — Swap units (from ⇄ a chosen target) — */ var lastUnit='sqft'; var lastTotal=0; function swapUnit(){ var tmp=lcFrom; lcFrom=lastUnit; lastUnit=tmp; // also convert the amount so the displayed value stays equivalent var amt=parseFloat(($('lcAmount').value||'').replace(/,/g,'')); if(isFinite(amt)){ var base=amt*factor(tmp); var nv=base/factor(lcFrom); $('lcAmount').value=parseFloat(nv.toFixed(6)); } sync(); } /* — Price calculator — */ function buildPriceUnits(){ var sel=$('priceUnit');if(!sel)return; var cur=sel.value; sel.innerHTML=UNITS.map(function(u){return'
'+T().perUnit+' '+U(u).n+'
';}).join(''); if(cur)sel.value=cur; else sel.value=lcFrom; } function calcPrice(){ var t=T();var rate=parseFloat(($('priceRate').value||'').replace(/,/g,'')); var unitId=$('priceUnit')?$('priceUnit').value:lcFrom; var amt=parseFloat(($('lcAmount').value||'').replace(/,/g,'')); var wrap=$('priceTotalWrap');var hint=$('priceHint'); if(!isFinite(rate)||rate<=0||!isFinite(amt)){if(wrap)wrap.style.display='none';if(hint)hint.style.display='block';lastTotal=0;return;} // remember rate per unit try{localStorage.setItem('lc_rate_'+unitId,rate);}catch(e){} var baseFt=amt*factor(lcFrom); var areaInPriceUnit=baseFt/factor(unitId); var total=areaInPriceUnit*rate;lastTotal=total; if(wrap){ wrap.style.display='block';if(hint)hint.style.display='none'; $('ptLabel').textContent=t.totalValue; var ind=fmtIndian(total); $('ptVal').textContent=fmtMoney(total)+(ind?' ('+ind+')':''); var fu=UNITS.find(function(x){return x.id===unitId;}); $('ptSub').innerHTML=fmt(areaInPriceUnit)+' '+(fu?U(fu).n:'')+' × ₹'+new Intl.NumberFormat('en-IN').format(rate)+' ·
→ EMI
'; wrap.onclick=function(){if($('emiLoan')){$('emiLoan').value=Math.round(total);calcEMI();$('emiLoan').scrollIntoView({behavior:'smooth',block:'center'});}}; } } // restore last-used rate when the price unit changes function restoreRate(){ var unitId=$('priceUnit')?$('priceUnit').value:lcFrom; try{var r=localStorage.getItem('lc_rate_'+unitId);if(r&&!$('priceRate').value)$('priceRate').value=r;}catch(e){} calcPrice(); } /* — History (on-device) — */ var HIST_KEY='lc_history'; function getHistory(){try{return JSON.parse(localStorage.getItem(HIST_KEY)||'[]');}catch(e){return [];}} function pushHistory(entry){ try{ var h=getHistory();h.unshift(entry);h=h.slice(0,8); localStorage.setItem(HIST_KEY,JSON.stringify(h));renderHistory(); }catch(e){} } function renderHistory(){ var box=$('histCard');if(!box)return;var t=T();var h=getHistory(); if(!h.length){box.innerHTML='
'+t.histEmpty+'
';return;} box.innerHTML=h.map(function(e,i){ return'
'+e.txt+'
✕
'; }).join(''); } function replayHistory(i){var e=getHistory()[i];if(!e)return;lcFrom=e.from;$('lcAmount').value=e.amt;if(e.state){$('stateSel').value=e.state;onStateChange();}else sync();setMode('conv');window.scrollTo(0,0);} function delHistory(i){var h=getHistory();h.splice(i,1);try{localStorage.setItem(HIST_KEY,JSON.stringify(h));}catch(e){}renderHistory();} function clearHistory(){try{localStorage.removeItem(HIST_KEY);}catch(e){}renderHistory();} function recordConv(){ var amt=parseFloat(($('lcAmount').value||'').replace(/,/g,''));if(!isFinite(amt))return; var fu=UNITS.find(function(x){return x.id===lcFrom;}); var base=amt*factor(lcFrom); var gajV=fmt(base/9), bighaV=fmt(base/(customBigha||27225)); var txt=amt+' '+(fu?U(fu).n:'')+' = '+gajV+' Gaj · '+bighaV+' Bigha'; pushHistory({txt:txt,amt:amt,from:lcFrom,state:$('stateSel').value||''}); } /* — Share via WhatsApp — */ function shareConv(){ var amt=parseFloat(($('lcAmount').value||'').replace(/,/g,'')); var fu=UNITS.find(function(x){return x.id===lcFrom;}); if(!isFinite(amt)){toast(T().copied);return;} var base=amt*factor(lcFrom); var lines=['*AgriZameen — Land Conversion*','',amt+' '+(fu?U(fu).n:'')+' =','']; UNITS.forEach(function(u){lines.push('• '+fmt(base/factor(u.id))+' '+U(u).n);}); lines.push('','via www.agrizameen.com'); recordConv(); window.open('https://wa.me/?text='+encodeURIComponent(lines.join('\n')),'_blank'); } function shareCalc(){ var areaFt=parseFloat(($('crVal').textContent||'0').replace(/,/g,''))||0; if(areaFt<=0){toast(T().copied);return;} var lines=['*AgriZameen — Plot Area*','', fmt(areaFt)+' sq ft','= '+fmt(areaFt/9)+' Gaj','= '+fmt(areaFt/43560)+' Acre', '= '+fmt(areaFt/(customBigha||27225))+' Bigha','= '+fmt(areaFt/107639.104)+' Hectare','', 'via www.agrizameen.com']; window.open('https://wa.me/?text='+encodeURIComponent(lines.join('\n')),'_blank'); } /* — Split tool — */ function calcSplit(){ var t=T();var n=parseInt($('splitN')?$('splitN').value:'0',10); var areaFt=parseFloat(($('crVal').textContent||'0').replace(/,/g,''))||0; if(!n||n<2||areaFt<=0){if($('srVal'))$('srVal').textContent='—';return;} var each=areaFt/n; if($('srVal'))$('srVal').textContent=fmt(each)+' sq ft'; if($('srSub'))$('srSub').textContent=t.eachPart+' — '+fmt(each/9)+' Gaj · '+fmt(each/(customBigha||27225))+' Bigha · '+fmt(each/43560)+' Acre'; } /* hook history recording into PDF + copy */ var _origCopy=copy; copy=function(text){_origCopy(text);recordConv();}; /* — EMI / Loan calculator — */ function calcEMI(){ var t=T(); var P=parseFloat(($('emiLoan').value||'').replace(/,/g,'')); var annual=parseFloat(($('emiRate').value||'').replace(/,/g,'')); var years=parseFloat(($('emiYears').value||'').replace(/,/g,'')); var wrap=$('emiWrap');var hint=$('emiHint'); if(!isFinite(P)||P<=0||!isFinite(annual)||annual<0||!isFinite(years)||years<=0){ if(wrap)wrap.style.display='none';if(hint)hint.style.display='block';return; } var n=Math.round(years*12); var r=annual/12/100; var emi; if(r===0){emi=P/n;} else{var f=Math.pow(1+r,n);emi=P*r*f/(f-1);} var totalPay=emi*n;var interest=totalPay-P; if(wrap){ wrap.style.display='block';if(hint)hint.style.display='none'; $('emiMonthlyLbl').textContent=t.emiMonthly; $('emiVal').textContent=fmtMoney(emi); var sub=t.emiSub.replace('{T}',fmtMoney(totalPay)+(fmtIndian(totalPay)?' ('+fmtIndian(totalPay)+')':'')).replace('{N}',n).replace('{I}',fmtMoney(interest)); $('emiSub').textContent=sub; } } /* — Copy all conversion results — */ function copyAll(){ var amt=parseFloat(($('lcAmount').value||'').replace(/,/g,'')); var fu=UNITS.find(function(x){return x.id===lcFrom;}); if(!isFinite(amt)){toast(T().copied);return;} var base=amt*factor(lcFrom); var lines=[amt+' '+(fu?U(fu).n:'')+' =']; UNITS.forEach(function(u){lines.push(fmt(base/factor(u.id))+' '+U(u).n);}); lines.push('— via agrizameen.com'); var text=lines.join('\n'); if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(text).then(function(){toast(T().allCopied);},function(){toast(T().allCopied);});} else{toast(T().allCopied);} recordConv(); } /* — Onboarding (first visit) — */ function showOnboarding(){ try{if(localStorage.getItem('lc_onboarded')==='1')return;}catch(e){} var t=T(); if($('onbTitle'))$('onbTitle').textContent=t.onbTitle; if($('onbBtn'))$('onbBtn').textContent=t.onbBtn; if($('onbList')&&t.onb)$('onbList').innerHTML=t.onb.map(function(x){return'
'+x+'
';}).join(''); if($('onbBg'))$('onbBg').classList.add('show'); } function closeOnb(){ if($('onbBg'))$('onbBg').classList.remove('show'); try{localStorage.setItem('lc_onboarded','1');}catch(e){} } /* ════════════════ INIT ════════════════ */ try{var sv=localStorage.getItem('lc_lang');if(sv&&I18N[sv])lcLang=sv;}catch(e){} try{if(localStorage.getItem('lc_theme')==='dark'){document.body.classList.add('dark');}}catch(e){} buildStateSel(); buildPriceUnits(); applyText(); renderCalcFields(); drawShape(); doCalc(); sync(); renderHistory(); calcEMI(); if(document.body.classList.contains('dark')&&$('themeTog'))$('themeTog').textContent='☀️'; showOnboarding();