Jetzt hast Du leider immer noch nicht geschrieben, welchen Player Du zur Darstellung der OSM-Karten verwenden willst: Google Maps (damit meine ich nicht die Karten selbst, sondern das Ding, das die Karten anzeigt und für das der Wrapper geschrieben wurde) oder OpenLayers.
Das geht - wie schon geschrieben - mit beidem, ist aber ein Unterschied bei der Programmierung:
- Mit Google Maps und dem Framework ist es jetzt schon möglich, (fertig gerenderte) Karten aus dem OSM-Projekt anzuzeigen. Da bedeutet aber trotzdem bei kommerziellen Projekten Lizenzkosten an Google, da ja desses API zur Anwendung kommt - auch wenn es fremde Karten sind. Das würde ich zumindest vermuten - ich bin aber kein Rechtsanwalt. Eine Anfrage bei Google würde da Klarheit bringen.
- Die Wrapper für OpenLayers existieren nur im Ansatz - es würde deshalb eine ganze Weile dauern, dessen API in Delphi nachzubilden. Diese Variante hätte allerdings den Vorteil, ohne Lizenzkosten auszukommen - außer eventuell einer Spende an das OSM-Projekt...
Zur Frage online/offline:
Es kommt darauf an, ob Du nur einen Bereich oder die komplette Karte offline verwenden willst. Davon hängt nämlich die Kapazität Deiner Festplatte ab: In Zoomstufe 15 besteht eine Karte zum Beispiel aus (2^15*256)^2=70.368.744.177.664 Pixeln und ist damit ein Terrapixel-Bild
Eine andere Möglichkeit besteht darin, nur die geometrischen Kartendaten lokal zu speichern und daraus selbst eine Karte zu rendern. Dafür gibt's fertige Lösungen - zum Beispiel
Maperitive.
Insofern ist natürlich eine Onlinevariante, die sich einfach die fertigen Kartenteile von den entsprechenden Servern holt, leichter zu realisieren.
Für Marker können auch eigene Bilder verwendet werden und damit auch solche, die zum Beispiel einen Buchstaben oder eine Zahl enthalten. Dafür empfehle ich den Artikel
Delphi und Google Maps (Teil 3) in der
Toolbox 3/2011, in dem es genau um dieses Thema geht.