2012-03-08 3 views
0

마커를 제거하고 openlayers (자바 스크립트)에 새 마커를 만들고 싶습니다. 나는 이것을 할 수 있지만 트릭은 현재 garmin etrex GPS 수신기가보고 한 현재 위도/경도 위치에 새 마커를 놓기를 원한다는 것입니다. gpsbabel을 사용하여 수신기에서 새 위치를 얻을 수 있으며 하위 프로세스를 사용하여 파이썬에서이 작업을 수행 할 수 있습니다. 이 데이터를 자바 스크립트 변수로 가져 오는 방법은 파이썬 CGI 스크립트에서 문자열 대체를 사용하는 것입니다. 문제는 GPS 수신기에서 최신 데이터를 얻는 유일한 방법은 페이지를 새로 고침하여 짧은 시간 동안지도가 사라지고, 현재 확대/축소 수준이 손실되며, 이는 매우 깨끗한 방법이 아닙니다. 이것을하는 것. 내가 자바 스크립트 변수로 GPS에서 좌표를 얻을 수있는 방법에 대한 아이디어를 찾고 있어요.garmin GPS 좌표를 자바 스크립트 변수로 가져 오기

파이썬 스크립트에서 자바 스크립트로 좌표를 가져 오면 jython이 작동합니까? 나는 그것에 익숙하지 않다. 그러나 오늘 내가했던 독서는 이것이 파이썬 CGI 스크립트를 사용하고 싶기 때문에 이것이 이상적이지 않은 포트 8080에서 작동 할 것을 제안하는 것처럼 보였다. 아마도 이것은 여전히 ​​가능합니다.

나는 api를 찾았지만, garmin의 서비스는 웹 사이트에 묶여있는 것처럼 보였고 현재 좌표 만 원한다면 과장 될 수 있습니다.

나는 gpsd를 보았지만 기본 통신에 문제가 있었으며 자바 스크립트에서 TCP 포트 2947을 통해 데몬과 통신하기 위해 찾을 수 없었다.

저는 gentoo linux를 사용하고 있습니다.

덕분에, 존

답변

2

마커 위치마다 10 초 정도 업데이트 (자바 스크립트 함수의 setTimeout을 사용) 클라이언트에서 타이머를 설정합니다. 이 경우 ajax를 사용하여 서버 (파이썬 코드 등을 실행하는 서버)에서 마지막 위치를 가져와야합니다.

+0

답변 해 주셔서 감사합니다. 어젯밤에 아약스가 어떻게 작동하는지에 대한 설명을 들었습니다. 당신의 생각을 뒷받침하는 것은 저를 들여다 볼 수있는 충분한 동기입니다. 지난 밤부터 나는 플러그인을 만드는 방법에 익숙해 지려고 노력해 왔습니다. 나는 두 가지 방법 모두 효과가있을 것이라고 생각합니다. – nomadicME

0

@sahmad가 제안 했으므로, AJAX가가는 길 같습니다. 앞에서 말한 것처럼 브라우저 플러그인으로 문제를 해결하기 시작했습니다. 나는 이것을 위해 파이어 브레스를 사용했다. 길을 따라 몇 가지 어려운 교훈을 배웠습니다. 가장 중요한 점은 플러그인을 변경했을 때 플러그인을 크래시하고 페이지를 다시로드하거나 브라우저를 다시 시작해야한다는 것입니다. 나는이 단순한 사실에 대해 무지한 많은 시간을 낭비했다. 이 플러그인의 방향은 내 C++ 기술이 개발 초기 단계이기 때문에 더 오랜 시간이 걸렸습니다.

AJAX 경로는 매우 간단합니다. 이 페이지를 시작점으로 사용했습니다. http://www.degraeve.com/reference/simple-ajax-example.php

내 사례를 완료하고 내 솔루션을 다시보고하면이 문제가 모두 완료 될 것이라고 생각했습니다. 그러나 예를 만드는 과정에서 나는 또 다른 질문을 생각해 냈습니다. 다음 파일은 다음과 같습니다

나는 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> 

여기 (이 예제는 CGI-bin에 ajax3.py로 저장한다) 내 파이썬 CGI 스크립트입니다 :

#! /usr/bin/python 

import cgi 

import cgitb; cgitb.enable() # for troubleshooting 

print "Content-type: text/html" 
print "" 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

gpsLat = float(form.getvalue("latLon").split(":")[0]) 
gpsLon = float(form.getvalue("latLon").split(":")[1]) 

print '<input type="hidden" name="gpsLat" value="%s">' % (gpsLat + 0.001) 
print '<input type="hidden" name="gpsLon" value="%s">' % (gpsLon + 0.001) 

GPS보고 좌표를 CGI 스크립트의 경도 & 위도 모두에 천분의 일을 단순히 추가하여 시뮬레이트하려고했습니다. 그런 다음이 결과를 숨겨진 입력 유형을 통해 원래 페이지로 다시 보냅니다. 흥미로운 점은 moveMarker()를 좌표의 두 배로 호출해야한다는 것이 었습니다. 이것은 문제가 아니지만 이것이 왜인지 이해하고 싶습니다.내 순진 관점에서, 나는

xmlhttpPost("/cgi-bin/ajax3.py") 

명령

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

이 실행 된 후 다음 명령을하기 전에 실행 및 완료 것이라고 생각. 그러나 이것은 그렇지 않습니다. 첫 번째 명령은 일정 시간이 지나면 완료되거나 moveMarker()가 완료 될 때까지 완료되지 않습니까?

관련 문제