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.