Automatisieren Sie die Erstellung von SHP zu JPG

14

Kennt jemand eine Möglichkeit, Shapefiles stapelweise in JPEGs oder ein anderes gängiges Bildformat zu konvertieren?

Bearbeiten: Ich hätte klarstellen sollen, dass ich jedem Shapefile ein Styling zuweisen und dann das Shapefile mit diesem Styling in ein Bild exportieren möchte.

Zum Beispiel habe ich Volkszählungsgebiete in einem Landkreis und ich möchte, dass ein Bild jedes einzelnen Gebiets hervorgehoben wird, während die anderen Gebiete alle die gleiche Farbe haben.

camdenl
quelle
Haben Sie eine bestimmte Software im Sinn? Eine Anwendung, die Sie regelmäßig verwenden? Oder bist du nur irgendwie möglich?
RyanKDalton-OffTheGridMaps
Ich benutze Arc und Q ziemlich regelmäßig und werde mit arcpy vertraut, suche aber wirklich nur nach einer Möglichkeit, dies zu tun, sogar nach einem anderen Softwarepaket von
Drittanbietern
2
Zur Verdeutlichung möchten Sie im Grunde nur Miniaturansichten (oder größere) des Shapefiles erstellen, kein Styling, keine Farben, keine Labels usw., oder?
RyanKDalton-OffTheGridMaps
Ich habe letzte Nacht angefangen, darüber nachzudenken, und ich sehe, dass meine ursprüngliche Frage irreführend sein könnte. Ich möchte ein Styling anwenden und dann die Map über 100 Mal für jedes einzelne Shapefile mit dem angewendeten Styling exportieren.
Camdenl

Antworten:

14

Es gibt viele kostenlose Tools wie:

In Python lautet die Referenz jedoch " Mapnik" und " Erste Schritte in Python"

  • Sie erstellen eine Karte (Breite und Höhe in Pixel, Hintergrundfarbe usw.)
  • Sie erstellen Stile, die bestimmen, wie die Daten gerendert werden
  • Sie fügen eine Datenquelle (Shapefile usw.) hinzu und erstellen daraus eine Ebene.
  • Sie rendern die Karte
  • Die gleichen Karten- und Stilparameter können auf mehrere Dateien angewendet werden (über eine XML-Datei).

Siehe die Beispiele in Mapniks Maps

Einfache gerenderte Bilder aus TM_WORLD_BORDERS-0.3.shp

Bildbeschreibung hier eingeben

Auswahl eines Landes (Angola) im Shapefile:

Bildbeschreibung hier eingeben

Ein weiteres Beispiel aus Mapniks Maps

Bildbeschreibung hier eingeben

Gen
quelle
4

Sie können alle Ebenen zu einem mxd hinzufügen, sie dann durchlaufen und ausführen

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

für jeden Layer in der Karte.

Hotpepper
quelle
Um diese Lösung zu ergänzen, können Sie arcpy.da.walk verwenden, um eine erste Liste der Eingabedaten zu erstellen: resources.arcgis.com/en/help/main/10.1/index.html#//…
scw
3

Diese ähnliche Frage enthält Antworten, die FME verwenden , um DWG in JPG zu konvertieren. Das Verfahren zum Konvertieren von Shapefiles ist ähnlich.

In diesem Beispiel finden Sie Beispielarbeitsbereiche, die Sie herunterladen können.

FME eignet sich gut zur Abwicklung von Batch-Prozessen. Beispielsweise können Sie den Reader auf einen Ordner verweisen, der alle Shapefiles im Ordner enthält.

Ich habe einen einfachen Workflow erstellt, der alle Shapefiles in einem Ordner liest und in separate JPGs schreibt.

Arbeitsablauf

Fezter
quelle
3

Oh, das habe ich gestern mit Landkreisen in Montana gemacht! Ist es zu spät zu antworten? Angenommen, Sie haben bereits Split verwendet, um ein Shapefile für jedes Zensus-Trakt zu erstellen, dann stellte ich fest, dass es einfach (faul) war, sie in einer Gruppenebene zu handhaben. Angenommen, dies ist der einzige Gruppen-Layer in Ihrem Dokument, scheuen Sie sich nicht, das ArcPy-Fenster zu öffnen und Folgendes einzugeben:

# 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

Das Exportieren in JPG ist ähnlich, aber JPGs sind ein bisschen glücklich. Dies war meine erste ArcPy-Erfahrung. Ich bin mir sicher, dass es elegantere Möglichkeiten gibt, dies zu tun.

Branden
quelle
Du hast genau dasselbe gemacht, was?
Ich bin
1

Hier ist ein Python-Skript, das ich verwende. Es kann modifiziert werden, um die Farbe der Polygone zu ändern, & 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
quelle
-1

Laden Sie stattdessen einfach die shp-Datei in ArcMaps und konfigurieren Sie sie nach Ihren Wünschen. Verwenden Sie dann entweder Alt + Bildschirm drucken oder das Snipping-Tool, um einen Screenshot zu erhalten. Dann haben Sie ein JPG oder PNG, das genau so aussieht, wie die Formdatei gerendert wurde.

Mike
quelle
3
Ich denke nicht, dass dies die Schlüsselkomponente der Frage anspricht, wie der Prozess automatisiert werden kann.
RyanKDalton-OffTheGridMaps