- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在做一个从 Phonegap 获取指南针脚本的项目,我想将它连接到我当前的 GPS 位置,而不是指向一个固定的 GPS 位置(比如餐厅等)。基本上箭头必须指向餐厅的方向,所以我知道该走哪条路。
这些是我想结合的两个: http://docs.phonegap.com/en/2.0.0/cordova_geolocation_geolocation.md.html#Geolocationhttp://docs.phonegap.com/en/2.0.0/cordova_compass_compass.md.html#Compass
我以这个项目为基础:https://github.com/Rockncoder/PGCompass
谁能在正确的方向上帮助我 :-)?
感谢埃瓦尔德
最佳答案
下面的代码基本上可以满足您的需求。它计算从您当前位置(通过 GPS)到目的地位置的距离和方位,并使用指南针确定您当前的航向。当前航向与目的地方位之间的差异是箭头的 Angular 。
带有资源的代码和编译好的Android APK可以从这里下载: http://ge.tt/4Kb2oQv/v/0
代码如下,希望对你有帮助!
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Compass test</title>
<script type="text/javascript" src="phonegap.js"></script>
<script type="text/javascript" src ="jquery-1.7.1.min.js">//</script> <!--http://code.jquery.com/jquery-1.7.1.min.js -->
<script type="text/javascript" src ="latlon.js">//</script> <!-- based on http://www.movable-type.co.uk/scripts/latlong.html -->
<style type="text/css">
#error, #results{
display: none;
}
#arrow{
position: absolute;
width: 30px;
height: 30px;
background: 50% 50% no-repeat;
background-size: 30px 30px;
background-image: url('arrow.png');
top: 0;
left: 50%;
margin: 30px 0 0 -15px;
}
#results .text{
margin-top: 100px;
}
</style>
<script type="text/javascript" >
var destinationPosition;
var destinationBearing;
var positionTimerId;
var currentPosition;
var prevPosition;
var prevPositionError;
var compassTimerId;
var currentHeading;
var prevHeading;
var prevCompassErrorCode;
$(document).on("deviceready", function() {
minPositionAccuracy = 50; // Minimum accuracy in metres to accept as a reliable position
minUpdateDistance = 1; // Minimum number of metres to move before updating distance to destination
$targetLat = $('#target-lat');
$targetLon = $('#target-lon');
$error = $('#error');
$results = $('#results');
$distance = $('#distance');
$bearing = $('#bearing');
$heading = $('#heading');
$difference = $('#difference');
$arrow = $('#arrow');
watchPosition();
watchCompass();
// Set destination
$targetLat.change(updateDestination);
$targetLon.change(updateDestination);
updateDestination();
});
function watchPosition(){
if(positionTimerId) navigator.geolocation.clearWatch(positionTimerId);
positionTimerId = navigator.geolocation.watchPosition(onPositionUpdate, onPositionError, {
enableHighAccuracy: true,
timeout: 1000,
maxiumumAge: 0
});
}
function watchCompass(){
if(compassTimerId) navigator.compass.clearWatch(compassTimerId);
compassTimerId = navigator.compass.watchHeading(onCompassUpdate, onCompassError, {
frequency: 100 // Update interval in ms
});
}
function onPositionUpdate(position){
if(position.coords.accuracy > minPositionAccuracy) return;
prevPosition = currentPosition;
currentPosition = new LatLon(position.coords.latitude, position.coords.longitude);
if(prevPosition && prevPosition.distanceTo(currentPosition)*1000 < minUpdateDistance) return;
updatePositions();
}
function onPositionError(error){
watchPosition();
if(prevPositionError && prevPositionError.code == error.code && prevPositionError.message == error.message) return;
$error.html("Error while retrieving current position. <br/>Error code: " + error.code + "<br/>Message: " + error.message);
if(!$error.is(":visible")){
$error.show();
$results.hide();
}
prevPositionError = {
code: error.code,
message: error.message
};
}
function onCompassUpdate(heading){
prevHeading = currentHeading;
currentHeading = heading.trueHeading >= 0 ? Math.round(heading.trueHeading) : Math.round(heading.magneticHeading);
if(currentHeading == prevHeading) return;
updateHeading();
}
function onCompassError(error){
watchCompass();
if(prevCompassErrorCode && prevCompassErrorCode == error.code) return;
var errorType;
switch(error.code){
case 1:
errorType = "Compass not supported";
break;
case 2:
errorType = "Compass internal error";
break;
default:
errorType = "Unknown compass error";
}
$error.html("Error while retrieving compass heading: "+errorType);
if(!$error.is(":visible")){
$error.show();
$results.hide();
}
prevCompassErrorCode = error.code;
}
function updateDestination(){
destinationPosition = new LatLon($targetLat.val(), $targetLon.val());
updatePositions();
}
function updatePositions(){
if(!currentPosition) return;
if(!$results.is(":visible")){
$results.show();
$error.hide();
}
destinationBearing = Math.round(currentPosition.bearingTo(destinationPosition));
$distance.html(Math.round(currentPosition.distanceTo(destinationPosition)*1000));
$bearing.html(destinationBearing);
updateDifference();
}
function updateHeading(){
$heading.html(currentHeading);
updateDifference();
}
function updateDifference(){
var diff = destinationBearing - currentHeading;
$difference.html(diff);
$arrow.css("-webkit-transform", "rotate("+diff+"deg)");
}
</script>
</head>
<body>
<div id="results">
<div id="arrow"></div>
<div class="text">
<p>Distance to destination: <span id="distance"></span> metres</p>
<p>Bearing to destination: <span id="bearing"></span> degrees</p>
<p>Current heading: <span id="heading"></span> degrees</p>
<p>Difference in heading and bearing: <span id="difference"></span> degrees</p>
</div>
</div>
<p id="error"></p>
<h2>Destination</h2>
<div>
<label for="target-lat">Latitude: </label>
<input id="target-lat" value="50.623966949462" />
</div>
<div>
<label for="target-lon">Longitude: </label>
<input id="target-lon" value="-4.7256830197787" />
</div>
</body>
</html>
关于javascript - 带有指南针和 GPS 坐标的 Phonegap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12476515/
【1】引言(完整代码在最后面) 在本文中,我们将介绍如何使用鸿蒙系统(HarmonyOS)开发一个简单的指南针应用。通过这个案例,你可以学习如何使用传感器服务、状态管理以及UI构
我正在尝试为 iPhone 4 构建一个应用程序,该应用程序使用户能够“指向”硬编码的目的地,并且目的地所在的位置会出现一个点。 首先,我使用指南针制作水平指南针(这将覆盖左/右旋转): // Hea
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在尝试在我的 Android 手机 (Nexus 4) 上制作一个应用程序,该应用程序将用于模型船。我添加了低通滤波器来过滤掉传感器中的 gitter。 但是,指南针只有在手机平放时才能稳定。如果
我正在尝试开发一个使用 iPhone 的 GPS 和指南针的应用程序,以便将某种指针指向特定位置(就像指南针始终指向北方)。位置是固定的,无论用户位于何处,我始终需要指针指向该特定位置。我有这个位置的
我正在开发一个项目,我们需要知道街道的方向(指南针)。实际上,我们只有一个 GeoPoint(纬度;经度和航向),我们计划使用反向地理编码来告诉它在哪里(哪条街?);然后我们想知道他是否走错了路。 G
我想知道是否有人可以解释或清除我的问题——我目前正在做一些项目来使用 android 识别树木。我想在这个项目中我必须使用的主要组件是 GPS、Camera API 和 Compass(如果有人能想到
我需要知道 iPad 2 是否有内置指南针并且仍然响应: - (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(
我有一个关于使用罗盘模式在“高级” Sprite 中创建的小问题。当我说“高级模式”将 Sprite 存储在变量中时,我更喜欢这种方法:) 无论如何,我的问题是我无法将图像自定义为一半。让我解释一下:
我从 wunderground api 制作天气 jquery,我的 jquery 工作正常。但问题出在 wunderground api 中的风向度数,我想在罗盘上获取风度数,我在 stackove
我想制作一些指南针应用程序,并希望根据用户的经纬度显示指针偏转。但我无法理解我如何才能像指南针一样给出正确的形状。目前我正在使用此代码来显示指南针。
我有一个像这样的 MongoDB 集合构建: 当我尝试按 ID 过滤时,我得到了不一致的结果。例如,当我尝试通过输入过滤器查询来获取第一个条目时: {_id:209383449381830657} 我
我是 android 编程的新手。我知道如何使用 GPS 在室外环境中获取用户的位置。 但是我遇到了一个问题,要在没有可用 GPS 的建筑物内找到一个人的位置。 我可以处理编码部分,但我需要了解如何使
所以来到这里是最后的手段,希望有人能伸出援手。 我正在 SASS-Bootstrap3 中构建一个元素 我的所有网站都已创建(其中 40 个) 我希望所有站点都运行相同的 bootstrap-sass
假设一个人正在使用这个指南针,他们从 90 度开始顺时针或逆时针旋转。记录他们完成了多少次完整的 360 度旋转的最佳方法是什么?假设它们从头到尾只能顺时针或逆时针旋转。 我不断提出解决方案,例如,如
这个问题在这里已经有了答案: Calculate compass bearing / heading to location in Android (11 个答案) 关闭 7 年前。 我已经尝试了很
当我想安装 sass 和 compass 时,我收到这条消息。有人能帮我吗? Microsoft Windows [version 6.1.7601] Copyright (c) 2009 Micro
任何使用meteor 和SCSS 进行开发的人。你是如何开始的,我找不到陨石包,我可以找到将 .scss 文件编译到特定文件夹中的包? 最佳答案 您是否尝试过在开发过程中在本地将 sass/scss
我正在尝试使用指南针移动机器人。我们使用指南针让机器人沿直线移动,它使用 2 个轮子,它们的移动方式略有不同。 所以我们设置一个0到359之间的值作为方向,然后检查当前的方向,计算误差并修复它。像错误
我想开发一款使用指南针 API 的 iPhone 4 应用程序,但我需要读数至少精确到半度(例如 100.5)。 指南针 API 提供什么样的精度? 最佳答案 根据我的经验,远非如此。 关于iphon
我是一名优秀的程序员,十分优秀!