- How to Adjust X and Y Axis Scale in Arduino Serial Plotter (No Extra Software Needed)Posted 3 months ago
- Elettronici Entusiasti: Inspiring Makers at Maker Faire Rome 2024Posted 3 months ago
- makeITcircular 2024 content launched – Part of Maker Faire Rome 2024Posted 5 months ago
- Application For Maker Faire Rome 2024: Deadline June 20thPosted 6 months ago
- Building a 3D Digital Clock with ArduinoPosted 11 months ago
- Creating a controller for Minecraft with realistic body movements using ArduinoPosted 12 months ago
- Snowflake with ArduinoPosted 1 year ago
- Holographic Christmas TreePosted 1 year ago
- Segstick: Build Your Own Self-Balancing Vehicle in Just 2 Days with ArduinoPosted 1 year ago
- ZSWatch: An Open-Source Smartwatch Project Based on the Zephyr Operating SystemPosted 1 year ago
How to find the location with GSM cells
Discover how to find the coordinate from the GSM cells!!
[iframe_loader src=”http://www.open-electronics.org/celltrack/” height=”2150″ width=”100%”]
The PHP code to find the coordinates from GSM cells
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title>Tracking cell by Boris Landoni Example</title> <?php function geturl() { if ($_REQUEST["myl"] != "") { $temp = split(":", $_REQUEST["myl"]); $mcc = substr("00000000".($temp[0]),-8); $mnc = substr("00000000".($temp[1]),-8); $lac = substr("00000000".($temp[2]),-8); $cid = substr("00000000".($temp[3]),-8); } else { $hex = $_REQUEST["hex"]; //echo "hex $hex"; if ($hex=="1"){ //echo "da hex to dec"; $mcc=substr("00000000".hexdec($_REQUEST["mcc"]),-8); $mnc=substr("00000000".hexdec($_REQUEST["mnc"]),-8); $lac=substr("00000000".hexdec($_REQUEST["lac"]),-8); $cid=substr("00000000".hexdec($_REQUEST["cid"]),-8); $nlac[0]=substr("00000000".hexdec($_REQUEST["lac0"]),-8); $ncid[0]=substr("00000000".hexdec($_REQUEST["cid0"]),-8); $nlac[1]=substr("00000000".hexdec($_REQUEST["lac1"]),-8); $ncid[1]=substr("00000000".hexdec($_REQUEST["cid1"]),-8); $nlac[2]=substr("00000000".hexdec($_REQUEST["lac2"]),-8); $ncid[2]=substr("00000000".hexdec($_REQUEST["cid2"]),-8); $nlac[3]=substr("00000000".hexdec($_REQUEST["lac3"]),-8); $ncid[3]=substr("00000000".hexdec($_REQUEST["cid3"]),-8); $nlac[4]=substr("00000000".hexdec($_REQUEST["lac4"]),-8); $ncid[4]=substr("00000000".hexdec($_REQUEST["cid4"]),-8); $nlac[5]=substr("00000000".hexdec($_REQUEST["lac5"]),-8); $ncid[5]=substr("00000000".hexdec($_REQUEST["cid5"]),-8); }else{ //echo "lascio dec"; $mcc = substr("00000000".$_REQUEST["mcc"],-8); $mnc = substr("00000000".$_REQUEST["mnc"],-8); $lac = substr("00000000".$_REQUEST["lac"],-8); $cid = substr("00000000".$_REQUEST["cid"],-8); $nlac[0]=substr("00000000".($_REQUEST["lac0"]),-8); $ncid[0]=substr("00000000".($_REQUEST["cid0"]),-8); $nlac[1]=substr("00000000".($_REQUEST["lac1"]),-8); $ncid[1]=substr("00000000".($_REQUEST["cid1"]),-8); $nlac[2]=substr("00000000".($_REQUEST["lac2"]),-8); $ncid[2]=substr("00000000".($_REQUEST["cid2"]),-8); $nlac[3]=substr("00000000".($_REQUEST["lac3"]),-8); $ncid[3]=substr("00000000".($_REQUEST["cid3"]),-8); $nlac[4]=substr("00000000".($_REQUEST["lac4"]),-8); $ncid[4]=substr("00000000".($_REQUEST["cid4"]),-8); $nlac[5]=substr("00000000".($_REQUEST["lac5"]),-8); $ncid[5]=substr("00000000".($_REQUEST["cid5"]),-8); } } //echo "MCC : $mcc <br> MNC : $mnc <br>LAC : $lac <br>CID : $cid <br>"; return array ($mcc, $mnc, $lac, $cid, $nlac, $ncid); } function decodegoogle($mcc,$mnc,$lac,$cid) { $mcch=substr("00000000".dechex($mcc),-8); $mnch=substr("00000000".dechex($mnc),-8); $lach=substr("00000000".dechex($lac),-8); $cidh=substr("00000000".dechex($cid),-8); echo "<tr><td>Hex </td><td>MCC: $mcch </td><td>MNC: $mnch </td><td>LAC: $lach </td><td>CID: $cidh </td></tr></table>"; $data = "\x00\x0e". // Function Code? "\x00\x00\x00\x00\x00\x00\x00\x00". //Session ID? "\x00\x00". // Contry Code "\x00\x00". // Client descriptor "\x00\x00". // Version "\x1b". // Op Code? "\x00\x00\x00\x00". // MNC "\x00\x00\x00\x00". // MCC "\x00\x00\x00\x03". "\x00\x00". "\x00\x00\x00\x00". //CID "\x00\x00\x00\x00". //LAC "\x00\x00\x00\x00". //MNC "\x00\x00\x00\x00". //MCC "\xff\xff\xff\xff". // ?? "\x00\x00\x00\x00" // Rx Level? ; $init_pos = strlen($data); $data[$init_pos - 38]= pack("H*",substr($mnch,0,2)); $data[$init_pos - 37]= pack("H*",substr($mnch,2,2)); $data[$init_pos - 36]= pack("H*",substr($mnch,4,2)); $data[$init_pos - 35]= pack("H*",substr($mnch,6,2)); $data[$init_pos - 34]= pack("H*",substr($mcch,0,2)); $data[$init_pos - 33]= pack("H*",substr($mcch,2,2)); $data[$init_pos - 32]= pack("H*",substr($mcch,4,2)); $data[$init_pos - 31]= pack("H*",substr($mcch,6,2)); $data[$init_pos - 24]= pack("H*",substr($cidh,0,2)); $data[$init_pos - 23]= pack("H*",substr($cidh,2,2)); $data[$init_pos - 22]= pack("H*",substr($cidh,4,2)); $data[$init_pos - 21]= pack("H*",substr($cidh,6,2)); $data[$init_pos - 20]= pack("H*",substr($lach,0,2)); $data[$init_pos - 19]= pack("H*",substr($lach,2,2)); $data[$init_pos - 18]= pack("H*",substr($lach,4,2)); $data[$init_pos - 17]= pack("H*",substr($lach,6,2)); $data[$init_pos - 16]= pack("H*",substr($mnch,0,2)); $data[$init_pos - 15]= pack("H*",substr($mnch,2,2)); $data[$init_pos - 14]= pack("H*",substr($mnch,4,2)); $data[$init_pos - 13]= pack("H*",substr($mnch,6,2)); $data[$init_pos - 12]= pack("H*",substr($mcch,0,2)); $data[$init_pos - 11]= pack("H*",substr($mcch,2,2)); $data[$init_pos - 10]= pack("H*",substr($mcch,4,2)); $data[$init_pos - 9]= pack("H*",substr($mcch,6,2)); if ((hexdec($cid) > 0xffff) && ($mcch != "00000000") && ($mnch != "00000000")) { $data[$init_pos - 27] = chr(5); } else { $data[$init_pos - 24]= chr(0); $data[$init_pos - 23]= chr(0); } $context = array ( 'http' => array ( 'method' => 'POST', 'header'=> "Content-type: application/binary\r\n" . "Content-Length: " . strlen($data) . "\r\n", 'content' => $data ) ); $xcontext = stream_context_create($context); $str=file_get_contents("http://www.google.com/glm/mmap",FALSE,$xcontext); if (strlen($str) > 10) { $lat_tmp = unpack("l",$str[10].$str[9].$str[8].$str[7]); $lat = $lat_tmp[1]/1000000; $lon_tmp = unpack("l",$str[14].$str[13].$str[12].$str[11]); $lon = $lon_tmp[1]/1000000; $raggio_tmp = unpack("l",$str[18].$str[17].$str[16].$str[15]); $raggio = $raggio_tmp[1]/1; } else { echo "Not found!"; $lat = 0; $lon = 0; } return array($lat,$lon,$raggio); } list($mcc,$mnc,$lac,$cid, $nlac, $ncid)=geturl(); echo "<table cellspacing=30><tr><td>Dec</td><td>MCC: $mcc </td><td>MNC: $mnc </td><td>LAC: $lac </td><td>CID: $cid </td></tr>"; list ($lat,$lon,$raggio)=decodegoogle($mcc,$mnc,$lac,$cid); echo "<br>Google result for the main Cell<br>"; echo "Lat=$lat <br> Lon=$lon <br> Range=$raggio m<br>"; echo "<a href=\"http://maps.google.it/maps?f=q&source=s_q&hl=it&geocode=&q=$lat,$lon&z=14\" TARGET=\"_blank\" >See on Google maps</a> <BR> <br>"; for ($contatore=0; $contatore < (count($nlac)); $contatore++) { if ($nlac[$contatore]==0) { //echo "trovato campo vuoto al contatore $contatore<BR>"; $ncelle=$contatore; break; } } for ($contatore=0; $contatore < ($ncelle); $contatore++) { echo "LAC: $nlac[$contatore]\t CID: $ncid[$contatore]<BR>"; list ($nlat[$contatore],$nlon[$contatore],$nraggio[$contatore])=decodegoogle($mcc,$mnc,$nlac[$contatore],$ncid[$contatore]); echo "<br>Google result for the Neighbor Cell $contatore <br>"; echo "nLat=$nlat[$contatore] <br> nLon=$nlon[$contatore] <br> nRaggio=$nraggio[$contatore] m<br><br>"; } echo "<div id=\"map\" style=\"width: 100%; height: 700px\"></div>"; echo "<script type=\"text/javascript\">"; echo "var latgoogle=$lat;"; echo "var longoogle=$lon;"; echo "var raggio=$raggio;"; //creo un file contenente le coordinate delle celle **** $stringa_xml_doc = " <markers>\n\t"; $stringa_xml_doc =$stringa_xml_doc. "<marker lat=\"$lat\" lng=\"$lon\" rag=\"$raggio\" html=\"Main cell\" ico=\"antred\" label=\"Main\" />"; for($contatore= 0; $contatore < $ncelle; $contatore++) { if ($nlat[$contatore]!=0) { $stringa_xml_doc =$stringa_xml_doc. "<marker lat=\"$nlat[$contatore]\" lng=\"$nlon[$contatore]\" rag=\"$nraggio[$contatore]\" html=\"Cell $contatore\" ico=\"antbrown\" label=\"Marker $contatore\" />"; } } $stringa_xml_doc =$stringa_xml_doc."\n </markers>"; echo ($stringa_xml_doc); //$stringa_xml = $stringa_xml_dtd.$stringa_xml_doc; $stringa_xml = $stringa_xml_doc; $file_name = "celle_xml.xml"; $file = fopen ($file_name,"w"); $num = fwrite ($file, $stringa_xml); fclose($file); echo("File XML creato con successo!!"); //*** echo "nLat=new Array();"; echo "nLon=new Array();"; echo "nraggio=new Array();"; for ($contatore=0; $contatore < ($ncelle); $contatore++) { echo " nLat [$contatore] =$nlat[$contatore]; nLon [$contatore] =$nlon[$contatore]; nraggio [$contatore]=$nraggio[$contatore];"; } echo "</script>"; ?> <center> <br> <br> <center> <br> <br> <iframe width='100%' height='540' marginwidth='0' marginheight='0' scrolling='no' frameborder='0' src='http://open-electronics.org/fb/' ></iframe> </center> <br> <br> </center> <script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAIJFMStkxCl4SCny-4ljyrBRkrgiUOwoahV4KonZmGOdSmhVVVBTizYtL9IQMT4sND3EJvMdlOrIA8g" type="text/javascript"></script> </head> <body onunload="GUnload()"> <center> <br> <br> <script type="text/javascript"><!-- google_ad_client = "ca-pub-5248152858136551"; /* OE Link Banner post */ google_ad_slot = "3312240372"; google_ad_width = 468; google_ad_height = 60; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> <br> <br> </center> <script type="text/javascript"> //function initialize() { if (GBrowserIsCompatible()) { //alert("boris2"); //} // This function picks up the click and opens the corresponding info window function myclick(i) { GEvent.trigger(gmarkers[i], "click"); } var map = new GMap2(document.getElementById("map")); //map.setCenter(new GLatLng(37.4419, -122.1419), 13); map.setUIToDefault(); function cursore() { alert("boris"); var pointg = new GLatLng(latgoogle,longoogle); alert(pointg); } // A function to create the marker and set up the event window function createMarker(point,name,html,icona) { var marker = new GMarker(point,markerOptions); GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml(html); }); return marker; } // Read the data from example.xml GDownloadUrl("celle_xml.xml", function(doc) { var xmlDoc = GXml.parse(doc); var markers = xmlDoc.documentElement.getElementsByTagName("marker"); for (var i = 0; i < markers.length; i++) { // obtain the attribues of each marker var lat = parseFloat(markers[i].getAttribute("lat")); var lng = parseFloat(markers[i].getAttribute("lng")); var raggio = parseFloat(markers[i].getAttribute("rag")); var icona = markers[i].getAttribute("ico"); var Icon = new GIcon(G_DEFAULT_ICON); Icon.image = icona + ".png"; // Set up our GMarkerOptions object markerOptions = { icon:Icon }; var point = new GLatLng(lat,lng); var html = markers[i].getAttribute("html"); var label = markers[i].getAttribute("label"); // create the marker if (icona=="antred") { var color="#FF0000"; var fillColor="#FF6600"; } else { var color="#FF6699"; var fillColor="#FF99CC"; } var thickness=4; var opacity=0.4; var fillOpacity=0.2; var polyCircle=drawCircle(point, raggio, color, thickness, opacity, fillColor, fillOpacity); map.addOverlay(polyCircle); var marker = createMarker(point,label,html,markerOptions); map.addOverlay(marker); } map.setCenter(point, 13); // put the assembled side_bar_html contents into the side_bar div //document.getElementById("side_bar").innerHTML = side_bar_html; }); function drawCircle(center, radius, color, thickness, opacity, fillColor, fillOpacity) { radiusMiles=radius*0.000621371192; //alert(radiusMiles); var degreesPerPoint = 8; var radiusLat = radiusMiles * (1/69.046767); // there are >> >> > 69.046767 miles per degree latitude var radiusLon = radiusMiles * (1/(69.046767 * Math.cos(parseFloat(center.lat()) * Math.PI / 180))); var points = new Array(); //Loop through all degrees from 0 to 360 for(var i = 0; i < 360; i += degreesPerPoint) { var point = new GLatLng(parseFloat(center.lat()) + (radiusLat * Math.sin(i * Math.PI / 180)), parseFloat(center.lng()) + (radiusLon * Math.cos(i * Math.PI / 180))); points.push(point); } points.push(points[0]); // close the circle polyCircle = new GPolygon(points, color, thickness, opacity, fillColor, fillOpacity) return polyCircle; } } </script> <script type="text/javascript"> //cursore(); //carica il marcatore </script> </body> </html>
Pingback: Arturo Escalante (chinazo) | Pearltrees