Titanium Mapview添加注释

时间:2014-08-19 11:11:40

标签: titanium

我正在使用代码“http://developer.appcelerator.com/question/132508/how-to-add-annotation-on-mapview-click-event”来计算纬度和长度。

但是我在添加注释时遇到了一些麻烦。 long和lat的计算结果不正确,因此将点放在错误的位置 这是我的问题,或者方法现在不起作用了?

mapView.addEventListener('longpress', function(e) {
    var coordinate = calculateLatLngfromPixels(mapView, e.x, e.y);
    var longitude = coordinate.lon;
    var latitude = coordinate.lat;
    //var longitude = e.coords.longitude;
    //var latitude = e.coords.latitude;
    var annotation = Titanium.Map.createAnnotation({
                    latitude : latitude,
                    longitude : longitude,
                    title : "New Place",
                    //subtitle : 'My Place',
                    animate : true,
                    id : 1,
                    pincolor : Titanium.Map.ANNOTATION_RED
                });
    mapView.addAnnotation(annotation);

    var region = {
                    latitude : latitude,
                    longitude : longitude,
                    animate : true
                    //latitudeDelta : 0.002,
                    //longitudeDelta : 0.002
                };
    mapView.setLocation(region);
    alert('latitude'+latitude+' longitude'+longitude);
});

谢谢。

createMap:

var mapView = Ti.Map.createView({
     mapType: mapModule.NORMAL_TYPE,
    //latitudeDelta: 0.002, longitudeDelta:0.002  :  Zoom Level
    region : {
        latitude : curr_latitude,
        longitude : curr_longitude,
        latitudeDelta : 0.002,
        longitudeDelta : 0.002
    },
    top : 5,
    bottom : 5,
    left : 5,
    right : 5,
    animate : true,
    regionFit : true,
    userLocation : true
});

1 个答案:

答案 0 :(得分:0)

在收听者和回调中,你需要iOS和Android之间的区别。我创建了Mobile Project(Titanium SDK 3.3.0GA,Map 2.0.2 iOS | 2.1.4 Android)

ApplicationWindow.js

//Application Window Component Constructor
function ApplicationWindow() {

    //create component instance
    var self = Ti.UI.createWindow({
        backgroundColor:'#ffffff'
    });

    var calculateLatLngfromPixels = function(mapview, xPixels, yPixels) {
        var region = mapview.region;
        var heightDegPerPixel = -region.latitudeDelta / mapview.rect.height; 
        var widthDegPerPixel = region.longitudeDelta / mapview.rect.width;
        return {
            lat : (yPixels - mapview.rect.height / 2) * heightDegPerPixel + region.latitude,
            lon : (xPixels - mapview.rect.width / 2) * widthDegPerPixel + region.longitude
        };
    };

    var mapModule = require('ti.map');

    var mapView = mapModule.createView({
        top: 0,
        left: 0,
        mapType: mapModule.NORMAL_TYPE
    });

    var addNewAnnotation = function addNewAnnotation(lat, lng){
        Ti.API.info("New Annotation at: {"+lat+", "+lng+"}");
        var annotation = mapModule.createAnnotation({
            latitude : lat,
            longitude : lng,
            title : "New Place",
            animate : true,
            id : 1,
            pincolor : mapModule.ANNOTATION_RED
        });
        mapView.addAnnotation(annotation);
    };

    if(Ti.Platform.osname === 'android'){
        mapView.addEventListener('longclick', function(e) {
            addNewAnnotation(e.latitude, e.longitude);  
        });
    }
    else {
        mapView.addEventListener('longpress', function(e) {
            var coordinates = calculateLatLngfromPixels(mapView, e.x, e.y);
            addNewAnnotation(coordinates.lat, coordinates.lon);  
        });
    }

    self.add(mapView);

    return self;
}

//make constructor function the public component interface
module.exports = ApplicationWindow;

我比较了纽约(中央公园和Apple Store)的两个注释,两个坐标是相等的。此代码适用于iOS 7.1和Android 4.4。更多变焦,更准确。