`
longgangbai
  • 浏览: 7331169 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Titanium调用Google服务

阅读更多

 

ApplicationWindow.js文件内容:

 

//Application Window Component Constructor
exports.ApplicationWindow = function() {
	var geo = require('geo');
	
	//create object instance
	var self = Ti.UI.createWindow({
		backgroundColor:'#fff',
		fullscreen: false,
		exitOnClose: true
	});

	// create UI components
	var view = Ti.UI.createView({
		backgroundColor: '#800',
		height: '50dp',
		top: 0
	});
	var textfield = Ti.UI.createTextField({
		height: '40dp',
		top: '5dp',
		left: '5dp',
		right: '50dp',
		style: Ti.UI.INPUT_BORDERSTYLE_ROUNDED,
		hintText: 'Enter an address',
		backgroundColor: '#fff',
		paddingLeft: '5dp'
	});
	var button = Ti.UI.createButton({
		title: '+',
		font: {
			fontSize: '20dp',
			fontWeight: 'bold'	
		},
		top: '5dp',
		height: '40dp',
		width: '40dp',
		right: '5dp'
	});
	var mapview;
	//Window打开加载事件的使用
	// add map after window opens
	self.addEventListener('open', function() {
		// Make sure we only add the map once
		if (mapview !== undefined) {
			return;	
		}
		
		mapview = Titanium.Map.createView({
		    mapType: Titanium.Map.STANDARD_TYPE,
		    region: {
	    		latitude: geo.LATITUDE_BASE, 
	    		longitude: geo.LONGITUDE_BASE,
		        latitudeDelta: 0.1, 
		        longitudeDelta: 0.1
		    },
		    animate:true,
		    regionFit:true,
		    userLocation:false,
		    top: '50dp'
		});
		
		// Add initial annotation
		mapview.addAnnotation(Ti.Map.createAnnotation({
			animate: true,
			pincolor: Titanium.Map.ANNOTATION_RED,
			title: 'Appcelerator',
			latitude: geo.LATITUDE_BASE,
			longitude: geo.LONGITUDE_BASE,
			leftButton: '/images/delete.png'
		}));
		
		// Handle all map annotation clicks
		mapview.addEventListener('click', function(e) {
			if (e.annotation && (e.clicksource === 'leftButton' || e.clicksource == 'leftPane')) {  
				mapview.removeAnnotation(e.annotation);
			}         
		});
		self.add(mapview);
	});
	
	
	// Execute forward geocode on button click
	button.addEventListener('click', function() {	
		textfield.blur();
		geo.forwardGeocode(textfield.value, function(geodata) {
			mapview.addAnnotation(Ti.Map.createAnnotation({
		    	animate: true,
		    	pincolor: Titanium.Map.ANNOTATION_RED,
		    	title: geodata.title,
		    	latitude: geodata.coords.latitude,
		    	longitude: geodata.coords.longitude,
		    	leftButton: '/images/delete.png'
		    })); 
		    mapview.setLocation({
		    	latitude: geodata.coords.latitude, 
		    	longitude: geodata.coords.longitude,
		        latitudeDelta: 1, 
		        longitudeDelta: 1
		    });
		});
	});
	
	// assemble view hierarchy
	view.add(textfield);
	view.add(button);
	self.add(view);
	
	return self;
};

 

 

geo.js

 

var GOOGLE_BASE_URL = 'http://maps.googleapis.com/maps/geo?output=json&q=';
var ERROR_MESSAGE = 'There was an error geocoding. Please try again.';
exports.LATITUDE_BASE = 37.389569;
exports.LONGITUDE_BASE = -122.050212;

var GeoData = function(title, latitude, longitude) {
	this.title = title;
	this.coords = {
		latitude: latitude,
		longitude: longitude
	};
};
//外部暴露的方法
exports.forwardGeocode = function(address, callback) {
	if (Ti.Platform.osname === 'mobileweb') {
		forwardGeocodeWeb(address, callback);
	} else {
		forwardGeocodeNative(address, callback);
	}
};
//本地通过HttpClient方式访问
var forwardGeocodeNative = function(address, callback) {
	var xhr = Titanium.Network.createHTTPClient();
	xhr.open('GET', GOOGLE_BASE_URL + address);
	xhr.onload = function() {
	    var json = JSON.parse(this.responseText);
	    if (!json.Placemark || !json.Placemark[0].Point || !json.Placemark[0].Point.coordinates) {
	    	alert('Unable to geocode the address');
	    	return;
	    }
	    
	    callback(new GeoData(
	    	address,
	    	json.Placemark[0].Point.coordinates[1],
	    	json.Placemark[0].Point.coordinates[0]
	    ));
	};
	xhr.onerror = function(e) {
		Ti.API.error(e.error);
		alert(ERROR_MESSAGE);
	};
	xhr.send();
};
//Web访问的方式
var forwardGeocodeWeb = function(address, callback) {
	var geocoder = new google.maps.Geocoder();
	if (geocoder) {
      	geocoder.geocode({ 'address': address }, function (results, status) {
        	if (status == google.maps.GeocoderStatus.OK) {
        		callback(new GeoData(
        			address, 
        			results[0].geometry.location.Ua,
        			results[0].geometry.location.Va
        		));
         	} else {
         		Ti.API.error(status);
         		alert(ERROR_MESSAGE); 	
         	}
      	});
	} else {
		alert('Google Maps Geocoder not supported');	
	}
};
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics