真的需要一些帮助,我正在尝试在sencha的帮助下,当用户接近某个感兴趣的设置点时,在android手机上推送警报。
在我的视图中,我有一个地图
{
xtype: 'map',
id: 'mapOne',
cls: 'center',
flex: 1,
width: '100%',
mapOptions : {
mapTypeControl : false,
navigationControl : true,
streetViewControl : false,
backgroundColor: 'transparent',
disableDoubleClickZoom: true,
zoom: 10,
draggable: true,
keyboardShortcuts: true,
scrollwheel: false,
enableHighAccuracy: true
},
listeners : {
maprender : function(comp, map){
var currentMarker = new google.maps.Marker({
position: new google.maps.LatLng(setlat,setlon),
//title : 'Sencha HQ',
map: map,
icon: image
});
setTimeout( function(){map.panTo (new google.maps.LatLng(markerlat, markerlong));} , 1);
}
}
在我的控制器中,我在渲染地图之前设置了以下内容
var poi = new google.maps.LatLng(markerlat, markerlong);
然后在我的控制器中初始化一个地理位置对象,如下所示
var geo = Ext.create('Ext.util.Geolocation', {
autoUpdate: true,
frequency :3000,//every 3 seconds
listeners: {
locationupdate: function(geo) {
var curlat = geo.position.coords.latitude;
var curlong = geo.position.coords.longitude;
console.log('New GEO CURRENT: ' + curlat + ' ' + curlong);
var me = new google.maps.LatLng(curlat, curlong);
if (me == poi){
alert("poi found");
}
},
locationerror: function(geo, bTimeout, bPermissionDenied, bLocationUnavailable, message) {
if(bTimeout){
alert('Timeout occurred.');
} else {
alert('Error occurred.');
}
}
}
});
我还设置了一个地理标记,看看我是否在poi附近被检测到。
GeoMarker = new GeolocationMarker(mapOne);
它显示我的GeoMarker直接在标记的顶部没有警报。我尝试了一些类似的事情,但没有成功,比如....
if (GeoMarker == poi){
alert("poi found");
}
我知道我的过程在这两种情况下都是错误的,因为我的位置不会与poi完全相同,但我不知道如何设置当前位置的适当接近度来警报。我发现很难找到任何文档来展示如何成功地实现与点警报类似的东西。任何帮助或链接到文档,可能会帮助将非常感激。
Thanks in advance
我首先通过使用'if'语句来检查两个点的经纬度值之间的差是否小于一个集合变量,从而获得了成功的结果。但我认为一定有一个更有效的方法来实现这一点,通过某种形式的半径周围的当前位置。
终于遇到了这个线程....在google maps V3中计算两点之间的距离,正如它在其中一个答案中所建议的那样,我成功地使用了以下命令......
google.maps.geometry.spherical.computeDistanceBetween (latLngA, latLngB);
检查两点之间的距离是否小于我想要的距离。希望这对将来的人有所帮助。
我们欢迎任何人提供任何信息,以实现相同的替代方法。