462 lines
11 KiB
Markdown
462 lines
11 KiB
Markdown
# PBMap - Documentation FR (usage simple et complet)
|
|
|
|
Ce document explique comment utiliser `pbmap/PBMap.pb` facilement, avec un demarrage rapide, des exemples et le detail de chaque procedure publique.
|
|
|
|
## Demarrage rapide
|
|
|
|
Objectif: afficher une carte, ajouter un marqueur et deplacer la vue.
|
|
|
|
```purebasic
|
|
IncludeFile "pbmap/PBMap.pb"
|
|
|
|
EnableExplicit
|
|
InitNetwork()
|
|
|
|
UseModule PBMap
|
|
|
|
Enumeration
|
|
#Win
|
|
#Map
|
|
EndEnumeration
|
|
|
|
If OpenWindow(#Win, 100, 100, 900, 600, "PBMap demo", #PB_Window_SystemMenu)
|
|
#Map = MapGadget(#PB_Any, 0, 0, 900, 600, 1, #Win)
|
|
|
|
; Options utiles
|
|
SetOption(#Map, "ShowScale", "1")
|
|
SetOption(#Map, "ShowZoom", "1")
|
|
SetOption(#Map, "ShowMarkersLegend", "1")
|
|
|
|
; Position de depart
|
|
SetLocation(#Map, 48.8566, 2.3522, 12)
|
|
|
|
; Ajout d'un marqueur
|
|
AddMarker(#Map, 48.8566, 2.3522, "1", "Paris", RGBA(255, 80, 80, 255))
|
|
|
|
Repeat
|
|
Select WaitWindowEvent()
|
|
Case #PB_Event_CloseWindow
|
|
Break
|
|
EndSelect
|
|
ForEver
|
|
EndIf
|
|
```
|
|
|
|
Notes importantes:
|
|
- Activez "Create ThreadSafe Executable" dans les options du compilateur.
|
|
- Appelez `InitNetwork()` avant les telechargements HTTP.
|
|
- Les tuiles sont telechargees automatiquement via HTTP/HTTPS.
|
|
|
|
## Ce que PBMap permet de faire
|
|
|
|
- Afficher une carte (tuiles OSM/HERE/GeoServer).
|
|
- Gerer des marqueurs (ajout, selection, edition).
|
|
- Gerer des traces GPX (chargement, affichage, suppression).
|
|
- Changer la vue (zoom, angle, centrage).
|
|
- Configurer le cache disque et memoire.
|
|
- Ajouter des callbacks pour reagir aux mouvements et aux clics.
|
|
- Utiliser un clustering de marqueurs pour une meilleure lisibilite.
|
|
|
|
## Configuration rapide des options utiles
|
|
|
|
```purebasic
|
|
PBMap::SetOption(#Map, "Verbose", "1")
|
|
PBMap::SetOption(#Map, "ShowMarkersLegend", "1")
|
|
PBMap::SetOption(#Map, "TileLifetime", "1209600") ; 2 semaines
|
|
PBMap::SetOption(#Map, "EnableClusters", "1")
|
|
PBMap::SetOption(#Map, "ClusterPixelSize", "60")
|
|
PBMap::SetOption(#Map, "ClusterMinCount", "2")
|
|
```
|
|
|
|
## API publique - procedures et exemples
|
|
|
|
Les exemples supposent l'existence d'une carte `#Map`.
|
|
|
|
### SetDebugLevel(Level.i)
|
|
Definit le niveau de debug (0..5).
|
|
```purebasic
|
|
PBMap::SetDebugLevel(3)
|
|
```
|
|
|
|
### SetOption(MapGadget.i, Option.s, Value.s)
|
|
Change une option via une cle texte.
|
|
```purebasic
|
|
PBMap::SetOption(#Map, "ShowZoom", "1")
|
|
```
|
|
|
|
### GetOption(MapGadget.i, Option.s)
|
|
Lit une option sous forme de chaine.
|
|
```purebasic
|
|
Debug PBMap::GetOption(#Map, "ShowZoom")
|
|
```
|
|
|
|
### LoadOptions(MapGadget.i, PreferencesFile.s = "PBMap.prefs")
|
|
Charge les options depuis un fichier.
|
|
```purebasic
|
|
PBMap::LoadOptions(#Map, "PBMap.prefs")
|
|
```
|
|
|
|
### SaveOptions(MapGadget.i, PreferencesFile.s = "PBMap.prefs")
|
|
Sauvegarde les options.
|
|
```purebasic
|
|
PBMap::SaveOptions(#Map, "PBMap.prefs")
|
|
```
|
|
|
|
### AddOSMServerLayer(MapGadget.i, LayerName.s, Order.i, ServerURL.s)
|
|
Ajoute une couche OSM.
|
|
```purebasic
|
|
PBMap::AddOSMServerLayer(#Map, "OSM", 1, "https://tile.openstreetmap.org/")
|
|
```
|
|
|
|
### AddHereServerLayer(...)
|
|
Ajoute une couche HERE (necessite AppId/AppCode).
|
|
```purebasic
|
|
PBMap::AddHereServerLayer(#Map, "HERE", 2, "APP_ID", "APP_CODE")
|
|
```
|
|
|
|
### AddGeoServerLayer(...)
|
|
Ajoute une couche GeoServer.
|
|
```purebasic
|
|
PBMap::AddGeoServerLayer(#Map, "WMS", 3, "layer-name", "http://localhost:8080/")
|
|
```
|
|
|
|
### IsLayer(MapGadget.i, Name.s)
|
|
Teste si une couche existe.
|
|
```purebasic
|
|
If PBMap::IsLayer(#Map, "OSM")
|
|
Debug "Layer OSM ok"
|
|
EndIf
|
|
```
|
|
|
|
### DeleteLayer(MapGadget.i, Name.s)
|
|
Supprime une couche.
|
|
```purebasic
|
|
PBMap::DeleteLayer(#Map, "WMS")
|
|
```
|
|
|
|
### EnableLayer(MapGadget.i, Name.s)
|
|
Active une couche.
|
|
```purebasic
|
|
PBMap::EnableLayer(#Map, "OSM")
|
|
```
|
|
|
|
### DisableLayer(MapGadget.i, Name.s)
|
|
Desactive une couche.
|
|
```purebasic
|
|
PBMap::DisableLayer(#Map, "HERE")
|
|
```
|
|
|
|
### SetLayerAlpha(MapGadget.i, Name.s, Alpha.d)
|
|
Change la transparence d'une couche (0..1).
|
|
```purebasic
|
|
PBMap::SetLayerAlpha(#Map, "WMS", 0.5)
|
|
```
|
|
|
|
### GetLayerAlpha(MapGadget.i, Name.s)
|
|
Lit la transparence d'une couche.
|
|
```purebasic
|
|
Debug PBMap::GetLayerAlpha(#Map, "WMS")
|
|
```
|
|
|
|
### BindMapGadget(MapGadget.i, TimerNB = 1, Window = -1)
|
|
Attache PBMap a un Canvas existant.
|
|
```purebasic
|
|
PBMap::BindMapGadget(#MyCanvas, 1, #Win)
|
|
```
|
|
|
|
### SetCallBackLocation(MapGadget.i, *CallBackLocation)
|
|
Callback: appel lors d'un changement de position (lat/lon).
|
|
```purebasic
|
|
Procedure OnMove(*Pos.PBMap::GeographicCoordinates)
|
|
Debug StrD(*Pos\Latitude) + ", " + StrD(*Pos\Longitude)
|
|
EndProcedure
|
|
PBMap::SetCallBackLocation(#Map, @OnMove())
|
|
```
|
|
|
|
### SetCallBackMainPointer(MapGadget.i, CallBackMainPointer.i)
|
|
Callback pour dessiner le pointeur principal.
|
|
```purebasic
|
|
Procedure DrawPointer(x.i, y.i)
|
|
; custom drawing
|
|
EndProcedure
|
|
PBMap::SetCallBackMainPointer(#Map, @DrawPointer())
|
|
```
|
|
|
|
### SetCallBackDrawTile(MapGadget.i, *CallBackLocation)
|
|
Callback pour personnaliser le dessin d'une tuile.
|
|
```purebasic
|
|
Procedure DrawTile(x.i, y.i, image.i, alpha.d)
|
|
; custom drawing
|
|
EndProcedure
|
|
PBMap::SetCallBackDrawTile(#Map, @DrawTile())
|
|
```
|
|
|
|
### SetCallBackMarker(MapGadget.i, *CallBackLocation)
|
|
Callback appele quand un marqueur a ete deplace (selection).
|
|
```purebasic
|
|
Procedure OnMarkerChange(*Marker.PBMap::Marker)
|
|
Debug *Marker\Identifier
|
|
EndProcedure
|
|
PBMap::SetCallBackMarker(#Map, @OnMarkerChange())
|
|
```
|
|
|
|
### SetCallBackLeftClic(MapGadget.i, *CallBackLocation)
|
|
Callback lors d'un clic gauche sur la carte.
|
|
```purebasic
|
|
Procedure OnLeftClick(*Pos.PBMap::GeographicCoordinates)
|
|
Debug StrD(*Pos\Latitude)
|
|
EndProcedure
|
|
PBMap::SetCallBackLeftClic(#Map, @OnLeftClick())
|
|
```
|
|
|
|
### SetCallBackModifyTileFile(MapGadget.i, *CallBackLocation)
|
|
Callback pour modifier un fichier de tuile apres telechargement.
|
|
```purebasic
|
|
Procedure.s OnTileFile(FileName.s, Url.s)
|
|
ProcedureReturn FileName
|
|
EndProcedure
|
|
PBMap::SetCallBackModifyTileFile(#Map, @OnTileFile())
|
|
```
|
|
|
|
### MapGadget(MapGadget.i, X.i, Y.i, Width.i, Height.i, TimerNB = 1, Window = -1)
|
|
Cree un canvas + PBMap.
|
|
```purebasic
|
|
#Map = PBMap::MapGadget(#PB_Any, 0, 0, 800, 600, 1, #Win)
|
|
```
|
|
|
|
### FreeMapGadget(MapGadget.i)
|
|
Libere une carte.
|
|
```purebasic
|
|
PBMap::FreeMapGadget(#Map)
|
|
```
|
|
|
|
### GetLatitude(MapGadget.i)
|
|
Latitude courante.
|
|
```purebasic
|
|
Debug StrD(PBMap::GetLatitude(#Map))
|
|
```
|
|
|
|
### GetLongitude(MapGadget.i)
|
|
Longitude courante.
|
|
```purebasic
|
|
Debug StrD(PBMap::GetLongitude(#Map))
|
|
```
|
|
|
|
### GetMouseLatitude(MapGadget.i)
|
|
Latitude sous la souris.
|
|
```purebasic
|
|
Debug StrD(PBMap::GetMouseLatitude(#Map))
|
|
```
|
|
|
|
### GetMouseLongitude(MapGadget.i)
|
|
Longitude sous la souris.
|
|
```purebasic
|
|
Debug StrD(PBMap::GetMouseLongitude(#Map))
|
|
```
|
|
|
|
### GetAngle(MapGadget.i)
|
|
Angle actuel.
|
|
```purebasic
|
|
Debug StrD(PBMap::GetAngle(#Map))
|
|
```
|
|
|
|
### GetZoom(MapGadget.i)
|
|
Zoom actuel.
|
|
```purebasic
|
|
Debug PBMap::GetZoom(#Map)
|
|
```
|
|
|
|
### GetMode(MapGadget.i)
|
|
Mode utilisateur courant.
|
|
```purebasic
|
|
Debug PBMap::GetMode(#Map)
|
|
```
|
|
|
|
### SetMode(MapGadget.i, Mode.i = #MODE_DEFAULT)
|
|
Definit le mode.
|
|
```purebasic
|
|
PBMap::SetMode(#Map, PBMap::#MODE_HAND)
|
|
```
|
|
|
|
### SetMapScaleUnit(MapGadget.i, ScaleUnit = PBMap::#SCALE_KM)
|
|
Definit l'unite d'echelle.
|
|
```purebasic
|
|
PBMap::SetMapScaleUnit(#Map, PBMap::#SCALE_NAUTICAL)
|
|
```
|
|
|
|
### SetLocation(MapGadget.i, Latitude.d, Longitude.d, Zoom = -1, Mode.i = #PB_Absolute)
|
|
Centre la carte.
|
|
```purebasic
|
|
PBMap::SetLocation(#Map, 48.8566, 2.3522, 12)
|
|
```
|
|
|
|
### SetAngle(MapGadget.i, Angle.d, Mode = #PB_Absolute)
|
|
Change l'angle.
|
|
```purebasic
|
|
PBMap::SetAngle(#Map, 15.0, #PB_Absolute)
|
|
```
|
|
|
|
### SetZoom(MapGadget.i, Zoom.i, Mode.i = #PB_Relative)
|
|
Change le zoom.
|
|
```purebasic
|
|
PBMap::SetZoom(#Map, 1, #PB_Relative)
|
|
```
|
|
|
|
### SetZoomToArea(MapGadget.i, MinY.d, MaxY.d, MinX.d, MaxX.d)
|
|
Zoom sur une zone.
|
|
```purebasic
|
|
PBMap::SetZoomToArea(#Map, 48.80, 48.90, 2.30, 2.40)
|
|
```
|
|
|
|
### SetZoomToTracks(MapGadget.i, *Tracks)
|
|
Zoom automatique sur une trace.
|
|
```purebasic
|
|
PBMap::SetZoomToTracks(#Map, *Track)
|
|
```
|
|
|
|
### NominatimGeoLocationQuery(MapGadget.i, Address.s, *ReturnPosition = 0)
|
|
Geocodage d'une adresse via Nominatim.
|
|
```purebasic
|
|
Define Pos.PBMap::GeographicCoordinates
|
|
PBMap::NominatimGeoLocationQuery(#Map, "Paris", @Pos)
|
|
```
|
|
|
|
### LoadGpxFile(MapGadget.i, FileName.s)
|
|
Charge un fichier GPX.
|
|
```purebasic
|
|
Define *Track = PBMap::LoadGpxFile(#Map, "track.gpx")
|
|
```
|
|
|
|
### SaveGpxFile(MapGadget.i, FileName.s, *Track)
|
|
Sauvegarde une trace GPX.
|
|
```purebasic
|
|
PBMap::SaveGpxFile(#Map, "export.gpx", *Track)
|
|
```
|
|
|
|
### ClearTracks(MapGadget.i)
|
|
Supprime toutes les traces.
|
|
```purebasic
|
|
PBMap::ClearTracks(#Map)
|
|
```
|
|
|
|
### DeleteTrack(MapGadget.i, *Ptr)
|
|
Supprime une trace.
|
|
```purebasic
|
|
PBMap::DeleteTrack(#Map, *Track)
|
|
```
|
|
|
|
### DeleteSelectedTracks(MapGadget.i)
|
|
Supprime les traces selectionnees.
|
|
```purebasic
|
|
PBMap::DeleteSelectedTracks(#Map)
|
|
```
|
|
|
|
### SetTrackColour(MapGadget.i, *Ptr, Colour.i)
|
|
Change la couleur d'une trace.
|
|
```purebasic
|
|
PBMap::SetTrackColour(#Map, *Track, RGBA(0, 200, 0, 200))
|
|
```
|
|
|
|
### AddMarker(MapGadget.i, Latitude.d, Longitude.d, Identifier.s = "", Legend.s = "", Color.l = -1, CallBackPointer.i = -1)
|
|
Ajoute un marqueur.
|
|
```purebasic
|
|
PBMap::AddMarker(#Map, 48.86, 2.35, "A", "Point A", RGBA(255, 80, 80, 255))
|
|
```
|
|
|
|
### ClearMarkers(MapGadget.i)
|
|
Supprime tous les marqueurs.
|
|
```purebasic
|
|
PBMap::ClearMarkers(#Map)
|
|
```
|
|
|
|
### DeleteMarker(MapGadget.i, *Ptr)
|
|
Supprime un marqueur.
|
|
```purebasic
|
|
PBMap::DeleteMarker(#Map, *Marker)
|
|
```
|
|
|
|
### DeleteSelectedMarkers(MapGadget.i)
|
|
Supprime les marqueurs selectionnes.
|
|
```purebasic
|
|
PBMap::DeleteSelectedMarkers(#Map)
|
|
```
|
|
|
|
### Drawing(MapGadget.i)
|
|
Force un rendu immediat.
|
|
```purebasic
|
|
PBMap::Drawing(#Map)
|
|
```
|
|
|
|
### FatalError(MapGadget.i, msg.s)
|
|
Affiche une erreur et termine.
|
|
```purebasic
|
|
PBMap::FatalError(#Map, "Erreur critique")
|
|
```
|
|
|
|
### Error(MapGadget.i, msg.s)
|
|
Affiche une erreur simple.
|
|
```purebasic
|
|
PBMap::Error(#Map, "Erreur")
|
|
```
|
|
|
|
### Refresh(MapGadget.i)
|
|
Demande un rafraichissement.
|
|
```purebasic
|
|
PBMap::Refresh(#Map)
|
|
```
|
|
|
|
### ClearDiskCache(MapGadget.i)
|
|
Vide le cache disque.
|
|
```purebasic
|
|
PBMap::ClearDiskCache(#Map)
|
|
```
|
|
|
|
## Clustering des marqueurs (explication)
|
|
|
|
Le clustering regroupe les marqueurs proches en un seul cercle.
|
|
- `EnableClusters`: active ou non.
|
|
- `ClusterPixelSize`: taille de la grille (en pixels).
|
|
- `ClusterMinCount`: nombre minimum pour afficher un cluster.
|
|
|
|
Double-clic sur un cluster: zoom sur le centre du cluster.
|
|
|
|
## Astuces pratiques
|
|
|
|
- Activez `Verbose` pour diagnostiquer les chargements de tuiles.
|
|
- Utilisez `TileLifetime` pour gerer l'expiration du cache.
|
|
- Si vous avez beaucoup de marqueurs, activez le clustering.
|
|
- Pour des couches multiples, ajustez `SetLayerAlpha`.
|
|
- Si l'interface devient lente, reduisez `MaxThreads` ou `MaxDownloadSlots`.
|
|
|
|
## Exemple complet (avec clustering)
|
|
|
|
```purebasic
|
|
IncludeFile "pbmap/PBMap.pb"
|
|
InitNetwork()
|
|
UseModule PBMap
|
|
|
|
Enumeration
|
|
#Win
|
|
EndEnumeration
|
|
|
|
OpenWindow(#Win, 0, 0, 1000, 700, "PBMap clustering", #PB_Window_SystemMenu)
|
|
Define MapId = MapGadget(#PB_Any, 0, 0, 1000, 700, 1, #Win)
|
|
|
|
SetOption(MapId, "EnableClusters", "1")
|
|
SetOption(MapId, "ClusterPixelSize", "60")
|
|
SetOption(MapId, "ClusterMinCount", "2")
|
|
|
|
SetLocation(MapId, 48.8566, 2.3522, 10)
|
|
|
|
AddMarker(MapId, 48.85, 2.34, "1", "A", RGBA(255, 80, 80, 255))
|
|
AddMarker(MapId, 48.86, 2.35, "2", "B", RGBA(255, 80, 80, 255))
|
|
AddMarker(MapId, 48.87, 2.36, "3", "C", RGBA(255, 80, 80, 255))
|
|
|
|
Repeat
|
|
Select WaitWindowEvent()
|
|
Case #PB_Event_CloseWindow
|
|
Break
|
|
EndSelect
|
|
ForEver
|
|
```
|