Fix for internal bug.
[profile/ivi/ico-uxf-homescreen-sample-apps.git] / ico-app-samplenavi / res / Map / js / navi.js
1 /*
2  * Copyright (c) 2013, TOYOTA MOTOR CORPORATION.
3  *
4  * This program is licensed under the terms and conditions of the 
5  * Apache License, version 2.0.  The full text of the Apache License is at
6  * http://www.apache.org/licenses/LICENSE-2.0
7  *
8  */
9
10 /**
11  * Navigation Map Class
12  */
13
14 var Navigation = function() {
15     var _myLatLng;                                          // Current Location
16     var _lat = TMP_LAT;                                     // Current Latitude
17     var _lng = TMP_LON;                                     // Current Longitude
18     var _dir;                                               // Current Direction
19     var _map;                                               // map
20     var _dirDisplay;                                        // DirectionsRenderer Object
21     var _dirService;                                        // DirectionsService Object
22     var _carMarker;                                         // Current Location Marker
23     var _nativeAccessor;                                    // WebSocket accessor (samplenavi)
24     var _seqnum = SEQUENCE_MODE.START;                      // Sequence
25     var _routeStr = '';                                     // Route Info
26     
27     /*
28      *  initialize
29      */
30     this.initialize = function() {
31         $('#address').text('For samplenaviConnection');
32
33         // event bind
34         $(document).bind('recvSeqNxt', function(event, data) {
35             recvSeqNxt(data);
36         });
37         $(document).bind('recvCarInfo', function(event, data) {
38             recvCarinfo(data);
39         });
40         // Initialize Location
41         _myLatLng = new google.maps.LatLng(_lat, _lng);
42
43         // MAP create
44         var mapOptions = {
45             zoom: DEFAULT_ZOOM,                                 // zoom value
46             mapTypeId: google.maps.MapTypeId.ROADMAP,           // MAP TYPE
47             center: _myLatLng                                   // Initial Position
48         };
49             
50         _map = new google.maps.Map($('#map_canvas').get(0), mapOptions);
51         
52         // Create current position marker
53         _carMarker = new google.maps.Marker({
54             map: _map,
55             position: _myLatLng,
56             zIndex: 3
57         });
58         
59         // Set DirectionRendererOption
60         var rendererOptions = {
61             draggable: false,
62             preserveViewport:true
63         };
64         
65         _dirDisplay = new google.maps.DirectionsRenderer(rendererOptions);
66         _dirDisplay.setMap(_map);
67         _dirDisplay.setOptions( {suppressMarkers: true} );      // Hide markers
68         _dirService = new google.maps.DirectionsService();
69         
70         // Create WebSocket Accessor(samplenavi)
71         _nativeAccessor = new NativeAppAccessor();
72         _nativeAccessor.connectWebSocket();
73
74         // Request CONF ONSCREEN
75         _seqnum = SEQUENCE_MODE.CONF;
76     }
77
78     /**
79      *  finalize
80      *
81      */
82     this.finalize = function() {
83         _nativeAccessor.disconnectWebSocket();
84     }
85
86     /**
87      *  Move Current Location
88      *
89      */
90     function changeLatLng() {
91         _myLatLng = new google.maps.LatLng(_lat, _lng);
92         _map.panTo(_myLatLng);
93         
94         // Move Marker
95         _carMarker.setPosition(_myLatLng);
96     }
97
98     /**
99      *  Set Route
100      */
101     function setRoute() {
102         if (SHOWING_ROUTE == 1) {
103             setRoute1();
104         } else if (SHOWING_ROUTE == 2) {
105             setRoute2();
106         } else if (SHOWING_ROUTE == 3) {
107             setRoute3();
108         }
109     }
110
111     /**
112      *  Set Route(Route 1)
113      *
114      */
115     function setRoute1() {
116         // Local variable
117         var startStr = String(START_LAT) + ',' + String(START_LNG);
118         var goalStr = String(GOAL_LAT) + ',' + String(GOAL_LNG);
119         
120         // Route request
121         var request = {
122                 origin: startStr,
123                 destination: goalStr,
124                 waypoints: [
125                     ],
126                 travelMode: google.maps.DirectionsTravelMode.DRIVING,   // Set DrivingMode(Car)
127                 unitSystem: google.maps.DirectionsUnitSystem.METRIC,    // Set Unit
128                 optimizeWaypoints: true,                                // optimize route
129                 avoidHighways: true,                                    // Avoid highways
130                 avoidTolls: true                                        // Avoid tall road
131         };
132         
133         _dirService.route(request, function(response, status) {
134             if (status == google.maps.DirectionsStatus.OK) {
135                 _dirDisplay.setDirections(response);
136
137                 _routeStr = "<route>";
138                 
139                 // Set route info
140                 for( var i = 0; i < (response.routes[0].overview_path.length); i++ ) {
141                     var lat = response.routes[0].overview_path[i].lat();
142                     var lng = response.routes[0].overview_path[i].lng();
143                     _routeStr += String( lng ) + ',' + String( lat ) + "<BR>";
144                 }
145                 _routeStr += "</route>";
146                 
147                 // Send route
148                 _nativeAccessor.sendRoute( _routeStr );
149             }
150             else {
151                 alert('google maps error:' + status);
152             }
153         })
154     }
155     
156     /**
157      *  Set Route(Route 2)
158      *
159      */
160     function setRoute2() {
161         // Route request
162         var request = {
163                 origin: "35.47945,139.40026",
164                 destination: "35.61689,139.44791",
165                 waypoints: [
166                     { location: "35.534845,139.437477" }
167                     ],
168                 travelMode: google.maps.DirectionsTravelMode.DRIVING,   // Set DrivingMode(Car)
169                 unitSystem: google.maps.DirectionsUnitSystem.METRIC,    // Set Unit
170                 optimizeWaypoints: false,                               // optimize route
171                 avoidHighways: true,                                    // Avoid highways
172                 avoidTolls: true                                        // Avoid tall road
173         };
174         
175         _dirService.route(request, function(response, status) {
176             if (status == google.maps.DirectionsStatus.OK) {
177                 _dirDisplay.setDirections(response);
178                 _routeStr = "<route>";
179                 
180                 // Set route info
181                 for( var i = 0; i < (response[0].overview_path.length); i++ ) {
182                     var lat = response[0].overview_path[i].lat();
183                     var lng = response[0].overview_path[i].lng();
184                     _routeStr += String( lng ) + ',' + String( lat ) + "<BR>";
185                 }
186                 _routeStr += "</route>";
187                 
188                 // Send route
189                 _nativeAccessor.sendRoute( _routeStr );
190             }
191             else {
192                 alert('google maps error:' + status);
193             }
194         })
195     }
196     
197     /**
198      *  Set Route(Route 3)
199      *
200      */
201     function setRoute3() {
202         // Route request
203         var request = {
204             origin: "35.45153,139.2125",
205             destination: "35.43037,139.21579",
206                 waypoints: [
207                     ],
208                 travelMode: google.maps.DirectionsTravelMode.DRIVING,   // Set DrivingMode(Car)
209                 unitSystem: google.maps.DirectionsUnitSystem.METRIC,    // Set Unit
210                 optimizeWaypoints: false,                               // optimize route
211                 avoidHighways: true,                                    // Avoid highways
212                 avoidTolls: true                                        // Avoid tall road
213         };
214         
215         _dirService.route(request, function(response, status) {
216             if (status == google.maps.DirectionsStatus.OK) {
217                 _dirDisplay.setDirections(response);
218                 _routeStr = "<route>";
219                 
220                 // Set root info
221                 for( var i = 0; i < (response[0].overview_path.length); i++ ) {
222                     var lat = response[0].overview_path[i].lat();
223                     var lng = response[0].overview_path[i].lng();
224                     _routeStr += String( lng ) + ',' + String( lat ) + "<BR>";
225                 }
226                 _routeStr += "</route>";
227                 
228                 // Send route
229                 _nativeAccessor.sendRoute( _routeStr );
230             }
231             else {
232                 alert('google maps error:' + status);
233             }
234         })
235     }
236
237     /**
238      *  Receive CarInfo
239          *
240      *  @param  data    CarInfo data
241          *
242      */
243     function recvCarinfo(data) {
244         _lat = data.lat_val;
245         _lng = data.lon_val;
246         changeLatLng();
247     }
248
249     /**
250      *  Receive Change Sequence
251      *
252      *  @param  message     Receive message
253          *
254      */
255     function recvSeqNxt(data) {
256         if (data == 'TOUCH ' + EDJE_PATH + EDJE_CONF_NAME + ' nai_01' ) {
257             _nativeAccessor.sendReqDistOnScreen();
258             _seqnum = SEQUENCE_MODE.DIST;
259         } else if (data == 'TOUCH ' + EDJE_PATH + EDJE_DIST_NAME + ' nai_12') {
260             _nativeAccessor.sendReqNaviStart();
261             _nativeAccessor.sendReqCloseOnScreen();
262             _seqnum = SEQUENCE_MODE.NAVI;
263
264             setRoute();
265         } else if (data == 'RESULT SUCCESS') {
266             $('#address').text("OnScreen Request Success.");
267         } else if (data == 'RESULT FAILED') {
268             $('#address').text("OnScreen Request Failed.");
269         }
270     }
271 }
272