lunes, 18 de febrero de 2013

Lab 3: Mapa de redes WiFi

Para realizar la actividad de laboratorio numero 3 de la materia de telecomunicaciones se nos pide mapear en base a algunos resultados el acceso a internet.

Para realizar esto utilicé la API de google maps, un pequeño programa en PHP para capturar las latitudes y longitudes de modo que podamos tener la distancia entre ellas y el comando airport -s para la captura de información.

RSSI es el indicador de fuerza de señal de recepción, el cual sirve para medir la potencia que tenemos de una red inalámbrica, entre más alto sea esta cifra, o sea, entre más se acerca a 0, es mucho mejor porque nos encontramos más cerca del router, si es más lejos, entonces el valor es más negativo, en mi caso cuando esta muy cerca (lo cheque en dos redes) lo máximo que alcanzaba es -30 o -25 y lo más lejos que encontré es -80, a partir de este rango fue cómo mapeo la red, es importante recalcar que también interviene, por ejemplo cuan pegadas están las casas y si el block que utilizan es mas grueso, por ejemplo dentro de un cuarto de mi casa, no tenía absolutamente ninguna RSSI ni red WiFi, solo algunas veces pero con un valor -80.

Solamente como referencia el parámetro RSSI, aunque varía por situaciones externas.

Para obtener el RSSI el cual demuestra que tan intenso podemos obtener la señal de red, el comando airport -s nos permite escanear las redes que tenemos a nuestro alrededor y así poder saber que tan cerca estamos de un router, en mis test lo que hice fue buscar la menor cantidad posible de RSSI y la maxima cantidad posible del mismo paramatetro para así calcular un radio aparente y dibujar un circulo, este radio es calculado mediante la función de php.


<?php
function distancia($latitud_1, $longitud_1, $latitud_2, $longitud_2) {
$rad = M_PI / 180;
$latitud_1 = $latitud_1 * $rad;
$longitud_1 = $longitud_1 * $rad;
$latitud_2 = $latitud_2 * $rad;
$longitud_2 = $longitud_2 * $rad;
$R = 6372.797;
$dlat = $latitud_2 - $latitud_1;
$dlog = $longitud_2 - $longitud_1;
$A = sin($dlat / 2) * sin($dlat / 2) + cos($latitud_1) * cos($latitud_2) * sin($dlog / 2) * sin($dlog / 2);
$C = 2 * atan2(sqrt($A), sqrt(1 - $A));
$km = $R * $C;
return ($km * 0.621371192);
}
echo distancia(25.735559, -100.266703, 25.735419, -100.267038) * 1000
?>
view raw distancia.php hosted with ❤ by GitHub

De esta manera, dada mi ubicación obteniendola desde la api de google maps y capturando los datos obtenidos del comando airport fui guardandolos para luego hacer los radios de los routers.


Luego de obtener los datos, me di cuenta que el área que quería comparar solamente tenía 3 conexiones de red inalámbrica a que comparar, en donde de estas tenía valores que podía graficar y poder hacer los círculos, quedando de la siguiente manera.



aparte de que como algunas latitudes y longitudes dadas  en google maps no eran muy exactas, entonces expandí mi área para tener un más amplio rango, teniendo como resultado.


Para luego dibujar en los puntos más lejanos y las coordenadas que consideraba como centro, teniendo como resultado que por ejemplo mi red infinitud tiene más alcance que las redes de intercable, donde su router solamente marcaba un poco espacio de rango.

Para saber como hice este mapa, pueden descargar mi html aquí.

Expongo mi código html.
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">
<title>Redes WiFi</title>
<link href="estilo.css" rel="stylesheet">
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
<script>
var map;
var posicion1 = new google.maps.LatLng(25.735402,-100.267126);
var posicion2 = new google.maps.LatLng(25.735404,-100.26702);
var posicion3 = new google.maps.LatLng(25.735597,-100.26674);
var posicion4 = new google.maps.LatLng(25.73553,-100.266728);
var posicion5 = new google.maps.LatLng(25.73557,-100.266728);
var posicion6 = new google.maps.LatLng(25.735371,-100.266973);
function initialize() {
var mapOptions = {
center: posicion1,
zoom: 20,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var el = document.getElementById("map_canvas");
map = new google.maps.Map(el, mapOptions);
var recorrido1 = new google.maps.Marker({
map: map,
position: posicion1,
title: "{ [ INFINITUM530E, -61 ], [ Superman, -79 ], [ INFINITUMA67AA4, -82 ], [ VIRUS, -83 ] }"
});
var recorrido2 = new google.maps.Marker({
map: map,
position: posicion2,
title: "{ [INFINITUM530E, -32], [INFINITUMA67AA4, -82], [VIRUS, -83], [Superman, -53] }"
});
var recorrido3 = new google.maps.Marker({
map: map,
position: posicion3,
title: "{[INFINITUM530E, -81],[InterCable9040, -77],[INFINITUM3C0D, -76],[INFINITUMB00E, -70],[INFINITUMEA0E, -76]}"
});
var recorrido4 = new google.maps.Marker({
map: map,
position: posicion4,
title: "{[INFINITUM530E -53][INFINITUMB00E -76][Superman -74][InterCable9040 -49][INFINITUM3C0D -52]}"
});
var recorrido1_coordenadas = [
posicion1,
posicion2
];
var recorrido2_coordenadas = [
posicion2,
posicion3
];
var recorrido3_coordenadas = [
posicion3,
posicion4
];
var recorrido4_coordenadas = [
posicion4,
posicion1
];
var lineSymbol = {
path: 'M 0,-1 0,1',
strokeOpacity: 1,
scale: 4
};
var line_1 = new google.maps.Polyline({
path: recorrido1_coordenadas,
strokeOpacity: 0,
icons: [{
icon: lineSymbol,
offset: '0',
repeat: '20px'
}],
map: map
});
var line_2 = new google.maps.Polyline({
path: recorrido2_coordenadas,
strokeOpacity: 0,
icons: [{
icon: lineSymbol,
offset: '0',
repeat: '20px'
}],
map: map
});
var line_3 = new google.maps.Polyline({
path: recorrido3_coordenadas,
strokeOpacity: 0,
icons: [{
icon: lineSymbol,
offset: '0',
repeat: '20px'
}],
map: map
});
var line_4 = new google.maps.Polyline({
path: recorrido4_coordenadas,
strokeOpacity: 0,
icons: [{
icon: lineSymbol,
offset: '0',
repeat: '20px'
}],
map: map
});
var Red1 = {
strokeColor: "#FE2EC8",
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: "#FE2EC8",
fillOpacity: 0.1,
map: map,
center: posicion1,
radius: 13
};
var Red2 = {
strokeColor: "#B40404",
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: "#B40404",
fillOpacity: 0.35,
map: map,
center: posicion2,
radius: 15
};
var Red3 = {
strokeColor: "#4000FF",
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: "#4000FF",
fillOpacity: 0.35,
map: map,
center: posicion5,
radius: 12
};
var Red4 = {
strokeColor: "#A5DF00",
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: "#A5DF00",
fillOpacity: 0.35,
map: map,
center: posicion4,
radius: 10
};
var Red5 = {
strokeColor: "#0B4C5F",
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: "#0B4C5F",
fillOpacity: 0.35,
map: map,
center: posicion6,
radius: 17
};
Red1 = new google.maps.Circle(Red1);
Red2 = new google.maps.Circle(Red2);
Red3 = new google.maps.Circle(Red3);
Red4 = new google.maps.Circle(Red4);
Red5 = new google.maps.Circle(Red5);
}
initialize();
</script>
</head>
<body onload="initialize()">
<div id="map_canvas"></div>
</body>
</html>
view raw hola.html hosted with ❤ by GitHub


1 comentario: