Suite

Ignorer les tuiles vides dans gdal2tiles.py lors de la génération de tuiles


Je suis en train de générer un grand ensemble de tuiles à partir d'un fichier .vrt composé de nombreuses images. L'image suit une section de route, étant une bande d'images très longue et petite et en raison de la forme de la route, la boîte englobante qui l'entoure contient un rapport de 80% aucune donnée et 20% de la route réelle. Cela signifie que gdal2tiles prend une éternité puisque sa boucle sur toutes les tuiles de la zone de délimitation et pas seulement sur la zone contenant des données.

Existe-t-il un moyen de dire à gdal2tiles d'ignorer ces tuiles ?

Alternative, j'ai divisé le fichier vtr en zones plus petites, mais ensuite à l'intersection des deux ensembles de tuiles que je dois combiner après que les deux ensembles aient défini des tuiles pour la même zone avec une carte à moitié remplie et des nodata et prendre l'un d'eux provoque la carte d'avoir de grandes rayures noires entre les deux.

Des suggestions pour rendre cela plus fluide ?


gdal2tiles -xL'option exclura les tuiles vides.

https://github.com/OSGeo/gdal/blob/master/gdal/swig/python/scripts/gdal2tiles.py#L1141


Comment puis-je empêcher mon personnage de jeu de plateforme de se clipser sur les carreaux muraux ?

Actuellement, j'ai un jeu de plateforme avec des tuiles pour le terrain (graphiques empruntés à Cave Story). Le jeu est écrit à partir de zéro en utilisant XNA, donc je n'utilise pas un moteur existant ou un moteur physique.

Les collisions de tuiles sont décrites à peu près exactement comme décrit dans cette réponse (avec un simple SAT pour les rectangles et les cercles), et tout fonctionne bien.

Sauf lorsque le joueur se heurte à un mur en tombant/en sautant. Dans ce cas, ils s'accrocheront à un carreau et commenceront à penser qu'ils ont heurté un sol ou un plafond qui n'est pas réellement là.

Dans cette capture d'écran, le joueur se déplace vers la droite et tombe vers le bas. Ainsi, après le mouvement, les collisions sont vérifiées - et d'abord, il s'avère que le personnage du joueur entre en collision avec la troisième tuile du sol et est poussé vers le haut. Deuxièmement, il s'est avéré entrer en collision avec la tuile à côté de lui et poussé sur le côté - le résultat final étant que le personnage du joueur pense qu'il est au sol et qu'il ne tombe pas, et « attrape » la tuile aussi longtemps qu'il la heurte. .

Je pourrais résoudre ce problème en définissant les carreaux de haut en bas à la place, ce qui le fait tomber en douceur, mais le cas inverse se produit alors et il heurtera un plafond qui n'est pas là en sautant vers le haut contre le mur.

Comment dois-je aborder la résolution de ce problème, afin que le personnage du joueur puisse simplement tomber le long du mur comme il se doit ?


3 réponses 3

Vous êtes sur la bonne voie. Pourtant.

Le temps d'exécution O(n*m) est typique avec quelque chose comme ça. Votre implémentation est cependant un peu excessive. La vraie question est, Qu'est-ce qui rend votre algorithme O(n*m) si long ?

Pourquoi s'embêter à traverser chaque cellule de la carte pour chaque influence ? Il serait plus rapide que chaque influence de départ spécifie également un rayon maximum aléatoire dans lequel elle pourrait affecter les cellules de la carte. Au début, mémorisez la position de l'influence ET son rayon. Ensuite, pour chaque "plaque" (influence), essayez d'écrire la couleur de la cellule seulement dans ce rayon.

Le Voronoï basé sur les cellules sera de la même manière O(n*m) si vous utilisez une approche tout aussi naïve, car vous devez parcourir tous centres de Voronoï pour tous les cellules de la carte.

Pour l'approche décrite ci-dessus :

  1. Les vérifications de distance basées sur le rayon utilisent une racine carrée qui peut être relativement coûteuse, utilisez soit une table de recherche de rayon pour éviter les calculs de racine carrée, soit utilisez une vérification de plage de limites rectangulaires [x,y] pour une résiliation anticipée, en ne vérifiant qu'une seule fois le rayon / la surface carrée vous tombez dans ces limites [x,y].
  2. Le rayon moyen optimal sera basé sur l'espacement moyen des points d'influence. c'est quelque chose que je vous laisse découvrir, car cela dépend de la façon dont vous avez réparti vos points initiaux.
  3. Certaines cellules vides resteront car les rayons ne couvriront pas toutes les cellules de la carte. Vous pouvez les remplir à peu de frais dans une dernière étape, en prenant la couleur d'un voisin aléatoire et peuplé.

(1) profilez votre code et (2) optimisez :

  • supprimer les conditionnels, plus ils sont profondément imbriqués, plus cela aura d'impact
  • emballez vos données de manière compacte et compatible avec le cache (de l'utilisation de simples sous-grilles à une courbe de Hilbert ou à une courbe en Z).

Malheureusement, pour se rapprocher de O(n) , vous auriez besoin d'une fonction continue qui crée des régions distinctes de cellules adjacentes de couleur unique. Si quelqu'un connaît une telle approche, j'aimerais en entendre parler, mais je ne connais pas un tel algorithme. Il existe peut-être un moyen d'adapter le bruit de Perlin (fonction continue) pour ce faire, mais non sans beaucoup plus d'efforts et de complexité. Habituellement, la simplicité est la meilleure, donc je suggère de rester avec et d'optimiser votre approche imbriquée actuelle.


Pour enregistrer des images rendues avec un fond transparent (format PNG par exemple), les paramètres sont les suivants pour les moteurs de rendu "Cycles" et "Blender Render".

Éditeur de propriétés > Contexte de rendu > Panneau de sortie

Choisissez RVBA pour que l'alpha du moteur de rendu soit enregistré dans le png

Éditeur de propriétés > Contexte de rendu > Panneau Film

Vérifier le film>Transparent pour que le fond du monde soit transparent.


Carte profonde, Python

Objectif : appliquer fn à chaque élément d'un itérable arbitrairement imbriqué (tuple, list, dict, np.ndarray), y compris aux itérables. Ex:

deeplen devrait également être un cas particulier de deepmap , avec un fn approprié (juste une démo, ne vous souciez pas de l'optimiser):

Ma mise en œuvre de travail, ainsi que des tests, ci-dessous. Pas sûr que cela fonctionne sans OrderedDict (Python >=3.6 par défaut), c'est le cas si l'ordre des clés ne change pas même lorsque les valeurs sont modifiées (mais aucune clé n'est insérée/sautée). Une résolution ajoute des clés de mappage réelles à la clé au lieu de leur index, mais cela complique la mise en œuvre. (Quant à pourquoi passer la clé à fn : nous pouvons implémenter par exemple deepequal , comparer obj à un autre obj, cela nécessite des informations sur la clé. Aussi deepcopy .)

Des améliorations ? Je n'ai pas testé de manière exhaustive - il y a peut-être des objets pour lesquels cela échoue, donc soumis à l'extensibilité. Les performances/lisibilité pourraient également être meilleures.

Visualisation: deepmap traverse un nid de gauche à droite, vers l'intérieur d'abord: (code)

  • Mauve: fn appliqué à itérable / élément
  • Bleu: tuple() appliqué à la liste
  • Vert: list() appliqué au tuple
  • Gris: clé de sortie itérable [-1] et profondeur de décrémentation - aucune opération
  • Vert + Violet: fn(item) n'est affecté qu'à list -cast tuple pas d'état 'intermédiaire'
  • Vider: voir le placement de print dans le code lié c'est pour montrer l'effet de list+fn

Mise en œuvre: démo en direct

deepmap a échoué avec itérables vides, par exemple. [] , <> - corrigé, tests mis à jour. Ajout de la gestion des entrées non valides.

Nonempty_iter amélioré pour utiliser try-iter et appliqué comme contrôle sur obj à l'entrée. Je ne sais pas quel test ajouter comme cas d'utilisation TensorFlow - une suggestion plus générale est la bienvenue.


GDAL 1.10.0 - Aperçu des changements

  • API de thread CPL : ajouter une API de condition, modélisée sur l'API POSIX pthread_cond_
  • Ajouter CPLGetNumCPUs()
  • Désérialiser diverses formes de représentation textuelle pour l'infini positif/négatif
  • Ajouter une routine pour valider un fichier XML par rapport à son schéma XSD (nécessite libxml2) « l'optimiser » pour les fichiers GML
  • CPLRecodeStub() : pour Windows, fournit une implémentation des conversions UTF8 <--> CPxxx à l'aide de l'API Windows
  • Rendre VSIFileManager::Get() thread-safe
  • Correction de la sécurité des threads de CPLOpenShared() (#4848)
  • Ajouter CPLZLibDeflate() et CPLZLibInflate()
  • Ajoutez l'API pour le protocole d'authentification OAuth2.
  • Curl : permet de définir le paramètre CURLOPT_PROXYAUTH via GDAL_PROXY_AUTH=BASIC/NTLM/DIGEST/ANY, permet de définir CURLOPT_HTTPAUTH via GDAL_HTTP_AUTH=BASIC/NTLM/GSSNEGOTIATE/ANY (#4998)
  • /vsicurl/ et /vsicurl_streaming/ : permettent de mettre en cache les fichiers en RAM avec VSI_CACHE = TRUE
  • /vsizip/ : correction de la gestion de Eof() qui pouvait faire manquer la ou les dernières fonctionnalités des fichiers de formes compressés (#4748)
  • Ajoutez une métadonnée de pilote DMD_SUBDATASETS et annoncez-la dans les pilotes pertinents (#4902)
  • Correction du calcul des statistiques lorsque la valeur nodata est +/- infini (#4506)
  • GDALNoDataMaskBand : implémenter IRasterIO() pour une optimisation dans un cas d'utilisation courant (#4488)
  • GDALVersionInfo() : ajoute la chaîne de version BUILD_INFO
  • GMLJP2 : Correction d'une mauvaise interprétation lorsque Lat/Long ? (#4657)
  • Définissez la valeur nodata lors de la création d'aperçus externes afin que l'algorithme AVERAGE fonctionne comme prévu (#4679)
  • EXIFExtractMetadata() déplacé vers gcore/gdalexif.cpp pour le rendre utilisable pour d'autres pilotes
  • Correction de la récursion infinie dans GDALOpen() (#4835)
  • GDALRasterBand::IRasterIO() : optimise le chemin du code de sous-échantillonnage/sur-échantillonnage
  • API C : faire en sorte que GDALSetDefaultRAT() accepte un RAT NULL. Tous les pilotes sont prêts pour cela maintenant.
  • GDALRasterBand::GetDefaultHistogram?() : modifiez la façon dont les limites min et max sont calculées dans le cas non GDT_Byte
  • GDALDataset::BlockBasedFlushCache?() : correction d'un plantage lorsque la bande a un sous-blocage
  • Travail sur le corrélateur d'images GSOC (état préliminaire)
  • Warp : divisez le temps de rééchantillonnage de Lanczos par au moins un facteur de 4.
  • Warp : ajoutez l'option warping NUM_THREADS pour définir le nombre de threads à utiliser pour paralléliser la partie calcul du warp
  • Warp: n'arrêtez pas de collecter des morceaux pour opérer simplement parce que certains sous-blocs échouent (#4795)
  • Warp : mode d'ajout et méthodes de rééchantillonnage moyen (#5049)
  • Warper OpenCL : gérer les erreurs dans set_supported_formats(), corriger les fuites de mémoire dans les chemins de code d'erreur, ajouter la détection d'Intel OpenCL (en passant, Intel OpenCL semble fonctionner correctement uniquement avec un type de données de travail Float32)
  • Warper OpenCL : correction d'un défaut de segmentation lié aux masques de validité source/destination (#4840)
  • Geoloc : ne faites pas confiance à pabSuccess dans le transformateur de géolocalisation (#4794)
  • Geoloc : ajout d'une interpolation bilinéaire des coordonnées du backmap (#4907)
  • Geoloc : ajouter GDALTransformGeolocations() et la liaison SWIG
  • Ajoutez le voisin le plus proche et l'interpolation cubique de DEM dans GDALRPCTransform (#3634). L'utilisateur peut définir RPC_DEMINTERPOLATION sur proche, bilinéaire ou cubique pour interpoler le fichier DEM d'entrée défini dans RPC_DEM. L'interpolation par défaut est bilinéaire.
  • gdal_rasterize : correction d'un problème d'identification de certains polygones 8 connectés (#4647)
  • gdal_grid : accélérer considérablement la recherche du voisin le plus proche (avec radius1 == radius2) en utilisant un arbre de recherche quad
  • gdal_grid : paralléliser le traitement en spécifiant l'option de configuration GDAL_NUM_THREADS (par défaut ALL_CPUS)
  • gdal_grid : pour l'algorithme 'invdist' avec les paramètres par défaut, utilisez la version optimisée SSE si disponible (à la compilation et à l'exécution). Peut être désactivé avec GDAL_USE_SSE=NO
  • Général : rendre le message d'utilisation plus explicite en cas de mauvaise option (#4973)
  • gdalmove.py : Nouvelle application pour "déformer" une image en mettant simplement à jour son SRS et sa géotransformation.
  • gdal_edit.py : le promouvoir en tant qu'outil « officiel » (#4963)
  • gdalwarp : ajout des méthodes de rééchantillonnage "-r average" et "-r mode" (#5049)
  • gdalwarp : copier les métadonnées et les informations de bande du premier ensemble de données source et détecter les valeurs en conflit, nouvelles options -nomd et -cvmd (#3898)
  • gdalwarp : optimisation lorsque (-tr et -te) ou (-ts et -te) sont spécifiés (#4804)
  • gdalwarp : affecter l'interprétation des couleurs des bandes source à l'ensemble de données cible, dans le cas du VRT cible (#4462)
  • gdalwarp : ajoutez l'option -setci pour définir l'interprétation des couleurs des bandes de l'ensemble de données cible à partir de l'ensemble de données source
  • gdal_translate : accepte les valeurs -srcwin ou -projwin qui se situent partiellement ou complètement en dehors de l'étendue du raster source. Introduisez les options -epo et -eco pour éviter les erreurs dans ces situations.
  • gdallocationinfo : ajoutez une option -overview Overview_level pour spécifier un niveau de vue d'ensemble, au lieu de la bande de base
  • gdalsrsinfo : essayez d'ouvrir avec GDAL et OGR même si l'argument n'est pas un fichier (#4493)
  • gdaldem : ajouter une option -combined au mode hillshade pour calculer l'ombrage combiné (#4753)
  • gdaldem : correction de la sortie en relief des couleurs avec un pilote qui n'a que la capacité CreateCopy?(), et lorsque les dimensions du bloc source ne sont pas multiples de la dimension raster (#4764)
  • gdaltindex : ajouter l'option -t_srs, pour transformer toutes les limites de la source d'entrée en le même SRS (#4773)
  • gdalbuildvrt : ajouter l'option -a_srs
  • gdalbuildvrt : ajouter l'option -sd pour sélectionner le sous-ensemble de données par son numéro
  • gdalbuildvrt : ajouter un indicateur -b (#4992)
  • gdalgrid : augmentez la mémoire tampon de travail du binaire gdal_grid à 16 Mo
  • gdal_retile.py : ne transmettez pas les options de création au pilote MEM utilisé pour générer des ensembles de données temporaires (#4532)
  • gdal_edit.py : faire fonctionner correctement l'option -a_srs en étendant l'entrée de l'utilisateur au support WKT -a_srs avec une chaîne vide
  • gdal_edit.py : ajout de la prise en charge de l'option -gcp
  • gdal2tiles.py : rendre la sortie KML conforme à KML 2.2 (#4536)
  • gdal2tiles.py : prise en charge d'OL 2.12 (#4742)
  • gdal_polygonize.py : ajouter l'option -8 pour sélectionner 8 connectivités (#4655)
  • gdal_merge.py, gdalident.py : supprimer l'utilisation de l'API glob()
  • gdal2xyz.py : correction de la sortie du mode -csv avec raster multibande
  • gdal_contour / gdal_rasterize / gdal_translate : accepte les valeurs numériques au format scientifique.
  • crs2crs2grid.py : nouvel exemple de script Python
  • gdalcompare.py : nouvel exemple de script Python pour comparer les ensembles de données GDAL
  • gdal_calc.py : ajouter l'indicateur d'option de création --co (#4964)
  • gdaladdo : ajouter un indicateur -b
  • pct2rgb.py : traite les tables de couleurs avec plus de 256 entrées (#4905)
  • Ajout de la prise en charge de la lecture des fichiers .j2w, .jp2w et .wld pour les pilotes JP2ECW, JP2MrSID, JP2OPENJPEG et JPEG2000 (#4651)
  • Résoudre de graves problèmes avec les images en mosaïque, en particulier lorsqu'elles ne sont pas des multiples de la taille des mosaïques (#4548)
  • Ajout de la capture de l'attribut dateTime
  • Prise en charge de la référence spatiale WKT (avec Esri style VERTCS)
  • Autoriser la référence spatiale WGS84
  • Inclure la méthode de compression dans les métadonnées.
  • Vérifiez la signature dans METADATA.DIM, pas seulement l'existence du fichier
  • Pilote DIMAP2 fixe pour obtenir le chemin absolu approprié dans un cas spécifique
  • Écrivez la valeur mise à jour de l'indicateur de cellule partielle dans le fichier (#4687)
  • Respectez le champ 'Compte de longitude' de l'enregistrement de données pour traiter correctement les fichiers avec des colonnes manquantes à gauche et/ou à droite du fichier (#4711)
  • Ajout de la prise en charge du SDK ECW 5.0
  • Améliorer les performances de sélection sur de grands ensembles de données (#4790)
  • Utilisez ECW SDK pour effectuer un super-échantillonnage pour SDK >= 4.X
  • Exposer la dimension du bloc 256x256 au lieu de la ligne de balayage
  • Contournement d'un bogue ECW SDK 3.3, lors d'un RasterIO() avec le nombre total de bandes, mais pas dans le 1,2. n commande (#4234)
  • Ajoutez des heuristiques pour détecter les modèles de lecture de bande successifs (comme par QGIS). Bénéfique pour l'ECWP
  • Ajout de la prise en charge de l'écriture de RPC et de GCP
  • Ajout de la possibilité d'accéder à tous les champs d'en-tête ENVI au lecteur ENVI (#4735)
  • Écrivez dans les métadonnées d'en-tête ENVI trouvées dans le domaine de métadonnées ENVI (#4957)
  • Correction de la lecture du fichier .sta sur Linux 64 bits
  • Supposons l'entrelacement BSQ lorsque le mot-clé 'interleave' est manquant ou inconnu
  • Correction de l'écriture des noms de catégories
  • Supprimer 'envi fft result' de la liste noire
  • Signaler la longueur d'onde et les unités de longueur d'onde en tant que métadonnées de bande (#3682)
  • Ajouter les options de création spatialExtent et extendSRID (#4529)
  • Correction de la qualité JPEG non mise à jour sur les métadonnées (#4552)
  • Rechercher RDT en tant que table normale
  • Ajout de la prise en charge de RPC (#4038)
  • libtiff et libgeotiff internes actualisés depuis l'amont
  • Utiliser EXTRASAMPLE_UNASSALPHA par défaut (changement de comportement par rapport aux versions précédentes de GDAL) (#4733)
  • Ajouter la prise en charge de la lecture de GeoEye ? Fichiers de métadonnées *.pvl (#4465)
  • Lossless CreateCopy?'ing() à partir d'un ensemble de données JPEG
  • Lire les métadonnées EXIF ​​dans le domaine de métadonnées EXIF
  • Assurez-vous que rowsperstrip n'est jamais plus grand que ysize (#4468)
  • Correction de l'écriture du TIFF compressé JPEG entrelacé de pixels RGBA (#4732)
  • Définissez l'interprétation des couleurs sur GCI_PaletteIndex après avoir appelé SetColorTable?() (#4547)
  • Conversion pour CMJN non compressé 8 bits (PHOTOMETRIC_SEPARATED) en RGBA.
  • Maximiser la compatibilité EPSG là où PCS est défini (#4607)
  • Assurez-vous que les unités inhabituelles avec un nœud d'autorité sont bien enregistrées (comme EPSG:2066)
  • Ajout du support CT_HotineObliqueMercatorAzimuthCenter
  • Réparer PolarStereographic ? / 9829 prise en charge
  • Assurez-vous que GetMetadata?() initialise la valeur de l'élément GDALMD_AREA_OR_POINT, si ce n'est déjà fait (#4691)
  • Lors de la construction des aperçus, si l'image a déjà un masque interne, alors construisez implicitement les aperçus internes pour le masque
  • Meilleure gestion de SetMetadata?(a_string) (#4816)
  • Utilisez GTIFAllocDefn/GTIFFreeDefn avec libgeotiff 1.4.1+
  • Ajout de la prise en charge de GEO_NORMALIZE_DISABLE_TOWGS84 (#3309)
  • Améliorez la gestion de la description et de l'offset/de l'échelle sans revenir à .aux.xml
  • Défauts de contournement dans libtiff 3.X lors de la génération de plusieurs niveaux de vue d'ensemble en même temps
  • Cas particulier où le code de référence verticale EGM96 est mal utilisé comme code CS vertical (#4922)
  • Prise en charge de la suppression des balises geotiff lors de l'appel de SetGeoTransform?([0,1,0,0,0,1]) et SetProjection?()
  • Retravailler la façon dont les fichiers CSV sont recherchés avec libgeotiff (#4994)
  • Signaler la valeur nodata (#4433)
  • Correction du problème fgetc signé/non signé pour le lecteur VSI*L au format Grib (#4603)
  • Évitez de mettre en cache plus de 100 Mo en cas de jeu de données avec de nombreuses bandes (#4682)
  • utilise meshLat comme paramètre latitude_of_origin de la projection LCC (#4807)
  • Évitez d'avoir un gros tampon sur la pile (#4852)
  • Evitez les problèmes d'analyse des paramètres régionaux en virgule flottante (similaire à r24367).
  • Implémenter le mécanisme des lignes continues (#4873)
  • Correction de diverses vulnérabilités / DoS
  • Ajout de la possibilité d'augmenter le nombre maximum de fichiers HDF4 ouverts
  • Build Unix : évitez les problèmes avec la bibliothèque système hdfeos
  • Assurez-vous que nous n'essayons pas d'utiliser l'API de tuile de grille pour des morceaux non-tiles (#4672)
  • Préserver plus de précision d'attribut Float32
  • Importer les paramètres angulaires HDF USGS GCTP en radians
  • Restaurer l'interprétation conventionnelle add_offset (#4891)
  • Faites plus attention aux dimensions manquantes (#4900)
  • Rendre le pilote HDF4 thread-safe en ajoutant un mutex global (puisque la bibliothèque HDF4 n'est pas thread-safe)
  • Recherchez le nom d'attribut "coremetadata" au lieu de "coremetadata".
  • Ajout du support BASEDATA pour EPT_u1 (#4537)
  • Correction d'un plantage lors de la fermeture de l'ensemble de données lorsque l'en-tête du fichier .ige est corrompu (#4596)
  • Aperçus .aux : évitez de détruire les aperçus existants lorsque vous demandez deux fois de suite de créer des aperçus pour exactement les mêmes niveaux d'aperçu (#4831)
  • Correction de la taille de la colonne de chaîne RAT maxwidth pour inclure le caractère nul (# 4867)
  • Correction d'une erreur de segmentation dans HFAauxBuildOverviews avec les bandes sélectionnées (#4976)
  • ne réduisez pas la taille de la tuile à la taille de l'image (#4856)
  • Correction de l'inversion de valeur lors de la lecture de fichiers de type 9 (bitonal RLE) jusqu'à (#5030)
  • corriger la lenteur et la lecture aléatoire incorrecte avec les ensembles de données RLE (#4965)
  • Activer la lecture des fichiers rle bitonaux plus larges que 22784 (0x5900) pixels (#5030)
  • Ajouter des métadonnées/option RESOLUTION pour lire/écrire DPI (#5030)
  • Ajout du support d'écriture pour .rle (fichiers rle bitonal) pour tester ce qui précède (#5030)
  • Conflit de contournement entre la désinitialisation ECW SDK et la désinitialisation GDAL, comme le montrent les tests gdaljp2ecw d'imageio-ext (#5024)
  • Promouvoir la bande alpha 1 bit d'un ensemble de données RGBA à 8 bits pour améliorer l'expérience utilisateur générale (peut être désactivé en définissant GDAL_ECW_PROMOTE_1BIT_ALPHA_AS_8BIT sur NO)
  • Capturez Corder dans les métadonnées pour la commodité de l'utilisateur
  • Correction de l'écriture de la boîte de résolution où la valeur xrésolution était écrite au lieu de celle yrésolution
  • Ignorer les bandes qui ont un type de données différent lors de la lecture de plusieurs bandes dans IReadBlock() (#4638)
  • Par défaut à moins de 250 000 lignes par tuile (#5034)
  • Exiger OpenJPEG 2.0.0 maintenant
  • Utiliser plusieurs threads de décodage lors du traitement des requêtes IRasterIO() multi-tuiles
  • Ajout de la prise en charge de l'écriture du géoréférencement
  • Lire et écrire la boîte Res JP2 et la traduire depuis/vers les éléments de métadonnées TIFFTAG_XRESOLUTION, TIFFTAG_YRESOLUTION et TIFFTAG_RESOLUTIONUNIT
  • Promouvoir la bande alpha 1 bit d'un ensemble de données RGBA à 8 bits pour améliorer l'expérience utilisateur générale (peut être désactivé en définissant JP2OPENJPEG_PROMOTE_1BIT_ALPHA_AS_8BIT sur NO)
  • Lorsqu'il n'y a pas d'aperçus externes construits, profitez de la nature de la compression JPEG pour exposer des aperçus de niveau 2, 4 et 8
  • Ne renvoie pas de contenu indésirable lors de la demande de xml:XMP mais aucune métadonnée XMP n'est présente (#4593)
  • ajouter une option de création INTERNAL_MASK pour pouvoir désactiver l'ajout du masque ZLib si ce n'est pas nécessaire
  • ajouter la prise en charge de la création d'un fichier JPEG sans perte à partir du récent IJG libjpeg v9 (avec -co ARITHMETIC=yes -co BLOCK=1 -co COLOR_TRANSFORM=RGB1)
  • n'acceptent pas par défaut les bandes source de type différent de Byte, Int16 ou UInt16 car elles semblent provoquer des plantages dans libjasper. Cela peut être outrepassé, à vos risques et périls, en définissant l'option de configuration JPEG2000_FORCE_CREATION sur OUI (#5002)
  • Ajouter un support de lecture
  • Supprimer le faux code qui limitait la génération à un niveau de zoom (#4527)
  • Réglez minLodPixels sur 1 pour le niveau de zoom 0 (#4721)
  • Correction du mauvais placement des tuiles avec raster de l'étendue d'un pays ou plus (#4834)
  • Ajouter l'option de création FIX_ANTIMIDIAN (#4528)
  • Correction pour gdal_rasterize (#4432)
  • Activer PAM pour l'histogramme et les statistiques de bande (#4244)
  • Ajouter la valeur longitude_of_prime_meridian à PRIMEM
  • Fix SetNoDataValue?() - ne pas mettre à jour lorsqu'il est déjà défini sur une nouvelle valeur (#4484)
  • Convertir les valeurs de longitude dans l'intervalle [180,360] en [-180,180] (#4512) - remplacer avec l'option de configuration GDAL_NETCDF_CENTERLONG_180=0
  • Prend en charge les tableaux de GEOLOCATION 2D lorsqu'une variable projetée a un attribut de coordonnées et prend en charge les tableaux lon/at (#4513)
  • Ignorer les variables de coordonnées et de limites (CF sections 5.2, 5.6 et 7.1) en tant que bandes raster, mais les exposer en tant que sous-ensembles de données - cela permet d'ouvrir directement les fichiers avec le SRS projeté (ou les limites de dimension), sans spécifier la variable en tant que sous-ensemble de données
  • Meilleure prise en charge des grilles gaussiennes - stockez les valeurs de latitude d'origine dans l'élément de métadonnées de géolocalisation spécial Y_VALUES et utilisez-les pour l'exportation netcdf (#4514)
  • Écrivez des variables multidimensionnelles dans une seule variable (pas une pour chaque bande déroulée) dans CreateCopy?() (#2581)
  • Correction de la gestion des unités km dans le pilote netcdf et importFromProj4() (#4769)
  • Correction de la détection des jeux de données netcdf de largeur/hauteur de 1 et 2 pixels (#4874)
  • Correction des informations sur le type de données du sous-ensemble de données (#4932)
  • Rendre le pilote netCDF thread-safe en ajoutant un mutex global (puisque la bibliothèque netcdf n'est pas thread-safe)
  • nitf_spec.xml : ajout de la définition des TRE ACFTB et AIMIDB
  • Ne pas échapper à DESDATA pour les tailles >10mb (#4803)
  • Correction de la création de NITF lorsque BLOCKA et TRE sont transmis (#4958)
  • Autoriser la lecture JPEG-in-NITF où les dimensions du flux JPEG sont supérieures aux dimensions NITF (#5001)
  • Prise en charge des boîtiers avec 2 LUT
  • Ajouter la prise en charge de CreateCopy?()
  • Ajout de la prise en charge des mises à jour pour le géoréférencement et les métadonnées
  • Ajout de la prise en charge du rendu sélectif des calques (uniquement avec le backend poppler)
  • Ajoutez l'option de configuration GDAL_PDF_BANDS = 3 ou 4 pour sélectionner le rendu RVB ou RGBA, ajoutez l'option de configuration GDAL_PDF_RENDERING_OPTIONS pour activer le rendu sélectif des fonctionnalités en combinant les valeurs VECTOR, BITMAP et TEXT
  • Correction de l'analyse de certains géoréférencements (r24022)
  • Le géoréférencement ISO reconnu au niveau de l'image (et non au niveau de la page) expose ces images en tant que sous-ensembles de données (#4695)
  • Support Poppler 0.20 (et pour la version actuelle de développement Poppler 0.23/0.24)
  • Prise en charge de l'UTF-16
  • Signaler les points d'enregistrement en tant que GCP (OGC Best Practice)
  • Autoriser la construction du pilote avec Poppler et Podofo (à des fins de test principalement)
  • Correction des plantages sur certains fichiers PDF avec poppler >= 0.17.0 (#4520)
  • Améliorer l'arrondi des dimensions raster (#4775)
  • Avec podofo, évitez de lancer le processus 'pdftoppm' dans une console visible sous Windows (#4864)
  • Sélectionnez la ligne nette dont la description est "Couches de carte" lorsqu'elle est trouvée, pour conserver la meilleure ligne nette pour USGS PDF Topo et ajoutez la configuration GDAL_PDF_NEATLINE. option pour remplacer cette valeur par défaut.
  • Améliorer la détection de DPI pour USGS Topo PDF pour obtenir la qualité de trame maximale (augmentera la hauteur et la largeur du jeu de données rapporté)
  • Extraire les métadonnées intégrées USGS Topo PDF dans le domaine EMBEDDED_METADATA
  • Implémenter CreateCopy ? et Supprimer (#4530)
  • Prend en charge la lecture de raster en mosaïque avec un blocage irrégulier et une taille de pixel irrégulière
  • Cache la connexion à la base de données postgres.
  • Utilisez les variables d'environnement PG comme solution de secours lorsque les paramètres ne sont pas fournis dans la chaîne de connexion. (#4533).
  • Ne pas signaler la valeur nodata lorsqu'il n'y en a pas (#4414)
  • Suppression de la dépendance sur la colonne 'rid'.
  • Correction pour faire des requêtes SQL avec des représentations de chaîne à virgule flottante non arrondies. (#4736)
  • Prise en charge de la vue d'ensemble des correctifs
  • Prend en charge toutes les méthodes de rééchantillonnage pour les aperçus internes (#4740)
  • Correction de la prise en charge de la vue d'ensemble avec les ensembles de données multi-tables (#4568, #4737)
  • Ajouter l'option de configuration RASTERLITE_OVR_OPTIONS pour spécifier les options pour les tuiles des aperçus internes
  • Détendez SanityCheckOK() pour éviter de rejeter des ensembles de données CIB valides (#4791)
  • Évitez de sélectionner une table de couleurs entièrement noire
  • Ajouter le code de série NITF manquant « TF » pour « TFC » (et corriger les fautes de frappe dans certaines autres descriptions longues) (# 4776)
  • Correction du pilote TIL à l'aide de la vue d'ensemble (#3482)
  • Ajouter une projection et une géotransformation définies pour TILDataset
  • VRTWarpedDataset : ajoutez INIT_DEST=0 si aucun INIT_DEST n'est spécifié (#4571)
  • VRTFilteredSource : correction de RasterIO() pour prendre en compte les fenêtres source et destination (#4616)
  • éviter les plantages dus au débordement d'int lors du traitement des requêtes remplissant un tampon supérieur à 2 Go (#4815)
  • VRTSourcedRasterBand : remplacez ComputeRasterMinMax?(), ComputeStatistics?() et GetHistogram?() pour les faire fonctionner sur les sources, uniquement lorsqu'il y a un VRTSimpleSource couvrant l'ensemble de VRTSourcedRasterBand
  • résoudre le problème lorsque le VRT est un lien symbolique et que les noms de fichiers sources sont RelativeToVRT (#4999)
  • Correction de l'option relariveToVRT dans VRTRawRasterBand (#5033)
  • Autoriser la lecture/écriture du canal alpha (libwebp >= 0.1.4)
  • Ajout de la prise en charge de la lecture des métadonnées XMP dans le domaine de métadonnées xml:XMP
  • Implémentez GetMetadataItem?(Pixel_iCol_iLine, LocationInfo?) pour récupérer les attributs de pixel
  • Récupérer les valeurs nodata, min et max, définies par bande ou par dataset dans le fichier de configuration (#4613)
  • Ajouter GetColorTable?(), utilisé par le mini pilote TiledWMS (#4613)
  • Mettez à jour le mini-pilote TiledWMS pour prendre en charge le nouveau mécanisme de substitution de variables, les paramètres min/max/nodata, la prise en charge de la table des couleurs (#4613)
  • Ajouter un élément <UserPwd?> dans le fichier de description de service XML

Il n'y a rien de spécifiquement conçu dans Blender pour lui dire d'ignorer les zones transparentes actuellement.

Cela étant dit, il y a certaines choses que nous pouvons faire pour aider à accélérer quelque peu le rendu.

  1. Arrière-plan transparent - Choisissez transparent dans la section Film du panneau Propriétés de rendu. Le rendu sera plus rapide qu'un arrière-plan coloré (qu'il soit entièrement noir ou non)

  1. Taille de la tuile- Choisissez une taille de tuile plus petite que votre taille actuelle (cette astuce est principalement pour le rendu CPU car le rendu GPU utilise généralement des tuiles plus grandes). Cela aidera les temps de rendu lorsque les buckets traitent le bord de l'élément de premier plan.
  1. Échantillonnage ciblé - Utilisez l'option Traçage de chemin ramifié dans la section Échantillonnage du panneau Propriétés de rendu. Si vous réduisez un peu l'échantillon AA et augmentez les échantillons de rebond (diffus, brillant, etc.), vous réduisez le temps passé à rendre le ciel/l'arrière-plan transparent.

  1. Rendu recadré - cette option est un peu plus extrême, mais si vous avez un objet qui ne bouge pas beaucoup à l'écran, vous pouvez recadrer le rendu pour n'inclure que les parties de l'écran dans lesquelles il se trouve. Vous le composeriez ensuite avec le reste des rendus plein cadre.

Divulgation complète, le module complémentaire que je suis sur le point de recommander est un module complémentaire payant créé par moi, mais je pense qu'il fait ce dont vous avez besoin car il a été construit en partie pour la tâche même de sauter les parties transparentes d'une image.

Si vous rendiez une image fixe, vous pouvez utiliser la fonction "Render Border" de Blender pour ignorer les zones en dehors de la zone choisie. Pour les animations, vous pouvez utiliser mon module complémentaire, la bordure de rendu animé (lien vers le fil Blender Artists pour le module complémentaire). Cela met à jour la bordure de rendu à chaque image afin qu'elle entoure toujours l'objet ou le groupe sélectionné et fonctionne à la fois dans la fenêtre et dans le rendu final, permettant de sauter les parties transparentes pour toutes les images. Il a également une marge réglable pour permettre une légère bordure autour de l'objet.


Ouvrez la fenêtre des propriétés et ouvrez le contexte de rendu avec le bouton triangle.

Sous le panneau Dimensions, sélectionnez une résolution et une fréquence d'images appropriées. Les résolutions utilisées par Youtube sont les suivantes :

2160p : 3840x2160
1440p : 2560x1440
1080p : 1920x1080
720p : 1280x720
480p : 854 x 480
360p : 640 x 360
240p : 426 x 240

Tous ces éléments utilisent le rapport hauteur/largeur 16:9. Donc, si vous utilisez un rapport hauteur/largeur différent, tel que 4:3, youtube le convertira en 16:9 en ajoutant un espace vide noir sur les côtés gauche et droit. Utilisez l'une des résolutions ci-dessus pour des résultats prévisibles sur Youtube. Notez que ce n'est pas la même chose que le rapport hauteur/largeur affiché dans Blender !

Assurez-vous que vous avez défini l'image de fin pour la durée que vous souhaitez pour votre vidéo. Cela peut être calculé par la fréquence d'images x la longueur de la vidéo en secondes.

Ouvrez le panneau Sortie. Sélectionnez H.264 pour le format de fichier. Lorsque vous sélectionnez cela, un nouveau panneau nommé Encodage devrait apparaître.

Ouvrez le panneau Encodage. Sélectionnez le format Quicktime.

Réglez le débit binaire maximum sur 0 pour que Blender l'ignore.

Réglez le débit binaire sur l'un des éléments suivants en fonction de la résolution de votre vidéo (ce ne sont que des suggestions données par Youtube lui-même. Vous pouvez trouver des suggestions de meilleure qualité sur cette page.)

2160p : 35000-45000 (ko/s)
1440p : 10000 (ko/s)
1080p : 8000 (ko/s)
720p : 5000 (ko/s)
480p : 2500 (ko/s)
360p : 1250 (ko/s)


1 réponse 1

Jetez un œil à Qu'est-ce qu'une couche de requête ? :


Les couches de requête se comportent comme n'importe quelle autre couche d'entités ou table autonome, elles peuvent donc être utilisées pour afficher des données, utilisées comme entrée dans un outil de géotraitement ou accessibles par programme à l'aide d'API de développeur.


C'est pourquoi l'utiliser directement (comme paramètre d'entrée) dans Feature Class to Feature Class a fonctionné (comme suggéré par Midavalo).

À propos de l'erreur ArcPy 000229 : Impossible d'ouvrir <value> , cet article répertorie les causes possibles :


Mer. 10 avr. 2019

Pendant de nombreuses années, j'ai souhaité pouvoir prendre une image de carte raster, comme une carte géologique, une ancienne carte historique ou une carte des sentiers, et la superposer sur la carte affichée dans OsmAnd afin que je puisse l'utiliser sur mon téléphone tout en me promenant . J'ai essayé plusieurs fois, mais il y a tellement d'étapes et je n'ai jamais trouvé de méthode qui fonctionne.

La semaine dernière, le très serviable Bart Eisenberg a publié sur la liste OsmAnd une vidéo qu'il avait réalisée : Affichage de cartes Web avec MAPC2MAPC : OsmAnd Maps & Navigation. Bart fait de superbes vidéos. mais dans ce cas, MAPC2MAPC s'est avéré être un programme Windows, il n'est donc d'aucune aide pour un utilisateur Linux. Zut!

Mais voir ses étapes décrites m'a incité à réessayer et m'a donné quelques termes utiles pour la recherche sur le Web. Et cette fois, j'ai enfin réussi. J'ai également été aidé par un article sur la liste OsmAnd par A Thompson, Comment obtenir une image aérienne en utilisation hors ligne ?, bien que j'aie dû modifier quelques étapes. (Remarque : cliquez sur l'une des captures d'écran ici pour voir une version plus grande.)

Géoréférencer l'image à l'aide de QGIS

La première étape consiste à géoréférencer l'image : transformez l'image raster simple en un GeoTiff qui a des références indiquant où se trouvent ses coins sur Terre. Il s'avère qu'il existe un programme open source qui peut le faire, QGIS. Bien que ce soit mal documenté, c'est assez facile une fois que vous avez compris l'astuce.

J'ai commencé avec le tutoriel Georeferencing Basics, mais il omet un point important, que j'ai finalement trouvé dans How to Georeference a map in QGIS de BBRHUFT. L'étape 11 est la clé : le système de référence de coordonnées (CRS) doit être le même dans la fenêtre de géoréférencement que dans la fenêtre principale de QGIS. Cela semble évident, mais en pratique, les listes de CRS possibles affichées dans les deux fenêtres ne se chevauchent pas, donc à moins que vous ne suiviez les conseils de BBRHUFT et que vous tapiez 3857 dans la zone de filtrage des deux fenêtres, vous vous retrouverez probablement avec des CRS qui ne correspondent pas. Cela semblera fonctionner, mais le GeoTiff résultant aura des coordonnées loin de l'endroit où elles devraient être

Au lieu de cela, suivez les conseils de BBRHUFT et tapez 3857 dans la boîte de filtre dans les deux fenêtres. Le CRS "WGS 84 / Pseudo Mercator" s'affichera et vous pourrez l'utiliser aux deux endroits. Ensuite, le GeoTiff sortira au bon endroit.

Si vous partez d'un PDF, vous devrez peut-être d'abord le convertir en un format raster comme PNG ou JPG. GIMP peut le faire.

Convertir le GeoTiff en tuiles de carte

Le but ultime est de convertir au format sqlite d'OsmAnd, mais il n'y a aucun moyen d'y accéder directement. Vous devez d'abord le convertir en tuiles de carte dans un format appelé mbtiles.

QGIS has a plug-in called QTiles but it didn't work for me: it briefly displayed a progress bar which then disappeared without creating any files. Fortunately, you can do the conversion much more easily with gdal_translate, which at least on Debian is part of the gdal-bin paquet.

That will create tiles for a limited range of zoom levels (maybe only one zoom level). gdalinfo will tell you the zoom levels in the file. If you want to be able to zoom out and still see your overlay, you might want to add wider zoom levels, which you can do like this:

Incidentally, gdal can also create a directory of tiles suitable for a web slippy map, though you don't need that for OsmAnd. For that, use gdal2tiles, which on Debian is part of the python-gdal package:

Not only does it create tiles, it also includes multiple HTML files you can use to display those tiles using the Leaflet, OpenLayers or Google Maps JavaScript libraries. Très cool!

Create the OsmAnd sqlite file

Tarwirdur has written a nice simple Python script to translate from mbtiles to OsmAnd sqlite: mbtiles2osmand.py. Download it then run

So easy to use! Most of the other references I saw said to use Mobile Atlas Creator (MOBAC) and that looked a lot more complicated.

Incidentally, Bart's video says MAPC2MAPC calls the format "Locus/Rmaps/Galileo/OSMAND (sqlite)", which might be useful to know for web search purposes.

Install in OsmAnd

Once you have the .sqlitedb file, copy it to OsmAnd's carrelage folder in whatever way you prefer. For me, that's adb push file.sqlitedb $androidSD/Android/data/net.osmand.plus/files/tiles where $androidSD is the /storage/whatever location of my device's SD card.

Then start OsmAnd and tap on the icon in the upper left for your current mode (car, bike, walking etc.) to bring up the Configure map menu. Faites défiler jusqu'à Overlay ou alors Underlay map, enable one of those two and you should be able to choose your newly installed map.

You can adjust the overlay's transparency with a slider that's visible at the bottom of the map (the blue slider just above the distance scale), so you can see your overlay and the main map at the same time.

The overlay disappears if you zoom out too far, and I haven't yet figured out what controls that I'm still working on those details.

Sure, this process is a lot of work. But the result is worth it. Check out the geologic layers we walked through on a portion of a recent hike in Rendija Canyon (our hike is the purple path).


Voir la vidéo: Apenti en métal et..Tuiles! Make yourself an apenti in metal and tiles (Octobre 2021).