Automatizar la creación de SHP a JPG

13

¿Alguien sabe de una manera de convertir por lotes los shapefiles a jpegs u otro formato de imagen común?

editar: debería haber aclarado que me gustaría aplicar un estilo a cada shapefile y luego exportar el shapefile con ese estilo a una imagen.

Por ejemplo, tengo secciones censales en un condado, y quiero que se resalte una imagen de cada zona individual mientras que las demás zonas son todas del mismo color.

    
pregunta camdenl 03.06.2013 - 22:07

6 respuestas

14

Hay muchas herramientas gratuitas como:

PeroenPython,lareferenciaes Mapnik y Getting Started in Python

  • Crea un mapa (ancho y alto en píxeles, color de fondo, etc.)
  • Creas estilos que determinan cómo se representan los datos
  • Agrega un origen de datos (shapefile, etc.) y crea una capa a partir de él.
  • Usted representa el mapa
  • los mismos parámetros de mapas y estilos se pueden aplicar a varios archivos (a través de un archivo XML)

vea los ejemplos en Mapas de Mapniks

Imágenes renderizadas simples de TM_WORLD_BORDERS-0.3.shp

seleccióndeunpaís(Angola)enelshapefile:

Otro ejemplo de Mapas de Mapniks

    
respondido por el gene 04.06.2013 - 09:08
4

Puedes agregar todas las capas a un mxd, luego recorrerlas y ejecutarlas

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

para cada capa en el mapa.

    
respondido por el Hotpepper 03.06.2013 - 22:17
3

Esta pregunta similar tiene respuestas que utilizan FME para convertir DWG a JPG. El proceso será similar para convertir los shapefiles.

Este ejemplo tiene espacios de trabajo de ejemplo que puede descargar.

FME está bien adaptado para manejar procesos por lotes. Por ejemplo, puede apuntar el lector a una carpeta e incluirá todos los shapefiles en la carpeta.

Creé un flujo de trabajo simple que lee todos los shapefiles en una carpeta y los escribe en JPG separados.

    
respondido por el Fezter 04.06.2013 - 06:07
3

¡Oh, hice esto ayer con los condados en Montana! ¿Es demasiado tarde para responder? Suponiendo que ya ha usado Split para crear un shapefile para cada distrito censal, descubrí que era fácil (perezoso) manejarlos en una capa de grupo. Suponiendo que esa sea la única capa de grupo en su documento, no tenga miedo de abrir la ventana de ArcPy e ingresar:

# 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

La exportación a jpg es similar, pero los jpgs son un poco asquerosos. Esta fue mi primera experiencia en ArcPy, así que estoy seguro de que hay formas más elegantes de hacerlo.

    
respondido por el Branden 22.06.2013 - 01:22
0

Aquí hay un script de Python que uso. Puede modificarse para cambiar el color de los polígonos, & 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)
    
respondido por el Richard 16.04.2018 - 23:33
-1

En su lugar, simplemente cargue el archivo shp en ArcMaps y configúrelo como desee. Luego use Alt + Imprimir pantalla o la Herramienta de recorte para obtener una captura de pantalla. Luego, tendrá un archivo jpg o png que se verá exactamente igual que el archivo de formas.

    
respondido por el mike 25.11.2013 - 20:40

Lea otras preguntas en las etiquetas