Suite

Créer un raster avec une échelle de pixels fixe de 10 mètres dans PostGIS


J'ai une série de points que je voudrais convertir en raster, puis calculer la surface du raster en tant qu'indicateur de "quantité de surface couverte". J'essaie de le faire en utilisant PostGIS plutôt qu'un autre langage afin de pouvoir partager facilement ma requête avec des collaborateurs.

Un inconvénient est que mes points sont stockés en tant que json (pas geojson).

identifiant | points ---+-------- 0 | [{'lat': 33.18424, 'lon': -100.0428, 'property': 'Group A'}, {'lat': 33.18424, 'lon': -100.0428, 'property': 'Group A'},… 1 | [{'lat': 33.18424, 'lon': -100.0423, 'property': 'Group A'}, {'lat': 33.18424, 'lon': -100.0458, 'property': 'Group A'},… 2 | [{'lat': 33.18436, 'lon': -100.0422, 'property': 'Group B'}, {'lat': 33.18420, 'lon': -100.0428, 'property': 'Group B'},…

Je dois donc faire un peu de travail pour obtenir mes points dans un format exploitable.

SELECT ST_SetSRID(ST_Point((latlon->'lon')::text::numeric, (latlon->'lat')::text::numeric), 4326)::geometry as geom FROM (SELECT JSON_ARRAY_ELEMENTS(points: :json) comme latlon FROM my_table) comme my_table

Cela fonctionne bien, mais maintenant j'ai du mal à obtenirST_AsRastertravailler pour moi. Je veux que les pixels représentent une zone de 10mx10m mais il y a tellement de variantes deST_AsRasterJe ne sais pas comment le spécifier correctement. Voici ma requête complète :

AVEC my_geom AS (SELECT ST_SetSRID(ST_Point((latlon->'lon')::text::numeric, (latlon->'lat')::text::numeric), 4326)::geometry as geom FROM (SELECT JSON_ARRAY_ELEMENTS(points::json) as latlon FROM my_table) as my_table) SELECT ST_AsRaster(geom, scalex=10.0, scaley=10.0) as my_raster FROM my_geom

Je pense que je devrai peut-être transformer la géométrie du point SRID ou spécifier d'une manière ou d'une autre des unités (mètres) pourST_AsRastermais je ne suis pas sûr que ce soit possible.


J'ai trouvé que le meilleur moyen de créer une entité raster consiste à utiliser un modèle raster. Le raster modèle doit avoir la même étendue que l'union des entités que vous souhaitez rastériser, et chaque pixel doit avoir les dimensions souhaitées.

Je vais copier du code d'un projet sur lequel j'ai récemment travaillé, dans lequel j'ai converti de très grandes entités vectorielles irrégulières en objets raster.

J'ai d'abord créé unmasque_raster(un modèle raster avec des pixels de 25x25 mètres, et une étendue égale à l'étendue de l'union de toutes mes entrées). Cela crée des rasters volumineux dans de nombreux cas, mais c'est plus facile si vous souhaitez ensuite effectuer des calculs sur des rasters qui se chevauchent. La syntaxe est :

ST_MakeEmptyRaster(largeur entière, hauteur entière, float8 upperleftx, float8 upperlefty, float8 scalex, float8 scaley, float8 skewx, float8 skewy, entier srid=inconnu);

Et mon code était :

CREATE TABLE mask_raster AS ( SELECT ST_MakeEmptyRaster(5861, 4141, 1735076, 5390595, 25, 25, 0, 0, 2193) AS rast ); MISE À JOUR mask_raster SET rast = ST_AddBand(rast,'1BB'::text,0) ; --Définir les contraintes SELECT AddRasterConstraints('mask_raster'::name, 'rast'::name);

Vous devrez lire la documentation de ces fonctions pour déterminer les paramètres appropriés, tels que le type de pixel. j'ai utilisé1BBparce que je faisais de simples surfaces booléennes de présence et d'absence, plutôt que de détenir des valeurs quantitatives.

Plus tard, j'ai utilisé ce modèle comme entrée auST_AsRasterune fonction. Le raster modèle donne ainsi son étendue et ses dimensions en pixels à votre conversion d'entités vectorielles. Ma commande était :

WITH ra AS ( WITH mb AS ( SELECT isogeom, (SELECT rast FROM mask_raster) AS rast -- Contient un raster nul construit à partir de l'enveloppe de tous les MB -- Ceci contrôle la résolution, l'origine, la taille du raster en sortie FROM mb_isochrones WHERE source = 'RTI' AND mb2013 = '%s' AND time = '07:15:00'::time AND date >= '%s'::date --start date for loop AND date < '%s'::date --end date for loop ORDER BY date ) SELECT rast, ST_AsRaster(isogeom, rast, ARRAY['1BB'], ARRAY[1], ARRAY[0], true) AS rast2 FROM mb) SELECT ST_MetaData(ra.rast2) , ST_MetaData(ra.rast), ST_SameAlignment(ra.rast, ra.rast) as sm, (ST_DumpValues(ra.rast2,ARRAY[1],false)).* FROM ra;

J'ai présenté toute la requête pour donner un peu de contexte. (En utilisant psycopg2, j'ai également transféré les entités raster dans des tableaux pour les utiliser dans NumPy… Le raster PostGIS est étonnamment difficile). La partie importante de la requête ci-dessus pour vos besoins est :

(SELECT rast FROM mask_raster) AS rast

et

ST_AsRaster(isogeom, rast, ARRAY['1BB'], ARRAY[1], ARRAY[0], true) AS rast2

Dans la ligne juste au-dessus, la fonction ST_AsRaster utiliserast, lesmasque_rastercomme modèle. C'est la façon la plus simple de gérer cela, d'après mon expérience. Ne pas utiliser une couche raster de masque peut entraîner des problèmes de désalignement si vous créez de nombreuses entités raster.


Curve Fit : un outil de régression raster au niveau du pixel pour cartographier les modèles spatiaux

Les schémas géographiques peuvent changer dans le temps et/ou dans l'espace, et ces changements peuvent entraîner des différences dans le schéma de déplacement et l'état corporel des organismes, leurs interactions les uns avec les autres et leur environnement, et finalement conduire à des changements au niveau de la population et de la communauté (Turner 1989). Lors de la quantification des modèles de paysage à l'aide de données de télédétection, il est important de reconnaître que chaque pixel (c'est-à-dire élément d'image) a un contexte temporel et spatial. Le contexte temporel d'un pixel fait référence à sa classification passée et présente et est souvent utilisé pour modéliser le changement de paysage à la résolution la plus fine possible (par exemple, Baker 1989). Le contexte spatial d'un pixel dépend de la classification des pixels voisins, et de la taille de la zone considérée comme le voisinage et constitue la base de l'analyse du modèle spatial morphologique (MSPA, Vogt et al. 2007 Riitters et al. 2007 ) — le reclassement des pixels en fonction du rôle qu'ils jouent dans leur quartier. Malgré le fait que les pixels soient l'unité de base d'une carte et qu'ils aient un contexte spatial et temporel, nous ne connaissons aucun logiciel ou outil permettant de quantifier les changements qui se produisent au niveau du pixel avec des changements dans le temps ou échelle spatiale.


Animer les pixels (série temporelle) d'un raster

Je suis nouveau sur blender et ici pour une tâche très spécifique. J'ai une zone géographique fixe définie par l'image tif (geotiff). Chaque pixel de cette image a une valeur de hauteur. J'ai 100 de ces images de la même zone, mais la valeur du pixel varie.

Cas 1 : En suivant un tutoriel comme ici (Raster extrusion ) je suis capable d'extruder la hauteur de pixel pour chaque image.

Maintenant, je voudrais ajouter toutes ces images sous forme de séquence avec des hauteurs croissantes et décroissantes. Et créez une animation à exporter en animation fbx.

Cas 2 : La deuxième option à laquelle j'ai pensé est la suivante : j'aimerais animer ces lutins en fonction des valeurs qu'ils détiennent. Par exemple, je ne garde qu'une image et pour chaque pixel de cette image, je peux lire un fichier de données de séries temporelles à différentes périodes. C'est-à-dire, imaginez un fichier texte ayant un ID de pixel, une hauteur de pixel. Ainsi, le délai un est la valeur v1, le délai deux est la valeur v2. jusqu'à la valeur v100. Ainsi, l'extrusion de la valeur du pixel varie sur cette séquence de valeurs provenant d'un fichier texte.

Je pense que le deuxième cas sera plus élégant, car Blender peut alors interpoler les valeurs d'extrusion de pixels entre ces périodes. Et encore une fois, je voudrais l'exporter sous forme d'animation fbx pouvant être importée dans unity.


NJDEP Grille d'élévation numérique de 10 mètres de la zone de gestion du bassin versant de la baie de Barnegat (WMA 13)

I. Description des données à fournir
Les données fournies ici sont distribuées sous réserve des conditions et restrictions suivantes .

Pour toutes les données contenues dans le présent document, (NJDEP) ne fait aucune représentation d'aucune sorte, y compris, mais sans s'y limiter, les garanties de qualité marchande ou d'adéquation à un usage particulier, et aucune de ces garanties ne peut être implicite en ce qui concerne les couches de données numériques fournies. ci-dessous. NJDEP n'assume aucune responsabilité de les maintenir de quelque manière que ce soit.

1. Les données numériques reçues du NJDEP doivent être utilisées uniquement à des fins internes dans la conduite des affaires quotidiennes.

2. Les données sont fournies telles quelles, sans garantie d'aucune sorte et l'utilisateur est responsable de comprendre les limitations de précision de toutes les couches de données numériques fournies ici, comme documenté dans le dictionnaire de données et les fichiers Lisez-moi qui l'accompagnent. Toute reproduction ou manipulation des données ci-dessus doit garantir que le système de coordonnées de référence reste intact.

3. Les données numériques reçues du NJDEP ne peuvent être reproduites ou redistribuées pour être utilisées par quiconque sans avoir obtenu au préalable l'autorisation écrite du NJDEP. Cette clause n'est pas destinée à restreindre la distribution des informations cartographiques imprimées produites à partir des données numériques.

4. Toutes les cartes, publications, rapports ou autres documents produits à la suite de ce projet qui utilisent les données numériques du NJDEP créditeront le système d'information géographique (SIG) du NJDEP comme source des données avec le crédit/avertissement suivant : /publication/report) a été développé à l'aide des données numériques du New Jersey Department of Environmental Protection Geographic Information System, mais ce produit secondaire n'a pas été vérifié par le NJDEP et n'est pas autorisé par l'État.

    Parcourir le nom du fichier graphique : http://www.state.nj.us/dep/gis/digidownload/images/wmalattice/wma13lat.gif
    Parcourir la description du fichier graphique : Grille d'élévation numérique de 10 mètres de la zone de gestion du bassin versant de la baie de Barnegat (WMA 13)
    Parcourir le type de fichier graphique : GIF

Informations sur la qualité des données

    Précision des attributs :
      Rapport sur la précision des attributs :
        La précision d'un DEM dépend du niveau de détail de la source et de l'espacement de la grille utilisé pour échantillonner cette source. Le principal facteur limitant pour le niveau de détail de la source est l'échelle des matériaux sources. Les données source d'origine, fournies à une taille de cellule de 10 mètres x 10 mètres par l'USGS, ont été affinées et améliorées hydrologiquement. La sélection appropriée de l'espacement de la grille détermine le niveau de contenu qui peut être extrait d'une source donnée lors de la numérisation.
        La fidélité des relations encodées dans la structure de données du DEM est automatiquement vérifiée à l'aide d'un logiciel USGS à la fin du cycle de production de données. Le test vérifie la pleine conformité à la spécification DEM.
        Le DEM est inspecté visuellement pour s'assurer qu'il est complet sur un système de visualisation et de modification du DEM dans le but d'effectuer un contrôle qualité final et, si nécessaire, de modifier le DEM. Le format physique de chaque modèle numérique d'élévation est validé pour l'exhaustivité du contenu et la cohérence logique pendant le contrôle de la qualité de la production et avant l'archivage dans la base de données cartographiques numériques nationales. En raison de l'orientation variable du quadrilatère par rapport à la grille de projection Universal Transverse Mercator (UTM), les profils qui passent dans les limites du DEM uadrilatéral, peuvent être dépourvus de points de grille d'élévation et ne sont pas représentés dans le DEM. Cette condition se produit rarement et est toujours le premier ou le dernier profil de l'ensemble de données. DEM de niveau 2 : les DEM de niveau 2 peuvent contenir des zones vides dues à des interruptions des contours dans le graphique source ou le DLG. Les poteaux de la grille d'élévation de la zone vide reçoivent la valeur de -32 767. De plus, des zones d'élévation suspectes peuvent exister dans le MNT mais ne sont pas spécifiquement identifiées. Les zones suspectes peuvent être localisées sur le graphique source sous la forme d'une "surface perturbée", symbolisée par des contours surimprimés avec des motifs de surface photorévisés ou autres.
        Précision de position horizontale :
          Rapport de précision de position horizontale :
            La précision horizontale du DEM est exprimée sous la forme d'une erreur quadratique moyenne estimée (RMSE). L'estimation de la RMSE est basée sur des tests de précision horizontale des matériaux sources du DEM qui sont sélectionnés comme étant égaux ou inférieurs à l'erreur RMSE horizontale prévue du DEM. Le test de la précision horizontale des matériaux sources est réalisé en comparant les coordonnées planimétriques (X et Y) de points au sol bien définis avec les coordonnées des mêmes points déterminées à partir d'une source de plus grande précision.

          Les DEM sont édités pour représenter correctement les surfaces d'élévation qui correspondent aux masses d'eau de taille spécifiée.

          DEM de niveau 1 : Un RMSE de 7 mètres ou moins est la norme de précision souhaitée. Un RMSE de 15 mètres est le maximum autorisé. Un DEM de 7,5 minutes à ce niveau a une tolérance d'erreur d'altitude absolue de 50 mètres (environ trois fois le RMSE de 15 mètres) pour les erreurs d'aberration pour tout nœud de grille par rapport à l'altitude réelle. Tout réseau de points dans le DEM ne peut pas englober plus de 49 élévations contiguës erronées de plus de 21 mètres (trois fois le RMSE de 7 mètres). Les erreurs systématiques conformes aux normes de précision indiquées sont tolérées.

            Informations sur la source :
              Citation de la source :
                Informations sur les citations :
                  Auteur : USGS
                  Date de publication : Inconnu
                  Titre : USGS 10 mètres DEM
                  Formulaire de présentation des données géospatiales : données numériques raster
                  Informations sur les publications :
                    Lieu de publication : Sioux Falls, SD
                    Éditeur : USGS
                    Informations sur la période :
                      Date/heure unique :
                        Date du calendrier : Inconnu
                        Moment de la journée : Inconnu

                      DEM de niveau 2 : les DEM de niveau 2 sont produits en convertissant des données de graphique linéaire numérique (DLG) d'hypsographie à l'échelle 1:24 000 et 1:100 000 au format DEM ou les DEM sont générés à partir de données vectorielles dérivées de fichiers raster numérisés de l'USGS 1 : Les contours des séries de cartes à l'échelle 24 000 ou à l'échelle 1: 100 000 se séparent.

                      DEM de niveau 3 : Les DEM de niveau 3 sont créés à partir de données DLG qui ont été intégrées verticalement avec toutes les catégories d'hypsographie, d'hydrographie, de ligne de crête, de ligne de rupture, de fichiers de drainage et de tous les réseaux de contrôle verticaux et horizontaux. La production de MNT de niveau 3 nécessite un système de logique incorporé dans les algorithmes d'interpolation du logiciel qui différencie clairement et interpole correctement entre les différents types de terrain, les densités de données et la distribution des données.

                      Modification des masses d'eau : les surfaces DEM correspondant aux masses d'eau sont aplaties et affectées aux élévations de surface spécifiées ou estimées sur la carte. Les étendues d'eau sont définies comme des étangs, des lacs et des réservoirs qui dépassent 0,5 pouce à l'échelle de la carte et un drainage à double ligne qui dépasse 0,25 pouce à l'échelle de la carte. Les rives des plans d'eau sont dérivées soit d'un DLG hypsographique, soit d'une délimitation interactive à partir d'une série de cartes USGS à l'échelle 1:24 000 ou 1:100 000.

                      Correspondance des bords : les jeux de données DEM dans une zone de projet (constitués d'un certain nombre de fichiers adjacents) sont appariés aux bords pour assurer la continuité de la surface du terrain entre les fichiers. La correspondance des bords est le processus de correction des valeurs d'altitude adjacentes le long des bords communs. L'objectif de l'appariement des bords est de créer des représentations de terrain plus précises en corrigeant l'alignement des crêtes et des drains, et la mise en forme topographique globale dans une zone de poste de grille d'environ 25 à 30 rangées ou colonnes sur les deux bords.

                      Contrôle qualité : les DEM sont visualisés sur des systèmes d'édition interactifs pour identifier et corriger les bévues et les erreurs systématiques. Les DEM sont vérifiés pour le format physique et la cohérence logique dans les centres de production et avant l'archivage dans la base de données cartographiques numériques nationales (NDCDB) à l'aide du logiciel Digital Elevation Model Verification System (DVS).


                      Création d'un champ d'élévation/de hauteur gdal numpy python

                      Je pense qu'il me manque quelque chose de simple et j'attends vos conseils avec impatience.

                      • terragendataset.cpp,v 1.2 *
                        • Projet : pilote TER Terragen(tm)
                        • Objectif : Lecteur de documents Terragen TER
                        • Auteur : Ray Gardener, Daylon Graphics Ltd. *
                        • Des parties de ce module dérivées des pilotes GDAL par
                        • Frank Warmerdam, voir http://www.gdal.org

                        Mes excuses d'avance à Ray Gardener et Frank Warmerdam.

                        Pour l'écriture : SCAL = gridpost distance en mètres hv_px = hv_m / SCAL span_px = span_m / SCAL offset = voir TerragenDataset::write_header() scale = voir TerragenDataset::write_header() physical hv = (hv_px - offset) * 65536.0/scale

                        Cela me dit qu'avant mon WriteArray (somearray) ci-dessus, je dois définir à la fois GeoTransform et SetProjection et SetUnitType pour que les choses fonctionnent (potentiellement)

                        À partir du didacticiel de l'API GDAL : Python import osr import numpy

                        Mes excuses pour avoir créé un article trop long et une confession. Si et quand je comprends bien, ce serait bien d'avoir toutes les notes au même endroit (le long post).

                        J'ai déjà pris une photo (jpeg), l'ai convertie en géotiff et importée sous forme de tuiles dans une base de données PostGIS. J'essaie maintenant de créer un raster d'altitude sur lequel draper l'image. Cela semble probablement idiot, mais il y a un artiste que je souhaite honorer, tout en n'offensant pas ceux qui ont travaillé assidûment pour créer et améliorer ces formidables outils.

                        L'artiste est belge donc des compteurs seraient de mise. Elle travaille dans le Lower Manhattan, NY donc, UTM 18. Maintenant, un SetGeoTransform raisonnable. L'image mentionnée ci-dessus est w=3649/h=2736, je vais devoir y réfléchir.

                        Se rapproche clairement mais ne sait pas si le SetUTM(18,1) a été ramassé. Est-ce un 4x4 dans la rivière Hudson ou un Local_CS (système de coordonnées) ? Qu'est-ce qu'un échec silencieux ?

                        4x4 mètres est une assez petite portée logique.

                        Alors, peut-être que c'est aussi bon que possible. Le SetGeoTransform obtient les bonnes unités, définit l'échelle et vous avez votre Terragen World Space.

                        Réflexion finale : je ne programme pas, mais dans une certaine mesure, je peux suivre. Cela dit, je me suis un peu demandé si et ensuite à quoi ressemblaient les données dans mon petit Terragen World Space (ce qui suit grâce à http://www.gis.usu.edu/

                        C'est donc gratifiant. J'imagine la différence entre le numpy c utilisé ci-dessus et ce résultat va aux actions d'application de Float16 sur cette très petite étendue logique.

                        Presque complètement gratifiant, même s'il semble que je sois à La Concordia au Pérou. Donc je dois trouver comment dire, comme plus au nord, comme New York North. Est-ce que SetUTM prend un troisième élément suggérant "à quelle distance" le nord ou le sud. Il semble que j'ai rencontré hier un graphique UTM qui comportait des zones d'étiquettes de lettres, quelque chose comme C à l'équateur et peut-être T ou S pour la région de New York.

                        En fait, je pensais que SetGeoTransform établissait essentiellement l'nord et l'est en haut à gauche et cela influait sur la partie « à quelle distance nord/sud » de SetUTM. En route pour gdal-dev.

                        Paddington Bear est allé au Pérou parce qu'il avait un billet. J'y suis arrivé parce que j'ai dit que c'était là que je voulais être. Terragen, en travaillant comme il le fait, m'a donné mon espace de pixels. Les appels suivants à srs ont agi sur le hf2 (SetUTM), mais l'abscisse et l'ordonnée ont été établies sous Terragen, donc l'UTM 18 a été réglé, mais dans une boîte englobante à l'équateur. Assez bien.

                        gdal_translate m'a emmené à New York. Je suis sous windows donc une ligne de commande. et le résultat

                        Donc, nous sommes de retour à NY. Il y a probablement de meilleures façons d'aborder tout cela. Je devais avoir une cible qui acceptait Create car je postulais/improvisais également un ensemble de données à partir de numpy. J'ai besoin de regarder d'autres formats qui permettent de créer. L'élévation dans GeoTiff est une possibilité (je pense.)

                        Mes remerciements à tous les commentaires, suggestions et petits coups de coude vers une lecture appropriée. Faire des cartes en python est amusant !


                        2 réponses 2

                        OK - pas d'explosion - mais un simple commentaire de base :

                        Si vous réduisez l'échelle d'un graphique raster (fait de pixels), cela ne fait pas rendre les pixels plus petits, cela diminue le nombre de pixels vous utilisez dans votre raster pour créer le graphique.

                        Par conséquent, votre taille cible prévue - 64x32 - est un COUNT-pixel par bord - comme dans, elle fera 64 pixels de large sur 32 pixels de haut.

                        Cela signifie que vous allez dans l'autre sens par rapport à votre demande - c'est-à-dire que la densité de pixels (c'est-à-dire la résolution) va vers le bas lorsque vous redimensionnez votre graphique, pas vers le haut.

                        Le cas d'utilisation dans lequel la réduction d'une image augmente la densité de pixels est l'impression, dans laquelle oui, vous pouvez augmenter la densité de pixels jusqu'à la limite supérieure de l'imprimante cible - souvent au-delà de 300 DPI, certains vont bien plus de 600 DPI.

                        Si vous redimensionnez votre image dans Photoshop, Gimp, Affinity Photo, etc., mais en conservant le même fichier 72 PPI pour le Web, vous le verrez rééchantillonner l'image une fois redimensionnée et voir la résolution chuter de manière drastique de la même manière, si vous exportez à partir de votre natif. fichier au format .png et forcez les dimensions d'exportation à la taille de votre cible, puis ouvrez le fichier résultant dans une visionneuse d'images ou Gimp, vous verrez directement ce qui se passe : des pixels géants par rapport à votre image - vous savez - style Minecraft !

                        Peut-être que cela aidera cela à avoir plus de sens - je l'ai assemblé assez rapidement, mais je pense que cela devrait le faire:

                        Voici mon image à la résolution d'origine (10x16 pixels) la grille rouge marque mes pixels :

                        Je réduis l'image à 5x4 pixels, et dans ce processus les pixels reste la même taille (parce que c'est ce que les pixels fais - ils sont toujours la même taille sur un écran donné) et le logiciel analyse des groupes de quatre pixels pour déterminer le nouveau pixel à cet emplacement relatif - d'où la perte de détails et la subtilité des traitements de couleur lorsque vous supprimez le nombre de pixels.


                        Parallélisation

                        La parallélisation brute améliore légèrement les performances, mais elle n'évolue pas de manière linéaire avec le nombre de cœurs. Sur ma machine à 24 threads, ce qui suit donne une amélioration de 30 à 40 % par rapport à la variante de boucle WritableRaster :

                        Puisque vous construisez un mot complet de 32 bits à partir de bits aléatoires, vous pouvez ignorer les subtilités et générer simplement un nombre aléatoire de 32 bits en tant que votre p. Ce qui n'est pas clair, c'est comment les cas limites se comporteraient. Par exemple, j'aurais utilisé un int non signé au lieu d'un int pour contenir vos quatre valeurs (0-255), car celui le plus à gauche (R) pourrait déranger le signe de p. etc. Cela devrait aller environ 4 fois plus vite que d'utiliser 4 appels et multiplie pour chaque pixel.

                        Aussi, avez-vous vraiment besoin de 720 millions différent valeurs aléatoires ? ou a-t-il juste besoin d'avoir l'air vraiment aléatoire ? Vous pourriez avoir un tableau de, disons, 1 000 000 pixels, au lieu de p, avoir p[1000000]. C'est une génération assez rapide, 1M contre 720M. Ensuite, générez simplement des valeurs aléatoires entre 0 et 999999, faites votre img.setRGB() avec des sélections aléatoires de cette palette. Et oui, ce n'est pas plus rapide que le code ci-dessus. Mais pensez à ne PAS générer de valeurs aléatoires de 0 à 999999. Envisagez plutôt de prendre ces pixels déjà aléatoires dans une boucle, du premier au dernier, puis de répéter cette boucle, encore et encore, au fur et à mesure que vous progressez dans votre image. Bien sûr, cela se "répétera", mais visuellement, il sera assez difficile de voir un motif.

                        Comme alternative supplémentaire, après avoir généré très rapidement un million de pixels aléatoires, remplissez votre tableau d'images en procédant comme suit :


                        Conversione da raster a vetore¶

                        Dans notre discussion sur les données vectorielles, nous avons expliqué que les données raster sont souvent utilisées comme couche de fond, qui est ensuite utilisée comme base à partir de laquelle les entités vectorielles peuvent être numérisées.

                        Une autre approche consiste à utiliser des programmes informatiques avancés pour extraire automatiquement les caractéristiques vectorielles des images. Certaines caractéristiques telles que les routes apparaissent dans une image sous la forme d'un changement soudain de couleur par rapport aux pixels voisins. Le programme informatique recherche de tels changements de couleur et crée des caractéristiques vectorielles en conséquence. Ce type de fonctionnalité n'est normalement disponible que dans des logiciels SIG très spécialisés (et souvent coûteux).


                        1 réponse 1

                        Tout d'abord, une petite précision :

                        le paramètre Pixels par unité contrôle la taille du géométrie l'image est rendue sur. Il ne redimensionne pas la ressource d'image raster en mémoire ou sur le disque, comme vous pourriez être habitué lors du redimensionnement d'une image dans Photoshop ou des programmes similaires. Ces opérations peuvent prendre un certain temps, car le programme doit parcourir chaque pixel de la nouvelle image et calculer sa couleur en échantillonnant les pixels correspondants dans son incarnation précédente.

                        En revanche, la mise à l'échelle effectuée par Pixels par unité est très bon marché, fonctionnant sur une poignée de matrices de transformation ou de vecteurs que le jeu allait devoir traiter de toute façon lors de leur envoi au GPU pour rendre chaque image.

                        Ainsi, vous ne devriez pas vous soucier du processus de mise à l'échelle lui-même qui aurait un impact substantiel sur les performances.

                        Là où les pixels par unité peuvent avoir un impact sur les performances, c'est dans la façon dont la taille résultante de vos objets de scène joue avec les structures d'accélération de Unity pour le rendu et la physique. Souvent, ceux-ci sont réglés pour supposer que les éléments avec lesquels vous interagissez principalement - vos personnages de joueurs, volumes de déclenchement, tuiles de carte, etc. - sont sur une échelle comprise entre des dixièmes et des dizaines d'unités. Si nous considérons une unité comme un mètre, cela nous permet de modéliser les interactions avec n'importe quoi, des animaux domestiques aux gros porteurs.

                        Garder un paramètre de pixels par unité réglé pour que votre jeu se déroule dans cette plage de tailles permet à ces systèmes de faire leur travail en douceur. Cela peut également aider à rendre vos calculs faciles en tant que développeur, en s'en tenant à de petits nombres simples à utiliser et à mémoriser ("les tuiles de la carte font 1 unité, le mouvement de tiret du joueur parcourt 3 unités", etc.).

                        Vous verrez cependant un didacticiel occasionnel qui indique que vous devez définir vos pixels par unité sur 1, afin que vous puissiez travailler en coordonnées de pixels pour tout. Je ne recommande pas cette approche. En procédant de cette façon, un seul écran à 1080p couvre 2000 unités de jeu, et la plupart des objets seront des centaines d'unités. Cela peut entraîner un mauvais comportement de systèmes tels que la physique, car ils se situent en dehors de la plage pour laquelle ils ont été réglés.

                        Donc, là encore, la mise à l'échelle elle-même n'est pas un évier de performance important, mais les conséquences qu'elle a sur la taille de vos interactions de jeu peuvent l'être.


                        Abstrait

                        L'énergie renouvelable variable est en passe de devenir une source d'énergie clé dans le monde, mais l'on s'inquiète de l'impact de l'intermittence de sa production lorsque la pénétration est élevée. Les modèles de systèmes énergétiques doivent s'attaquer à ce problème en améliorant la résolution et la portée de la modélisation. Pour permettre une telle modélisation, des ensembles de données d'entrée plus nombreux et de meilleure qualité sont nécessaires sur les potentiels et les rendements variables des énergies renouvelables. Ceux-ci doivent être de portée mondiale, d'une résolution spatiale et temporelle suffisante, et générés avec des méthodes transparentes et cohérentes. Cette étude développe les méthodes et les applique pour générer ces ensembles de données à une résolution infranationale et horaire. L'évaluation est réalisée pour les technologies éoliennes et solaires avec des contraintes cohérentes incluant les aspects géographiques, sociaux et économiques. Les caractéristiques de l'OpenStreetMap sont converties en ensembles de données sur la couverture et l'utilisation des terres et appliquées. La production d'énergie horaire est simulée à l'aide des ensembles de données météorologiques MERRA-2 de la NASA, réconciliés avec les cartes de ressources des plateformes Global Wind Atlas et Global Solar Atlas. Des courbes d'offre de capacité sont fournies pour 731 zones terrestres et 339 zones offshore dans le monde, ainsi que les profils de production horaire correspondants sur une période de simulation de 10 ans. Les potentiels énergétiques proposés sont relativement prudents par rapport à d'autres études. Les ensembles de données peuvent servir d'entrée pour les modèles de systèmes énergétiques régionaux ou mondiaux lors de l'analyse des parts d'énergie renouvelable très variables.


                        Voir la vidéo: 0104 Create raster from text file (Septembre 2021).