如何将地理位置输出导出到日志文件?

Posted

技术标签:

【中文标题】如何将地理位置输出导出到日志文件?【英文标题】:how can i export the geolocation output to log file? 【发布时间】:2015-07-14 13:32:34 【问题描述】:

我有这段代码,它显示地理位置(经度:xx 纬度:xx 精度:xxx)..当任何人访问 url 时,我如何将结果输出到日志文件 log.txt

    <!-- <xml version="1.0" encoding="utf-8"> -->
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Geolocation API Demo</title>
<meta content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" name="viewport"/>
<script>
function successHandler(location) 
    var message = document.getElementById("message"), html = [];
    html.push("<img width='512' height='512' src='http://maps.google.com/maps/api/staticmap?center=", location.coords.latitude, ",", location.coords.longitude, "&markers=size:small|color:blue|", location.coords.latitude, ",", location.coords.longitude, "&zoom=16&size=512x512&sensor=false' />");
    html.push("<p>Longitude: ", location.coords.longitude, "</p>");
    html.push("<p>Latitude: ", location.coords.latitude, "</p>");
    html.push("<p>Accuracy: ", location.coords.accuracy, " meters</p>");
    message.innerHTML = html.join("");

function errorHandler(error) 
    alert('Attempt to get location failed: ' + error.message);

navigator.geolocation.getCurrentPosition(successHandler, errorHandler);
</script>
</head>
<body>
<div id="message">Location unknown</div>
</body>
</html>

【问题讨论】:

你想用java还是php导出。 您必须在服务器端执行此操作,将对象发送到服务器并使用它做任何您想做的事情。 JS 无权访问客户端/服务器文件系统 是否要将所有用户的结果附加到同一个文件中?无法通过客户端保存文件。 我想使用 php @Satya 导出 不,我想将结果附加到单独的文件 log.txt @NishantGhodke 【参考方案1】:

这是将数据异步发送到服务器的 javascript 代码。

    function successHandler(location) 
        var message = document.getElementById("message"), html = [];
        html.push("<img width='512' height='512' src='http://maps.google.com/maps/api/staticmap?center=", location.coords.latitude, ",", location.coords.longitude, "&markers=size:small|color:blue|", location.coords.latitude, ",", location.coords.longitude, "&zoom=16&size=512x512&sensor=false' />");
        html.push("<p>Longitude: ", location.coords.longitude, "</p>");
        html.push("<p>Latitude: ", location.coords.latitude, "</p>");
        html.push("<p>Accuracy: ", location.coords.accuracy, " meters</p>");
        message.innerHTML = html.join("");

        //Send this to server
        var xmlhttp;
            if (window.XMLHttpRequest)  // code for IE7+, Firefox, Chrome, Opera
                xmlhttp=new XMLHttpRequest();
             else  // code for IE6, IE5
                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            

            xmlhttp.open("POST","script.php",true);
            xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
            xmlhttp.send("latitude="+location.coords.latitude+"&longitude="+location.coords.longitude+"&accuracy="+location.coords.accuracy); // pass data, assuming lat, long, acc are respective js variables
    
    function errorHandler(error) 
        alert('Attempt to get location failed: ' + error.message);
    
    navigator.geolocation.getCurrentPosition(successHandler, errorHandler);

在服务器端检索数据并使用以下 PHP 代码 (script.php) 保存

<?php
    $latitude = $_POST['latitude'];
    $longitude = $_POST['longitude'];
    $accuracy = $_POST['accuracy'];

    $string = $latitude." - ".$longitude." | ".$accuracy; // this will turn into 00000 - 00000 | 0.25

    $myfile = file_put_contents('log.txt', $string.PHP_EOL, FILE_APPEND);
?> 

【讨论】:

非常感谢,但是如何将 java 代码调用到我的服务器中? :( 我已根据您的需要更新了我的答案。请尝试一下。 非常感谢它对我有用,但是 log.txt 文件有一个输出错误,它显示这样的纬度结果?3??553086 我不知道为什么 尝试使用console.log(var_name)调试js变量;并在浏览器的控制台区域查看输出。比较发送的数据和接收的数据。可能与您收到的价值相同。【参考方案2】:

为此,您需要一个可以在其系统本地存储数据的服务器端。我建议您使用 PHP 或任何其他您知道的服务器端语言。

您将编写一个程序,该程序将接收一个对象,或者可能只接收 2 个变量,并将其存储到 file.txt 中。

这应该不是很难,如果您感到困惑,您应该查找 JavaScript AJAX 调用。

【讨论】:

我有服务器端,但我不知道如何调用该对象:( 您应该能够了解如何通过 AJAX 调用向 PHP 发送数据。使用谷歌,您应该能够找到问题的答案。您不需要向服务器发送对象,只需发送 2 个变量即可。【参考方案3】:

这里是java代码。

        if (window.XMLHttpRequest) 
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
     else 
        // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    
    xmlhttp.onreadystatechange = function() 
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) 
            alert(xmlhttp.responseText);
        
    
            xmlhttp.open("POST","file.jsp?latitude="+location.coords.latitude+"&longitude="+location.coords.longitude+"&accuracy="+location.coords.accuracy,true);                
            xmlhttp.send();

在 Jsp(file.jsp) 中写入。最好在 servlet 中而不是在 JSP 中编写 java 代码。

java.io.File file = new java.io.File("d://filename.log");
java.io.FileWriter writer = new java.io.FileWriter(file);
writer.write(request.getParameter("latitude")+" "+request.getParameter("longitude")+" "+request.getParameter("accuracy")); 
writer.flush();
writer.close();

【讨论】:

非常感谢你能写出完整的代码吗:( @Monica,在你的脚本中使用上面给出的 ajax 代码意味着在 successHandler() 函数调用中。 我的意思是java代码和我的代码你能把它们附加到一个代码中吗? 我试图这样做,它现在告诉'位置未知':(

以上是关于如何将地理位置输出导出到日志文件?的主要内容,如果未能解决你的问题,请参考以下文章

手机导出日志到电脑的方式-adb cmd下输出log

如何实现linux自动压缩指定日志

git导出log日志记录到本地文件

git导出log日志记录到本地文件

logback的日志文件,默认是存放到啥位置

使用 Pandas 将多个日志文件数据导出到单个 Excel