Automatiza la creación de SHP a JPG


14

¿Alguien sabe de una manera de convertir por lotes archivos de forma a archivos JPEG u otro formato de imagen común?

editar: debería haber aclarado que me gustaría aplicar un estilo a cada archivo de forma, y ​​luego exportar el archivo de forma con ese estilo a una imagen.

Por ejemplo, tengo secciones censales en un condado y quiero que se resalte una imagen de cada sección individual, mientras que las otras secciones son del mismo color.


¿Tienes algún software en particular en mente? ¿Una aplicación que usas regularmente? ¿O simplemente de alguna manera posible?
RyanKDalton

Uso Arc y Q con bastante frecuencia y me estoy familiarizando con arcpy, pero realmente estoy buscando cualquier forma de hacerlo, incluso otro paquete de software de terceros
camdenl

2
Entonces, para aclarar, básicamente está buscando generar miniaturas (o más grandes) del archivo de forma, sin estilo, sin colores, sin etiquetas, etc., ¿verdad?
RyanKDalton

Empecé a pensar en esto anoche, y veo que mi pregunta original podría ser engañosa. Me gustaría aplicar un estilo y luego exportar el mapa más de 100 veces para cada archivo de forma individual con el estilo aplicado.
camdenl

Respuestas:


14

Hay muchas herramientas gratuitas como:

Pero en Python, la referencia es Mapnik y Primeros pasos en Python

  • Crea un mapa (ancho y alto en píxeles, color de fondo, etc.)
  • Crea estilos que determinan cómo se representan los datos
  • Agrega una fuente de datos (shapefile, etc.) y crea una capa a partir de ella.
  • Renderizas el mapa
  • los mismos parámetros de mapa y estilos pueden aplicarse a múltiples archivos (a través de un archivo XML)

ver los ejemplos en Mapniks Maps

Imágenes renderizadas simples de TM_WORLD_BORDERS-0.3.shp

ingrese la descripción de la imagen aquí

selección de un país (Angola) en el archivo de forma:

ingrese la descripción de la imagen aquí

Otro ejemplo de Mapniks Maps

ingrese la descripción de la imagen aquí


4

Puede agregar todas las capas a un mxd, luego recorrerlas y ejecutar

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.


Solo para agregar a esta solución, puede usar arcpy.da.walk para generar una lista inicial de datos de entrada: resources.arcgis.com/en/help/main/10.1/index.html#//…
scw

3

Esta pregunta similar tiene respuestas que usan FME para convertir DWG a JPG. El proceso será similar para convertir archivos de forma.

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

FME es muy adecuado para manejar procesos por lotes. Por ejemplo, puede apuntar al lector a una carpeta e incluirá todos los archivos de forma en la carpeta.

Creé un flujo de trabajo simple que lee todos los archivos de forma en una carpeta y los escribe para separar los JPG.

flujo de trabajo


3

¡Oh, hice esto ayer con los condados en Montana! ¿Es demasiado tarde para responder? Suponiendo que ya ha utilizado Split para hacer un archivo de forma para cada sección censal, descubrí que era fácil (perezoso) manejarlos en una Capa grupal. Suponiendo que esa sea la única capa de grupo en su documento, no dude en abrir la ventana 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

Exportar a JPG es similar, pero JPG son un poco asqueroso. Esta fue mi primera experiencia ArcPy, así que estoy seguro de que hay formas más elegantes de hacer esto.


Hiciste exactamente lo mismo, ¿eh? Me alegro de que lo hayas descubierto, gracias por la respuesta
camdenl

1

Aquí hay un script de Python que uso. Se puede modificar 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)

-1

En su lugar, simplemente cargue el archivo shp en ArcMaps y configúrelo como desee. Luego use Alt + Imprimir pantalla o la herramienta Recorte para obtener una captura de pantalla. Luego tendrá un jpg o png que se ve exactamente como se renderizó el archivo de forma.


3
No creo que eso aborde el componente clave de la pregunta, que es cómo automatizar el proceso.
RyanKDalton
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.