GeoLocation API do HTML5

Nesta semana iremos abordar um tema um tanto curioso e novo para alguns, a API de GeoLocation do novo HTML. Mas você sabe exatamente o que significa GeoLocalização? Geolocalização é a identificação da localização geográfica do mundo real de um objeto, ou seja, podemos nos referir à prática de avaliar a localização.

Na grande maioria das aplicações, três formatos de localização são citados para que possamos descobrir a posição de um objeto, elas são: Triangulação GPRS, GeoLocalização por IP e o GPS. Entretanto, estas não são as únicas tecnologias que podem realizar esta atividade, existe outro agente que utiliza algumas destas combinações de métodos para retornar a localização.

Mas o que a API nos retorna? Ela basicamente nos retorna os valores de latitude, o qual é o ponto norte/sul e a longitude o ponto leste/oeste.

Quais são os browsers e sistemas móveis que suportam esta API?

  • Android 2.0+
  • iPhone 3.0+
  • Blackberry 5.0+
  • Palm WebOS 2.0+
  • Firefox 3.5+
  • Chrome 5+

Bom, chega de conceitos e vamos ao que interessa. Para que você possa trabalhar com a API é simples, você deve apenas inserir a linha de código abaixo para que seja possível obter a posição do objeto.

navigator.geolocation.getCurrentPosition(showpos)

Note que a função showpos é um callback, ela irá receber um objeto de posição:

function showpos(position){
  lat=position.coords.latitude
  lon=position.coords.longitude
  alert('Your position: '+lat+','+lon)
}

Como você pode notar este é apenas um simples exemplo de código que pode ser realizado, claro que você pode e deve inserir outras funcionalidades como, por exemplo: um mapa ou utilizar chamadas em Ajax e entre outras possibilidades para o seu sistema.

Mas para que você possa visualizar um exemplo completo, estamos disponibilizando um código abaixo com um exemplo completo e com mapa, para que assim você possa estuda-lo. Mas a nossa passagem pela tecnologia HTML5 não termina por aqui, no próximo post iremos falar sobre a Storage API e suas três formas de persistência de dados.

<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset=utf-8>
<meta name="viewport" content="width=620">
<title>Mobiltec: GeoLocation</title>
</head>
<body>
<section id="wrapper">
    <header>
      <h1>Mobiltec Html5 GeoLocation</h1>
    </header>
<meta name="viewport" content="width=620" />

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
    <article>
      <p>Localizando a sua posi&ccedil;&atilde;o: <span id="status">buscando...</span></p>
    </article>
<script>
function success(position) {
  var s = document.querySelector('#status');

  if (s.className == 'success') {
    return;
  }

  s.innerHTML = "Voc&ecirc; foi Localizado!!!";
  s.className = 'success';

  var mapcanvas = document.createElement('div');
  mapcanvas.id = 'mapcanvas';
  mapcanvas.style.height = '400px';
  mapcanvas.style.width = '560px';

  document.querySelector('article').appendChild(mapcanvas);

  var latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
  var myOptions = {
    zoom: 15,
    center: latlng,
    mapTypeControl: false,
    navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL},
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  var map = new google.maps.Map(document.getElementById("mapcanvas"), myOptions);

  var marker = new google.maps.Marker({
      position: latlng,
      map: map,
      title:"You are here! (at least within a "+position.coords.accuracy+" meter radius)"
  });
}

function error(msg) {
  var s = document.querySelector('#status');
  s.innerHTML = typeof msg == 'string' ? msg : "Erro ao localizar";
  s.className = 'fail';

}

if (navigator.geolocation) {
  navigator.geolocation.getCurrentPosition(success, error);
} else {
  error('not supported');
}

</script>
</section>
<script>
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script>
try {
var pageTracker = _gat._getTracker("UA-1656750-18");
pageTracker._trackPageview();
} catch(err) {}</script>
</body>
</html>

 

Escrito por Marcel Guinther

Introdução ao HTML5

Nesta semana daremos início a um assunto que é cada vez mais pertinente para os desenvolvedores web e mobile: o HTML5. Um dos conceitos que esta linguagem propõe,  já foi abordado em um dos nossos artigos passados Multiplataforma, além deste conceito o HTML5 está se tornando um aliado de extrema importância para todos que estão trabalhando em projetos voltados a web services independente da plataforma utilizada.

O que é HTML5?

 HTML5 é a mais recente versão do HTML, que está sendo desenvolvida pela W3C e outros parceiros. Esta linguagem de marcação tem como um dos seus principais objetivos facilitar a manipulação de elementos, possibilitando que o desenvolvedor seja capaz de modificar características de objetos de uma forma não intrusiva e transparente ao usuário final.

Nesta nova versão, podemos notar novas tags e a modificação de tags já existentes. Nas versões anteriores não existia um padrão universal para a criação de seções comuns e específicas como, por exemplo, cabeçalho, menu, rodapé entre outros. Não havia uma padronização de nomenclatura de Classes, ID’s e tags. O HTML5 tenta trazer o conceito de escrever código e organizar a informação na página, facilitando a leitura para seres humanos. Traz mais semântica com menos código, promove uma maior interatividade sem a utilização de plugins e sem perda de desempenho. Alem desta características um fato importante nesta nova versão é a sua estrutura semântica.

 
Características do HTML5

DocType
HTML 4.01

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

XHTML 1.0

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

HTML5

<!DOCTYPE html>

Charset
HTML 4.01

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

XHTML 1.0

<?xml version="1.0" encoding="UTF-8"?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

HTML5

<meta charset="utf-8">

 
Estrutura Semântica
head = informação básica do menu de acessibilidade para celulares
header = cabeçalho da página
article = conteúdo
sidebar = barra lateral
footer = rodapé


 
 
 
 
 
 
 
 
 
 
 
Formulários
O HTML5 traz um novo conceito em formulários, a fim de facilitar o desenvolvimento em relação a validações do site ou aplicação.

<input type="number">
<input type="search">
<input type="range">
<input type="email">
<input type="date">
<input type="url">
<input type="week">

 
SVG
No HTML5 o formato SVG (Scalable Vectorial Graphics) pode ser embutido diretamente no documento com o uso do elemento img

<img src="imagens/rabisco.svg" alt="Rabisco em SVG" />
<svg >
<rect width="90" height="60" x="10" y="100" fill="#00FFCC" stroke="#FF0000" stroke-width="3" />
</svg>

 
Novas APIs

Geolocalização
Esta é uma das novas APIs que está sendo lançada junto ao HTML5. A partir desta API será possível verificar a localização do dispositivo ou da máquina através do próprio browser.

<p id="demo">Clique no botão para receber as suas cordenadas:</p>
<button onclick="getLocation()">Try It</button>
<script>
var x=document.getElementById("demo");
function getLocation()
  {
  if (navigator.geolocation)
    {
    navigator.geolocation.getCurrentPosition(showPosition);
    }
  else{x.innerHTML="O seu browser não suporta GeoLocation.";}
  }
function showPosition(position)
  {
  x.innerHTML="Latitude: " + position.coords.latitude +
  "<br />Longitude: " + position.coords.longitude;
  }
</script>

 
Canvas
O elemento Canvas é usado para desenhar gráficos, em tempo real, através de scripts (geralmente JavaScript), ele elemento é apenas um recipiente para gráficos, você deve usar um script para realmente extrair os gráficos.

<canvas id="myCanvas" width="200" height="100" style="border:1px solid #c3c3c3;">
</canvas>

<script type="text/javascript">

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.fillStyle="#FF0000";
ctx.fillRect(0,0,150,75);

 
Múltimidia
A tag de vídeo é uma das principais novidades do HTML5 atualmente já está sendo utilizada pelo Youtube entre outras empresas, com o uso desta tag gradativamente o Flash deverá perder espaço como um componente de vídeo.

<video width="320" height="240" controls="controls">
  <source src="movie.mp4" type="video/mp4" />
  <source src="movie.ogg" type="video/ogg" />
  Your browser does not support the video tag.
</video>

 
Web Storage
Com HTML5, páginas da web podem armazenar dados localmente no navegador do usuário.
Anteriormente, isso era feito com cookies. No entanto, armazenamento na Web é mais seguro e mais rápido. Os dados são armazenados em pares chave / valor, e uma página web só pode acessar os dados armazenados por si só.
 
Aplicação Offline
O HTML5 possui uma API para que você possar criar uma aplicação online, mas que possa trablhar offline quando necessário.O HTML indica ao browser elementos que deverão ser necessários e serem postos em cache para que a aplicação funcione offline.

Lista de Browsers que suportam

  • Firefox 3.5 +;
  • Chrome 9 +;
  • Opera 10.6 +;
  • Safari 5+;
  • IE 9 +;
     Mobile
  • iOS 3.2+;
  • Android 2.1+;
  • Opera Mobile 11+;

Estes são apenas algumas características deste “poderoso” HTML, certamente o HTML5 irá entrar no mercado gradativamente e facilitará a vida de desenvolvedores tanto no mercado web como no mobile, em uma nova oportunidade iremos abordar alguns cenários com estas APIs mais detalhadamente com exemplo de aplicações concretas.

Escrito por Marcel Guinther

Desenvolvimento Mobile Multiplataforma com Phonegap

No post desta semana iremos abordar algumas caracteristicas de um framework que está crescendo cada dia mais no mercado mobile, o Phonegap. Até o momento tem registrado cerca de 40 mil downloads realizados por mês. A empresa já contabilizou mais de 600 mil downloads até a primeira quinzena do mês de outubro.

Quando uma equipe de desenvolvimento tem como missão implementar uma aplicação, que deseja que seja funcional em todos os dispositivos móveis, de diferentes plataformas que a empresa tem como interesse alcançar no mercado mobile, uma decisão é de extrema importância: desenvolver uma app exclusiva para cada plataforma utilizando ferramentas que os fornecedores disponibilizam ou criar uma app com um framework multiplataforma? Para ajudar na resposta a esta questão, algumas empresas estão saltando na frente e ofertando frameworks multiplataforma, entre elas: Rhodes, Appcelerator, Jquery Mobile, XUI e PhoneGap que iremos abordar neste artigo.

O Phonegap é uma tecnologia open source que tem como principal característica desenvolver aplicativos webapp, que podem ser funcionais nos ambientes online ou offline. Para suprir as necessidades das linguagens nativas de cada plataforma, ele utiliza dos melhores padrões de web com o HTML5, CSS3 e o Javascript, tratando de uma forma bastante simples o seu desenvolvimento. Com uma interface baseada em telas de HTML, a sua lógica de programação e os seus recursos de dispositivos são tratados pelo Javascript tendo a possiblidade de realizar combinações com diversos scripts. Estes são: Jquery, MooTools e XUI. Dentro da lógica no javascript é realizado a comunicação com a API do PhoneGap.  Devido a grande quantidade de aparelhos, os quais possuem diversas resoluções e tamanhos de tela, os arquivos CSS são encarregados de exibir a aplicação corretamente. É importante lembrar que junto a estes novos padrões, está presente o Canvas, que em testes realizados foi notado um ótimo desempenho com o framework.

Além da criação de páginas web que rodarão nos dispositivos móveis através de controles chamados WEBVIEW, que permitem a exibição de HTML, o Phonegap possui suporte a alguns recursos de extrema utilidade como: accelerometer, camera, compass, contacts, file, geolocation, media, network, notification (alert), notification (sound), notification (vibration) e storage imbutidos no html.

Veja a compatibilidade destes recurso com as plataformas suportadas pela API:

Mesmo que o sistema que você está desenvolvendo seja multiplataforma, será necessário instalar todas as IDE’s que você deseja compilar o seu sistema, lembrando que cada plataforma tem as suas peculiaridades. Se você desenvolveu sua aplicação no Eclipse com a API para o Android você precisará instalar em um Mac a IDE XCode, instalar o plugin do framework e inserir os arquivos já desenvolvidos. Feito isso você poderá compilar a estrutura e realizar os testes de compatibilidade do seu sistema. Caso tenha o interesse em verificar como devem ser feitas as instalações das IDE’s, acesse este link, que possui um  passo-a-passo de todas as instalações de plataformas e plugins.

É possível notar que o Framework está sofrendo muitas atualizações, a fim de realizar melhorias em suas funções e compatibilidades. Entretanto, o framework ainda é muito limitado. Em alguns testes realizados com simuladores e dispositivos, foi possível verificar uma melhor aceitação por parte da plataforma Android em relação a da Apple. Por ter um estilo multiplataforma de desenvolver, é necessário que as suas funcionalidades estejam implementadas em todas as plataformas ou grande parte delas.

De toda a forma, a tecnologia é indicada para projetos de menor porte ou para projetos que tenham como padrões as funcionalidades já existentes no framework e que sejam compativeis com as plataformas desejadas. Em nossa pesquisa, um dos fatores de maior curiosidade era como o framework se comporta em relação a banco de dados. A tecnologia utiliza como padrão o SQLite. Em alguns casos no qual a plataforma não possui este Database, o framework sugere que seja utilizado o LocalStorage que não vem a ser um Database, mas sim uma API junto ao HTML5, que permite criar dados do lado do cliente, como se fossem cookies. Em relação aos cookies o LocalStorage tem uma vantagem, pelo fato de não possuir data para a expiração. Sabemos que SQLite e LocalStorage são tecnologia diferentes, porém é uma opção que o Phonegap nos oferece.

Abaixo inserimos um script de conexão a um DataBase SQLite:

<script charset="utf-8" type="text/javascript" src="phonegap-1.0.0.js"></script><script charset="utf-8" type="text/javascript">// <![CDATA[
  		function onLoad() { 			//Faz rodar a funcao JS 	    	navigator.device.deviceReady(); 		}  		// Cria a instancia do DB 		function createDB() {   			// Cria u apenas abre a DB 			var db = window.openDatabase("Teste", "1.0", "Phonegap DB", 20000); 			// Popula o DB 			db.transaction(populateDB, errorCB, successCB);			 		} 		// Funcao pra popular o banco 		function populateDB(tx) { 			tx.executeSql('DROP TABLE IF EXISTS DEMO');   			tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, nome VARCHAR(100))'); 			tx.executeSql('INSERT INTO DEMO (id, nome) VALUES (1, "Marcel")'); 			tx.executeSql('INSERT INTO DEMO (id, nome) VALUES (2, "Mobiltec")'); 		}  	// Verifica erro na funcao 		function errorCB(tx, err) { 			navigator.notification.alert("error: " + err); 		} 		// Verifica se foi realizada com sucesso 		function successCB() { 			navigator.notification.alert('DB criada e populada com sucesso');  		} 		// faz rodar a funcao do select 		function selectDB() {   			var db = window.openDatabase("Teste", "1.0", "Phonegap DB", 20000); 			db.transaction(queryDB);			 		} 		// select da funcao 		function queryDB(tx) { 			tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB); 		} 		// display com resultado da funcao queryDB 		function querySuccess(tx, results) {      			var len = results.rows.length; 			navigator.notification.alert('Quantidade de Rows inseridas: ' + len); 			if (len > 0) {
				for (var i=0;i<len;i++) { 					navigator.notification.alert('ID: ' + results.rows.item(i).id + ' Nome: ' + results.rows.item(i).nome); 				} 			} 		} 		//funcao para printar resultado na forma de display 		function displaySelect(){ 			var db = window.openDatabase("Teste", "1.0", "Phonegap DB", 20000); 			db.transaction(selectDisplay); 		} 		function selectDisplay(tx) { 			tx.executeSql('SELECT * FROM DEMO', [], querySuccessDisplay, errorCB); 		} 		function querySuccessDisplay(tx, results) {      			var len = results.rows.length; 			document.getElementById("RowsInseridas").innerHTML=('Quantidade de Rows inseridas: ' + len); 			if (len > 0) {
				for (var i=0;i<len;i++) { 					document.getElementById("RowsInfo").innerHTML+='ID: ' + results.rows.item(i).id + ' Nome: ' + results.rows.item(i).nome+''; 				} 			} 		}>
// ]]></script>
<input onclick="createDB();" type="button" value="Criar uma Database em SQLite" />
<input onclick="selectDB();" type="button" value="Informacoes da DB" /> <button onclick="displaySelect()" type="button">Display Select</button>

Caso queria conferir o framework e tirar as suas próprias conclusões acesse: http://www.phonegap.com .

Caso tenha o interesse de realizar o download da API clique no link: Download PhoneGap

Escrito por Marcel Guinther