DivideTiles - Traitement des Tuiles
Aperçu
L'interface DivideTiles est utilisée pour diviser les scènes en tuiles avant la reconstruction. Cette interface prend en charge les méthodes de pavage en grille régulière 2D, grille régulière 3D et adaptative basée sur la mémoire, adaptées au traitement d'ensembles de données à grande échelle.
- Ensembles de données ultra-grande échelle (milliers d'images)
- Environnements de traitement à mémoire limitée
- Projets nécessitant un traitement parallèle
- Scénarios de calcul distribué
Comment ça Fonctionne
Appel d'Interface
Appel en Ligne de Commande
# Méthode 1 : Via le moteur principal
reconstruct_full_engine.exe -reconstruct_type 4 -task_json divide_config.json
# Méthode 2 : Moteur de pavage autonome
divide_engine.exe divide_config.json
Description des Paramètres
reconstruct_type
: Fixé à4
(indique DivideTiles)task_json
: Chemin du fichier de configuration
Paramètres de Configuration
Paramètres Requis
Paramètre | Type | Description |
---|---|---|
working_dir | string | Répertoire de travail (doit contenir les résultats AT) |
gdal_folder | string | Chemin des données GDAL |
resolution_level | int | Précision de reconstruction (1=Élevé, 2=Moyen, 3=Faible) |
divide_parameters | JSON | Paramètres de pavage |
roi_for_3d | JSON | ROI pour la reconstruction 3D |
Paramètres Optionnels
Paramètre | Type | Par Défaut | Description |
---|---|---|---|
roi_coordinate_system | JSON | WGS84 | Système de coordonnées ROI |
Paramètres de Pavage (divide_parameters)
Paramètre | Type | Par Défaut | Description |
---|---|---|---|
divide_mode | int | - | Mode de pavage : 0=grille 2D, 1=grille 3D, 2=adaptatif mémoire |
tile_size | double | - | Taille de grille (requis pour mode 0/1) |
target_memory | double | 0 | Limite de mémoire cible (GB) |
reconstruct_whole_tile | bool | false | Si reconstruire des tuiles complètes (pas de découpage de frontières) |
tile_system | JSON | Système de coordonnées AT | Système de coordonnées de pavage |
Modes de Pavage Expliqués
1. Grille Régulière 2D (divide_mode = 0)
Adapté aux zones avec peu de variation de terrain :
{
"divide_mode": 0,
"tile_size": 500.0, // grille de 500m x 500m
"tile_system": {
"type": 3,
"epsg_code": 32650 // Système de coordonnées de projection UTM
}
}
2. Grille Régulière 3D (divide_mode = 1)
Adapté aux zones avec de grands changements d'élévation :
{
"divide_mode": 1,
"tile_size": 300.0, // cube de 300m x 300m x 300m
"tile_system": {
"type": 1 // Système de coordonnées local
}
}
3. Pavage Adaptatif Mémoire (divide_mode = 2)
Pavage automatique basé sur les limites de mémoire :
{
"divide_mode": 2,
"target_memory": 16.0, // Maximum 16GB de mémoire par tuile
"reconstruct_whole_tile": false
}
Exemples de Configuration Complète
Scène à l'Échelle de la Ville Pavage 2D
{
"working_dir": "C:/Projects/CityScale",
"gdal_folder": "C:/MipMap/SDK/data",
"resolution_level": 2,
"divide_parameters": {
"divide_mode": 0,
"tile_size": 1000.0, // grille de 1km
"tile_system": {
"type": 3,
"epsg_code": 32650
},
"reconstruct_whole_tile": true
},
"roi_for_3d": {
"boundary": [
[500000, 2500000],
[510000, 2500000],
[510000, 2510000],
[500000, 2510000]
],
"min_z": 0,
"max_z": 500
},
"roi_coordinate_system": {
"type": 3,
"epsg_code": 32650
}
}
Terrain Montagneux Pavage 3D
{
"working_dir": "C:/Projects/Mountain",
"gdal_folder": "C:/MipMap/SDK/data",
"resolution_level": 2,
"divide_parameters": {
"divide_mode": 1,
"tile_size": 500.0, // cube de 500m
"tile_system": {
"type": 0, // LocalENU
"origin_point": [114.123, 22.123, 100.0]
}
},
"roi_for_3d": {
"boundary": [...],
"min_z": 100,
"max_z": 2000 // Grande différence d'élévation
}
}
Environnement à Mémoire Limitée
{
"working_dir": "C:/Projects/LimitedMemory",
"gdal_folder": "C:/MipMap/SDK/data",
"resolution_level": 2,
"divide_parameters": {
"divide_mode": 2,
"target_memory": 8.0, // Seulement 8GB de mémoire disponible
"reconstruct_whole_tile": false
},
"roi_for_3d": {
"boundary": [...]
}
}
Résultats de Sortie
Structure du Fichier tiles.json
Le tiles.json
généré après le pavage :
{
"tiles": [
{
"name": "tile_0_0",
"empty": false,
"max_memory": 12.5, // GB
"roi": {
"boundary": [...],
"min_z": 100,
"max_z": 200
}
},
{
"name": "tile_0_1",
"empty": false,
"max_memory": 15.3,
"roi": {...}
}
],
"divide_mode": 0,
"tile_system": {...},
"tile_grid": { // Informations de grille (mode 0/1)
"origin": [500000, 2500000],
"rows": 10,
"cols": 10
},
"tile_size": 1000.0
}
Utilisation des Résultats de Pavage
Reconstruct3D lira automatiquement tiles.json
et effectuera une reconstruction pavée :
{
"license_id": 9200,
"working_dir": "C:/Projects/CityScale", // Contient tiles.json
// ... autres paramètres Reconstruct3D
}
Sélection de Stratégie de Pavage
Comparaison par Type de Scène
Type de Scène | Mode Recommandé | Suggestion de Taille de Grille | Description |
---|---|---|---|
Ville Plate | Grille 2D | 500-2000m | Terrain plat, petits changements d'élévation |
Terrain Montagneux | Grille 3D | 300-1000m | Grandes différences d'élévation, nécessite des couches verticales |
Scène Mixte | Adaptatif Mémoire | - | Optimiser automatiquement le schéma de pavage |
Ingénierie Linéaire | Grille 2D | Personnalisé | Définir des bandes allongées le long de la direction de route |
Estimation de Mémoire
Besoin en mémoire par tuile ≈ (Images dans la tuile × Résolution image × 3) / Ratio de compression
Valeurs de référence :
- 100 images 20MP ≈ 8-12 GB
- 200 images 20MP ≈ 16-24 GB
Traitement Parallèle
Parallèle Local
import subprocess
import json
import concurrent.futures
# Lire les résultats de pavage
with open("tiles.json", "r") as f:
tiles_info = json.load(f)
def process_tile(tile):
if tile["empty"]:
return
config = {
"license_id": 9200,
"working_dir": f"./output/{tile['name']}",
"tile_name": tile["name"],
# ... autres paramètres
}
with open(f"{tile['name']}.json", "w") as f:
json.dump(config, f)
subprocess.run([
"reconstruct_full_engine.exe",
"-reconstruct_type", "2",
"-task_json", f"{tile['name']}.json"
])
# Traitement parallèle
with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
executor.map(process_tile, tiles_info["tiles"])
Traitement Distribué
Les résultats de pavage peuvent être distribués sur plusieurs machines pour traitement :
- Le nœud maître effectue le pavage
- Distribuer tiles.json et les données
- Chaque nœud traite indépendamment les tuiles assignées
- Agréger les résultats
Meilleures Pratiques
1. Sélection de Taille de Tuile
- Mémoire suffisante : Utiliser des tuiles plus grandes pour réduire les effets de bord
- Mémoire limitée : Utiliser des tuiles plus petites pour assurer la stabilité
- Traitement parallèle : Équilibrer le nombre de tuiles et le temps de traitement par tuile
2. Gestion de Zone de Chevauchement
{
"reconstruct_whole_tile": true, // Générer des tuiles complètes
// Fusionner les zones de chevauchement en post-traitement
}
3. Sélection de Système de Coordonnées
- Pavage 2D : Utiliser un système de coordonnées projetées (unités métriques)
- Pavage 3D : Local ou LocalENU
- Éviter le pavage 3D dans les systèmes de coordonnées géographiques
4. Optimisation ROI
{
"roi_for_3d": {
"boundary": [
// Utiliser Smart ROI généré depuis AT
// Étendre correctement les frontières pour éviter le découpage
]
}
}
Optimisation des Performances
1. Estimation du Temps de Traitement
Temps total = Temps de pavage + max(Temps de traitement par tuile) + Temps de fusion
2. Équilibrage de Charge
- Vérifier la distribution de
max_memory
- Ajuster les paramètres pour équilibrer la charge entre les tuiles
- Considérer l'allocation dynamique de tâches
3. Optimisation de Stockage
- Utiliser SSD pour le répertoire de travail
- Distribuer les résultats de tuiles sur plusieurs disques
- Réserver un espace temporaire suffisant
Problèmes Courants
Q : Espaces aux frontières de tuiles après pavage ?
R :
- Définir
reconstruct_whole_tile: true
- Augmenter le chevauchement entre tuiles (en étendant ROI)
- Optimiser la fusion en post-traitement
Q : Certaines tuiles échouent au traitement ?
R :
- Vérifier si la
max_memory
de la tuile dépasse les limites - Réviser la distribution d'images dans des tuiles spécifiques
- Considérer un re-pavage ou ajustement des paramètres
Q : Trop de tuiles ?
R :
- Augmenter
tile_size
outarget_memory
- Utiliser un mode de pavage différent
- Considérer une stratégie de traitement hiérarchique
Applications Avancées
Schémas de Pavage Personnalisés
Basé sur tiles.json, vous pouvez :
- Ajuster manuellement les frontières de tuiles
- Fusionner les petites tuiles
- Diviser les grandes tuiles
- Définir les priorités
Mises à Jour Incrémentales
# Traiter seulement les zones modifiées
changed_tiles = identify_changed_areas()
for tile in changed_tiles:
process_tile(tile)
Prochaines Étapes
- Apprenez sur Reconstruct3D pour la reconstruction pavée
- Consultez Concepts de Base pour plus de techniques de traitement
Conseil : Une stratégie de pavage appropriée est la clé du traitement de données à grande échelle. Il est recommandé de tester d'abord avec de petites données pour trouver des paramètres optimaux avant de traiter des ensembles de données complets.