Titanium地图移动大头针后无法获取新坐标问题咨询
解决Ti.Map拖动大头针后无法获取新坐标的问题
嘿,我一看你的问题就知道问题出在哪了——你现在的代码监听的是设备自身的位置更新事件(Ti.Geolocation的location事件),这个事件只有当设备的真实位置变化时才会触发,和你手动拖动地图上的大头针完全是两回事!所以不管你怎么拖大头针,它只会返回一开始获取到的设备坐标。
要解决这个问题,你需要监听大头针拖动结束的事件,同时还要确保大头针是允许拖动的,下面是具体的步骤和修改后的代码:
关键修改点
- 给你的大头针(Annotation)设置
draggable: true,允许用户拖动它 - 监听大头针的
dragend事件,在拖动结束时获取新坐标
完整代码示例
var Map = require('ti.map'); // 创建地图视图 var mapView = Map.createView({ mapType: Map.NORMAL_TYPE, animate: true, regionFit: true, userLocation: true }); // 创建可拖动的大头针(初始位置用用户当前位置) var draggablePin = Map.createAnnotation({ title: "拖动我修改位置", draggable: true, // 必须开启这个才能拖动 pincolor: Map.ANNOTATION_RED }); mapView.addAnnotation(draggablePin); // 监听大头针拖动结束事件,获取新坐标 draggablePin.addEventListener('dragend', function(e) { var newLatitude = e.annotation.latitude; var newLongitude = e.annotation.longitude; console.log("拖动后的新坐标:纬度 " + newLatitude + ",经度 " + newLongitude); // 这里可以把新坐标用于后续逻辑 }); // 保留原来的逻辑获取用户初始位置,设置地图和大头针的初始位置 if (Ti.Geolocation.locationServicesEnabled) { Ti.Geolocation.getCurrentPosition(function(e) { if (e.error) { alert('获取位置失败: ' + e.error); } else { var initialLat = e.coords.latitude; var initialLng = e.coords.longitude; // 更新地图区域到用户当前位置 mapView.setRegion({ latitude: initialLat, longitude: initialLng, latitudeDelta: 0.01, longitudeDelta: 0.01 }); // 设置大头针初始位置 draggablePin.setLatitude(initialLat); draggablePin.setLongitude(initialLng); } }); } else { alert("请先开启设备的位置服务"); } // 记得把mapView添加到窗口中 $.window.add(mapView); $.window.open();
额外说明
- 如果你用的是旧版本的Titanium SDK,可能需要监听地图视图的
regionchanged事件,但更准确的还是监听大头针的dragend事件,因为regionchanged会在用户拖动地图时也触发,而不仅仅是拖动大头针。 - 要确保你的Annotation确实设置了
draggable: true,否则用户根本拖不动大头针,自然也不会触发事件。
内容的提问来源于stack exchange,提问作者Marc
相关产品推荐
相关产品推荐

