segunda-feira, 2 de maio de 2016

iMapIt 3.0 - Guia Rápido

No seu primeiro uso da aplicação iMapIt...
A primeira vez em que a aplicação iMapIt for aberta aparecerá a tela abaixo.


Clique em “Permitir” para que iMapIt possa ter acesso ao GPS do aparelho e identificar sua localização para poder realizar o mapeamento desejado. Sua localização é utilizada apenas com esse propósito.
Apos autorizado o acesso à sua localização, aparece seguinte tela:



Esta é a tela do mapa.
O ponto azul indica sua localização nesse momento.
Você já tem um projeto criado “Sem Nome” e para iniciar suas medições basta:

1) Escolher o tipo de feição você quer mapear;
     a. Se você quiser mapear pontos, basta deixar o ícone
     do jeito em que está;
     b. Se você quiser mapear linhas, clique no ícone acima que ele passará a ser o ícone de uma linha:

     c. Se você quiser mapear polígonos, clique novamente no mesmo botão, que ele passará a ser o ícone de um polígono:

     d. Vamos usar um polígono para o nosso exemplo, isto é, vamos mapear uma área;

2) Se posicionar no início do local a ser medido;
     a. Posicione-se no primeiro vértice da área a ser medida;

3) Iniciar a medição;
     a. Observe se o indicador de precisão do GPS está no máximo. Se não estiver, aguarde até que esteja verde até o topo;
     b. Assim:

     c. Clique no botão “Iniciar”;
     d. O botão “MapIt” aparecerá dentro do mapa, no canto inferior direito;
     e. A cada vez que você clicar em “MapIt” você salvará sua posição atual como um novo vértice do seu polígono. O método normal é: marque o ponto inicial, caminhe até o ponto seguinte, marque novamente, caminhe de novo e marque, e assim por diante até que chegue ao último. Ao encerrar iMapIt ligará automaticamente o último ponto medido ao primeiro;

4) Terminar a medição dessa feição;
     a. Clique no botão “Parar”;

5) Para conhecer a área do polígono;
     a. Clique no pino que foi colocado no polígono;
     b. Aparecerá um balão com o tipo de preenchimento do polígono e o valor da área;
          i. Querendo alterar o tipo de preenchimento, clique sobre a imagem do polígono que aparece no balão;
          ii. Querendo visualizar maiores detalhes sobre a medição, incluindo ver a área em outras unidades, clique sobre o texto que aparece no balão;

quarta-feira, 10 de julho de 2013

iMapIt Pro 2.1 Funcionalidade de Transferencia do Arquivo Exportado para um Site Web Expandida

No artigo anterior descrevemos a nova funcionalidade da aplicação iMapIt Pro para transferir arquivos via Web, introduzida na versão 2.0.
Na versão 2.1, esta funcionalidade da aplicação foi expandida para enviar uma informação a mais através da Web, juntamente com o arquivo exportado: foi incluído o parâmetro Post "DeviceId".
O Device ID, ou identificação do dispositivo, é um código de identificação única do seu iPhone ou iPad, que pode ser tratada no servidor que receber o arquivo para se definir autorizações, acessos, ou simplesmente identificar a origem do arquivo recebido.

O que muda na recepção do arquivo no servidor?

O script PHP intitulado "imapit_uploader.php", apresentado no artigo anterior como exemplo para recepção do arquivo exportado, agora pode receber e tratar esse novo parâmetro. No exemplo abaixo o DeviceId é apenas apresentado na tela de resposta do recebimento do arquivo. Veja o fonte do script PHP atualizado abaixo.

------------------------------------------------------------- Início do arquivo PHP (não inclua essa linha)

<?php

// iMapIt Uploader
// Exemplo de script php para upload do arquivo enviado pela aplicação iMapIt

// Pasta onde o arquivo vai ser salvo
$_UP['pasta'] = 'uploads/';

// Tamanho máximo do arquivo (em Bytes)
$_UP['tamanho'] = 1024 * 1024 * 2; // 2Mb

// Array com as extensões permitidas
$_UP['extensoes'] = array('dxf', 'kml', 'gpx');

// Renomeia o arquivo? (Se true, o arquivo será salvo como .jpg e um nome único)
$_UP['renomeia'] = false;

// Array com os tipos de erros de upload do PHP
$_UP['erros'][0] = 'Não houve erro';
$_UP['erros'][1] = 'O arquivo no upload é maior do que o limite do PHP';
$_UP['erros'][2] = 'O arquivo ultrapassa o limite de tamanho especifiado no HTML';
$_UP['erros'][3] = 'O upload do arquivo foi feito parcialmente';
$_UP['erros'][4] = 'Não foi feito o upload do arquivo';

// Desloca a mensagem final algumas linhas para baixo
echo "<br><br><br>--- iMapIt Uploader ---<br><br>";

// Apresenta device ID recebido na variavel POST DeviceID
echo "Device ID:" . $_POST['DeviceId'] . "<br><br>";
    
// Apresenta o nome do arquivo
echo "Arquivo: " . $_FILES['iMapIt_File']['name'] . "<br><br>";

// Verifica se houve algum erro com o upload. Se sim, exibe a mensagem do erro
if ($_FILES['iMapIt_File']['error'] != 0) {
die("Não foi possível fazer o upload, erro:<br />" . $_UP['erros'][$_FILES['iMapIt_File']['error']]);
exit; // Para a execução do script
}

// Caso script chegue a esse ponto, não houve erro com o upload e o PHP pode continuar

// Faz a verificação da extensão do arquivo
$extensao = strtolower(end(explode('.', $_FILES['iMapIt_File']['name'])));
if (array_search($extensao, $_UP['extensoes']) === false) {
    echo "Por favor, são permitidos apenas arquivos com as extensões: dxf, kml ou gpx";
}

// Faz a verificação do tamanho do arquivo
else if ($_UP['tamanho'] < $_FILES['iMapIt_File']['size']) {
echo "O arquivo enviado é muito grande, envie arquivos de até 2Mb.";
}

// O arquivo passou em todas as verificações, hora de tentar movê-lo para a pasta
else {
// Primeiro verifica se deve trocar o nome do arquivo
if ($_UP['renomeia'] == true) {
    // Cria um nome baseado no UNIX TIMESTAMP atual e com extensão .jpg
    $nome_final = time().'.jpg';
} else {
    // Mantém o nome original do arquivo
    $nome_final = $_FILES['iMapIt_File']['name'];
}

// Depois verifica se é possível mover o arquivo para a pasta escolhida
if (move_uploaded_file($_FILES['iMapIt_File']['tmp_name'], $_UP['pasta'] .$nome_final)) {
    // Upload efetuado com sucesso, exibe uma mensagem
    echo "Upload realizado com sucesso!";
    } else {
        // Não foi possível fazer o upload, provavelmente a pasta está incorreta
        echo "Não foi possível enviar o arquivo, tente novamente";
    }
}
?>
---------------------------------------------------------------- Fim do arquivo PHP (não inclua essa linha)

Da mesma forma, o script HTML intitulado "teste_upload.html", apresentado no artigo anterior para testar o script de upload, foi modificado para enviar esse novo parâmetro. Veja o fonte do script HTML atualizado abaixo.

---------------------------------------------------------------- Fim do arquivo HTML (não inclua essa linha)

<!DOCTYPE HTML>
<HTML>
    <HEAD>
            <TITLE>iMapIt Loader Test</TITLE>
            <META http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </HEAD>
    <BODY>
            <FORM id="frm" name="iMapIt_Form" action="imapit_uploader.php" method="POST" enctype="multipart/form-data">
                Selecione um arquivo para transferir<br>
                <INPUT id="iMapIt_File" name="iMapIt_File" type="file" style="width:100%;"/><br>
                Identificação do Dispositivo: <INPUT id="DeviceId" name="DeviceId" type="text" style="width:40%;" /> <br>
                <INPUT id="submit" type="submit" value="Submit" />
                </FORM>
    </BODY>
</HTML>

---------------------------------------------------------------- Fim do arquivo HTML (não inclua essa linha)

sábado, 16 de março de 2013

iMapIt Pro 2.0 Funcionalidade de Transferencia do Arquivo Exportado para um Site Web

Uma das principais funcionalidades da versão 2.0 do iMapIt Pro é permitir que o arquivo exportado, agora nos formados DXF, KML ou GPX, além de poder ser extraído via cabo, pela porta USB e enviado por e-mail, também pode ser enviado via web para um servidor internet.

O objetivo desse artigo é explicar como a funcionalidade de envio do arquivo via internet pode ser utilizada.
Ao se selecionar a opção "Web" sob "Enviar para:" será apresentado um campo logo abaixo que permitirá a digitação do endereço de internet para o qual o arquivo deverá ser enviado.


Ao se clicar no botão Exportar arquivo será enviado para o endereço informado e uma tela de resposta será apresentada com o retorno do servidor.


Porém, para que esse envio funcione corretamente, o servidor indicado no endereço de internet deverá estar preparado para receber o arquivo. Portanto, você terá que ter acesso a este servidor, para poder configura-lo de forma a receber o arquivo e salva-lo onde julgar apropriado dentro do servidor.

Como configurar o servidor para receber o arquivo?

Desenvolvemos dois exemplos de scripts para servidores de internet que podem ser utilizados para receber o arquivo enviado pelo iMapIt Pro.
O primeiro exemplo é um script PHP. PHP é uma das linguagens de programação para servidores de internet. Este tipo de arquivo funciona em servidores Apache.
Seguindo o exemplo, o arquivo abaixo deve ser salvo com o nome "imapit_uploader.php".

------------------------------------------------------------- Início do arquivo PHP (não inclua essa linha)

<?php

// iMapIt Uploader
// Exemplo de script php para upload do arquivo enviado pela aplicação iMapIt

// Pasta onde o arquivo vai ser salvo
$_UP['pasta'] = 'uploads/';

// Tamanho máximo do arquivo (em Bytes)
$_UP['tamanho'] = 1024 * 1024 * 2; // 2Mb

// Array com as extensões permitidas
$_UP['extensoes'] = array('dxf', 'kml', 'gpx');

// Renomeia o arquivo? (Se true, o arquivo será salvo como .jpg e um nome único)
$_UP['renomeia'] = false;

// Array com os tipos de erros de upload do PHP
$_UP['erros'][0] = 'Não houve erro';
$_UP['erros'][1] = 'O arquivo no upload é maior do que o limite do PHP';
$_UP['erros'][2] = 'O arquivo ultrapassa o limite de tamanho especifiado no HTML';
$_UP['erros'][3] = 'O upload do arquivo foi feito parcialmente';
$_UP['erros'][4] = 'Não foi feito o upload do arquivo';

// Desloca a mensagem final algumas linhas para baixo
echo "<br><br><br>--- iMapIt Uploader ---<br>Arquivo: " . $_FILES['iMapIt_File']['name'] . "<br><br>";

// Verifica se houve algum erro com o upload. Se sim, exibe a mensagem do erro
if ($_FILES['iMapIt_File']['error'] != 0) {
die("Não foi possível fazer o upload, erro:<br />" . $_UP['erros'][$_FILES['iMapIt_File']['error']]);
exit; // Para a execução do script
}

// Caso script chegue a esse ponto, não houve erro com o upload e o PHP pode continuar

// Faz a verificação da extensão do arquivo
$extensao = strtolower(end(explode('.', $_FILES['iMapIt_File']['name'])));
if (array_search($extensao, $_UP['extensoes']) === false) {
    echo "Por favor, são permitidos apenas arquivos com as extensões: dxf, kml ou gpx";
}

// Faz a verificação do tamanho do arquivo
else if ($_UP['tamanho'] < $_FILES['iMapIt_File']['size']) {
echo "O arquivo enviado é muito grande, envie arquivos de até 2Mb.";
}

// O arquivo passou em todas as verificações, hora de tentar movê-lo para a pasta
else {
// Primeiro verifica se deve trocar o nome do arquivo
if ($_UP['renomeia'] == true) {
    // Cria um nome baseado no UNIX TIMESTAMP atual e com extensão .jpg
    $nome_final = time().'.jpg';
} else {
    // Mantém o nome original do arquivo
    $nome_final = $_FILES['iMapIt_File']['name'];
}

// Depois verifica se é possível mover o arquivo para a pasta escolhida
if (move_uploaded_file($_FILES['iMapIt_File']['tmp_name'], $_UP['pasta'] . $nome_final)) {
    // Upload efetuado com sucesso, exibe uma mensagem
    echo "Upload realizado com sucesso!";
    } else {
        // Não foi possível fazer o upload, provavelmente a pasta está incorreta
        echo "Não foi possível enviar o arquivo, tente novamente";
    }
}
?>
---------------------------------------------------------------- Fim do arquivo PHP (não inclua essa linha)


Você só precisará de um tipo de script no servidor de internet, mas vamos oferecer um outro exemplo, agora em JSP. JSP é um outro tipo de linguagem para programação de servidores de internet e funciona em servidores Apache Tomcat.
Seguindo o exemplo, o arquivo abaixo deve ser salvo com o nome "imapit_uploader.jsp".

------------------------------------------------------------- Início do arquivo JSP (não inclua essa linha)

<%@ page language="java" contentType="text/html;charset=utf-8"%>
<%request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");%>
<%@ page import="java.io.*,java.util.*, javax.servlet.*" %>
<%@ page import="javax.servlet.http.*" %>
<%@ page import="org.apache.commons.fileupload.*" %>
<%@ page import="org.apache.commons.fileupload.disk.*" %>
<%@ page import="org.apache.commons.fileupload.servlet.*" %>
<%@ page import="org.apache.commons.io.output.*" %>
<%
File file;
int MAX_FILE_SIZE = 5 * 1024 * 1024;
int MAX_MEM_SIZE = 1 *1024 * 1024;
ServletContext context = pageContext.getServletContext();
String tempFolder = context.getInitParameter("temp-folder");
String IMEI="", method="", msg="";
boolean isMultipart;
method = request.getMethod();
isMultipart = ServletFileUpload.isMultipartContent(request);

if (isMultipart && method.equalsIgnoreCase("POST")) {
DiskFileItemFactory factory = new DiskFileItemFactory();
// maximum size that will be stored in memory
factory.setSizeThreshold(MAX_MEM_SIZE);
// Location to save data that is larger than maxMemSize.
factory.setRepository(new File(tempFolder));
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(MAX_FILE_SIZE);
List items = null, fileItems = null;
FileItem item;
String fileName="";
try {
items = upload.parseRequest(request);
Iterator itr = items.iterator();
int idx;
while (itr.hasNext()) {
item = (FileItem) itr.next();
if (item.isFormField()) {
if (item.getFieldName().equalsIgnoreCase("IMEI")) 
IMEI = item.getString() + "";
} else {
if (fileItems==null) fileItems = new ArrayList<FileItem>();
fileItems.add(item);
}
}
//if (IMEI.equals("") || IMEI.equals("null")) {
// msg = "Invalid source";
//}
if (fileItems!=null && !fileItems.isEmpty()) {
msg = "You have uploaded following file(s): ";
for (int i=0; i<fileItems.size(); i++) {
item = (FileItem) fileItems.get(i);
fileName = item.getName();
idx = fileName.lastIndexOf("\\");
if (idx == -1) idx = fileName.lastIndexOf("/");
if (idx >= 0) {
fileName = fileName.substring(idx);
}
fileName = fileName;
item.write(new File(tempFolder + fileName));
msg += "<br><a href=\"/upload/temp/" + fileName + "\">" + fileName + "</a>";
}
}
} catch (Exception e) {
msg = e.getMessage();
}
} else {
msg += "Upload is not accepted.<br>";
msg += "Please upload file using multipart/form-data and POST method<br>";
}
%>
<!DOCTYPE HTML>
<HTML>
<HEAD>
<TITLE>KML Loader</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</HEAD>
<BODY>
<%=msg%>
</BODY>
</HTML>

---------------------------------------------------------------- Fim do arquivo JSP (não inclua essa linha)

Se alguém tiver mais algum exemplo de script para compartilhar, o mesmo será muito bem vindo.

Bem, para testar se o seu script de upload está funcionando corretamente, você pode utilizar o código HTML exemplificado a seguir. Esse código pode ser salvo com o nome "teste_upload.html".

---------------------------------------------------------------- Fim do arquivo HTML (não inclua essa linha)

<!DOCTYPE HTML>
<HTML>
    <HEAD>
            <TITLE>iMapIt Loader Test</TITLE>
            <META http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </HEAD>
    <BODY>
            <FORM id="frm" name="iMapIt_Form" action="imapit_uploader.php" method="POST" enctype="multipart/form-data">
                Selecione um arquivo para transferir<br>
                <INPUT id="iMapIt_File" name="iMapIt_File" type="file" style="width:100%;"/><br>
                <INPUT id="submit" type="submit" value="Submit" />
                </FORM>
    </BODY>
</HTML>

---------------------------------------------------------------- Fim do arquivo HTML (não inclua essa linha)

O exemplo de arquivo HTML acima é como o iMapIt Pro do seu iPhone ou iPad irá transferir o arquivo exportado. Se o arquivo de teste acima funcionar chamando o script PHP "imapit_uploader.php" e transferindo um arquivo, o iMapIt Pro também funcionará.

Fiquem à vontade para enviar perguntas ou sugestões.

sábado, 12 de janeiro de 2013

iMapIt PRO versão 1.4 - Nova tela Exportar

Na versão 1.4 do iMapIt PRO foram introduzidas novas funcionalidades na tela Exportar Projeto. Veja abaixo.

A escolha do formato do arquivo já existia, nela você pode escolher entre:

  • DXF - É um formato lido pela maioria dos softwares CAD
  • KML - É o formato de apresentação do Google Maps
A escolha do tipo de coordenadas a serem exportadas é uma nova funcionalidade. Agora você pode selecionar as seguintes opções:
  • Geográficas - São as coordenadas geográficas coletadas diretamente do GPS do iPhone ou iPad, latitude e longitude. Coordenadas geográficas são coordenadas que representam um ponto no globo terrestre e são representadas em graus, minutos e segundos. No iMapIt as coordenadas geográficas são representadas em graus e frações decimais de grau;
  • UTM - É um tipo de projeção plana, convertida a partir das coordenadas geográficas. UTM é a abreviatura para Universal Transversa de Mercator;
A opção Elipsóide oferece diferentes formas de cálculo da projeção UTM conforme o Sistema de Referencia de Coordenadas Brasileiro.

Na opção Eixo:
  • Latitude no X - Exporta as coordenadas com a latitude no eixo X e a longitude no eixo Y;
  • Latitude no Y - Exporta as coordenadas com a latitude no eixo Y e a longitude no eixo X;
A opção Enviar Para já existia e nela você pode escolher entre:
  • USB - Permite que o arquivo exportado seja extraído do iPhone / iPad através da porta USB, através do iTunes, na opção de arquivos compartilhados da aplicação iMapIt;
  • eMail - Permite que o arquivo exportado seja enviado por eMail;
A opção Nome do Arquivo apresenta o nome do arquivo padrão que é gerado automaticamente pela aplicação e permite que o mesmo seja alterado. O arquivo exportado terá este nome.

Estas são as opções atuais de exportação. Qualquer sugestão de melhoria na aplicação é bem vinda.

quinta-feira, 10 de janeiro de 2013

iMapIt – Características e comparação entre as versões

Característica iMapIt PRO iMapIt LITE
Disponível para:
   iPhone x x
   iPad x x
Permite cadastramento de vários projetos x x
Precisão máxima do GPS do aparelho x x
Coleta Pontos x x
Coleta Linhas x x
Coleta Polígonos x x
Mede comprimentos das linhas x 1
Mede áreas dos polígonos x 1
Espaço disponível para descrição do projeto x x
Espaço disponível para descrição de cada medição x x
Medidas em unidades métricas x 1
Medidas em unidades imperiais x 1
Visualiza precisão do GPS enquanto coletando pontos x x
Visualiza coordenadas em tempo real x x
Características de Exportação:
   Exporta em formato DXF x
   Exporta em formato KML x
   Extrai arquivo exportado via USB x
   Envia arquivo exportado por e-mail x
   Exporta coordenadas geográficas x
   Exporta coordenadas em projeção UTM x
   Alterna coordenadas entre os eixos X e Y exportados x
   Permite alterar o nome do arquivo exportado x



1 – Característica disponível apenas uma vez

terça-feira, 6 de novembro de 2012

iMapIt Pro Versão 1.4 Fecha Repentinamente no IOS6.0


Um usuário do iMapIt me escreveu reclamando que a nova versão que ele tinha acabado de instalar estava apresentando erro, fechando, quando ele clicava no botão Exportar.
Ele usa um iPhone 4.
Depois de investigarmos conjuntamente o problema conseguimos uma solução:


  • Faça a atualização do seu iOS para 6.0.1;
  • Teste o iMapIt usando a função Exportar. Se a tela Exportar aparecer normalmente nós terminamos. Caso contrário continue abaixo;
  • Delete a aplicação iMapIt Pro do seu aparelho e baixe-o e instale-o novamente;
Caso você tenha alguma pergunta fique à vontade.



sábado, 14 de janeiro de 2012

Dúvida do usuário: Medições ruins

Um usuário me mandou um email com o seguinte texto:

"Olá ...,

Eu testei o aplicativo na fazenda na quarta feira para a marcação de uma área conhecida na fazenda e o resultado foi muito bom. Fui mostrar hoje para um cliente no estádio Independência, dentro de Belo Horizonte, e foi um desastre total. O que pode ter acontecido? Eu testei duas vezes, eu queria poder te enviar o arquivo gerado, um desastre.
"

Resposta:
Normalmente um equipamento GPS funciona da seguinte forma, de maneira bem resumida: Existe uma constelação de satélites de GPS (Global Positioning System) na órbita terrestre. O equipamento procura um mínimo de três satélites visíveis e mais próximos, faz um cálculo de triangulação e informa suas coordenadas em latitude, longitude e altitude.
O GPS do iPhone, iPad ou iPod Touch utiliza este mesmo tipo de cálculo, mas é necessário que os satélites estejam visíveis. Se o mínimo de satélites não estiver visível, ele busca uma rede Wi-Fi ou usa a rede de antenas de celular para te dar uma posição.
Porém, saindo do escopo de utilização de satélites a precisão das coordenadas informadas cai muito.
A aplicação iMapIt não possui uma forma de saber se estão sendo utilizados satélites ou não, mas apresenta a precisão e a margem de erro que está sendo usada no momento.
Quando você usa o botão de indicação de posição, ilustrado acima, a aplicação faz um zoom na sua localização atual e apresenta um ponto azul com um círculo em volta dele. O ponto azul é a sua posição, o círculo é a precisão atual do GPS.
Observe a imagem abaixo.

Veja que o círculo de precisão ocupa várias quadras da cidade.
Esta é uma das piores precisões possíveis... Eu não estava posicionado onde está o ponto azul, mas com certeza estava dentro do círculo.
Não adianta medir nada com este tipo de precisão, pois o resultado será desastroso.

Observe esta nova imagem. Eu fiquei parado no mesmo ponto aguardando...
O círculo diminuiu e o ponto azul ficou quase exatamente onde eu estava...
Mas para uma medição de área, a precisão ainda não está boa.
Note que o círculo azul ocupa ainda duas quadras da cidade.

Estava no meio da cidade, por isso nem sempre o sinal do GPS é o melhor. Caminhei um pouco, estiquei o braço, separei o telefone do corpo, girei para um lado e para outro. A precisão aumenta, diminui, e acaba te colocando no ponto certo.
A melhor precisão será quando o círculo azul sumir. Ficar só o ponto azul e um círculo pulsante em torno dele.
Aí sim, suas medições serão "perfeitas"...
Uma dica: sempre que chegar ao ponto que você quiser marcar, antes de clicar no botão MapIt, aguarde alguns segundos... Você vai ver que o ponto azul vai se posicionando aos poucos até chegar exatamente onde você está.
Se você preferir, utilize a visualização do mapa com imagem de satélite.
Use para isso este botão, que fica no canto superior direito da tela.
Assim você saberá exatamente se o ponto azul já está na sua localização física real.

Espero que tenha ajudado.
Não hesite em perguntar.