Commit 97da8f59fef89b8edd185a0f68325f166a52bc1f

Authored by Edmar Moretti
1 parent f4763544

Correção no cálculo de distâncias. O algoritimo de cálculo foi substituido pelo …

…existente em http://www.movable-type.co.uk/scripts/latlong.html
classesjs/classe_calculo.js
@@ -293,49 +293,36 @@ i3GEO.calculo = { @@ -293,49 +293,36 @@ i3GEO.calculo = {
293 Function: distancia 293 Function: distancia
294 294
295 Calcula a distância entre dois pontos. 295 Calcula a distância entre dois pontos.
296 -  
297 - Baseado no site http://www.wcrl.ars.usda.gov/cec/java/lat-long.htm  
298 296
  297 + Baseado no site http://www.movable-type.co.uk/scripts/latlong.html (indicado por louriques@yahoo.com.br)
  298 +
  299 + Em versões anteriores utilizava-se o cálculo proposto em http://www.wcrl.ars.usda.gov/cec/java/lat-long.htm
  300 +
299 Parameters: 301 Parameters:
300 302
301 - lga {Numeric} - x inicial. 303 + lon1 {Numeric} - x inicial.
302 304
303 - lta {Numeric} - y inicial 305 + lat1 {Numeric} - y inicial
304 306
305 - lgb {Numeric} - x final 307 + lon2 {Numeric} - x final
306 308
307 - ltb {Numeric} - y final 309 + lat2 {Numeric} - y final
308 310
309 Return: 311 Return:
310 312
311 Type: 313 Type:
312 {Numeric} 314 {Numeric}
313 */ 315 */
314 - distancia: function(lga,lta,lgb,ltb){  
315 - try{  
316 - var er = 6366.707;  
317 - var radlat1 = Math.PI * lta/180;  
318 - var radlat2 = Math.PI * ltb/180;  
319 - var radlong1 = Math.PI * lga/180;  
320 - var radlong2 = Math.PI * lgb/180;  
321 - if (lta > 0) {radlat1=Math.PI/2-radlat1;}  
322 - if (lta < 0) {radlat1=Math.PI/2+radlat1;}  
323 - if (lga < 0) {radlong1=Math.PI*2-radlong1;}  
324 - if (ltb > 0) {radlat2=Math.PI/2-radlat2;}  
325 - if (ltb < 0) {radlat2=Math.PI/2+radlat2;}  
326 - if (lgb < 0) {radlong2=Math.PI*2-radlong2;}  
327 - var x1 = er * Math.cos(radlong1)*Math.sin(radlat1);  
328 - var y1 = er * Math.sin(radlong1)*Math.sin(radlat1);  
329 - var z1 = er * Math.cos(radlat1);  
330 - var x2 = er * Math.cos(radlong2)*Math.sin(radlat2);  
331 - var y2 = er * Math.sin(radlong2)*Math.sin(radlat2);  
332 - var z2 = er * Math.cos(radlat2);  
333 - var d = Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2));  
334 - //side, side, side, law of cosines and arccos  
335 - var theta = Math.acos((er*er+er*er-d*d)/(2*er*er));  
336 - return theta*er;  
337 - }  
338 - catch(e){return (0);} 316 + distancia: function(lon1,lat1,lon2,lat2){
  317 + var R = 6371; // km
  318 + var dLat = ((lat2-lat1))* Math.PI / 180;
  319 + var dLon = ((lon2-lon1)) * Math.PI / 180;
  320 + var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
  321 + Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *
  322 + Math.sin(dLon/2) * Math.sin(dLon/2);
  323 + var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
  324 + var d = R * c;
  325 + return d;
339 }, 326 },
340 /* 327 /*
341 Function: rect2ext 328 Function: rect2ext
classesjs/compactados/classe_calculo_compacto.js
1 -if(typeof(i3GEO)=='undefined'){i3GEO=new Array()}i3GEO.calculo={dms2dd:function(cd,cm,cs){try{var sinal='positivo';if(cd<0){cd=cd*-1;sinal='negativo'}spm=cs/3600;mpg=cm/60;var dd=(cd*1)+(mpg*1)+(spm*1);if(sinal=='negativo'){dd=dd*-1}return(dd)}catch(e){return(0)}},dd2tela:function(vx,vy,docmapa,ext,cellsize){try{if(i3GEO.interface.ATUAL=="googlemaps"){var pos=i3GEO.util.pegaPosicaoObjeto($i(i3GEO.interface.IDCORPO));var latlng=new GLatLng(vy,vx);var xyn=i3GeoMap.fromLatLngToContainerPixel(latlng);var xy=new Array();return[(xyn.x)+pos[0],(xyn.y)+pos[1]]}if(arguments.length==3){var ext=i3GEO.parametros.mapexten;var cellsize=i3GEO.parametros.pixelsize}if(arguments.length==4){var cellsize=i3GEO.parametros.pixelsize}if(!docmapa){var docmapa=window.document}var dc=docmapa;var pos=i3GEO.util.pegaPosicaoObjeto(dc);var imgext=ext;var imgext=imgext.split(" ");vx=(vx*1)-(imgext[0]*1);vy=(vy*-1)+(imgext[3]*1);c=cellsize*1;return[(vx/c)+pos[0],(vy/c)+pos[1]]}catch(e){return(new Array())}},dd2dms:function(x,y){var m=0;var s=0;var dx=parseInt(x);if(dx>0){var restod=x-dx}if(dx<0){restod=(x*-1)-(dx*-1)}dx=dx;if(restod!=0){var mm=restod*60;var m=parseInt(restod*60);var restos=mm-m;var mx=m;if(restos!=0){var s=restos*60;var s=(s+"_").substring(0,5);var sx=s}else{s="00.00"}}else{var mx="00";var sx="00.00"}if(m.length==2){m="0"+m+""}if(s*1<10){s="0"+s}var xv=dx+" "+mx+" "+sx;var m=0;var s=0;var dy=parseInt(y);if(dy>0){var restod=y-dy}if(dy<0){var restod=(y*-1)-(dy*-1)}dy=dy;if(restod!=0){var mm=restod*60;var m=parseInt(restod*60);var restos=mm-m;var my=m;if(restos!=0){var s=restos*60;s=(s+"_").substring(0,5);var sy=s}else{var s="00.00"}}else{var my="00";var sy="00.00"}if(m.length==2){m="0"+m}if(s*1<10){s="0"+s}var yv=dy+" "+my+" "+sy;var res=new Array();res[0]=xv;res[1]=yv;return res},tela2dd:function(xfign,yfign,g_celula,imgext){try{if(navm){xfign=xfign-2.2;yfign=yfign-2.7}else{xfign=xfign-0.12;yfign=yfign-1.05}var nx=g_celula*xfign;var ny=g_celula*yfign;var amext=imgext.split(" ");var longdd=(amext[0]*1)+nx;var latdd=(amext[3]*1)-ny;var res=new Array();res[0]=longdd;res[1]=latdd;return(res)}catch(e){return(0)}},area:function(pontos,pixel){try{if(pontos.xpt.length>2){var $array_length=pontos.xpt.length;pontos.xtela.push(pontos.xtela[0]);pontos.ytela.push(pontos.ytela[0]);pontos.xtela.push(pontos.xtela[0]);pontos.ytela.push(pontos.ytela[1]);var $polygon_area=0;for(var $i=0;$i<=$array_length;$i++){$polygon_area+=((pontos.xtela[$i]*pontos.ytela[$i+1])-(pontos.ytela[$i]*pontos.xtela[$i+1]))}$polygon_area=Math.abs($polygon_area)/2}else{$polygon_area="Sao necessarios pelo menos tres pontos para o calculo"}return $polygon_area*pixel}catch(e){return(0)}},distancia:function(lga,lta,lgb,ltb){try{var er=6366.707;var radlat1=Math.PI*lta/180;var radlat2=Math.PI*ltb/180;var radlong1=Math.PI*lga/180;var radlong2=Math.PI*lgb/180;if(lta>0){radlat1=Math.PI/2-radlat1}if(lta<0){radlat1=Math.PI/2+radlat1}if(lga<0){radlong1=Math.PI*2-radlong1}if(ltb>0){radlat2=Math.PI/2-radlat2}if(ltb<0){radlat2=Math.PI/2+radlat2}if(lgb<0){radlong2=Math.PI*2-radlong2}var x1=er*Math.cos(radlong1)*Math.sin(radlat1);var y1=er*Math.sin(radlong1)*Math.sin(radlat1);var z1=er*Math.cos(radlat1);var x2=er*Math.cos(radlong2)*Math.sin(radlat2);var y2=er*Math.sin(radlong2)*Math.sin(radlat2);var z2=er*Math.cos(radlat2);var d=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2));var theta=Math.acos((er*er+er*er-d*d)/(2*er*er));return theta*er}catch(e){return(0)}},rect2ext:function(idrect,mapext,pixel){eval('pix = parseInt(document.getElementById("'+idrect+'").style.'+g_tipoleft+")");eval('piy = parseInt(document.getElementById("'+idrect+'").style.'+g_tipotop+")");if($i(idrect)){var bx=$i(idrect);var bxs=bx.style}else{alert("Box nao encontrado");return}var pos=i3GEO.util.pegaPosicaoObjeto($i("img"));var xfig0=parseInt(bxs.width)-pos[0];var yfig0=parseInt(bxs.height)-pos[1];var xfig=pix+(parseInt(bxs.width))-pos[0];var yfig=piy+(parseInt(bxs.height))-pos[1];var amext=mapext.split(" ");var dx=((amext[0]*-1)-(amext[2]*-1))/-1;var dy=((amext[1]*1)-(amext[3]*1))/-1;if(dy<0)dy=dy*-1;var nx=pixel*xfig;var ny=pixel*yfig;var x1=(amext[0]*1)+nx;var y1=(amext[3]*1)-ny;var xfig=pix-pos[0];var yfig=piy-pos[1];if(dy<0)dy=dy*-1;var nx=pixel*xfig;var ny=pixel*yfig;var x2=(amext[0]*1)+nx;var y2=(amext[3]*1)-ny;var v=x2+" "+y2+" "+x1+" "+y1;var res=new Array(v,x1,y1,x2,y2);return(res)},ext2rect:function(idrect,mapext,boxext,pixel,documento){var rectbox=boxext.split(" ");var rectmap=mapext.split(" ");var xyMin=i3GEO.calculo.dd2tela(rectbox[0],rectbox[1],documento,boxext,pixel);var xyMax=i3GEO.calculo.dd2tela(rectbox[2],rectbox[3],documento,boxext,pixel);var w=xyMax[0]-xyMin[0];var h=xyMin[1]-xyMax[1];var tl=i3GEO.calculo.dd2tela(rectbox[0],rectbox[3],documento,mapext,pixel);var pos=i3GEO.util.pegaPosicaoObjeto(documento);var t=tl[1]-pos[1];var l=tl[0]-pos[0];var d="block";if($i(idrect)){var box=$i(idrect);box.style.width=w;box.style.height=h;box.style.top=t+"px";box.style.left=l+"px";box.style.display=d}return new Array(w,h,xyMax[1],xyMin[0])}};  
2 \ No newline at end of file 1 \ No newline at end of file
  2 +if(typeof(i3GEO)=='undefined'){i3GEO=new Array()}i3GEO.calculo={dms2dd:function(cd,cm,cs){try{var sinal='positivo';if(cd<0){cd=cd*-1;sinal='negativo'}spm=cs/3600;mpg=cm/60;var dd=(cd*1)+(mpg*1)+(spm*1);if(sinal=='negativo'){dd=dd*-1}return(dd)}catch(e){return(0)}},dd2tela:function(vx,vy,docmapa,ext,cellsize){try{if(i3GEO.interface.ATUAL=="googlemaps"){var pos=i3GEO.util.pegaPosicaoObjeto($i(i3GEO.interface.IDCORPO));var latlng=new GLatLng(vy,vx);var xyn=i3GeoMap.fromLatLngToContainerPixel(latlng);var xy=new Array();return[(xyn.x)+pos[0],(xyn.y)+pos[1]]}if(arguments.length==3){var ext=i3GEO.parametros.mapexten;var cellsize=i3GEO.parametros.pixelsize}if(arguments.length==4){var cellsize=i3GEO.parametros.pixelsize}if(!docmapa){var docmapa=window.document}var dc=docmapa;var pos=i3GEO.util.pegaPosicaoObjeto(dc);var imgext=ext;var imgext=imgext.split(" ");vx=(vx*1)-(imgext[0]*1);vy=(vy*-1)+(imgext[3]*1);c=cellsize*1;return[(vx/c)+pos[0],(vy/c)+pos[1]]}catch(e){return(new Array())}},dd2dms:function(x,y){var m=0;var s=0;var dx=parseInt(x);if(dx>0){var restod=x-dx}if(dx<0){restod=(x*-1)-(dx*-1)}dx=dx;if(restod!=0){var mm=restod*60;var m=parseInt(restod*60);var restos=mm-m;var mx=m;if(restos!=0){var s=restos*60;var s=(s+"_").substring(0,5);var sx=s}else{s="00.00"}}else{var mx="00";var sx="00.00"}if(m.length==2){m="0"+m+""}if(s*1<10){s="0"+s}var xv=dx+" "+mx+" "+sx;var m=0;var s=0;var dy=parseInt(y);if(dy>0){var restod=y-dy}if(dy<0){var restod=(y*-1)-(dy*-1)}dy=dy;if(restod!=0){var mm=restod*60;var m=parseInt(restod*60);var restos=mm-m;var my=m;if(restos!=0){var s=restos*60;s=(s+"_").substring(0,5);var sy=s}else{var s="00.00"}}else{var my="00";var sy="00.00"}if(m.length==2){m="0"+m}if(s*1<10){s="0"+s}var yv=dy+" "+my+" "+sy;var res=new Array();res[0]=xv;res[1]=yv;return res},tela2dd:function(xfign,yfign,g_celula,imgext){try{if(navm){xfign=xfign-2.2;yfign=yfign-2.7}else{xfign=xfign-0.12;yfign=yfign-1.05}var nx=g_celula*xfign;var ny=g_celula*yfign;var amext=imgext.split(" ");var longdd=(amext[0]*1)+nx;var latdd=(amext[3]*1)-ny;var res=new Array();res[0]=longdd;res[1]=latdd;return(res)}catch(e){return(0)}},area:function(pontos,pixel){try{if(pontos.xpt.length>2){var $array_length=pontos.xpt.length;pontos.xtela.push(pontos.xtela[0]);pontos.ytela.push(pontos.ytela[0]);pontos.xtela.push(pontos.xtela[0]);pontos.ytela.push(pontos.ytela[1]);var $polygon_area=0;for(var $i=0;$i<=$array_length;$i++){$polygon_area+=((pontos.xtela[$i]*pontos.ytela[$i+1])-(pontos.ytela[$i]*pontos.xtela[$i+1]))}$polygon_area=Math.abs($polygon_area)/2}else{$polygon_area="Sao necessarios pelo menos tres pontos para o calculo"}return $polygon_area*pixel}catch(e){return(0)}},distancia:function(lon1,lat1,lon2,lat2){var R=6371;var dLat=((lat2-lat1))*Math.PI/180;var dLon=((lon2-lon1))*Math.PI/180;var a=Math.sin(dLat/2)*Math.sin(dLat/2)+Math.cos(lat1*Math.PI/180)*Math.cos(lat2*Math.PI/180)*Math.sin(dLon/2)*Math.sin(dLon/2);var c=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));var d=R*c;return d},rect2ext:function(idrect,mapext,pixel){eval('pix = parseInt(document.getElementById("'+idrect+'").style.'+g_tipoleft+")");eval('piy = parseInt(document.getElementById("'+idrect+'").style.'+g_tipotop+")");if($i(idrect)){var bx=$i(idrect);var bxs=bx.style}else{alert("Box nao encontrado");return}var pos=i3GEO.util.pegaPosicaoObjeto($i("img"));var xfig0=parseInt(bxs.width)-pos[0];var yfig0=parseInt(bxs.height)-pos[1];var xfig=pix+(parseInt(bxs.width))-pos[0];var yfig=piy+(parseInt(bxs.height))-pos[1];var amext=mapext.split(" ");var dx=((amext[0]*-1)-(amext[2]*-1))/-1;var dy=((amext[1]*1)-(amext[3]*1))/-1;if(dy<0)dy=dy*-1;var nx=pixel*xfig;var ny=pixel*yfig;var x1=(amext[0]*1)+nx;var y1=(amext[3]*1)-ny;var xfig=pix-pos[0];var yfig=piy-pos[1];if(dy<0)dy=dy*-1;var nx=pixel*xfig;var ny=pixel*yfig;var x2=(amext[0]*1)+nx;var y2=(amext[3]*1)-ny;var v=x2+" "+y2+" "+x1+" "+y1;var res=new Array(v,x1,y1,x2,y2);return(res)},ext2rect:function(idrect,mapext,boxext,pixel,documento){var rectbox=boxext.split(" ");var rectmap=mapext.split(" ");var xyMin=i3GEO.calculo.dd2tela(rectbox[0],rectbox[1],documento,boxext,pixel);var xyMax=i3GEO.calculo.dd2tela(rectbox[2],rectbox[3],documento,boxext,pixel);var w=xyMax[0]-xyMin[0];var h=xyMin[1]-xyMax[1];var tl=i3GEO.calculo.dd2tela(rectbox[0],rectbox[3],documento,mapext,pixel);var pos=i3GEO.util.pegaPosicaoObjeto(documento);var t=tl[1]-pos[1];var l=tl[0]-pos[0];var d="block";if($i(idrect)){var box=$i(idrect);box.style.width=w;box.style.height=h;box.style.top=t+"px";box.style.left=l+"px";box.style.display=d}return new Array(w,h,xyMax[1],xyMin[0])}};
3 \ No newline at end of file 3 \ No newline at end of file
classesjs/i3geo_tudo_compacto.js
@@ -10249,49 +10249,36 @@ i3GEO.calculo = { @@ -10249,49 +10249,36 @@ i3GEO.calculo = {
10249 Function: distancia 10249 Function: distancia
10250 10250
10251 Calcula a distância entre dois pontos. 10251 Calcula a distância entre dois pontos.
10252 -  
10253 - Baseado no site http://www.wcrl.ars.usda.gov/cec/java/lat-long.htm  
10254 10252
  10253 + Baseado no site http://www.movable-type.co.uk/scripts/latlong.html (indicado por louriques@yahoo.com.br)
  10254 +
  10255 + Em versões anteriores utilizava-se o cálculo proposto em http://www.wcrl.ars.usda.gov/cec/java/lat-long.htm
  10256 +
10255 Parameters: 10257 Parameters:
10256 10258
10257 - lga {Numeric} - x inicial. 10259 + lon1 {Numeric} - x inicial.
10258 10260
10259 - lta {Numeric} - y inicial 10261 + lat1 {Numeric} - y inicial
10260 10262
10261 - lgb {Numeric} - x final 10263 + lon2 {Numeric} - x final
10262 10264
10263 - ltb {Numeric} - y final 10265 + lat2 {Numeric} - y final
10264 10266
10265 Return: 10267 Return:
10266 10268
10267 Type: 10269 Type:
10268 {Numeric} 10270 {Numeric}
10269 */ 10271 */
10270 - distancia: function(lga,lta,lgb,ltb){  
10271 - try{  
10272 - var er = 6366.707;  
10273 - var radlat1 = Math.PI * lta/180;  
10274 - var radlat2 = Math.PI * ltb/180;  
10275 - var radlong1 = Math.PI * lga/180;  
10276 - var radlong2 = Math.PI * lgb/180;  
10277 - if (lta > 0) {radlat1=Math.PI/2-radlat1;}  
10278 - if (lta < 0) {radlat1=Math.PI/2+radlat1;}  
10279 - if (lga < 0) {radlong1=Math.PI*2-radlong1;}  
10280 - if (ltb > 0) {radlat2=Math.PI/2-radlat2;}  
10281 - if (ltb < 0) {radlat2=Math.PI/2+radlat2;}  
10282 - if (lgb < 0) {radlong2=Math.PI*2-radlong2;}  
10283 - var x1 = er * Math.cos(radlong1)*Math.sin(radlat1);  
10284 - var y1 = er * Math.sin(radlong1)*Math.sin(radlat1);  
10285 - var z1 = er * Math.cos(radlat1);  
10286 - var x2 = er * Math.cos(radlong2)*Math.sin(radlat2);  
10287 - var y2 = er * Math.sin(radlong2)*Math.sin(radlat2);  
10288 - var z2 = er * Math.cos(radlat2);  
10289 - var d = Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2));  
10290 - //side, side, side, law of cosines and arccos  
10291 - var theta = Math.acos((er*er+er*er-d*d)/(2*er*er));  
10292 - return theta*er;  
10293 - }  
10294 - catch(e){return (0);} 10272 + distancia: function(lon1,lat1,lon2,lat2){
  10273 + var R = 6371; // km
  10274 + var dLat = ((lat2-lat1))* Math.PI / 180;
  10275 + var dLon = ((lon2-lon1)) * Math.PI / 180;
  10276 + var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
  10277 + Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *
  10278 + Math.sin(dLon/2) * Math.sin(dLon/2);
  10279 + var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
  10280 + var d = R * c;
  10281 + return d;
10295 }, 10282 },
10296 /* 10283 /*
10297 Function: rect2ext 10284 Function: rect2ext
classesjs/i3geo_tudo_compacto.js.php
@@ -10249,49 +10249,36 @@ i3GEO.calculo = { @@ -10249,49 +10249,36 @@ i3GEO.calculo = {
10249 Function: distancia 10249 Function: distancia
10250 10250
10251 Calcula a distância entre dois pontos. 10251 Calcula a distância entre dois pontos.
10252 -  
10253 - Baseado no site http://www.wcrl.ars.usda.gov/cec/java/lat-long.htm  
10254 10252
  10253 + Baseado no site http://www.movable-type.co.uk/scripts/latlong.html (indicado por louriques@yahoo.com.br)
  10254 +
  10255 + Em versões anteriores utilizava-se o cálculo proposto em http://www.wcrl.ars.usda.gov/cec/java/lat-long.htm
  10256 +
10255 Parameters: 10257 Parameters:
10256 10258
10257 - lga {Numeric} - x inicial. 10259 + lon1 {Numeric} - x inicial.
10258 10260
10259 - lta {Numeric} - y inicial 10261 + lat1 {Numeric} - y inicial
10260 10262
10261 - lgb {Numeric} - x final 10263 + lon2 {Numeric} - x final
10262 10264
10263 - ltb {Numeric} - y final 10265 + lat2 {Numeric} - y final
10264 10266
10265 Return: 10267 Return:
10266 10268
10267 Type: 10269 Type:
10268 {Numeric} 10270 {Numeric}
10269 */ 10271 */
10270 - distancia: function(lga,lta,lgb,ltb){  
10271 - try{  
10272 - var er = 6366.707;  
10273 - var radlat1 = Math.PI * lta/180;  
10274 - var radlat2 = Math.PI * ltb/180;  
10275 - var radlong1 = Math.PI * lga/180;  
10276 - var radlong2 = Math.PI * lgb/180;  
10277 - if (lta > 0) {radlat1=Math.PI/2-radlat1;}  
10278 - if (lta < 0) {radlat1=Math.PI/2+radlat1;}  
10279 - if (lga < 0) {radlong1=Math.PI*2-radlong1;}  
10280 - if (ltb > 0) {radlat2=Math.PI/2-radlat2;}  
10281 - if (ltb < 0) {radlat2=Math.PI/2+radlat2;}  
10282 - if (lgb < 0) {radlong2=Math.PI*2-radlong2;}  
10283 - var x1 = er * Math.cos(radlong1)*Math.sin(radlat1);  
10284 - var y1 = er * Math.sin(radlong1)*Math.sin(radlat1);  
10285 - var z1 = er * Math.cos(radlat1);  
10286 - var x2 = er * Math.cos(radlong2)*Math.sin(radlat2);  
10287 - var y2 = er * Math.sin(radlong2)*Math.sin(radlat2);  
10288 - var z2 = er * Math.cos(radlat2);  
10289 - var d = Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2));  
10290 - //side, side, side, law of cosines and arccos  
10291 - var theta = Math.acos((er*er+er*er-d*d)/(2*er*er));  
10292 - return theta*er;  
10293 - }  
10294 - catch(e){return (0);} 10272 + distancia: function(lon1,lat1,lon2,lat2){
  10273 + var R = 6371; // km
  10274 + var dLat = ((lat2-lat1))* Math.PI / 180;
  10275 + var dLon = ((lon2-lon1)) * Math.PI / 180;
  10276 + var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
  10277 + Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *
  10278 + Math.sin(dLon/2) * Math.sin(dLon/2);
  10279 + var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
  10280 + var d = R * c;
  10281 + return d;
10295 }, 10282 },
10296 /* 10283 /*
10297 Function: rect2ext 10284 Function: rect2ext
exemplos/calculo1.htm
@@ -4,16 +4,20 @@ @@ -4,16 +4,20 @@
4 <meta http-equiv="Category" content="I3Geo Mapa interativo MMA geoprocessamento sig mobile"> 4 <meta http-equiv="Category" content="I3Geo Mapa interativo MMA geoprocessamento sig mobile">
5 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1"> 5 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
6 <title>i3Geo - Mapa interativo</title> 6 <title>i3Geo - Mapa interativo</title>
7 -<script type="text/javascript" src="../classesjs/i3geonaocompacto.js"></script> 7 +<script type="text/javascript" src="../classesjs/i3geoo.js"></script>
8 <style> 8 <style>
9 p{font-size:16px;text-align:left;padding:10px;} 9 p{font-size:16px;text-align:left;padding:10px;}
10 </style> 10 </style>
11 </head> 11 </head>
12 <body style="background:white;text-align:left"> 12 <body style="background:white;text-align:left">
13 -<p>Cálculos de distância<br> 13 +<p>Cálculos de distância em km<br>
14 <script> 14 <script>
15 var calc = i3GEO.calculo.distancia(-50,-10,-50,10) 15 var calc = i3GEO.calculo.distancia(-50,-10,-50,10)
16 document.body.innerHTML += "<p>-50,-10,-50,10 = "+calc 16 document.body.innerHTML += "<p>-50,-10,-50,10 = "+calc
  17 +var calc = i3GEO.calculo.distancia(-50,10,-50,-10)
  18 +document.body.innerHTML += "<p>-50,10,-50,-10 = "+calc
  19 +var calc = i3GEO.calculo.distancia(-1,53,0,52)
  20 +document.body.innerHTML += "<p>-1,53,0,52 = "+calc
17 </script> 21 </script>
18 </body> 22 </body>
19 </html> 23 </html>
20 \ No newline at end of file 24 \ No newline at end of file
exemplos/index.html
@@ -35,4 +35,6 @@ body,td @@ -35,4 +35,6 @@ body,td
35 <p>Aplicativos customizados</p> 35 <p>Aplicativos customizados</p>
36 <p><a href="aplic1.htm" target="_blank" >Busca rápida</a></p> 36 <p><a href="aplic1.htm" target="_blank" >Busca rápida</a></p>
37 <p><a href="aplic2.htm" target="_blank" >Adiciona uma camada extra via javascript</a></p> 37 <p><a href="aplic2.htm" target="_blank" >Adiciona uma camada extra via javascript</a></p>
  38 +<p>Cálculos</p>
  39 +<p><a href="calculo1.htm" target="_blank" >Distâncias</a></p>
38 </body> 40 </body>