Created
October 10, 2012 14:22
-
-
Save yagitoshiro/3865944 to your computer and use it in GitHub Desktop.
地名や住所を指定すると現在位置から見た方位角を大雑把に出してその地点まで直線を引いてコンパスを動かすサンプル
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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