Automatisez la création de SHP en JPG

14

Quelqu'un connaît-il un moyen de convertir par lots des fichiers de formes en jpeg ou en un autre format d'image commun?

modifier: j'aurais dû préciser que j'aimerais appliquer un style à chaque fichier de formes, puis exporter le fichier de formes avec ce style vers une image.

Par exemple, j'ai des secteurs de recensement dans un comté et je veux une image de chaque secteur individuel en surbrillance tandis que les autres secteurs sont tous de la même couleur.

camdenl
la source
Avez-vous un logiciel particulier en tête? Une application que vous utilisez régulièrement? Ou est-ce que vous pouvez tout simplement possible?
RyanKDalton
J'utilise Arc et Q assez régulièrement et je me familiarise avec arcpy, mais je recherche vraiment un moyen de le faire, même un autre logiciel tiers
camdenl
2
Donc, pour plus de clarté, vous cherchez simplement à générer des miniatures (ou plus grandes) du fichier de formes, pas de style, pas de couleurs, pas d'étiquettes, etc., n'est-ce pas?
RyanKDalton
J'ai commencé à y penser hier soir, et je vois que ma question initiale pourrait être trompeuse. Je voudrais appliquer un style, puis exporter la carte plus de 100 fois pour chaque fichier de formes individuel avec le style appliqué.
camdenl

Réponses:

14

Il existe de nombreux outils gratuits comme:

Mais en Python, la référence est Mapnik et Getting Started In Python

  • Vous créez une carte (largeur et hauteur en pixels, couleur d'arrière-plan, etc.)
  • Vous créez des styles qui déterminent le rendu des données
  • Vous ajoutez une source de données (fichier de formes, etc.) et créez une couche à partir de celle-ci.
  • Vous rendez la carte
  • les mêmes paramètres de carte et de styles peuvent être appliqués à plusieurs fichiers (via un fichier XML)

voir les exemples dans Mapniks Maps

Images rendues simples de TM_WORLD_BORDERS-0.3.shp

entrez la description de l'image ici

sélection d'un pays (Angola) dans le shapefile:

entrez la description de l'image ici

Un autre exemple de Mapniks Maps

entrez la description de l'image ici

gène
la source
4

Vous pouvez ajouter toutes les couches à un mxd, puis les parcourir et exécuter

arcpy.mapping.ExportToJPEG(map_document, out_jpeg, {data_frame}, {df_export_width}, {df_export_height}, {resolution}, {world_file}, {color_mode}, {jpeg_quality}, {progressive})

pour chaque couche de la carte.

Piment
la source
Pour ajouter à cette solution, vous pouvez utiliser arcpy.da.walk pour générer une liste initiale de données d'entrée: resources.arcgis.com/en/help/main/10.1/index.html#//…
scw
3

Cette question similaire a des réponses qui utilisent FME pour convertir DWG en JPG. Le processus sera similaire pour la conversion des fichiers de formes.

Cet exemple contient des exemples d'espaces de travail que vous pouvez télécharger.

FME est bien adapté à la gestion des processus par lots. Par exemple, vous pouvez pointer le lecteur vers un dossier et il inclura tous les fichiers de formes dans le dossier.

J'ai créé un flux de travail simple qui lit tous les fichiers de formes dans un dossier et les écrit dans des JPG séparés.

flux de travail

Fezter
la source
3

Oh, je l'ai fait hier avec des comtés du Montana! Est-il trop tard pour répondre? En supposant que vous avez déjà utilisé Split pour créer un fichier de formes pour chaque secteur de recensement, j'ai trouvé qu'il était facile (paresseux) de les gérer dans une couche de groupe. En supposant que c'est la seule couche de groupe dans votre document, n'hésitez pas à ouvrir la fenêtre ArcPy et à entrer:

# Setup, defining a variable for the map document, the data frame,
# and a list of layers:
mxd = arcpy.mapping.MapDocument("Current")
df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
layers = arcpy.mapping.ListLayers(mxd)

# To copy symbology to all subLayers in the group layer,
# using a template, any normal polygon shapefile will do:
# (datum conflict warnings are irrelevant)
for layer in layers:
  if layer.isGroupLayer:
    for subLayer in layer:
      arcpy.ApplySymbologyFromLayer_management(subLayer, "templatelayer")

# Export one map with each county/tract highlighted, toggling visibility
# of each sublayer before and after:
for layer in layers:
  if layer.isGroupLayer:
    for subLayer in layer:
      print "Exporting " + str(subLayer.name)
      subLayer.visible = True
      slfile = "C:\\YourPathHere\\Subdir\\Etc\\" + str(subLayer.name) +
".png"
      arcpy.mapping.ExportToPNG(mxd, slfile, df, df_export_width=640,
df_export_height=480, transparent_color="255, 255, 255")
      subLayer.visible = False

Exporter en jpg est similaire, mais les jpgs sont un peu dégoûtants. C'était ma première expérience ArcPy, donc je suis sûr qu'il existe des façons plus élégantes de le faire.

Branden
la source
Tu as fait exactement la même chose hein? Heureux que vous l'ayez compris, merci pour la réponse
camdenl
1

Voici un script Python que j'utilise. Il peut être modifié pour changer la couleur des polygones, & c:

#!/usr/bin/env python3
from descartes import PolygonPatch
import matplotlib.pyplot as plt 
import random
import shapefile
import sys

def get_cmap(n, name='hsv'):
  '''Returns a function that maps each index in 0, 1, ..., n-1 to a distinct 
  RGB color; the keyword argument name must be a standard mpl colormap name.'''
  return plt.cm.get_cmap(name, n)

if len(sys.argv)!=3:
  print("Syntax: {0} <Shapefile> <Output>".format(sys.argv[0]))
  sys.exit(-1)

shapefile_name = sys.argv[1]
outputfile     = sys.argv[2]

polys  = shapefile.Reader(shapefile_name)
shapes = polys.shapes()
cmap   = get_cmap(len(shapes))

#Enable to randomize colours
#random.shuffle(shapes)

fig = plt.figure()
ax  = fig.add_axes((0,0,1,1)) 

for i,poly in enumerate(shapes):
  poly  = poly.__geo_interface__
  color = cmap(i)
  ax.add_patch(PolygonPatch(poly, fc=None, ec="black", alpha=1, zorder=2))

ax.axis('scaled')
ax.set_axis_off()
plt.savefig(outputfile, bbox_inches='tight', pad_inches=0)
Richard
la source
-1

Au lieu de cela, chargez simplement le fichier shp dans ArcMaps et configurez-le comme vous le souhaitez. Utilisez ensuite Alt + Impr écran ou l'outil de capture pour obtenir une capture d'écran. Ensuite, vous aurez un jpg ou png qui ressemble exactement à la façon dont le fichier de forme a été rendu.

Mike
la source
3
Je ne pense pas que cela réponde à l'élément clé de la question qui est de savoir comment automatiser le processus.
RyanKDalton