Titanium Mapview点击获取Lat和Long

时间:2012-08-14 14:59:55

标签: titanium android-mapview appcelerator

我希望在Titanium(appcelerator)中创建一个简单的mapview,但我想要/需要做的是让用户点击或在地图上长按,并从地图上的选择中获取经度和纬度。 mapview确实有mapview.addEventListener('click',function(evt)),但点击时我没有得到这些值。任何帮助都会很棒!

2 个答案:

答案 0 :(得分:4)

从点击或长按坐标计算纬度和经度非常容易(如果没有缩小)。在取自this question at Appcelerator Q&A:

的事件监听器中使用此函数
var calculateLatLngfromPixels = function(mapview, xPixels, yPixels) {

    var region = mapview.actualRegion || mapview.region;
    var widthInPixels = mapview.rect.width;
    var heightInPixels = mapview.rect.height;

    // should invert because of the pixel reference frame
    heightDegPerPixel = -region.latitudeDelta / heightInPixels; 
    widthDegPerPixel = region.longitudeDelta / widthInPixels;

    return {
        lat : (yPixels - heightInPixels / 2) * heightDegPerPixel + region.latitude,
        lon : (xPixels - widthInPixels / 2) * widthDegPerPixel + region.longitude

    };
}

请注意,您无法在MapView本身上侦听longpress事件,因此将其嵌套在常规容器视图中并将侦听器添加到该视图中。示例用法如下:

var container = Ti.UI.createView({
    top : 0,
    left : 0
});
container.add(mapview);

container.addEventListener('longpress', function(e) {
    var coordinate = calculateLatLngfromPixels(mapview, e.x, e.y);
    var longitude = coordinate.lat;
    var latitude = coordinate.lat;
});

如果你看着地球的一个(相对)小区域,当你完全缩小时,你将不得不使用墨卡托投影来获得真正的坐标,因为地球的曲率,如果你想完全缩小然后使用模块。

答案 1 :(得分:0)

市场上有一个模块。购买价格为0.99美元,并为您提供地图https://marketplace.appcelerator.com/apps/1334

的坐标