SHP'den JPG oluşturulmasına otomatikleştirme


14

Herkes toplu şekil jpegs veya başka bir yaygın görüntü biçimine dönüştürmek için bir yol biliyor mu?

edit: Her şekil dosyasına bir stil uygulamak ve daha sonra bu stil ile şekil dosyasını bir görüntüye vermek istiyorum açık olmalıdır.

Örneğin, bir ilçede nüfus sayımı izlerim var ve diğer yolların hepsi aynı renkteyken vurgulanan her bir yolun görüntüsünü istiyorum.


Aklınızda belirli bir yazılım var mı? Düzenli kullandığınız bir uygulama? Yoksa mümkün olan her şekilde mi?
RyanKDalton

Arc ve Q'yu oldukça düzenli kullanıyorum ve arcpy'ye daha aşina oluyorum, ama gerçekten bunu yapmanın herhangi bir yolunu arıyorum, hatta başka bir üçüncü taraf yazılım paketi bile
camdenl

2
Netleştirmek için, temel olarak sadece şekil dosyasının küçük resimlerini (veya daha büyük) oluşturmak istiyorsunuz, stil yok, renk yok, etiket yok, vb.
RyanKDalton

Dün gece bunu düşünmeye başladım ve orijinal sorumun yanıltıcı olabileceğini görüyorum. Bir stil uygulamak ve ardından uygulanan stil ile her bireysel şekil dosyası için haritayı 100'den fazla kez dışa aktarmak istiyorum.
camdenl

Yanıtlar:


14

Gibi birçok ücretsiz araç vardır:

Ancak Python'da referans Mapnik ve Python'a Başlarken

  • Bir harita oluşturursunuz (piksel cinsinden genişlik ve yükseklik, arka plan rengi, vb.)
  • Verilerin nasıl oluşturulacağını belirleyen Stiller oluşturursunuz
  • Bir veri kaynağı (şekil dosyası vb.) Ekler ve ondan bir katman oluşturursunuz.
  • Haritayı oluştur
  • aynı harita ve stil parametreleri birden çok dosyaya uygulanabilir (XML dosyası aracılığıyla)

Mapniks Haritalarındaki örneklere bakın

TM_WORLD_BORDERS-0.3.shp ile oluşturulan basit resimler

resim açıklamasını buraya girin

şekil dosyasında bir ülke (Angola) seçimi:

resim açıklamasını buraya girin

Mapniks Haritalarından bir başka örnek

resim açıklamasını buraya girin


4

Tüm katmanları bir mxd'ye ekleyebilir, sonra bunları döngüye sokup çalıştırabilirsiniz

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

haritadaki her katman için.


Bu çözüme eklemek için arcpy.da.walk komutunu kullanarak giriş verilerinin ilk listesini oluşturabilirsiniz: resources.arcgis.com/en/help/main/10.1/index.html#//…
scw

3

Bu benzer soru , DWG'yi JPG'ye dönüştürmek için FME kullanan cevaplara sahiptir . İşlem, şekil dosyalarını dönüştürmek için benzer olacaktır.

Bu örnekte indirebileceğiniz örnek çalışma alanları bulunmaktadır.

FME, toplu işlemlerin gerçekleştirilmesi için çok uygundur. Örneğin, okuyucuyu bir klasöre yönlendirebilirsiniz ve klasördeki tüm şekil dosyalarını içerecektir.

Bir klasördeki tüm şekil dosyalarını okuyan ve bunları ayrı JPG'lere yazan basit bir iş akışı oluşturdum.

iş akışı


3

Oh, bunu dün Montana'daki ilçelerle yaptım! Cevap vermek için çok mu geç? Her sayım yolu için bir şekil dosyası yapmak için Split'i zaten kullandığınızı varsayarsak, bunları bir Grup Katmanında işlemenin kolay (tembel) olduğunu buldum. Belgenizdeki tek Grup Katmanı olduğunu varsayarsak, ArcPy penceresini açıp girmekten çekinmeyin:

# 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

Jpg'ye ihracat benzerdir, ancak jpgs biraz yucky'dir. Bu benim ilk ArcPy deneyimimdi, bu yüzden bunu yapmanın daha zarif yolları olduğundan eminim.


Ayný ţeyi yaptýn ha? Bunu çözdüğüne sevindim, cevap için teşekkürler
camdenl

1

İşte kullandığım bir Python betiği. Çokgenlerin rengini değiştirmek için değiştirilebilir, & 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

Bunun yerine, shp dosyasını ArcMaps'e yükleyin ve istediğiniz şekilde yapılandırın. Ardından, ekran görüntüsü almak için Alt + Print Screen veya Snipping Tool'u kullanın. Ardından, şekil dosyasının nasıl oluşturulduğuna benzeyen bir jpg veya png'ye sahip olacaksınız.


3
Sürecin nasıl otomatikleştirileceği sorusunun anahtar bileşenine hitap ettiğini düşünmüyorum .
RyanKDalton
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.