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