将garmin gps坐标获取到javascript变量中

将garmin gps坐标获取到javascript变量中,javascript,jython,openlayers,garmin,gpsd,Javascript,Jython,Openlayers,Garmin,Gpsd,我想删除一个标记并在openlayers(javascript)中创建一个新的标记。我可以这样做,但诀窍是我想将新标记放置在garmin etrex gps接收器报告的当前纬度/经度位置。我可以使用gpsbabel从接收器获取新位置,我可以使用python子流程来完成这项工作。我能想到的将这些数据放入javascript变量的唯一方法是在python CGI脚本中使用字符串替换。问题是从gps接收器获取新数据的唯一方法是刷新页面,这会导致地图在短时间内消失,当前的缩放级别丢失,而这并不是一种非常

我想删除一个标记并在openlayers(javascript)中创建一个新的标记。我可以这样做,但诀窍是我想将新标记放置在garmin etrex gps接收器报告的当前纬度/经度位置。我可以使用gpsbabel从接收器获取新位置,我可以使用python子流程来完成这项工作。我能想到的将这些数据放入javascript变量的唯一方法是在python CGI脚本中使用字符串替换。问题是从gps接收器获取新数据的唯一方法是刷新页面,这会导致地图在短时间内消失,当前的缩放级别丢失,而这并不是一种非常干净的方法。我想知道如何将gps坐标转换成javascript变量

jython可以将坐标从python脚本转换成javascript吗?我不熟悉它,但我今天的阅读似乎表明这需要在8080端口上操作,这并不理想,因为我想使用python cgi脚本。也许这仍然是可能的

我已经寻找了api,但是garmin的产品似乎与他们的网站有关,如果你只想知道当前的坐标,那就太过分了

我查看了gpsd,但在基本通信方面遇到了问题,并且无法从javascript中找到通过tcp端口2947与守护进程通信的方法

我正在使用GentooLinux

谢谢, John

在客户端设置一个计时器(使用setTimeout javascript函数),每隔10秒左右更新标记位置。
为此,您应该使用ajax从服务器(运行python代码或类似代码的服务器)获取最后一个位置。

因此,正如@sahmad所建议的,ajax似乎是一种可行的方法。正如我之前所说,我开始尝试用一个浏览器插件来解决这个问题。我用了firebreath。在这一过程中,我们学到了一些惨痛的教训。最重要的是,当您更改插件时,您需要使插件崩溃并重新加载页面,或者重新启动浏览器。我浪费了很多时间,对这个简单的事实一无所知。这个插件的方向对我来说也要花更长的时间,因为我的C++技能处于开发的早期阶段。 AJAX路线很容易学习。我使用此页面作为起点:

我想我会完成我的例子,并报告我的解决方案,然后这件事将全部完成。然而,在创建示例的过程中,我提出了另一个问题。以下是文件:

我对html文件进行了如下修改:

<html>
<head>
<title>Simple Ajax Example</title>
<script language="Javascript">
function xmlhttpPost(strURL) {
    var xmlHttpReq = false;
    var self = this;
    // Mozilla/Safari
    if (window.XMLHttpRequest) {
        self.xmlHttpReq = new XMLHttpRequest();
    }
    // IE
    else if (window.ActiveXObject) {
        self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
    self.xmlHttpReq.open('POST', strURL, true);
    self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    self.xmlHttpReq.onreadystatechange = function() {
        if (self.xmlHttpReq.readyState == 4) {
            updatepage(self.xmlHttpReq.responseText);
        }
    }
    self.xmlHttpReq.send(getquerystring());
}

function getquerystring() {
    qstr = 'latLon=' + escape(document.forms['f1'].lat.value + ':' + document.forms['f1'].lon.value);
    return qstr;
}

function updatepage(str){
    document.getElementById("result").innerHTML = str;
}

function moveMarker(){
    document.getElementById("timer").innerHTML= parseFloat(document.getElementById("timer").innerHTML) + 1
    xmlhttpPost("/cgi-bin/ajax3.py")

    var latFromGPS = document.forms["f1"]["gpsLat"].value;
    var lonFromGPS = document.forms["f1"]["gpsLon"].value;

    document.forms["f1"]["lat"].value=latFromGPS;
    document.forms["f1"]["lon"].value=lonFromGPS;

}    
window.setInterval('moveMarker()', 2000);

</script>
</head>
<body>
<form name="f1">
    <p id=timer>0</p>
    <p><input type="text" id="lat" name="lat" value="35.0"> </p>
    <!-- <input type="hidden" name="gpsLat" value="35.0"> -->
    <p><input type="text" id="lon" name="lon" value="-106.0"> </p>
  <div id="result"></div>
</form>
</body>
</html>
命令将在下一个命令之前执行并完成

var latFromGPS = document.forms["f1"]["gpsLat"].value;

他被处决了。然而,情况并非如此。那么,第一个命令是在一定时间后才完成,还是在moveMarker()完成后才完成?

谢谢您的回答。昨晚我偶然发现了一个关于ajax工作原理的解释。你对这个想法的支持足以激励我去研究它。从昨晚开始,我一直在努力熟悉如何创建插件。我想这两种方法都可以。
xmlhttpPost("/cgi-bin/ajax3.py") 
var latFromGPS = document.forms["f1"]["gpsLat"].value;