Mapa clicavel de loteamento de imóveis
Olá a todos.
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
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
Curtidas 0
Respostas
Vagner Almeida
21/12/2011
Não é complicado, mas muito trabalhoso:
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.
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
Vagner Almeida
21/12/2011
Obs: Vc pode criar no cadastro do lote as opções para gravar as imagens.
Procure converter as imagens em JPG, pesará menos no BD e não perde qualidade.
Espero ter ajudado...
Procure converter as imagens em JPG, pesará menos no BD e não perde qualidade.
Espero ter ajudado...
GOSTEI 0
Antônio Neto
21/12/2011
Olá Vagner bom dia e muito obrigado pela dica.
É 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
É 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
Joel Rodrigues
21/12/2011
Bom dia, Anônio.
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.
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
Antônio Neto
21/12/2011
Olá Joel Rodrigues, bom dia.
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
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
Joel Rodrigues
21/12/2011
Opa, estou tetando fazer algo aqui. Estou vendo como salvar os pontos no bd.
Mando notícias.
Mando notícias.
GOSTEI 0
Antônio Neto
21/12/2011
Que bom, prossigo meus testes e aguardando notícias.
Obrigado
Neto
Obrigado
Neto
GOSTEI 0
Joel Rodrigues
21/12/2011
Antônio, tenho boas notícias.
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.
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
Antônio Neto
21/12/2011
Beleza Joel, obrigado.
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
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
Joel Rodrigues
21/12/2011
Te eviei um email com os fontes.
Qualquer dúvida é só falar.
Abraço.
Qualquer dúvida é só falar.
Abraço.
GOSTEI 0
Antônio Neto
21/12/2011
Estou recebendo.
Antecipadamente já te agradeço muito, vc está fazendo pra mim papel de PAPAI NOEL.
Muito Obrigado
Neto
Antecipadamente já te agradeço muito, vc está fazendo pra mim papel de PAPAI NOEL.
Muito Obrigado
Neto
GOSTEI 0
Antônio Neto
21/12/2011
Já recebi e vou alterar para Firebird para testar poruqe não tenho SQLServer
Te retorno
Abraços
Neto
Te retorno
Abraços
Neto
GOSTEI 0
Joel Rodrigues
21/12/2011
Alguns pontos importantes:
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):
3) Salvando as coordenadas do lote no bd:
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
Paulo Andrade
21/12/2011
Senhores, estou desenvolvendo um projeto para Imobiliária em SQL Server 2005.
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
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
Zilon Maciel
21/12/2011
Antonio, na minha opinião você deve fazer o seguinte:
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.
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
Antônio Neto
21/12/2011
Ótima dica, vou tentar dessa forma.
Abraços e obrigado
Neto
Abraços e obrigado
Neto
GOSTEI 0