Fórum Mapa clicavel de loteamento de imóveis #410839
21/12/2011
0
Uso Delphi 7 + Firebird 1.5 + DbExpress
Tenho um sistema de gerenciamento de loteamentos de imóveis.
Agora preciso fazer uma implementação interessante.
Imagine uma imagem (foto .BMP) de um loteamento um loteamento grande com 400 lotes, e os terrenos não são regulares (retangulares), tenho que ciar um recurso permita que eu mapeie lote por lote.
Mapear entenda identificar cada lote como um objeto independente que quando o lote for vendido o sistema possa colorir em vermelho e os demais lotes ficar em verde e alguns que estão reservados deixa-los em azul.
Cada lote será um registro na tabela onde teremos dimensão, preço, forma de pagamento, vendedor (corretor), etc....
Alguém tem uma dica para eu implementar este desafio.
Abraços a todos e
Feliz Natal
Neto
Antônio Neto
Curtir tópico
+ 0Posts
21/12/2011
Vagner Almeida
1. Tenha o mapa do loteamento já fragmetado, e cada fragmento com cores que vc queira para identificá-lo conforme a situação.
Por exemplo: Branco - a venda
Azul - em negociação
Verde - não disponível
Vermelho - vendido
O mesmo lote (fragmento) com cores diferentes.
Uma das opções é utilizar o imagelist, mas não é viável para imagens que poderão ser alterados e não fica bom no caso de umas 400 imagens.
Então o jeito é criar uma tabela de imagens com um campo para cada cor da mesma imagem.
Essa tabela teria os seguintes campos, por exemplo:
codigo - codigo corrente da tabela (PK)
lote - codigo do lote (FK)
img1 - imagem Branco
img2 - imagem Azul
img3 - imagem Verde
img4 - imagem Vermelho
status - B (branco), A (azul), V (verde), M (vermelho)
então vc carregaria a imagens conforme o campo status, se o status for B, vc carregará a imagem que esta no campo img1, se for A, vc carregará a imagem que esta no campo img2, e assim por diante.
Gostei + 0
21/12/2011
Vagner Almeida
Procure converter as imagens em JPG, pesará menos no BD e não perde qualidade.
Espero ter ajudado...
Gostei + 0
22/12/2011
Antônio Neto
É uma maneira bacana de se fazer, e bastante trabalhosa para o cliente
que a cada novo loteamento terá um grande trabalho para mapear todos os lotes mas
a idéia é essa mesma cada lote torna-se um objeto independente para ser tratado.
Agora vc tem um modelo de como fazer uma programa para fragmentar o loteamento??
Como mapear/recortar o lote e grava-lo na tabela??
Mais uma vez obrigado e conto com vossa valorosa colaboração.
Abraços
Neto
Gostei + 0
22/12/2011
Joel Rodrigues
Com relação ao mapeamento da imagem, eu pensei em fazer o seguinte: o usuário carregaria a imagem e, com o mouse, demarcaria a área correspondente a cada lote (riscando sobre a imagem).
Conforme o usuário fosse movimentando o mouse sobre a imagem (com o botão do mouse pressionado), você armazenaria cada ponto por onde o mouse passou em um vetor. Com este vetor preenchido, armazenaria os pontos no banco de dados e para mostrar o lote no mapa (já falando da funcionalidade principal do programa), você desenharia um polígono sobre a imagem de acordo com os pontos armazenados com preenchimento correspondente à situação.
Bom, já faz um tempo que não trabalho com esse tipo de rotina no Delphi, mas fiz uns testes aqui em C# e creio que minha ideia é factível.
Não sei se fui claro o bastante, deu pra entender?
Abraço e boas festas.
Gostei + 0
22/12/2011
Antônio Neto
Sim sua idéia é mesmo factivel, estou tentando fazer isso mas ainda com dificuldades,
mas o princípio é exatamente este percorrer a imagem armazenar num vetor e descarrega-lo na tabela.
Vou prosseguir com meus estudos e caso tenha mais alguma sugestão de como resolver isso
será muito bem vinda.
Feliz Natal e muito obrigado
Neto
Gostei + 0
22/12/2011
Joel Rodrigues
Mando notícias.
Gostei + 0
22/12/2011
Antônio Neto
Obrigado
Neto
Gostei + 0
22/12/2011
Joel Rodrigues
Consegui fazer o que estava pensando. Marquei um lote no mapa, gravei no banco e depois carreguei (pintei no mapa com a cor de acordo com a situação).
O problema agora (que não vejo solução AINDA) é como selecionar o lote clicando sobre ele (selecionando em um grid, por exemplo, é tranquilo).
Vou dar mais uma lapidada no básico e te mando os fontes.
Gostei + 0
22/12/2011
Antônio Neto
Caso não consiga interagir com a imagem do lote, penso que podemos fazer via edit, colocar o nro do lote, situação
e processar, lógico que se existir a interação com o objeto (lote) ao clicar será perfeito.
Estou curioso para ver como gravou no banco e como carregou e pintou no formulário.
Obrigado companheiro.
Abraços
Neto
Gostei + 0
22/12/2011
Joel Rodrigues
Qualquer dúvida é só falar.
Abraço.
Gostei + 0
22/12/2011
Antônio Neto
Antecipadamente já te agradeço muito, vc está fazendo pra mim papel de PAPAI NOEL.
Muito Obrigado
Neto
Gostei + 0
22/12/2011
Antônio Neto
Te retorno
Abraços
Neto
Gostei + 0
22/12/2011
Joel Rodrigues
1) Não funcionou com .JPG, logo, creio que a imagem deva necessariamente ser .BMP;
2) Capturando os pontos que o usuário demarcou (no evento onMouseMove da imagem):
procedure TForm4.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if ssLeft in Shift then //SE o botão esquerdo estiver pressionado
begin
SetLength(pontos, Length(pontos)+1); //Aumenta em 1 a capacidade do vetor pontos(variável gobal)
pontos[Length(pontos)-1] := Point(x, y); //Adiciona o novo ponto ao vetor
end;
end;
3) Salvando as coordenadas do lote no bd:
procedure TForm4.Button1Click(Sender: TObject);
var
i:integer;
p:string; //conjunto de todos os pontos no formato (X1, Y1)|(X2, Y2)|...|(Xn, Yn)
begin
p := ;
for i := 0 to Length(pontos) - 1 do
p := p + (+IntToStr(pontos[i].X)+,+IntToStr(pontos[i].Y)+)|; //monta a string no formato definido
Image1.Picture.Bitmap.Canvas.Brush.Color := clYellow;
Image1.Picture.Bitmap.Canvas.Polygon(pontos); //Marca na imagem o lote que acabou de ser criado
SetLength(pontos, 0); //Limpa o vetor (para poder ser usado novamente)
//Nesse ponto, você grava os dados no banco conforme a estrutura da sua tabela e engine de conexão utilizada
//O ponto fundamental aqui é ter uma coluna para gravar as coordenadas no formato string (tamanho indefinido e grande)
end;
Gostei + 0
27/12/2011
Paulo Andrade
Se possível enviar os fontes seria interessante.
Estou pretendendo montar também o mapa e até uma galeria de fotos.
Feliz ano novo a todos... Obg
Gostei + 0
01/01/2012
Zilon Maciel
Por Exemplo:
O Mapa do Brasil:
1 - Você pega a imagem geral (simples);
2 - Com uma ferramenta de trabalho com imagens, você quebra o mapa
geral em regiões, salvando cada região como uma imagem individual (.bmp)
(facil);
3 - Ao final você monta no formulário, usando um TImage para cada região (facil);
4 - A montagem fica igual a um quebra-cabeças (facil);
5 - Ai é só você usar o evento on click de cada TImagem;
Eu usei esta idéia do Livro do Fernando Anselmo O Melhor de Dois Mundos,
onde o autor fazia o processo acima com so signos, funciona muito bem.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)