Skip to content

Instantly share code, notes, and snippets.

@yagitoshiro
Created October 10, 2012 14:22
Show Gist options
  • Save yagitoshiro/3865944 to your computer and use it in GitHub Desktop.
Save yagitoshiro/3865944 to your computer and use it in GitHub Desktop.
地名や住所を指定すると現在位置から見た方位角を大雑把に出してその地点まで直線を引いてコンパスを動かすサンプル
function ApplicationWindow(title) {
var self = Ti.UI.createWindow({
title:title,
backgroundColor:'white'
});
var compass = Ti.UI.createImageView({
image:'/images/arrow.gif',
width:Ti.UI.SIZE,
height:Ti.UI.SIZE,
top:5,
left:5
});
var compass_bg = Ti.UI.createView({
backgroundColor:'White',
width:50,
height:50,
borderWidth:1,
borderColor:'Black',
borderRadius:25,top:5,left:5});
var update_compass = function(angle){
var rotate = Ti.UI.create2DMatrix();
rotate = rotate.rotate(angle);
compass.transform = rotate;
};
self.add(compass_bg);
self.add(compass);
function get_lang(){
var lang = Ti.Platform.locale;
if(lang == 'zh_hans'){
lang = 'zh-CN';
}
if(lang == 'zh_hant'){
lang = 'zh-TW';
}
return lang;
}
function get_dir(lat1, lng1, lat2, lng2){
var pi = Math.PI / 180;
var y = Math.cos(lng2 * pi) * Math.sin(lat2 * pi - lat1 * pi);
var x = Math.cos(lng1 * pi) * Math.sin(lng2 * pi) - Math.sin(lng1 * pi) * Math.cos(lng2 * pi) * Math.cos(lat2 * pi - lat1 * pi);
var rad = 180 * Math.atan2(y, x) / Math.PI;
if(rad < 0){ rad = rad + 360; }
var deg = 360 - rad;
Ti.API.info(deg);
var deg = (rad + 90) % 360;
return deg;
}
var text_field = Ti.UI.createTextField({
borderStyle:Titanium.UI.INPUT_BORDERSTYLE_ROUNDED,
top:60,
value:'東京駅',
left:5,
right:5,
height:60});
self.add(text_field);
Ti.Geolocation.purpose = "アナタの心を探るため";
var current_position = null;
Ti.Geolocation.getCurrentPosition(function(e){
if(e.error){
alert("申し訳ございません、位置情報を利用することができません");
}else{
current_position = e.coords;
}
var lang = get_lang();
var url = "http://maps.google.com/maps/api/geocode/json?latlng=" + current_position.latitude + "," + current_position.longitude + "&sensor=true&language=" + lang;
var http = Ti.Network.createHTTPClient({timeout:10000});
http.onload = function(e){
var response = JSON.parse(http.responseText);
var annotation = Ti.Map.createAnnotation({
animate:true,
pincolor: Titanium.Map.ANNOTATION_GREEN,
title:'現在地',
subtitle:response.results[0].formatted_address,
latitude:current_position.latitude,
longitude:current_position.longitude
});
var map = Ti.Map.createView({
top:120,
annotations:[annotation],
mapType: Titanium.Map.STANDARD_TYPE,
animate:true,
region:{
latitude:current_position.latitude,
longitude:current_position.longitude,
latitudeDelta:0.01,
longitudeDelta:0.01
},
regionFit:true,
userLocation:false
});
self.add(map);
text_field.addEventListener('return', function(e){
var address = e.source.value;
text_field.blur();
var lang = get_lang();
var forward_url = 'http://maps.googleapis.com/maps/api/geocode/json?address=' + address + '&language=' + lang + '&sensor=false'
Ti.API.info(url);
var forward_http = Ti.Network.createHTTPClient({timeout:10000});
forward_http.onload = function(e){
var response = JSON.parse(forward_http.responseText);
var geo = response.results[0].geometry.location;
var forward_annotation = Ti.Map.createAnnotation({
animate:true,
pincolor: Titanium.Map.ANNOTATION_RED,
title:'目的地',
subtitle:address,
latitude:geo.lat,
longitude:geo.lng
});
map.addAnnotation(forward_annotation);
map.setRegion({latitude:geo.lat,longitude:geo.lng, latitudeDeta:0.1, longitudeDelta:0.1});
map.addRoute({
name:'道順',
width: 8,
points:[{latitude:geo.lat, longitude:geo.lng}, {latitude:current_position.latitude,longitude:current_position.longitude}],
color:'Red'
});
var deg = get_dir(current_position.latitude, current_position.longitude, geo.lat, geo.lng);
update_compass(deg);
};
forward_http.open('GET', forward_url);
forward_http.send();
});
};
http.open('GET', url);
http.send();
});
return self;
};
module.exports = ApplicationWindow;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment