Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Servers
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo Hace 3 Semanas
acprincipi acprincipi is offline
Registrado
 
Registrado: jun 2019
Posts: 4
Poder: 0
acprincipi Va por buen camino
Slippy map - Visualizar mozaicos de OpenStreetMap en TDrawGrid

Trabajo con Delphi7, en un pequeño server visualizador de Mapas, basado en la técnica Slippy Map de OSM. He conseguido cargar en un TDrawGrid los bmps que conforman el mapa. Cada celda del TDrawGrid aloja un bmp (de 256x256 pixel) que forma parte del mapa que estamos mostrando. Dependiendo del nivel de zoom seleccionado tendremos una grilla (o matriz) de menor o mayor tamaño.
PROBLEMA: el método drawCell va levantando la imagen (bmp) correspondiente a la celda que esta dibujando y la coloca en esa posición. Muestra el mapa correctamente hasta que movemos cualquiera de los scrollbar (Horizontal o Vertical) para navegar el mapa. En ese momento no se refresca o repinta la imagen que corresponde a cada celda. Muestra las celdas vacías. Por ejemplo si me muevo a la derecha lo que estaba pintado se va moviendo bien pero las nuevas celdas que van apareciendo no muestran nada.

Les dejo el codigo del metodo OnDrawCell:

Código Delphi [-]
procedure TfrmOSMSlippyMap.dgMAPDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
var
  bmp: TBitmap;
  zoom_Level_dir, x, y, TileX_Pos, TileY_Pos: Integer;
begin
  bmp := TBitmap.Create();

  Try
    TileX_Pos := ACol * 256;//Cada tile mide 256 pixel de ancho, por eso al multiplicar por 256 avanzo hasta la posicion TileX_Pos donde colocarla.
    TileY_Pos := ARow * 256;//Cada tile mide 256 pixel de alto,  por eso al multiplicar por 256 avanzo hasta la posicion TileY_Pos donde colocarla.
    x := ACol;
    y := ARow;
    //Cargo del directorio de bmps la imagen correspondiente a la celda que se esta dibujando actualmente.
    //Los directorios que almacenan las imagenes que forman cada mapa (segun el nivel de zoom) cumplen con 
    // las especificaiones de OpenStreetMap (Slippy MAP - [wiki.openstreetmap.org/wiki/Slippy_map_tilenames])
    bmp.LoadFromFile(ExtractFilePath(Application.ExeName)+'Datos\'+inttostr(cbZoomLevel.ItemIndex)+'\'+i  nttostr(x)+'\'+inttostr(y)+'.bmp');

    dgMAP.Canvas.Draw(TileX_Pos ,TileY_Pos , bmp);
  finally
    bmp.Free;
  end;
end;

No pude subir el proyectito en delphi7 (de 235 kb) porque superaba la cuota otorgada, pero si alguien esta interesado en el tema me avisa y se lo paso. Son muy pocas lineas de código y viene con los bmp incluidos.
Si hay algún componente que puedan sugerirme para D6 o D7 se los agradecería mucho.
Saludos.

Saludos y gracias

Última edición por Casimiro Notevi fecha: Hace 2 Semanas a las 09:20:26.
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Manejo de celdas individuales en TDrawGrid protector2020 Gráficos 1 07-05-2008 17:19:49
Problemas con tDrawGrid klaar OOP 1 28-01-2007 16:37:35
TDrawGrid jrgarlok C++ Builder 0 09-03-2005 16:04:21
Mover las filas de un TDrawGrid jrgarlok C++ Builder 0 17-02-2005 21:04:52
Mover Filas en un TDrawGrid jrgarlok Gráficos 0 24-01-2005 10:37:57


La franja horaria es GMT +2. Ahora son las 03:21:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi