Bus1me

356
-1

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
356
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Bus1me

  1. 1. Rede social para compartilhamento de geolocalização
  2. 2. Mobilidade Urbana“Uma cidade verdadeiramente avançada é aquelaem que os ricos usam transporte público,caminham e vão a parques. O contrário disso équando eles usam helicópteros...” Enrique Peñalosa, ex-prefeito de Bogotá
  3. 3. Por que Android?
  4. 4. Ocorrências de Repositórios no Github● “android”: 65452● “IOS”: 30072● “iphone”: 25039● “apple”: 3115
  5. 5. this.startPresentation(); Layout em XML● 122 linhas● 17 elementos de layout
  6. 6. <?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"android:fillViewport="true" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scrollbars="vertical" android:background="#87CEEB"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:paddingTop="5px" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:layout_width="125px" android:layout_height="wrap_content" android:textColor="#FFFFFF" android:textSize="25sp" android:gravity="right" android:text="Usuário: "/> <EditText android:id="@+id/Usuario" android:layout_width="fill_parent" android:layout_height="wrap_content"/> </LinearLayout> </LinearLayout></ScrollView>
  7. 7. JSON no Android//Cria objeto Json para enviar dadosJSONObject userData = new JSONObject();try { userData.put("hash", encryptedName); userData.put("ps", password);} catch (JSONException e) { //TODO Auto-generated catch block //Exception}
  8. 8. POST para o servidor//URL e json passados como parâmetro//Create a new HttpClient and Post HeaderString text = "";HttpClient httpclient = new DefaultHttpClient();HttpPost httppost = new HttpPost(URL);try { JSONArray postjson=new JSONArray(); postjson.put(json); // Post the data: httppost.setHeader("json",json.toString()); httppost.getParams().setParameter("jsonpost",postjson); HttpResponse response = httpclient.execute(httppost);}catch (ClientProtocolException e) { TODO Auto-generated catch block}
  9. 9. Enquanto isso, no servidor...<?php$json = $_SERVER[HTTP_JSON];//http://fahmirahman.wordpress.com$data = json_decode($json);$user = $data->hash;$password = $data->ps;//validação//testeecho $response;
  10. 10. Coordenadas do GPSfinal LocationManager mlocManager =(LocationManager)getSystemService(Context.LOCATION_SERVICE);LocationListener mlocListener = newListenerLocation();mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, mlocListener);
  11. 11. Coordenadas do GPSpublic class ListenerLocation implements LocationListener { public static float lat; public static float lon; public void onLocationChanged(Location location) { lat = (float) location.getLatitude(); lon = (float) location.getLongitude(); } public void onProviderDisabled(String provider) {} public void onProviderEnabled(String provider) {} public void onStatusChanged(String provider, int status, Bundleextras) {} public static float getLat() { return lat; } public static float getLon() { return lon; }}
  12. 12. Servicefinal Intent sendService = new Intent("SERVICE");startService(sendService);
  13. 13. Alarm Managerpublic class Alarm extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent){ PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, ""); wl.acquire(); //Put code here. wl.release(); } public void SetAlarm(Context context){ AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent i = new Intent(context, Alarm.class); PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 60 *10, pi); } public void CancelAlarm(Context context){ Intent intent = new Intent(context, Alarm.class); PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0); AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); alarmManager.cancel(sender); } }
  14. 14. GeoCooding API● Limite grátis de 2500 requisições diárias.● Coordenadas ↔ Informações (estado, país,cidade, etc.) Ex.: http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=false http://maps.googleapis.com/maps/api/geocode/json?latlng=-31.765262537003238,-52.337857211608934&sensor=false
  15. 15. Maps API● Disponível em Javascript e Flash.● Uso gratuito (até 25.000 carregamentos diáriosda biblioteca. Depois U$ 4,00/1000).● Não necessita mais de chave de registro (excetomobile).
  16. 16. Pontovar point = new google.maps.LatLng(lat, lon);//isso ainda não é um marcador Mapavar myOptions = { zoom: zoom, center: point, mapTypeId: google.maps.MapTypeId.ROADMAP}var map = new google.maps.Map(document.getElementById("map"), myOptions);
  17. 17. Marcadorvar marker = new google.maps.Marker({ position: point, map: map});marker.setMap(map);
  18. 18. Linhavar route = [];var point = new google.maps.LatLng( lat, lon );route.push( point );line = new google.maps.Polyline({ path: route, strokeColor: red, strokeOpacity: 0.8, strokeWeight: 6});line.setMap(map);
  19. 19. Círculothis.radius = 200;var populationOptions = { strokeColor: "#FF0000", strokeOpacity: 0.8, strokeWeight: 2, fillColor: "#FF0000", fillOpacity: 0.35, map: map, center: center, radius: this.radius}; this.circle = new google.maps.Circle(populationOptions); this.circle.setMap(map);Ex.: /workspace/bus1meRecover/test/mapCircle/
  20. 20. Cálculo de distâncias● B-A (arco): PI * R / 2● B-A (reta): R * sqrt(2)● d = R * (PI/2 – sqrt(2))● D = 998.7 Km
  21. 21. A trajetória numa casca (esférica) de noz● Ponto em 3 dimensões: precisamos de 3 medidas.● Tudo bonito, MAS...
  22. 22. Algumas tretas com coordenadas geográficas● Medidas desiguais de latitude e longitude.● Equador > Greenwich (Literalmente. Chupa, Inglaterra. Free Assange)● Distâncias -> lat: 11131.94 m lon: 9464.27 m
  23. 23. Métricas Posição e Tempo geram:● Distância, velocidade média, aceleração.● Velocidade do tráfego por hora do dia.● Atraso por trecho.
  24. 24. Distância entre dois pontosfunction calculateDistanceBetweenCoordinates($lat1,$lon1, $lat2, $lon2){ $R = 6378.1; // km $dLat = deg2rad($lat2-$lat1); $dLon = deg2rad($lon2-$lon1); $lat1 = deg2rad($lat1); $lat2 = deg2rad($lat2); $a = sin($dLat/2) * sin($dLat/2) + sin($dLon/2) *sin($dLon/2) * cos($lat1) * cos($lat2); $c = 2 * atan2(sqrt($a), sqrt(1-$a)); $d = $R * $c* 1000; return $d;}
  25. 25. Distância entre dois pontosvar myLatlng = new google.maps.LatLng(lat, lon);var myLatlng2 = new google.maps.LatLng(lat2, lon2);distance = google.maps.geometry.spherical. computeDistanceBetween(myLatlng, myLatlng2);
  26. 26. Muitos Objetos no Mapa● Coordenadas para traçar uma rota nãorepresentam grande tráfego de rede, mas termuitos pontos atrapalha.● Ex.: http://pelotas.com.br/pelotasmelhor/mapa/
  27. 27. Taxa de NyquistFrequência de amostragem mínima parareproduzir um sinal a partir de suas amostras. Fs > 2*Fb
  28. 28. Olhando de perto, tudo é função● Decompondo gráficos em partes podemos analisar os pedaços como se fossem funções.
  29. 29. Ponto dentro de polígono● Como detectar se um ponto está dentro de um polígono qualquer?
  30. 30. Ao infinito e além● Coloca-se um ponto no infinito (ou o mais perto disso que se conseguir)● Traça-se uma reta do ponto dentro do polígono ao ponto no infinito.● Verifica cruzamentos nas retas do polígono.
  31. 31. Encontrando o ponto mais próximo//equação da distância entre dois pontos$query = "SELECT lat, lon, minor_angle,major_angle, zone FROM points WHERE 1 ORDER BY 6378.1 * 2 * atan2( ( sin(radians( $lat - lat )/2) *sin( radians( $lat - lat ) /2) +sin( radians($lon - lon) /2) *sin( radians($lon - lon) /2) *cos( radians(lat) ) * cos( radians($lat) ) ), (1 - sin(radians( $lat - lat )/2) *sin( radians( $lat - lat ) /2) +sin( radians($lon - lon) /2) * sin( radians($lon- lon) /2) * cos( radians(lat) ) *cos( radians($lat) ) ) ) * 1000";
  32. 32. Próximos PassosNode.jsAprimoramento do algoritmo de buscasEconomia de energia
  33. 33. Obrigado!
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×