1

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

4

2 回答 2

4

从点击或长按坐标计算纬度和经度非常容易(如果不是太缩小的话)。在 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

    };
}

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

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;
});

如果您查看地球的一个(相对)小区域,当您完全缩小时,这将起作用,如果您想完全放大,由于地球的曲率,您将不得不使用墨卡托投影来获得真实坐标然后使用该模块。

于 2012-08-14T15:35:29.727 回答
0

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

于 2012-08-14T15:14:07.313 回答