Mengotomatiskan SHP ke pembuatan JPG

14

Adakah yang tahu cara untuk mengonversi batch shapefile ke jpegs atau format gambar umum lainnya?

sunting: Saya seharusnya mengklarifikasi bahwa saya ingin menerapkan gaya pada setiap shapefile, dan kemudian mengekspor shapefile dengan gaya tersebut ke gambar.

Misalnya, saya memiliki traktat sensus di suatu daerah, dan saya ingin gambar setiap traktat disoroti sedangkan traktat lainnya semuanya berwarna sama.

Camdenl
sumber
Apakah Anda memiliki perangkat lunak tertentu dalam pikiran? Aplikasi yang Anda gunakan secara teratur? Atau apakah Anda sebisa mungkin?
RyanKDalton
Saya menggunakan Arc dan Q dengan cukup teratur dan saya semakin akrab dengan arcpy, tetapi saya benar-benar hanya mencari cara untuk melakukan ini, bahkan paket perangkat lunak pihak ketiga lainnya
camdenl
2
Jadi untuk klarifikasi, Anda pada dasarnya hanya mencari untuk menghasilkan thumbnail (atau lebih besar) dari shapefile, tidak ada gaya, tidak ada warna, tidak ada label, dll, kan?
RyanKDalton
Saya mulai memikirkan ini semalam, dan saya melihat bahwa pertanyaan awal saya mungkin menyesatkan. Saya ingin menerapkan gaya dan kemudian mengekspor peta lebih dari 100 kali untuk setiap bentuk individu dengan gaya yang diterapkan.
camdenl

Jawaban:

14

Ada banyak alat gratis seperti:

Tetapi dalam Python, referensi adalah Mapnik dan Getting Started In Python

  • Anda membuat peta (lebar dan tinggi dalam piksel, warna latar belakang, dll)
  • Anda membuat Gaya yang menentukan bagaimana data ditampilkan
  • Anda menambahkan sumber data (shapefile, dll.) Dan membuat layer dari itu.
  • Anda membuat peta
  • parameter peta dan gaya yang sama dapat diterapkan ke banyak file (melalui file XML)

lihat contoh di Mapniks Maps

Gambar sederhana yang di-render dari TM_WORLD_BORDERS-0.3.shp

masukkan deskripsi gambar di sini

pemilihan negara (Angola) di shapefile:

masukkan deskripsi gambar di sini

Contoh lain dari Mapniks Maps

masukkan deskripsi gambar di sini

gen
sumber
4

Anda bisa menambahkan semua layer ke mxd, lalu lewati dan jalankan

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

untuk setiap lapisan di peta.

Merica
sumber
Hanya untuk menambah solusi ini, Anda dapat menggunakan arcpy.da.walk untuk menghasilkan daftar awal data input: resources.arcgis.com/en/help/main/10.1/index.html#//…
scw
3

Pertanyaan serupa ini memiliki jawaban yang menggunakan FME untuk mengonversi DWG ke JPG. Prosesnya akan serupa untuk mengkonversi shapefile.

Contoh ini memiliki contoh ruang kerja yang dapat Anda unduh.

FME sangat cocok untuk menangani proses batch. Misalnya, Anda bisa mengarahkan pembaca ke folder dan itu akan mencakup semua shapefile di folder.

Saya membuat alur kerja sederhana yang membaca semua shapefile di folder dan menulisnya ke JPG yang terpisah.

alur kerja

Fezter
sumber
3

Oh, saya melakukan ini kemarin dengan kabupaten di Montana! Apakah sudah terlambat untuk menjawab? Dengan asumsi Anda sudah menggunakan Split untuk membuat shapefile untuk setiap saluran sensus, saya menemukan bahwa itu mudah (malas) untuk menanganinya dalam Group Layer. Dengan asumsi itu satu-satunya Lapisan Grup dalam dokumen Anda, jangan malu membuka jendela ArcPy dan memasukkan:

# 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

Ekspor ke jpg mirip, tetapi jpg agak yucky. Ini adalah pengalaman ArcPy pertama saya, jadi saya yakin ada cara yang lebih elegan untuk melakukan ini.

Branden
sumber
Anda melakukan hal yang persis sama, eh? Senang Anda mengetahuinya, terima kasih atas tanggapannya
camdenl
1

Inilah skrip Python yang saya gunakan. Itu dapat dimodifikasi untuk mengubah warna poligon, & 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
sumber
-1

Sebagai gantinya, muat saja file shp ke ArcMaps dan konfigurasikan sesuka Anda. Kemudian gunakan Alt + Print Screen atau Snipping Tool untuk mendapatkan tangkapan layar. Maka Anda akan memiliki jpg atau png yang terlihat persis seperti bagaimana file bentuk itu dibuat.

mikrofon
sumber
3
Saya tidak berpikir yang membahas komponen kunci dari pertanyaan yang bagaimana mengotomatiskan proses.
RyanKDalton