Suite

Obtenir et utiliser les centroïdes XY dans ArcGIS Field Calculator à l'aide de Python Code Block


J'écris un script pour obtenir une référence de grille, mais je ne vois pas comment obtenir des centroïdes XY sans créer de nouveaux champs (tous les exemples que j'ai trouvés sont basés sur l'écriture de centroïdes XY dans le champ).

Voici mon code actuel et l'est/nord en haut est ce que je veux réaliser :

def getParcel: ## east = SHAPE.CENTROID.X ## north = SHAPE.CENTROID.Y digits = 8 # obtenir la grille de 100 km e100k = math.floor(east/100000) n100k = math.floor(north/100000) si e100k<0 ou e100k>6 ou n100k<0 ou n100k>12 : return"# obtenir les équivalents numériques l1 = (19-n100k) - (19-n100k)%5 + math.floor((e100k+10)/5 ) l2 = (19-n100k)*5%25 + e100k%5 si l1 > 7 : l1 += 1 si l2 > 7 : l2 += 1 # passer aux valeurs entières l1 = int(l1) l2 = int(l2 ) # calculer le code alpha letPair = chr(l1 + (ord('A'))) + chr(l2 + (ord('A'))) # Supprimer les indices de grille de 100 km de l'abscisse et de l'ordonnée, et réduire la précision # et passer à la valeur de chaîne e = str(int(math.floor(east%100000 / 10))) n = str(int(math.floor(north%100000 / 10))) # Remplir les valeurs si la référence est inférieure à 4 chiffres si len(e) < 4 : e = e.zfill(4) si len(n) < 4 : n = n.zfill(4) gridFull = letPair + e + n return gridFull

C'est facile à faire en supposant que vous voulez que les coordonnées centroïdes de chaque parcelle soient actuellement calculées. Utilisez !SHAPE.CENTROID.X! et !SHAPE.CENTROID.Y! en tant que paramètres pour définir l'expression, puis les inclure dans la définition en tant que variables est et nord.

Si vous essayez d'utiliser deux classes d'entités distinctes, vous devez utiliser un curseur.

Analyseur : Python

Utiliser le bloc de code : coché

Code de script pré-logique :

def getParcel(east, north): ## east = SHAPE.CENTROID.X ## north = SHAPE.CENTROID.Y digits = 8 # obtenir la grille de 100 km e100k = math.floor(east/100000) n100k = math.floor (north/100000) si e100k<0 ou e100k>6 ou n100k<0 ou n100k>12: return"# get les équivalents numériques l1 = (19-n100k) - (19-n100k)%5 + math.floor((e100k +10)/5) l2 = (19-n100k)*5%25 + e100k%5 si l1 > 7 : l1 += 1 si l2 > 7 : l2 += 1 # passer aux valeurs entières l1 = int(l1) l2 = int(l2) # calculer le code alpha letPair = chr(l1 + (ord('A'))) + chr(l2 + (ord('A'))) # Supprimer les indices de grille de 100 km de l'est et du nord, et réduire la précision # et changer la valeur de chaîne e = str(int(math.floor(east%100000 / 10))) n = str(int(math.floor(north%100000 / 10))) # Remplir les valeurs si moins ref à 4 chiffres donné si len(e) < 4 : e = e.zfill(4) si len(n) < 4 : n = n.zfill(4) gridFull = letPair + e + n return gridFull

Expression : getParcel(!SHAPE.CENTROID.X!, !SHAPE.CENTROID.Y!)


Tout d'abord, sélectionnez le bouton radio Python.

Dans la zone de texte de l'expression, double-cliquez sur le champ avec le champ de texte existant dont vous souhaitez mettre la première lettre en majuscule. Tapez .title() après le champ et appuyez sur OK.

Voici un exemple du bloc de code du calculateur de champ :

Si vous voyez le résultat, il a un nouveau champ avec des majuscules.

Si vous obtenez une erreur, essayez ce qui suit :

Exécutez ce bloc de code python en sélectionnant d'abord les enregistrements.

Ne mettez pas de majuscule à .title() avec un 'T' majuscule


Vous cherchez de l'aide pour afficher des paires de coordonnées XY sous forme de lignes dans ArcGIS

Ok, je cherche de l'aide ici. J'essaie actuellement d'obtenir des données dans ArcGIS pour un projet animal de compagnie sur lequel je travaille, mais j'ai quelques problèmes. J'ai actuellement quelques fichiers CSV contenant diverses données et j'essaie de les extraire dans ArcGIS. J'ai deux choses, un ensemble de points et une liste de paires d'identifiants de points qui définissent des lignes entre les points. La chose qui me cause le plus de problèmes, je pense, c'est que ce ne sont dans aucun système de coordonnées géographiques, ce ne sont que des coordonnées XY arbitraires qui ne signifient rien d'autre que la position relative (et elles ne sont pas destinées à).

À ce stade, j'ai réussi à importer les points et à les afficher correctement sur la carte. Voici un échantillon des données de points (les noms de colonnes ne sont pas dans les données réelles, je les ai juste ajoutés pour fournir un contexte). Je l'importe en ajoutant une table à mon .gdb, en l'ajoutant à la carte, puis en affichant les données XY (en utilisant Z comme Y, car c'est ce qui fonctionne correctement, IDK pourquoi les données source sont orientées comme ça) .

Et voici un échantillon des définitions de segments de ligne que je souhaite également afficher sur la carte (encore une fois, juste un petit sous-ensemble des données réelles, mais représentatif).

Jusqu'à présent, j'ai réussi à ajouter des paires de coordonnées source et destination dans le fichier de segments de ligne à l'aide de Python pour dicter les données XZ par ID, puis les insérer dans un nouveau fichier CSV avec les données de lien, comme indiqué dans ces données.

Cependant, je n'arrive pas à afficher ces données dans ArcGIS. J'ai essayé d'utiliser l'outil XY to Line pour l'importer, mais après avoir mis un certain temps à traiter les paires de points de 14 000, rien ne s'affiche à l'écran. Je soupçonne que cela pourrait être dû au fait que l'outil XY to Line demande une référence spatiale, mais honnêtement, je ne suis pas sûr.

Si quelqu'un peut donner un aperçu de la façon dont je pourrais faire en sorte que cela fonctionne, je l'apprécie. À ce stade, je n'ai aucune idée de ce que je fais mal.

tldr : j'essaie d'importer des paires de coordonnées XY sous forme de lignes dans une carte ArcGIS, mais rien ne s'affiche réellement.


Configuration de GDAL/OGR avec le pilote FileGDB pour Python sous Windows

J'ai décidé de m'aventurer dans le monde de GDAL/OGR avec Python avec ma principale motivation pour imiter certains outils de ArcGIS pour le bureau. J'espère que cela m'aidera à améliorer sur quelques fronts mon Python codage, une connaissance accrue des bibliothèques géospatiales open source et pour mieux comprendre les algorithmes qui se déroulent dans les coulisses lorsque vous cliquez sur un bouton dans un SIG basé sur une interface graphique et effectuez une sorte de géotraitement ou d'analyse de données.

Je travaille principalement avec Géodatabases de fichiers ESRI et bien que je sache que ce n'est pas open source, ESRI a une API en place pour lire et écrire sur un gdb via GDAL/OGR. La première étape consiste à configurer ce dont j'ai besoin pour commencer mon parcours d'apprentissage GDAL/OGR avec Python pour les fenêtres. Je vais également installer quelques bibliothèques qui permettront d'accélérer certains calculs pour un géotraitement plus efficace.

j'utilise…
Python 2.7.13 32 bits sur Windows 7 Professionnel

1. Téléchargez et installez le Service Pack Microsoft Visual C++ 2008

Cliquez ici pour télécharger et installer.

2. Accédez au site Web de Christoph Gohlke et téléchargez la roue GDAL.

Récupérez le fichier whl GDAL. j'ai téléchargé GDAL-2.1.3-cp27-cp27m-win32.whl
Ouvrez l'invite de commande, changez le répertoire où le whl a été téléchargé et utilisez pépin à installer.

3. Obtenez l'API File Geodatabase d'ESRI (vous aurez besoin d'un compte ESRI)

Accédez à ESRI Dowloads et téléchargez la version 1.3 de l'API File Geodatabase pour Windows (Visual Studio 2008). Ce sera un dossier zip. Ouvrez le contenu du dossier zippé de l'API et extrayez FileGDBAPI.dll du dossier bin vers

C:Python27Libsite-packagesosgeo

ou partout où se trouve votre dossier site-package. Assurez-vous simplement de l'extraire dans osgeo.

4. Créer une nouvelle variable dans les variables d'environnement

Dans Réglages avancés du système créer un nouveau Variable environnementale appelé GDAL_DRIVER_PATH et définissez le chemin d'accès au dossier osgeo à l'étape 5.

5. Ouvrez __init__.py depuis osgeo…

6. Testez la configuration

Ouvrez un interpréteur Python et testez avec…

Si vous n'obtenez pas d'erreurs comme la capture d'écran ci-dessus, la configuration a réussi.

7. Téléchargez numpy + mkl wheel depuis le site génial de Christoph Gohlke

Cliquez ici et téléchargez le fichier whl nécessaire. Pour ma configuration, j'ai téléchargé numpy‑1.11.3+mkl‑cp27‑cp27m‑win32.whl
Ouvrez l'invite de commande et changez le répertoire où réside le fichier téléchargé. Utiliser pépin à installer.

8. Installez SciPy

De retour, nous allons au référentiel Gohlke et aux roues SciPy. Voilà, j'ai téléchargé scipy‑0.19.0‑cp27‑cp27m‑win32.whl
Ouvrez l'invite de commande si vous l'avez fermée après l'étape 1 et changez le répertoire où se trouve le fichier téléchargé.
Utiliser pépin à installer.

9. Installez Shapely

Vous l'avez compris, retournez sur Gohlke et téléchargez le fichier Shapely whl. j'ai attrapé Shapely‑1.5.17‑cp27‑cp27m‑win32.whl . Utilisez pip pour une installation similaire aux étapes 7 et 8.

Maintenant pour me plonger en mode apprentissage et mettre GDAL/OGR à une certaine utilité. Consultez OSGP n°1.1 : Mesurer les distributions géographiques – Mean Center pour la première tentative.


OSGP : mesure des distributions géographiques – Fonctionnalité centrale

(Python géospatial Open Source)

Le ‘Qu'est-ce que c'est ?’

le Caractéristique centrale est le point qui est la plus courte distance à tous les autres points de l'ensemble de données et identifie ainsi l'entité la plus centrale. le Caractéristique centrale peut être utilisé pour trouver la fonctionnalité la plus accessible, par exemple, l'école la plus accessible pour organiser une journée de formation pour les enseignants des écoles d'une zone donnée.

La formule!

Pour chaque élément, calculez la distance totale par rapport à tous les autres éléments. L'entité qui a la distance totale la plus courte est la Caractéristique centrale.

Pour Point caractéristiques les coordonnées X et Y de chaque entité sont utilisées, pour Polygones le centre de gravité de chaque entité représente les coordonnées X et Y à utiliser, et pour Linéaire présente le milieu de chaque ligne est utilisé pour les coordonnées X et Y

J'aimerais remercier Logan Byers de GIS StackExchange qui a aidé à accélérer le temps de calcul en utilisant NumPy et pour m'avoir forcé à commencer à apprendre les merveilles de NumPy.

Pour le moment, cela est nettement plus lent que d'effectuer le même processus avec ArcGIS pour plus de 20 000 fonctionnalités, mais plus rapide pour un montant inférieur. 1 000 fonctionnalités traitées en 3 secondes.

L'exemple:

J'ai téléchargé des données vectorielles contenant des polygones pour les écoles à partir du système d'exploitation Open Map – Local qui couvrait les West Midlands. J'ai également téléchargé les données OS Boundary Line. Utilisant Python et GDAL/OGR J'ai extrait les écoles secondaires des données de Birmingham. Tout était maintenant en place pour trouver le Caractéristique centrale de toutes les écoles secondaires de Birmingham. (voir Les autres scripts section au bas de cet article pour le traitement des données)

Exécuter le script à partir de Le code section ci-dessus calcule les coordonnées du Caractéristique centrale pour toutes les écoles secondaires et crée une classe d'entités ponctuelles dans le Fichier GDB.

Fonctionnalité centrale OSGP : 407726.185, 287215.1
Fonctionnalité centrale d'ArcGIS : 407726.185, 287215.1

Median Center (le lien sera mis à jour une fois la publication terminée)

Les ressources:

ESRI Guide to GIS Volume 2: Chapter 2 (Je recommande fortement ce livre)
voir la critique du livre ici.

< Les autres scripts >

Écoles secondaires de Birmingham

Comme toujours, n'hésitez pas à commenter pour aider à rendre le code plus efficace, mettre en évidence les erreurs ou me faire savoir si cela vous a été utile.


Répartition de la population sous la zone tampon

Je me demandais si quelqu'un pourrait m'aider à déterminer le dénombrement de la population sur un polygone? J'ai des blocs de recensement avec une population associée à chaque bloc et des points tamponnés à partir desquels je voudrais générer un décompte de population dans la zone tampon. La zone tampon couvre plus d'un îlot de recensement. J'utilise ArcGIS 10.5 Advance si cela peut vous aider. J'espère que cela a du sens. Toute aide serait grandement appréciée.

Pour ajouter à cela, créez un nouveau champ dans les tables de recensement et effectuez un calcul de géométrie dessus, puis découpez les blocs de recensement avec votre tampon. Dans la sortie, créez un nouveau champ et calculez le pourcentage de la zone entre l'ancienne géométrie de l'îlot de recensement et la nouvelle géométrie découpée. Ensuite, prenez votre population totale dans l'îlot de recensement et multipliez-la par le pourcentage de l'original pour obtenir une population estimée modifiée pour cette partie de l'îlot de recensement. Ensuite, vérifiez vos statistiques de terrain pour le total, et le tour est joué, une estimation de la population basée sur la zone d'intérêt.

Toshibi a fourni la méthode la plus courante d'allocation de données. Pour ajouter à cela, si j'ai beaucoup de tampons pour trouver la population pour je joins spatialement tous ces tampons aux blocs nouvellement coupés qui contiennent les nouvelles et les anciennes zones. Ensuite, j'ouvre le tableau dans Excel et j'utilise un tableau croisé dynamique pour trouver rapidement les résultats.


Estimation du stress thermique à l'aide de l'imagerie de température de surface terrestre MODIS

Je suis intéressé à explorer l'utilité des cartes MODIS de température de surface des terres (LST) dans la création de cartes de stress thermique pour les travailleurs agricoles migrants dans les régions rurales de l'Oregon. Actuellement, il est difficile d'estimer l'exposition à la chaleur pour les travailleurs sur le terrain car les données de source ponctuelle sont très dispersées. Les stations de surveillance sont actuellement utilisées pour collecter des informations à grande échelle, mais ces informations ne peuvent pas être interpolées avec précision pour une grande zone. Souvent, il n'y a qu'une seule station de surveillance pour une très grande zone, ce qui entraînerait de graves problèmes lors de la création d'une carte continue de la température de surface. La possibilité d'utiliser des données de télédétection pour ces modèles de stress thermique permettrait aux chercheurs d'évaluer plus précisément l'exposition individuelle. Ceci est crucial pour identifier les domaines qui nécessitent plus d'attention ou de ressources, et simplifierait grandement le processus d'analyse de ces données.

Je voudrais comparer les valeurs prédites par le MODIS LST pour une date donnée avec la température enregistrée par le National Weather Service (NWS) ou une autre source ponctuelle de données de température. Cela me permettra de trouver la différence entre les sources d'information, ainsi que d'identifier tout modèle de distribution d'erreur pour les données MODIS. Pour ce faire, je comparerai les données pour de nombreuses dates à travers une variété d'emplacements afin d'identifier les modèles spatiaux ou saisonniers. Les principaux objectifs de ce projet sont les suivants :

  1. Identifier l'ampleur de la différence entre ces 2 sources de données
  2. Créer un modèle de régression pour comparer les données de température enregistrées par les cartes NWS et MODIS LST pour un ensemble de dates et de lieux donnés
  3. Si la différence entre les données de source ponctuelle et l'image MODIS LST est trop importante, explorez d'autres façons d'utiliser les images MODIS LST pour prédire le stress thermique pour les populations migrantes
  4. Si nécessaire et/ou possible, explorez d'autres sources de données de télédétection si MODIS ne fonctionne pas pour ce problème spatial

Le premier obstacle sera la collecte de toutes ces données pour les emplacements nécessaires à l'analyse. De plus, les données MODIS et les données NWS ne sont pas signalées avec la même période (c'est-à-dire que les températures hautes et basses signalées par le NWS peuvent ne pas correspondre à la température moyenne enregistrée sur l'image MODIS LST). Je devrai trouver un moyen de comparer ces valeurs et de les normaliser les unes par rapport aux autres (actuellement ma seule idée est de créer une fonction qui prendra le temps des enregistrements hauts et bas des données NWS, créer une estimation de la température tout au long le jour sur la base de ces valeurs, et comparer la température à l'heure spécifique de la lecture MODIS). Idéalement, j'aimerais examiner les données de 5 sites de terrains différents sur 5 jours de chaque saison (20 jours au total, 100 points de données).

En ce qui concerne mon expérience avec les différents outils de cette classe, j'ai une expérience modérée avec R et ArcGIS, j'ai une solide introduction à l'utilisation de Python et j'ai une connaissance rudimentaire de l'utilisation de ModelBuilder.


Mdhntd

Quel est le nombre minimum de capteurs pour un drone de loisir suivant un point de cheminement GPS ?

diff montre un fichier qui n'existe pas

Une algèbre DVR avec des automorphismes étranges

Programmation cubique et au-delà ?

Pourquoi les trous noirs supermassifs ne peuvent-ils pas fusionner ? (ou peuvent-ils?)

Wrapper dans la méthode de retour pour la classe de test

Trump bloque-t-il personnellement les gens sur Twitter ?

Voleurs : la sous-chaîne cachée OEIS

Que peut faire le gouvernement américain pour empêcher des personnes puissantes d'obtenir des accords de négociation de plaidoyer extrêmement favorables comme Jeff Epstein ?

Pourquoi n'y a-t-il pas de recherche pour construire une plate-forme de mobilité lunaire ou martienne standard ?

L'un des pères fondateurs a-t-il anticipé les critiques de Lysander Spooner contre la constitution ?

Quelle serait l'arme de corps à corps idéale en « Phase Metal » ?

Page d'accueil de QGIS : à quoi sert « pin to list » ?

Comment fonctionnent les numéros de version de Windows ?

Création d'objets personnalisés avec des propriétés personnalisées à l'aide de génériques

Comment se lit le nom "craqueuhhe"

Si une masse d'air spécifique est polluée, la pollution s'y collera-t-elle ?

Remplacement des gros mots

Quelle est la différence entre la cohérence logique et l'implication logique dans la logique déductive ?

Que ferait l'UE si un membre de l'UE déclarait la guerre à un autre membre de l'UE ?

<schwitz>, <zwinker> etc. L'allemand utilise-t-il toujours des verbes à l'impératif à la 2e personne pour les émoticônes ? Si oui, pourquoi?

J'ai un DM impitoyable et j'envisage de quitter la fête. Quelles sont mes options pour minimiser l'impact négatif sur le reste du groupe ?

Liste des coordonnées centrales pour tous les pays ?

Calcul des coordonnées du carré x miles du point central ? Comment ajouter des colonnes Lat/long à une couche de points qui n'est pas dans WGS84 ? Convertir les coordonnées X, Y State Plane en degrés décimaux Classifier les coordonnées des points en pays ou continents ? Générer des points aléatoires pour les identifiants avec des coordonnées similaires avec ArcMapQgis chargent un ensemble de points Excel dans une googlemap avec un seul point avec des coordonnées réelles.Attribuez rapidement des coordonnées aux noms de régions à l'aide de R ? Possibilité d'obtenir les coordonnées Lat/Lon du point de sommet du triangle ? up) à LLA (lat, long, alt)Obtenir les coordonnées à afficher correctement lorsqu'elles sont importées d'Excel dans ArcMap ?


Résumé

Dans le blog d'aujourd'hui, nous avons appris à effectuer une détection de forme avec OpenCV et Python.

Pour ce faire, nous avons utilisé approximation des contours, le processus de réduction du nombre de points sur une courbe à un plus simple approximé version.

Ensuite, sur la base de cette approximation des contours, nous avons examiné le nombre de sommets de chaque forme. Compte tenu du nombre de sommets, nous avons pu étiqueter avec précision chacune des formes.

Cette leçon fait partie d'une série en trois parties sur la détection et l'analyse de formes. La semaine dernière, nous avons expliqué comment calculer le centre d'un contour. Aujourd'hui, nous avons couvert la détection de forme avec OpenCV. Et la semaine prochaine, nous discuterons de la façon de étiqueter la couleur réelle d'une forme en utilisant les statistiques des canaux de couleur.

Assurez-vous d'entrer votre adresse e-mail dans le formulaire ci-dessous pour être averti de la prochaine publication — vous ne voudrez pas le manquer !

Téléchargez le code source et le guide de ressources GRATUIT de 17 pages

Entrez votre adresse e-mail ci-dessous pour obtenir un .zip du code et un Guide de ressources GRATUIT de 17 pages sur la vision par ordinateur, OpenCV et l'apprentissage en profondeur. À l'intérieur, vous trouverez mes tutoriels, livres, cours et bibliothèques triés sur le volet pour vous aider à maîtriser CV et DL !

A propos de l'auteur

Bonjour, je suis Adrian Rosebrock, PhD. Trop souvent, je vois des développeurs, des étudiants et des chercheurs perdre leur temps, étudier les mauvaises choses et avoir généralement du mal à démarrer avec Computer Vision, Deep Learning et OpenCV. J'ai créé ce site Web pour vous montrer ce que je crois être la meilleure façon de démarrer.


Conversion PDF en JPG avec Python (pour Windows)

J'ai récemment eu un temps torride à essayer de rechercher et de mettre en œuvre un Python script qui pourrait convertir par lots à partir de PDF à JPG. Il existe de nombreuses entrées en ligne qui visent à aider (et l'ont fait en partie), mais j'ai eu du mal à en trouver une avec un flux de travail concis du début à la fin qui satisfaisait à mes critères et impliquait de configurer les éléments nécessaires pour les mettre en œuvre. Ce qui suit pourrait être considéré comme n'étant pas le moyen le plus ‘Pythonic’ de le faire, mais cela m'a certainement rendu la vie plus facile. je luttais avec Baguette magique et ImageMagick selon la plupart des messages jusqu'à ce que je tombe heureusement sur une entrée sur Débordement de pilefloqqi, mon nouveau héros, a répondu à mes prières. J'ai senti que si je me débattais avec cela, il devait y en avoir d'autres dans la même situation et j'espère que le titre de cet article l'aidera à figurer au premier plan des recherches et à aider d'autres chercheurs d'extraits de Python à trouver un salut.
Remarque : j'utilise Python 2.7 32 bits sous Windows 7 Professionnel

1. Installez ImageMagick
floqqi recommande de télécharger la dernière version, qui au moment de la rédaction de cet article est 7.0.4-3. J'avais déjà installé une version antérieure en essayant d'obtenir le Baguette magique module pour fonctionner. Ma version est la 6.9.7-3. Si vous survolez les liens, vous devriez pouvoir voir le nom complet du lien http://www.imagemagick.org/download/binaries/ImageMagick-6.9.7-3-Q8-x86-dll.exe, ou cliquez simplement dessus lien pour télécharger la même version que j'ai fait.
Exécutez le programme d'installation, acceptez le contrat de licence et cliquez sur Suivant sur le Informations la fenêtre. Dans le Sélectionnez des tâches supplémentaires sois sûr que Installer les en-têtes de développement et les bibliothèques pour C et C++ est sélectionné.

Cliquez sur Suivant et alors Installer.

3. Définir les variables d'environnement
Créer un nouveau Variable système (Paramètres système avancés & gt Variables d'environnement) appelé MAGICK_HOME et insérez le chemin d'installation d'Image Magick comme valeur. Ce sera similaire à C:Program Files (x86)ImageMagick-6.9.7-Q8

Cliquez sur d'accord et et assurez-vous que la même valeur (C:Program Files (x86)ImageMagick-6.9.7-Q8) est au début du Chemin variable. Après cette entrée dans le Chemin variable insérer l'entrée pour GhostScript qui sera semblable à C:Program Files (x86)gsgs9.20in
Remarque : assurez-vous que les entrées sont séparées par un point-virgule ()

4. Vérifiez si les étapes 1 à 3 ont été correctement configurées
Ouvrez le Invite de commandes et entrez…

où file.pdf et file2.jpg sont des chemins complets pour une entrée PDF et et sortie JPG (ou le répertoire courant contient le fichier).

Si aucune erreur n'est présentée et que le JPG a été créé, vous pouvez passer à l'étape suivante. Sinon, lancez-vous dans un dépannage.

5. Installez PythonMagick
j'ai téléchargé le Python 2.7 32 bits whl déposer PythonMagick‑0.9.10‑cp27‑none‑win32.whl puis utilisé pip pour installer à partir de l'invite de commande.

Ouvrir un IDE Python et testez pour voir si vous pouvez importer PythonMagick

Nous avons maintenant tout configuré et pouvons commencer à écrire un script qui convertira plusieurs (page unique) PDF à JPG.

Importez les modules nécessaires.

D'accord alors dateheure n'est pas nécessaire, mais j'aime chronométrer mes scripts et voir s'il peut être amélioré. Définir l'heure de début du script

Quelques variables globales, une pour le répertoire qui contient le PDF, et un autre pour contenir une valeur hexadécimale pour la couleur d'arrière-plan ‘white’. Après essais et erreurs, j'ai remarqué que certains JPG étaient exportés avec un fond noir au lieu de blanc et cela sera utilisé pour forcer un fond blanc. J'ai trouvé un lien utile sur StackOverflow pour aider à surmonter cela.

Nous parcourons chaque PDF dans le dossier

Définir et lire dans chaque PDF. la densité est la résolution.

Obtenez les dimensions de l'image.

Construisez le JPG pour la sortie. Cette partie doit être la Magie dans PythonMagie parce que pour une petite partie je suis mystifié. Voir ce dernier lien vers StackOverflow pour l'origine du code ici. le PythonMagick la documentation est difficile à digérer et dans divers fils de discussion, lisez les lamentations sur sa pauvreté.

Et enfin, nous écrivons notre JPG

Et voyez combien de temps il a fallu au script pour s'exécuter.

Cela place la sortie JPG dans le même dossier que le PDF. En fonction de la résolution (densité) et des paramètres de qualité, le processus peut être un peu long. En utilisant les paramètres ci-dessus, il a fallu 9 minutes pour faire 20 Conversions PDF en JPG. Vous devrez déterminer la résolution et la qualité optimales pour votre objectif. La basse résolution a pris 46 secondes pour les 20.

Comme toujours, je ressens un sentiment d'accomplissement lorsque je reçois un Python script pour fonctionner et j'espère que cet article suscitera certains commentaires pour rendre le processus ci-dessus plus efficace. N'hésitez pas à publier des liens vers des ressources, peut-être à commenter pour m'aider moi-même et d'autres lecteurs, ou si cela vous a aidé de toute façon, faites-le moi savoir et je transmettrai mes remerciements à floqqi et au reste de l'équipe. Ce script est la limite de mes connaissances avec PythonMagick et c'est grâce à ceux qui se sont efforcés avant moi et référencés dans les liens tout au long de ce post. Merci les gars.


Voir la vidéo: How to calculate and display centroids of polygons in ArcGIS 10 (Octobre 2021).