Suite

Utiliser GDAL pour obtenir les sommets d'un multipolygone

Utiliser GDAL pour obtenir les sommets d'un multipolygone


J'utilise avec succès GDAL pour obtenir les sommets d'un polygone à partir d'un ShapeFile en utilisant le code .NET. Ce lien m'a montré comment faire :

http://geoinformaticstutorial.blogspot.com/2012/10/accessing-vertices-from-polygon-with.html

Cependant, si le type de forme est un multipolygone, ce processus n'obtient aucun sommet. Comment puis-je obtenir les sommets d'un multipolygone?


Voici le code que j'ai utilisé pour que cela fonctionne. Voici le code VB.NET :

Fonction publique SchoolDistrictBoundary() As List(Of List(Of Coordinate)) Dim district As Feature = schoolDistrict() Dim result = New List(Of List(Of Coordinate)) If district IsNot Nothing Then Dim geometry = district.GetGeometryRef() Dim type = geometry.GetGeometryType() If type = wkbGeometryType.wkbPolygon Then 'un seul polygone Dim coordSet = New List(Of Coordinate) Dim ring = geometry.GetGeometryRef(0) For x = 0 To ring.GetPointCount() - 1 Dim point () As Double = {0, 0} ring.GetPoint(x, point) Dim coord = New Coordinate() coord.Longitude = point(0) coord.Latitude = point(1) coordSet.Add(coord) Résultat suivant. Add(coordSet) ElseIf type = wkbGeometryType.wkbMultiPolygon Then 'plusieurs polygones Dim bounds = geometry.GetBoundary() For shape = 0 To bounds.GetGeometryCount() - 1 Dim coordSet = New List(Of Coordinate) Dim polygon = bounds.GetGeometryRef( shape) For x = 0 To polygon.GetPointCount() - 1 Dim point() As Double = {0, 0} polygon.GetPoint(x, point) Dim coord = New Coordina te() coord.Longitude = point(0) coord.Latitude = point(1) coordSet.Add(coord) Next result.Add(coordSet) Next End If End If Renvoyer le résultat End Function

Je suppose que vous êtes satisfait de votre script, mais vous pourrez peut-être utiliser le dialecte Spatialite SQL à l'avenir.

Prenons un fichier de formes avec un multipolygone pour commencer.

ogrinfo multipolygon.shp -al INFO : Ouverture réussie de 'multipolygon.shp' à l'aide du pilote 'ESRI Shapefile'. Nom de la couche : multipolygone Géométrie : Polygone Nombre d'entités : 1 Etendue : (403784.354400, 6924130.250945) - (409732.186830, 6926861.991572) Couche SRS WKT : (inconnu) OGRFeature(multipolygone) : 0 ,405140.53768984287 6924692.09 83081609,403784,35439963144 6926261.3961154055)),((407484.79737720836 6926745.74 72904809,409732.18682955875 6926745.7472904809,409344.70588949829 69244063.991415,103,1207)

Utilisez ensuite la fonction ST_DissolvePoints de Spatialite https://www.gaia-gis.it/gaia-sins/xmlBlob/spatialite-sql-latest.html via le dialecte SQLite SQL de GDAL http://www.gdal.org/ogr_sql_sqlite. html. Vous devez avoir GDAL compilé avec suffisamment de nouveau Spatialite car la fonction ST_DissolvePoints est assez nouvelle.

ogrinfo multipolygon.shp -dialect sqlite -sql "sélectionner les points de dissolution (géométrie) à partir du multipolygone" INFO: Ouverture de 'multipolygon.shp' à l'aide du pilote 'ESRI Shapefile' réussie. Nom de la couche : SELECT Géométrie : inconnue (n'importe laquelle) Nombre d'entités : 1 Etendue : (403784.354400, 6924130.250945) - (409732.186830, 6926861.991572) Couche SRS WKT : (inconnu) Colonne de géométrie = points de dissolution (géométrie) OGRFeature(SELECT):0 MULTIPOINT (403784.35439963144 6926261.3961154055,405838.0033819516 6926861,99 15724993,407000.44620213285 6925680.1747053144,405140.53768984287 6924692,098308 1609,403784.35439963144 6926261.3961154055,407484.79737720836 6926745,7472904809, 409732,18682955875 6926745.7472904809,409344.70588949829 6924323.991415103,4069 22,95001412078 6924130.2509450726,407484.79737720836 6926745,7472904809)

Je sais que le résultat n'est pas exactement ce que vous visez, mais peut-être trouverez-vous une utilité pour le dialecte SQLite à l'avenir.


Voici une version C#,dsest unPilote OSGeo.OGR.DriveretlayerIdXest la couche que vous voulez :

Fonctionnalité OSGeo.OGR.Feature = null ; OSGeo.OGR.Geometry geo = null, ring = null; double[] pointList = { 0, 0, 0 }; int layerIdX = 2; OSGeo.OGR.Layer layer = ds.GetLayerByIndex(layerIdX); if( geoType == "wkbMultiPolygon") { for( int i = 0; i < numberOfFeatures; ++i ) { feature = layer.GetFeature(i); if( feature != null ) { geo = feature.GetGeometryRef(); for( int j = 0; j < geo.GetGeometryCount(); ++j ) { var inGeo = geo.GetGeometryRef(j); for( int k = 0; k < inGeo.GetGeometryCount(); ++k ) { ring = inGeo.GetGeometryRef(k); int pointCount = ring.GetPointCount(); for( int l = 0; l < pointCount; ++l ) { ring.GetPoint( l, pointList ); // pointList[0] est la longitude. // pointList[1] est la latitude. // pointList[2] est l'altitude. } } } } } }

Ytdjtkui

Où Heinlein a-t-il dit « Une fois que vous arrivez en orbite terrestre, vous êtes à mi-chemin de n'importe où dans le système solaire » ?

Dois-je décrire ou écrire mes histoires ?

Les moniteurs d'arcade avaient-ils le même rapport hauteur/largeur de pixels que les téléviseurs ?

Compter l'occurrence de chaque mot unique dans le fichier

Sur une planète verrouillée par les marées, le temps serait-il quantifié ?

Quel était le libellé exact d'Ivanhoe de ce conseil sur la façon de vous libérer de l'esclavage ?

Créez tous les mots possibles en utilisant un ensemble ou des lettres

Sous-chaîne commune la plus longue en temps linéaire

Mis à part les considérations électorales, quels sont les avantages potentiels, pour les États-Unis, des changements de politique proposés par le tweet reconnaissant l'annexion du Golan ?

Charger des commandes à partir d'un fichier

Point de fusion de l'aspirine, sources contradictoires

La liberté d'expression et où elle s'applique

GraphicsGrid avec une étiquette pour chaque colonne et ligne

Pourquoi tant de travail sur la vérification numérique de l'hypothèse de Riemann ?

Stocker les informations de carte de crédit dans le gestionnaire de mots de passe ?

Score total le plus bas au scrabble

Le code américain est-il protégé par les droits d'auteur du gouvernement ?

Question sur la preuve du deuxième théorème d'isomorphisme

Comment une planète peut-elle avoir des jours erratiques ?

Créer des polygones en plusieurs parties qui se touchent en interne à l'aide d'ArcGIS Desktop ?

Conversion de polygones en une seule partie adjacents en plusieurs parties ?Fusionner des parcelles mais conserver la géométrie séparée dans ArcGIS Desktop ?Fusionner sans fusion dans ArcGIS for Desktop ?Rechercher des entités surfaciques de parcelle avec une façade sur plusieurs rues à l'aide d'ArcGIS Desktop ?Fusionner des parcelles mais conserver la géométrie séparée dans ArcGIS Desktop ?Fractionner plusieurs -partie polygone en polygones simples à l'aide d'ArcGIS Desktop ?Comment fusionner des polygones simples en polygones à plusieurs parties par distances maximales ?Désplier/dissoudre plusieurs lignes se touchant dans Stream Network à l'aide d'ArcGIS Desktop ?Fusionner des lignes (qui peuvent se croiser) à des points de terminaison communs sans plusieurs parties entités dans le résultatDélimiter la limite autour de nombreux petits polygones pour réduire le nombre de polygones mais conserver une couverture relative à l'aide d'ArcGIS Desktop ?Fusionner ou dissoudre des points tout en conservant les attributs à l'aide d'ArcGIS Desktop ?Dissoudre une entité/un champ par intervalle à l'aide d'ArcGIS Desktop ? #8221 outil dans QGIS?


Mdhntd

Que veut dire « Mourir tranquillement de vieillesse, ce serait y aller à pied » ?

J'ai cassé mon dérailleur de moyeu de vélo & (je pense) - à quel point est-il grave ?

Flèche d'équivalence verticale au milieu entre deux lignes

Quelle était la raison invoquée pour avoir décerné ce prix à Trump ?

Comment récompenser un bon service au Japon ?

Épaissir le ragoût/la sauce deux fois avec de la farine

Faire du pain avec peu d'ingrédients

Le câblage de la cuisine a mal tourné

Pourquoi avons-nous besoin de lanceurs dédiés aux petits satellites ?

J'ai l'impression d'en avoir fait assez pour un doctorat mais mon directeur n'est pas d'accord

Mon collègue retient des informations sur ses systèmes et me reproche des "bugs" qui ne sont pas de ma faute

Est-ce un cycle hamiltonien sur une grille ?

Pourquoi Poudlard n'a-t-il pas fermé ses portes après ce type d'événements ?

7-Zip semble incapable de compresser l'image de disque virtuel remplie de zéro après 1,8 Go

Si j'essaye d'utiliser le sort Téléportation pour me téléporter dans une zone protégée par le sort Interdiction, mon emplacement de sort est-il épuisé ?

Pourquoi les avions de combat n'ont-ils pas d'armes *laser* orientées vers l'arrière ?

Quelqu'un sans aucune expérience a-t-il déjà pris l'avion ? Le pourraient-ils ?

Pourquoi les entreprises paient-elles des dividendes fixes au lieu de dividendes fluides ?

Besoin urgent d'une carte de débit prépayée pour payer le collecteur de dettes

Pourquoi la réverbération est-elle généralement appelée « humide » ou « drippy » ?

Comment créer des numéronymes dans bash

Sentinel2 : le système de coordonnées de la bande n'en montre aucun jp2 en python

Système de coordonnées géographiques en système de coordonnées projetéesCréation d'une mosaïque de bandes composites de données sentinelle 2 avec arcpyHandle .JP2 Sentinel dataModifier le système de coordonnées du fichier de formes à l'aide de PythonNetCDF avec des bandes lat/long séparées en GeoTiff avec Python/GDALRasterio La sortie write_band n'a pas de CRSComment télécharger Sentinel2 L1C avec AWS Python SDK (boto3)

J'utilise python 3.7. J'ai téléchargé des images sentinel2 à l'aide de l'API python sentinelsat. J'ai utilisé geojsonfile multipolygon comme empreinte avec système de référence de coordonnées, EPSG:32632.
J'essaie actuellement de faire de l'analyse d'images sentinelles. Donc, j'avais besoin d'accéder aux coordonnées. Les informations que j'ai obtenues sont Aucune.

Le résultat est:
Rien
quelqu'un a-t-il une solution possible ?

J'utilise python 3.7. J'ai téléchargé des images sentinel2 à l'aide de l'API python sentinelsat. J'ai utilisé geojsonfile multipolygon comme empreinte avec système de référence de coordonnées, EPSG:32632.
J'essaie actuellement de faire de l'analyse d'images sentinelles. Donc, j'avais besoin d'accéder aux coordonnées. Les informations que j'ai obtenues sont Aucune.

Le résultat est:
Rien
quelqu'un a-t-il une solution possible ?

J'utilise python 3.7. J'ai téléchargé des images sentinel2 à l'aide de l'API python sentinelsat. J'ai utilisé geojsonfile multipolygon comme empreinte avec système de référence de coordonnées, EPSG:32632.
J'essaie actuellement de faire de l'analyse d'images sentinelles. Donc, j'avais besoin d'accéder aux coordonnées. Les informations que j'ai obtenues sont Aucune.

Le résultat est:
Rien
quelqu'un a-t-il une solution possible ?

J'utilise python 3.7. J'ai téléchargé des images sentinel2 à l'aide de l'API python sentinelsat. J'ai utilisé geojsonfile multipolygon comme empreinte avec système de référence de coordonnées, EPSG:32632.
J'essaie actuellement de faire de l'analyse d'images sentinelles. Donc, j'avais besoin d'accéder aux coordonnées. Les informations que j'ai obtenues sont Aucune.

Le résultat est:
Rien
quelqu'un a-t-il une solution possible ?


Renvoyé à la page d'accueil par Communauté ♦ il y a 15 minutes

Cette question a des réponses qui peuvent être bonnes ou mauvaises, le système l'a marquée comme active afin qu'elles puissent être examinées.

L'utilisation d'ogr2ogr est-elle une option acceptable pour vous ?

– user30184
16 juillet 18 à 21:53

@ user30184 Pas vraiment. Je pense qu'il s'agit d'un outil de ligne de commande, où j'ai besoin qu'il soit intégré à un site Web afin qu'un utilisateur puisse télécharger un fichier de formes et qu'il soit traité (de préférence en utilisant C#).

Qu'en est-il de GDAL en général s'il est utilisé via des liaisons C# ou Python ? Mais cela ressemble à un outil lourd si le seul problème concerne les orientations des anneaux.

Ouais - je suis si proche de NetTopologySuite qui charge les données, il y a juste ce petit problème, qui est MakeValid supposé à réparer. Je me demande donc s'il y a quelque chose qui ne va pas dans la façon dont je le fais, plutôt que de chercher un nouvel outil.

Les données que j'ai chargées à partir d'un fichier de formes dans une colonne de géométrie dans SQL Server (à l'aide de NetTopologySuite) ne produisent pas de GeoJSON valide lorsque je les exporte car elles ne suivent pas la règle de droite.

Je pensais que ce serait facile à résoudre avec la fonction MakeValid(), mais cela ne corrige pas le problème.

J'ai essayé avec une géométrie simplifiée comme ci-dessous:

SQL Server dit qu'il est valide (24400 : valide), c'est donc probablement pourquoi il ne le corrige pas dans la fonction MakeValid.

Quelle est la meilleure façon de résoudre ce problème ? J'ai vu une option à utiliser:
UPDATE table SET geom = geom.STUnion(geom.STStartPoint()) qui fonctionne pour les polygones simples, mais je ne sais pas si cela fonctionnera pour des géométries plus complexes.

Les données que j'ai chargées à partir d'un fichier de formes dans une colonne de géométrie dans SQL Server (à l'aide de NetTopologySuite) ne produisent pas de GeoJSON valide lorsque je les exporte car elles ne suivent pas la règle de droite.

Je pensais que ce serait facile à résoudre avec la fonction MakeValid(), mais cela ne corrige pas le problème.

J'ai essayé avec une géométrie simplifiée comme ci-dessous:

SQL Server dit qu'il est valide (24400 : valide), c'est donc probablement la raison pour laquelle il ne le corrige pas dans la fonction MakeValid.

Quelle est la meilleure façon de résoudre ce problème ? J'ai vu une option à utiliser:
UPDATE table SET geom = geom.STUnion(geom.STStartPoint()) qui fonctionne pour les polygones simples, mais je ne sais pas si cela fonctionnera pour des géométries plus complexes.


Ytdjtkui

Pourquoi est-ce une mauvaise idée d'engager un tueur à gages pour éliminer la plupart des politiciens corrompus ?

Groupes matriciels de type fini dont les valeurs propres sont toutes algébriques

Quel exploit ces agents utilisateurs essaient-ils d'utiliser ?

Données de test d'apprentissage automatique

Comment éviter le trope "ils tombent amoureux"

Que faut-il pour rendre les signaux GPS disponibles à l'intérieur ?

La Commission de la pomme de terre de l'Idaho associe-t-elle les peaux de pomme de terre à une alimentation saine ?

Convertir des secondes en minutes

Phares de voiture dans un monde sans électricité

Comment expliquer de manière compacte les caractères secondaires et tertiaires sans recourir aux stéréotypes ?

Quelle est la couleur la plus courante pour indiquer que le champ de saisie est désactivé ?

Existe-t-il un moyen neutre pour l'hémisphère de spécifier une saison ?

Authentification basée sur les connaissances à l'aide de la conception pilotée par domaine en C#

Le patron de l'intimidation a lancé une campagne de diffamation et m'a rendu inemployable

OP Amp n'amplifie pas le signal audio

Vitesse du processeur limitée à 0,4 Ghz

Déverrouillez mon téléphone ! Février 2018

Comment montrer à un propriétaire ce que nous avons en économies ?

Que signifie le même-ish?

Quelle est la factorisation entière la plus rapide pour casser le RSA ?

Comment quitter BASH pendant la boucle à l'aide de l'opérateur de module ?

Commande Mathematica qui lui permet de lire mes intentions

Faites des créatures avec une vitesse de 0 pied, volez à 30 pieds. (planer) jamais toucher le sol?

Comment appelle-t-on quelqu'un qui pose beaucoup de questions ?

Superpositions spatiales : Union entre multiligne et multipolygone avec géopandas

Trouvez des paires d'entités proches avec geopandas, fiona, GDAL, etc. de la collection de géométrie à la géométrie de polygone avec python countryBuffer avec dissolution - Geopandas - unary_union multipolygonOverlay Union Geopandas améliore les performancesPourquoi Union dans ArcMap est-il beaucoup plus rapide que d'autres approches ?

J'essaie de superposer (appliquer l'union) mon multipolygone sur la multiligne avec GeoPandas, mais il semble que la fonction de superposition de GeoPandas ne fonctionne qu'avec (Multi)polygon. Existe-t-il un moyen de le faire avec des multilignes et des multipolygones avec GeoPandas. Voici mon code :

Quelle sortie attendez-vous pour superposer des polygones avec des lignes ? Fractionner des lignes avec des attributs de polygone ?

Ouais exactement, c'est ce que je veux faire, diviser des lignes avec des attributs de polygone

Pouvez-vous coder en dur des exemples de géométries à l'aide d'objets galbés ?

Oui, je pense que je peux dp ça

J'essaie de superposer (appliquer l'union) mon multipolygone sur la multiligne avec GeoPandas, mais il semble que la fonction de superposition de GeoPandas ne fonctionne qu'avec (Multi)polygon. Existe-t-il un moyen de le faire avec des multilignes et des multipolygones avec GeoPandas. Voici mon code :

Quelle sortie attendez-vous pour superposer des polygones avec des lignes ? Fractionner des lignes avec des attributs de polygone ?

Ouais exactement, c'est ce que je veux faire, diviser des lignes avec des attributs de polygone

Pouvez-vous coder en dur des exemples de géométries à l'aide d'objets galbés ?

Oui, je pense que je peux dp ça

J'essaie de superposer (appliquer l'union) mon multipolygone sur la multiligne avec GeoPandas, mais il semble que la fonction de superposition de GeoPandas ne fonctionne qu'avec (Multi)polygon. Existe-t-il un moyen de le faire avec des multilignes et des multipolygones avec GeoPandas. Voici mon code :

J'essaie de superposer (appliquer l'union) mon multipolygone sur la multiligne avec GeoPandas, mais il semble que la fonction de superposition de GeoPandas ne fonctionne qu'avec (Multi)polygon. Existe-t-il un moyen de le faire avec des multilignes et des multipolygones avec GeoPandas. Voici mon code :

Quelle sortie attendez-vous pour superposer des polygones avec des lignes ? Fractionner des lignes avec des attributs de polygone ?

Ouais exactement, c'est ce que je veux faire, diviser des lignes avec des attributs de polygone

Pouvez-vous coder en dur des exemples de géométries à l'aide d'objets galbés ?

Oui, je pense que je peux dp ça

Quelle sortie attendez-vous pour superposer des polygones avec des lignes ? Fractionner des lignes avec des attributs de polygone ?

Ouais exactement, c'est ce que je veux faire, diviser des lignes avec des attributs de polygone

Pouvez-vous coder en dur des exemples de géométries à l'aide d'objets galbés ?

Oui, je pense que je peux dp ça

Quelle sortie attendez-vous pour superposer des polygones avec des lignes ? Fractionner des lignes avec des attributs de polygone ?

Quelle sortie attendez-vous pour superposer des polygones avec des lignes ? Fractionner des lignes avec des attributs de polygone ?

Ouais exactement, c'est ce que je veux faire, diviser des lignes avec des attributs de polygone

Ouais exactement, c'est ce que je veux faire, diviser des lignes avec des attributs de polygone

Pouvez-vous coder en dur des exemples de géométries à l'aide d'objets galbés ?

Pouvez-vous coder en dur des exemples de géométries à l'aide d'objets galbés ?

Oui, je pense que je peux dp ça

Oui, je pense que je peux dp ça


Sffyju

Les 737 stockés/loués peuvent-ils être utilisés pour remplacer les MAX mis à la terre ?

Comment demander aux candidats à temps plein rejetés de postuler pour enseigner des cours individuels ?

IC sur Digikey est 5 fois plus cher qu'une carte contenant le même IC sur Alibaba : Comment ?

la réponse d'angle de la calculatrice pour les rapports trigonométriques qui peuvent fonctionner dans plus d'un quadrant sur le cercle unité

Existe-t-il un verbe pour écouter furtivement ?

Le RGPD couvre-t-il la collecte de données par les sites Web qui explorent le Web et revendent les données des utilisateurs

Qui est cette dame dans la salle de guerre ?

Les ondes gravitationnelles peuvent-elles traverser un trou noir ?

Un ancêtre immigrant allemand a un « Affidavit d'enregistrement d'Alien Enemy » dans son dossier. Qu'est-ce que cela signifie exactement?

Comment puis-je présenter les noms de créatures fantastiques au lecteur ?

En tant que double citoyen, mon passeport américain expirera un jour après avoir voyagé aux États-Unis. Est-ce que ça va marcher?

Comment Billy Russo acquiert-il son masque 'Jigsaw' ?

Qui est le géant Batman à l'arrière de cette image de Batman en métal des chevaliers noirs ?

Puis-je fournir suffisamment d'électrons de spin up à un trou noir pour affecter son moment angulaire ?

Pourquoi ne pas utiliser le joug pour contrôler le lacet, ainsi que le tangage et le roulis ?

Pourquoi Bronn a-t-il proposé d'être le champion de Tyrion Lannister à l'épreuve du combat ?

Comment atteindre l'agilité féline ?

Les satellites artificiels devraient-ils comporter un « attrape-vaches » intelligent inversé ?

Armement du sort Saisie à distance

Agrandir la boîte Shapely à l'aide de GeoPandas ?

Je crée une boîte qui couvre la zone d'un GeoPandas GeoDataFrame,
afin que je puisse l'utiliser comme une carte inversée pour couvrir plus tard les données de débordement indésirables.

Je dois agrandir la boîte d'environ 5% pour couvrir toutes les données indésirables.

Quelle est une bonne approche pour agrandir une boîte bien faite ?

Jetez un œil à la méthode du tampon : shapely.readthedocs.io/en/latest/manual.html#object.buffer En jouant avec les arguments cap_style ou join_style, vous devriez pouvoir créer un tampon autour de cette boîte qui résulte toujours en un boîte carrée (et non avec des coins arrondis, ce qui sera la valeur par défaut)

Je crée une boîte qui couvre la zone d'un GeoPandas GeoDataFrame,
afin que je puisse l'utiliser comme une carte inversée pour couvrir plus tard les données de débordement indésirables.

Je dois agrandir la boîte d'environ 5% pour couvrir toutes les données indésirables.

Quelle est une bonne approche pour agrandir une boîte bien faite ?

Jetez un œil à la méthode du tampon : shapely.readthedocs.io/en/latest/manual.html#object.buffer En jouant avec les arguments cap_style ou join_style, vous devriez pouvoir créer un tampon autour de cette boîte qui résulte toujours en un boîte carrée (et non avec des coins arrondis, ce qui sera la valeur par défaut)

Je crée une boîte qui couvre la zone d'un GeoPandas GeoDataFrame,
afin que je puisse l'utiliser comme une carte inversée pour couvrir plus tard les données de débordement indésirables.

Je dois agrandir la boîte d'environ 5% pour couvrir toutes les données indésirables.

Quelle est une bonne approche pour agrandir une boîte bien faite ?

Je crée une boîte qui couvre la zone d'un GeoPandas GeoDataFrame,
afin que je puisse l'utiliser comme une carte inversée pour couvrir plus tard les données de débordement indésirables.


Utiliser GDAL pour obtenir les sommets d'un multipolygone - Systèmes d'Information Géographique

Ce chapitre fournit des informations conceptuelles et d'utilisation sur le chargement, le stockage, l'accès et l'utilisation de données spatiales dans un environnement Big Data.


    Les fonctionnalités Oracle Big Data Spatial et Graph permettent de stocker, d'accéder et d'analyser les données spatiales rapidement et efficacement pour une prise de décision basée sur la localisation.
    Oracle Big Data Spatial and Graph prend en charge le stockage et le traitement des données spatiales vectorielles et raster.
    Oracle Spatial Hadoop Image Processing Framework permet la création de nouvelles images combinées résultant d'une série de phases de traitement en parallèle.
    La première étape pour traiter les images à l'aide d'Oracle Spatial et de Graph Hadoop Image Processing Framework consiste à avoir les images dans HDFS, puis à séparer les images en tuiles intelligentes.
    Une fois les images chargées dans HDFS, elles peuvent être traitées en parallèle à l'aide d'Oracle Spatial Hadoop Image Processing Framework.
    Le framework fournit une API de traitement de raster qui vous permet de charger et de traiter des rasters sans créer de XML mais à la place en utilisant une application Java. L'application peut être exécutée à l'intérieur du cluster ou sur un nœud distant.
    Lorsque vous créez des classes de traitement personnalisées. vous pouvez utiliser Oracle Spatial Hadoop Raster Simulator Framework pour effectuer les opérations suivantes en « faisant semblant » de les connecter à Oracle Raster Processing Framework.
    Oracle Big Data Spatial Raster Processing pour Apache Spark est une API de traitement de raster spatial pour Java.
    Oracle Big Data Spatial Vector Analysis est une API d'analyse vectorielle spatiale, qui s'exécute comme une tâche Hadoop et fournit des composants MapReduce pour le traitement spatial des données stockées dans HDFS.
    Oracle Big Data Spatial Vector Analysis pour Apache Spark est une API d'analyse vectorielle spatiale pour Java et Scala qui fournit des RDD (ensembles de données distribués résilients) spatialement compatibles qui prennent en charge les transformations et actions spatiales, le partitionnement spatial et l'indexation.
    Oracle Big Data Spatial Vector Hive Analysis fournit des fonctions spatiales pour analyser les données à l'aide de Hive.
    Vous pouvez utiliser l'application Web Oracle Big Data SpatialViewer (SpatialViewer) pour effectuer diverses tâches.

2.1 À propos du Big Data Spatial et de la prise en charge des graphes pour les données spatiales

Les fonctionnalités Oracle Big Data Spatial et Graph permettent de stocker, d'accéder et d'analyser les données spatiales rapidement et efficacement pour une prise de décision basée sur la localisation.

Les données spatiales représentent les caractéristiques de localisation d'objets réels ou conceptuels par rapport à l'espace réel ou conceptuel sur un système d'information géographique (SIG) ou une autre application basée sur la localisation.

Les caractéristiques spatiales sont utilisées pour géolocaliser, enrichir, visualiser, transformer, charger et traiter les images géographiques en deux et trois dimensions spécifiques à l'emplacement, et pour manipuler des formes géométriques pour les fonctions SIG.

2.1.1 Qu'est-ce que Big Data Spatial et Graph sur Apache Hadoop ?

Oracle Big Data Spatial and Graph sur Apache Hadoop est un framework qui utilise les programmes MapReduce et les capacités d'analyse dans un cluster Hadoop pour stocker, accéder et analyser les données spatiales. Les caractéristiques spatiales fournissent un schéma et des fonctions qui facilitent le stockage, la récupération, la mise à jour et l'interrogation de collections de données spatiales. Big Data Spatial and Graph sur Hadoop prend en charge le stockage et le traitement d'images spatiales, qui peuvent être des formes géométriques, des images matricielles ou des images vectorielles et stockées dans l'un des centaines de formats pris en charge.

Oracle Spatial and Graph Developer's Guide pour une introduction aux concepts, données et opérations spatiaux

2.1.2 Avantages d'Oracle Big Data Spatial et Graph

Les avantages de l'utilisation d'Oracle Big Data Spatial et Graph sont les suivants :

Contrairement à certains systèmes et moteurs de traitement spatial centrés sur le SIG, Oracle Big Data Spatial and Graph est capable de traiter des informations spatiales structurées et non structurées.

Les clients ne sont pas obligés ou limités à stocker une seule forme particulière de données dans leur environnement. Ils peuvent stocker leurs données à la fois en tant que données commerciales spatiales ou non spatiales et peuvent toujours utiliser Oracle Big Data pour effectuer leur traitement spatial.

Il s'agit d'un framework et les clients peuvent donc utiliser les API disponibles pour personnaliser leurs applications ou leurs opérations.

Oracle Big Data Spatial peut traiter à la fois les types d'informations et d'images vectorielles et matricielles.

2.1.3 Fonctionnalités et fonctions d'Oracle Big Data Spatial

Les données spatiales sont chargées pour interrogation et analyse par le serveur spatial et les images sont stockées et traitées par un cadre de traitement d'images. Vous pouvez utiliser le serveur Oracle Big Data Spatial and Graph sur Hadoop pour :

Catalogage des informations géospatiales, telles que les empreintes basées sur des cartes géographiques, la disponibilité des ressources dans une géographie, etc.

Traitement topologique pour calculer les opérations de distance, telles que le voisin le plus proche dans un emplacement de carte.

Catégorisation pour construire des cartes hiérarchiques des géographies et enrichir la carte en créant des associations démographiques au sein des éléments de la carte.

Les fonctions suivantes sont intégrées à Oracle Big Data Spatial et Graph :

Fonction d'indexation pour une récupération plus rapide des données spatiales.

Fonction de carte pour afficher les empreintes basées sur la carte.

Fonction de zoom pour zoomer et dézoomer des régions géographiques spécifiques.

Fonction Mosaïque et Groupe pour regrouper un ensemble de fichiers image à traiter pour créer une mosaïque ou un sous-ensemble d'opérations.

Fonctions de coordonnées cartésiennes et géodésiques pour représenter les données spatiales dans l'un de ces systèmes de coordonnées.

Fonction hiérarchique qui construit et relie la hiérarchie géométrique, telle que le pays, l'état, la ville, le code postal, etc. Cette fonction peut traiter les données d'entrée sous forme de documents ou de coordonnées latitude/longitude.

2.1.4 Fichiers, formats et logiciels spatiaux Oracle Big Data

Les données spatiales ou les images stockées peuvent être dans l'un de ces formats pris en charge :

Données géodésiques et cartésiennes

Autres formats pris en charge par GDAL

Vous devez disposer du logiciel suivant, pour stocker et traiter les données spatiales :

Compilateur GCC - Uniquement lorsque les formats pris en charge par GDAL sont utilisés

2.2 Oracle Big Data Vector et traitement des données raster

Oracle Big Data Spatial and Graph prend en charge le stockage et le traitement des données spatiales vectorielles et raster.

2.2.1 Traitement des données raster spatiales Oracle Big Data

Pour traiter les données raster, le chargeur GDAL charge les données spatiales raster ou les images dans un environnement HDFS. Les opérations de base suivantes peuvent être effectuées sur des données spatiales raster :

Mosaïque : combinez plusieurs images raster pour créer une seule image mosaïque.

Sous-ensemble : effectuez des opérations de sous-ensemble sur des images individuelles.

Opérations d'algèbre raster : effectuez des opérations d'algèbre sur chaque pixel des rasters (par exemple, addition, division, multiplication, log, pow, sine, sinh et acos).

Traitement spécifié par l'utilisateur : le traitement raster est basé sur les classes que l'utilisateur définit à exécuter dans les phases de mappage et de réduction.

Cette fonctionnalité prend en charge un framework MapReduce pour les opérations d'analyse raster. Les utilisateurs ont la possibilité de personnaliser leurs propres opérations raster, telles que l'exécution d'une fonction algébrique sur des données raster, etc. Par exemple, calculez la pente à chaque base d'un modèle d'élévation numérique ou d'une représentation 3D d'une surface spatiale, telle qu'un terrain. Pour plus de détails, consultez Oracle Big Data Spatial Hadoop Image Processing Framework for Raster Data Processing.

2.2.2 Traitement des données vectorielles spatiales Oracle Big Data

Cette fonctionnalité prend en charge le traitement des données vectorielles spatiales :

Chargé et stocké dans un environnement Hadoop HDFS

Stocké sous forme de données cartésiennes ou géodésiques

Les données vectorielles spatiales stockées peuvent être utilisées pour effectuer les opérations de requête suivantes et plus encore :

Plusieurs opérations de service de données sont prises en charge pour les données vectorielles spatiales :

De plus, il existe une prise en charge limitée de l'API de visualisation de carte pour le format HTML5 uniquement. Vous pouvez accéder à ces API pour créer des opérations personnalisées. Pour plus d'informations, consultez "Analyse vectorielle spatiale Oracle Big Data".

2.3 Cadre de traitement d'images Oracle Big Data Spatial Hadoop pour le traitement de données raster

Oracle Spatial Hadoop Image Processing Framework permet la création de nouvelles images combinées résultant d'une série de phases de traitement en parallèle.

Il comprend les fonctionnalités suivantes :

Stockage d'images HDFS, où chaque division de taille de bloc est stockée sous forme de tuile séparée, prête pour un futur traitement indépendant

Opérations de sous-ensemble, définies par l'utilisateur et d'algèbre cartographique traitées en parallèle à l'aide du framework MapReduce

Possibilité d'ajouter des classes de traitement personnalisées à exécuter dans les phases de mappage ou de réduction en parallèle de manière transparente

Traitement rapide des images géoréférencées

Prise en charge des formats GDAL, des images à plusieurs bandes, des DEM (modèles d'élévation numériques), des profondeurs de pixels multiples et des SRID

API Java donnant accès aux opérations de framework utiles pour les services Web ou les applications Java autonomes

Framework pour tester et déboguer les classes de traitement utilisateur dans l'environnement local

L'infrastructure de traitement d'images Oracle Spatial Hadoop se compose de deux modules, un chargeur et un processeur, chacun représenté par une tâche Hadoop s'exécutant sur différentes étapes d'un cluster Hadoop, comme représenté dans le diagramme suivant. En outre, vous pouvez charger et traiter les images à l'aide de l'application Web Image Server, et vous pouvez utiliser l'API Java pour exposer les capacités du framework.

Pour plus d'informations sur l'installation et la configuration, consultez :

2.3.1 Chargeur d'images

Le chargeur d'images est un travail Hadoop qui charge une image spécifique ou un groupe d'images dans HDFS.

Lors de l'importation, l'image est mise en mosaïque et stockée sous forme de bloc HDFS.

GDAL est utilisé pour mosaïquer l'image.

Chaque tuile est chargée par un mappeur différent, la lecture est donc parallèle et plus rapide.

Chaque tuile comprend un certain nombre d'octets qui se chevauchent (saisie utilisateur), de sorte que les tuiles couvrent la zone des tuiles adjacentes.

Un travail MapReduce utilise un mappeur pour charger les informations pour chaque tuile. Il y a 'n' nombre de mappeurs, en fonction du nombre de tuiles, de la résolution de l'image et de la taille du bloc.

Une seule phase de réduction par image rassemble toutes les informations chargées par les mappeurs et stocke les images dans un format spécial .ohif, qui contient la résolution, les bandes, les décalages et les données d'image. De cette façon, le décalage du fichier contenant chaque tuile et l'emplacement du nœud sont connus.

Chaque tuile contient des informations pour chaque bande. Ceci est utile lorsqu'il est nécessaire de ne traiter que quelques tuiles, puis seuls les blocs correspondants sont chargés.

Le schéma suivant représente un processus Image Loader :

2.3.2 Processeur d'images

Le processeur d'images est une tâche Hadoop qui filtre les tuiles à traiter en fonction de l'entrée de l'utilisateur et effectue le traitement en parallèle pour créer une nouvelle image.

Traite des tuiles spécifiques de l'image identifiée par l'utilisateur. Vous pouvez identifier une, zéro ou plusieurs classes de traitement. Ces classes sont exécutées en phase de mappage ou de réduction, selon votre configuration. Pour la phase de mappage, après l'exécution des classes de traitement, une opération de mosaïque est effectuée pour adapter les pixels au format de sortie final demandé par l'utilisateur. Si aucune opération de mosaïque n'a été demandée, le raster en entrée est envoyé pour réduire la phase tel quel. Pour la phase de réduction, toutes les tuiles sont rassemblées dans un ensemble de données GDAL qui est entré pour la classe de traitement de réduction de l'utilisateur, où la sortie finale peut être modifiée ou analysée en fonction des besoins de l'utilisateur.

Un mappeur charge les données correspondant à une tuile, en conservant la localité des données.

Une fois les données chargées, le mappeur filtre les bandes demandées par l'utilisateur.

Les informations filtrées sont traitées et envoyées à chaque mappeur dans la phase de réduction, où les octets sont rassemblés et une image finale traitée est stockée dans HDFS ou dans un système de fichiers standard en fonction de la demande de l'utilisateur.

Le schéma suivant représente une tâche de traitement d'images :


Description de l'illustration image_processor_job.png

2.4 Loading an Image to Hadoop Using the Image Loader

The first step to process images using the Oracle Spatial and Graph Hadoop Image Processing Framework is to actually have the images in HDFS, followed by having the images separated into smart tiles.

This allows the processing job to work separately on each tile independently. The Image Loader lets you import a single image or a collection of them into HDFS in parallel, which decreases the load time.

The Image Loader imports images from a file system into HDFS, where each block contains data for all the bands of the image, so that if further processing is required on specific positions, the information can be processed on a single node.

2.4.1 Image Loading Job

The image loading job has its custom input format that splits the image into related image splits. The splits are calculated based on an algorithm that reads square blocks of the image covering a defined area, which is determined by

area = ((blockSize - metadata bytes) / number of bands) / bytes per pixel.

For those pieces that do not use the complete block size, the remaining bytes are refilled with zeros.

Splits are assigned to different mappers where every assigned tile is read using GDAL based on the ImageSplit information. As a result an ImageDataWritable instance is created and saved in the context.

The metadata set in the ImageDataWritable instance is used by the processing classes to set up the tiled image in order to manipulate and process it. Since the source images are read from multiple mappers, the load is performed in parallel and faster.

After the mappers finish reading, the reducer picks up the tiles from the context and puts them together to save the file into HDFS. A special reading process is required to read the image back.

2.4.2 Input Parameters

The following input parameters are supplied to the Hadoop command:

  • SOURCE_IMGS_PATH is a path to the source image(s) or folder(s). For multiple inputs use a comma separator. This path must be accessible via NFS to all nodes in the cluster.
  • HDFS_OUTPUT_FOLDER is the HDFS output folder where the loaded images are stored.
  • OVERLAPPING_PIXELS is an optional number of overlapping pixels on the borders of each tile, if this parameter is not specified a default of two overlapping pixels is considered.
  • GDAL_LIB_PATH is the path where GDAL libraries are located.
  • GDAL_DATA_PATH is the path where GDAL data folder is located. This path must be accessible through NFS to all nodes in the cluster.
  • THUMBNAIL_PATH is an optional path to store a thumbnail of the loaded image(s). This path must be accessible through NFS to all nodes in the cluster and must have write access permission for yarn users.
  • -expand controls whether the HDFS path of the loaded raster expands the source path, including all directories. If you set this to false , the .ohif file is stored directly in the output directory (specified using the -o option) without including that directory’s path in the raster.
  • -extractLogs controls whether the logs of the executed application should be extracted to the system temporary directory. By default, it is not enabled. The extraction does not include logs that are not part of Oracle Framework classes.
  • -logFilter <LINES_TO_INCLUDE_IN_LOG> is a comma-separated String that lists all the patterns to include in the extracted logs, for example, to include custom processing classes packages.
  • -pyramid <OUTPUT_DIRECTORY, LEVEL, [RESAMPLING]> allows the creation of pyramids while making the initial raster load. An OUPUT_DIRECTORY must be provided to store the local pyramids before uploading to HDFS pyramids are loaded in the same HDFSA directory requested for load. A pyramid LEVEL must be provided to indicate how many pyramids are required for each raster. A RESAMPLING algorithm is optional to specify the method used to execute the resampling if none is set, then BILINEAR is used.

For example, the following command loads all the georeferenced images under the images folder and adds an overlapping of 10 pixels on every border possible. The HDFS output folder is ohiftest and thumbnail of the loaded image are stored in the processtest folder.

By default, the Mappers and Reducers are configured to get 2 GB of JVM, but users can override this settings or any other job configuration properties by adding an imagejob.prop properties file in the same folder location from where the command is being executed. This properties file may list all the configuration properties that you want to override. Par exemple,

Java heap memory ( java.opts properties) must be equal to or less than the total memory assigned to mappers and reducers ( mapreduce.map.memory and mapreduce.reduce.memory ). Thus, if you increase Java heap memory, you might also need to increase the memory for mappers and reducers.

For GDAL to work properly, the libraries must be available using $LD_LIBRARY_PATH. Make sure that the shared libraries path is set properly in your shell window before executing a job. Par exemple:

2.4.3 Output Parameters

The reducer generates two output files per input image. The first one is the .ohif file that concentrates all the tiles for the source image, each tile may be processed as a separated instance by a processing mapper. Internally each tile is stored as a HDFS block, blocks are located in several nodes, one node may contain one or more blocks of a specific .ohif file. The .ohif file is stored in user specified folder with -out flag, under the /user/<USER_EXECUTING_JOB>/OUT_FOLDER/<PARENT_DIRECTORIES_OF_SOURCE_RASTER> if the flag 𠄾xpand was not used. Otherwise, the .ohif file will be located at /user/<USER_EXECUTING_JOB>/OUT_FOLDER/ , and the file can be identified as original_filename.ohif .

The second output is a related metadata file that lists all the pieces of the image and the coordinates that each one covers. The file is located in HDFS under the metadata location, and its name is hash generated using the name of the ohif file. This file is for Oracle internal use only, and lists important metadata of the source raster. Some example lines from a metadata file:

If the -thumbnail flag was specified, a thumbnail of the source image is stored in the related folder. This is a way to visualize a translation of the .ohif file. Job execution logs can be accessed using the command yarn logs -applicationId <applicationId> .

2.5 Processing an Image Using the Oracle Spatial Hadoop Image Processor

Once the images are loaded into HDFS, they can be processed in parallel using Oracle Spatial Hadoop Image Processing Framework.

You specify an output, and the framework filters the tiles to fit into that output, processes them, and puts them all together to store them into a single file. Map algebra operations are also available and, if set, will be the first part of the processing phase. You can specify additional processing classes to be executed before the final output is created by the framework.

The image processor loads specific blocks of data, based on the input (mosaic description or a single raster), and selects only the bands and pixels that fit into the final output. All the specified processing classes are executed and the final output is stored into HDFS or the file system depending on the user request.

2.5.1 Image Processing Job

The image processing job has different flows depending on the type of processing requested by the user.

Default Image Processing Job Flow: executed for processing that includes a mosaic operation, single raster operation, or basic multiple raster operation.

Multiple Raster Image Processing Job Flow: executed for processing that includes complex multiple raster algebra operations.

2.5.1.1 Default Image Processing Job Flow

The default image processing job flow is executed when any of the following processing is requested:

Basic multiple raster algebra operation

The flow has its own custom FilterInputFormat , which determines the tiles to be processed, based on the SRID and coordinates. Only images with same data type (pixel depth) as the mosaic input data type (pixel depth) are considered. Only the tiles that intersect with coordinates specified by the user for the mosaic output are included. For processing of a single raster or basic multiple raster algebra operation (excluding mosaic), the filter includes all the tiles of the input rasters, because the processing will be executed on the complete images. Once the tiles are selected, a custom ImageProcessSplit is created for each image.

When a mapper receives the ImageProcessSplit , it reads the information based on what the ImageSplit specifies, performs a filter to select only the bands indicated by the user, and executes the list of map operations and of processing classes defined in the request, if any.

Each mapper process runs in the node where the data is located. After the map algebra operations and processing classes are executed, a validation verifies if the user is requesting mosaic operation or if analysis includes the complete image and if a mosaic operation is requested, the final process executes the operation. The mosaic operation selects from every tile only the pixels that fit into the output and makes the necessary resolution changes to add them in the mosaic output. The single process operation just copies the previous raster tile bytes as they are. The resulting bytes are stored in NFS to be recovered by the reducer.

A single reducer picks the tiles and puts them together. If you specified any basic multiple raster algebra operation, then it is executed at the same time the tiles are merged into the final output. This operation affects only the intersecting pixels in the mosaic output, or in every pixel if no mosaic operation was requested. If you specified a reducer processing class, the GDAL data set with the output raster is sent to this class for analysis and processing. If you selected HDFS output, the ImageLoader is called to store the result into HDFS. Otherwise, by default the image is prepared using GDAL and is stored in the file system (NFS).

2.5.1.2 Multiple Raster Image Processing Job Flow

The multiple raster image processing job flow is executed when a complex multiple raster algebra operation is requested. It applies to rasters that have the same MBR, pixel type, pixel size, and SRID, since these operations are applied pixel by pixel in the corresponding cell, where every pixel represents the same coordinates.

The flow has its own custom MultipleRasterInputFormat , which determines the tiles to be processed, based on the SRID and coordinates. Only images with same MBR, pixel type, pixel size and SRID are considered. Only the rasters that match with coordinates specified by the first raster in the catalog are included. All the tiles of the input rasters are considered, because the processing will be executed on the complete images.

Once the tiles are selected, a custom MultipleRasterSplit is created. This split contains a small area of every original tile, depending on the block size, because now all the rasters must be included in a split, even if it is only a small area. Each of these is called an IndividualRasterSplit , and they are contained in a parent MultipleRasterSplit .

When a mapper receives the MultipleRasterSplit , it reads the information of all the raster´s tiles that are included in the parent split, performs a filter to select only the bands indicated by the user and only the small corresponding area to process in this specific mapper, and then executes the complex multiple raster algebra operation.

Data locality may be lost in this part of the process, because multiple rasters are included for a single mapper that may not be in the same node. The resulting bytes for every pixel are put in the context to be recovered by the reducer.

A single reducer picks pixel values and puts them together. If you specified a reducer processing class, the GDAL data set with the output raster is sent to this class for analysis and processing. The list of tiles that this class receives is null for this scenario, and the class can only work with the output data set. If you selected HDFS output, the ImageLoader is called to store the result into HDFS. Otherwise, by default the image is prepared using GDAL and is stored in the file system (NFS).

2.5.2 Input Parameters

The following input parameters can be supplied to the hadoop command:

  • MOSAIC_CONFIG_PATH is the path to the mosaic configuration xml, that defines the features of the output.
  • GDAL_LIBRARIES_PATH is the path where GDAL libraries are located.
  • GDAL_DATA_PATH is the path where the GDAL data folder is located. This path must be accessible via NFS to all nodes in the cluster.
  • IMAGE_CATALOG_PATH is the path to the catalog xml that lists the HDFS image(s) to be processed. This is optional because you can also specify a single raster to process using 𠄿ile flag.
  • USER_PROCESS_JAR_PATH is an optional user-defined jar file or comma-separated list of jar files, each of which contains additional processing classes to be applied to the source images.
  • THUMBNAIL_PATH is an optional flag to activate the thumbnail creation of the loaded image(s). This path must be accessible via NFS to all nodes in the cluster and is valid only for an HDFS output.
  • USER_NATIVE_LIBRARIES_PATH is an optional comma-separated list of additional native libraries to use in the analysis. It can also be a directory containing all the native libraries to load in the application.
  • USER_PARAMETERS is an optional key/value list used to define input data for user processing classes. Use a semicolon to separate parameters. For example: azimuth=315altitude=45
  • SINGLE_RASTER_PATH is an optional path to the .ohif file that will be processed by the job. If this is set, you do not need to set a catalog.

For example, the following command will process all the files listed in the catalog file input.xml file using the mosaic output definition set in testFS.xml file.

By default, the Mappers and Reducers are configured to get 2 GB of JVM, but users can override this settings or any other job configuration properties by adding an imagejob.prop properties file in the same folder location from where the command is being executed.

For GDAL to work properly, the libraries must be available using $LD_LIBRARY_PATH. Make sure that the shared libraries path is set properly in your shell window before executing a job. Par exemple:

2.5.2.1 Catalog XML Structure

The following is an example of input catalog XML used to list every source image considered for mosaic operation generated by the image processing job.

A <catalog> element contains the list of <image> elements to process.

Each <image> element defines a source image or a source folder within the <raster> element. All the images within the folder are processed.

The <bands> element specifies the number of bands of the image, The datatype attribute has the raster data type and the config attribute specifies which band should appear in the mosaic output band order. For example: 3,1,2 specifies that mosaic output band number 1 will have band number 3 of this raster, mosaic band number 2 will have source band 1, and mosaic band number 3 will have source band 2. This order may change from raster to raster.

Parent topic: Input Parameters

2.5.2.2 Mosaic Definition XML Structure

The following is an example of a mosaic configuration XML used to define the features of the output generated by the image processing job.

The <mosaic> element defines the specifications of the processing output. The exec attribute specifies if the processing will include mosaic operation or not. If set to “false” , a mosaic operation is not executed and a single raster is processed if set to “true” or not set, a mosaic operation is performed. Some of the following elements are required only for mosaic operations and ignored for single raster processing.

The <output> element defines the features such as <SRID> considered for the output. All the images in different SRID are converted to the mosaic SRID in order to decide if any of its tiles fit into the mosaic or not. This element is not required for single raster processing, because the output rster has the same SRID as the input.

The <directory> element defines where the output is located. It can be in an HDFS or in regular FileSystem (FS), which is specified in the tag type.

The <tempFsFolder> element sets the path to store the mosaic output temporarily. The attribute delete=”false” can be specified to keep the output of the process even if the loader was executed to store it in HDFS.

The <filename> and <format> elements specify the output filename. <filename> is not required for single raster process and if it is not specified, the name of the input file (determined by the -file attribute during the job call) is used for the output file. <format> is not required for single raster processing, because the output raster has the same format as the input.

The <width> and <height> elements set the mosaic output resolution. They are not required for single raster processing, because the output raster has the same resolution as the input.

The <algorithm> element sets the order algorithm for the images. A 1 order means, by source last modified date, and a 2 order means, by image size. The order tag represents ascendant or descendant modes. (These properties are for mosaic operations where multiple rasters may overlap.)

The <bands> element specifies the number of bands in the output mosaic. Images with fewer bands than this number are discarded. The config attribute can be used for single raster processing to set the band configuration for output, because there is no catalog.

The <nodata> element specifies the color in the first three bands for all the pixels in the mosaic output that have no value.

The <pixelType> element sets the pixel type of the mosaic output. Source images that do not have the same pixel size are discarded for processing. This element is not required for single raster processing: if not specified, the pixel type will be the same as for the input.

The <crop> element defines the coordinates included in the mosaic output in the following order: startcoordinateX , pixelXWidth , RotationX , startcoordinateY , RotationY , and pixelheightY . This element is not required for single raster processing: if not specified, the complete image is considered for analysis.

The <process> element lists all the classes to execute before the mosaic operation.

The <classMapper> element is used for classes that will be executed during mapping phase, and the <classReducer> element is used for classes that will be executed during reduce phase. Both elements have the params attribute, where you can send input parameters to processing classes according to your needs.

The <operations> element lists all the map algebra operations that will be processed for this request. This element can also include a request for pyramid operations for example:


6 Answers 6

Not a command line solution, but since you tagged the question QGIS:

I recommend using QGIS PostGIS Manager plugin which is a GUI for shp2pgsql which allows you to upload Shapefiles to a remote database.

I think that if you qgis installed you will have also ogr2ogr (It's provided with the gdal-bin package). With the following command you will create a table called yousahpefile in your database:

There are some workarounds if you find troubles with the encoding.

except replace localhost with the IP address of the remote PostGIS database, e.g. host=192.168.123.12 or whatever

You'll need to install shp2psql on the client machine or copy the shapefile to a machine with it installed.

I think you just need to copy the relevant files. I've done this on ewindows. Haven't tried on Linux. For windows I copy the shp2pgsql.exe, libpq.dll, libiconv-2.dll, comerr32.dll, msvcr71.dll , a couple of others but those are the key ones -- these are located in the PostgreSQL bin folder

Linux ones would be different but libpq and shp2pgsql are definitely required

You can either use shp2pgsql on your local copy of the database, create a dump of the new database and upload it, .
or install shp2pgsql on the remote machine, scp the shapefile over, and shp2pgsql from there (as iant recommends).

AFAIK there is no way to do this remotely in one step. This is because even if you have access to the remote database from where you are, the functions you are using (such as shp2pgsql) are the ones installed on the server, regardless of what is on your local machine.

I'm developing a web map application that uses geoserver + express as its server and postgreSQL + postGIS as its database. In one part, I want to add some functionality that users can upload their .shp remotely. After spending days, I found that it's possible to execute shell command just using l'exécutif function that both php et express provides for us.

Although I use javascript at client and server, in the following I've given a simple piece of code for both php et express based on your need:


Ytdjtkui

How do spell lists change if the party levels up without taking a long rest?

Can we generate random numbers using irrational numbers like π and e?

Working through the single responsibility principle (SRP) in Python when calls are expensive

Didn't get enough time to take a Coding Test - what to do now?

One-dimensional Japanese puzzle

US Healthcare consultation for visitors

Que faire lorsqu'on se déplace à côté d'une réserve ornithologique avec un chat peu domestiqué ?

Can each chord in a progression create its own key?

Do I have Disadvantage attacking with an off-hand weapon?

How did passengers keep warm on sail ships?

University's motivation for having tenure-track positions

Python - Fishing Simulator

Word for: a synonym with a positive connotation?

Accepted by European university, rejected by all American ones I applied to? Possible reasons?

60's-70's movie: home appliances revolting against the owners

different output for groups and groups USERNAME after adding a username to a group

"is" operation returns false even though two objects have same id

Est-il acceptable d'offrir un travail moins bien rémunéré comme période d'essai avant de négocier un emploi à temps plein ?

My body leaves my core can stay

Identify 80s or 90s comics with ripped creatures (not dwarves)

Student Loan from years ago pops up and is taking my salary

should truth entail possible truth

Has anyone used ESRI JSON data with json-schema validation?

Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)ESRI JSON Polygon Ring Orientation?Converting ESRI Web Client JSON to Standard Feature Class With Python GeoprocessorData interoperability json refreshHow to create a JSON object in Geocortex to be used in Crystal ReportsJavscript API esri/dijit/search JSON ResponseParsing and rendering JSON data in Java with GeoToolsTransforming Esri JSON to Shapefile without using ArcPy?Working with complex JSON attributes in QGISjson file with geo-coordinatesGetting data from JSON data API?


Bumped to the homepage by Community ♦ 21 mins ago

This question has answers that may be good or bad the system has marked it active so that they can be reviewed.

– aldo_tapia
Oct 7 '17 at 17:50

All the DEMs were generated in Leica Photogrammetry Suite using same set of GCPs taken from a single orthorectified image as reference. Also, I have generated respective orthorectified images from all the multidate DEMs. Those are coming perfectly coregistered.

If you are looking at changes in sediment within rivers, suggest you have a look at this work first.

I have 10 multidate Cartosat-1 stereo pair derived raster DEMs of dates ranging over a decade over a river sand area. I want to derive volumes of sand deposited in that period within that area. C'est possible?


3 réponses 3

Let's imagine a big grid mesh, like one we might use for terrain. We'll render n triangles worth of it, covering say half our 1080p screen, in a single draw call.

If we weld all of our vertices and have no smoothing/texturing seams, then each triangle has 3 vertices and each vertex is shared by 6 triangles, so we have n/2 vertices.

To render this we need to:

Run the vertex shader at least n/2 times

("at least" because our cache for vertex results is only so big. Sometimes we'll end up evicting a vertex we already transformed, then need it again for a later triangle that shares it and so re-run the vertex shader on it. So we don't get quite as much savings as it looks like on paper)

Rasterize & interpolate over at least 1920x1080/2 or about 1 million pixels of the frame buffer (since we said our terrain covers about half the screen).

("at least" because of the way GPUs work on quads of pixels, some fragments just outside the edges of polygons still get rasterized but then masked, meaning we process fragments twice. For a bumpy mesh we'll also get overdraw anywhere the mesh occludes itself, if we're not lucky enough to draw the frontmost polygon into the depth buffer first)

Run the fragment shader for all those >= 1 million fragments.

1 million results into the frame & depth buffers.

Okay, now let's unweld all of our vertices so now we have 3n vertices to render, six times more than before! Our steps are.

Run the vertex shader 3n times.

(No asterisks due to caching since every vertex is used only once, though this means the cache can't save us any time)

Rasterize & interpolate over at least 1920x1080/2 or about 1 million pixels of the frame buffer.

Run the fragment shader for all those >= 1 million fragments.

1 million results into the frame & depth buffers.

. wait, every step except the first one is the same! So most of the work that the GPU does in a typical draw call is not directly related to the number of vertices used. The amount of screen coverage, overdraw, and total triangle count make up much more of the cost.

That doesn't mean vertices are completely free. If you share vertices when you can you get some modest savings from caching, especially if your vertex shaders are complicated or your hardware's vertex pipeline is weak (as was the case on some older consoles). But given that vertex count tracks proportional to triangle count plus or minus a constant factor, it's usually not as interesting a metric of overall mesh cost.


Voir la vidéo: R Spatial Data 1: Read in SHP File