สร้าง SHP เป็น JPG อัตโนมัติ


14

ไม่มีใครรู้วิธีแปลง batchfiles เป็น jpegs หรือรูปแบบภาพทั่วไปอื่น ๆ

แก้ไข: ฉันควรชี้แจงว่าฉันต้องการนำสไตล์ไปใช้กับแต่ละรูปร่างไฟล์แล้วส่งออกรูปร่างไฟล์ด้วยสไตล์นั้นไปยังภาพ

ตัวอย่างเช่นฉันมีสถานที่สำรวจสำมะโนประชากรในเขตและฉันต้องการภาพของแต่ละทางเดินเน้นในขณะที่ผืนอื่น ๆ มีสีเดียวกันทั้งหมด


คุณมีซอฟแวร์ใดเป็นพิเศษในใจหรือไม่? แอปพลิเคชันที่คุณใช้เป็นประจำหรือไม่ หรือคุณเป็นไปได้เพียงใด?
RyanKDalton

ผมใช้ Arc และ Q สวยสม่ำเสมอและกำลังได้รับความคุ้นเคยกับ arcpy แต่กำลังจริงๆเพียงแค่มองหาวิธีการทำเช่นนี้แม้อีกแพคเกจซอฟต์แวร์บุคคลที่สาม
camdenl

2
ดังนั้นเพื่อความกระจ่างคุณเป็นเพียงแค่ต้องการสร้างรูปขนาดย่อ (หรือใหญ่กว่า) ของรูปร่างไฟล์ไม่มีสไตล์ไม่มีสีไม่มีป้ายชื่อ ฯลฯ ใช่ไหม?
RyanKDalton

ฉันเริ่มคิดถึงเมื่อคืนนี้และฉันเห็นว่าคำถามดั้งเดิมของฉันอาจทำให้เข้าใจผิด ฉันต้องการใช้สไตล์และส่งออกแผนที่มากกว่า 100 ครั้งสำหรับแต่ละไฟล์รูปร่างแต่ละไฟล์ด้วยสไตล์ที่ปรับใช้
camdenl

คำตอบ:


14

มีเครื่องมือฟรีมากมายเช่น:

แต่ใน Python การอ้างอิงคือMapnikและเริ่มต้นใช้งานใน Python

  • คุณสร้างแผนที่ (ความกว้างและความสูงเป็นพิกเซลสีพื้นหลัง ฯลฯ )
  • คุณสร้างสไตล์ที่กำหนดวิธีการแสดงข้อมูล
  • คุณเพิ่มแหล่งข้อมูล (shapefile ฯลฯ ) และสร้างเลเยอร์จากมัน
  • คุณเรนเดอร์แผนที่
  • สามารถใช้พารามิเตอร์การแม็พและสไตล์เดียวกันกับหลายไฟล์ (ผ่านไฟล์ XML)

ดูตัวอย่างในMapniks Maps

ภาพแสดงผลอย่างง่ายจาก TM_WORLD_BORDERS-0.3.shp

ป้อนคำอธิบายรูปภาพที่นี่

การเลือกประเทศ (แองโกลา) ในไฟล์รูปร่าง:

ป้อนคำอธิบายรูปภาพที่นี่

อีกตัวอย่างหนึ่งจากMapniks Maps

ป้อนคำอธิบายรูปภาพที่นี่


4

คุณสามารถเพิ่มเลเยอร์ทั้งหมดลงใน mxd จากนั้นวนรอบมันและเรียกใช้

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

สำหรับแต่ละเลเยอร์ในแผนที่


เพียงเพิ่มโซลูชันนี้คุณสามารถใช้ arcpy.da.walk เพื่อสร้างรายการเริ่มต้นของข้อมูลอินพุต: resources.arcgis.com/th/help/main/10.1/index.html#//…
scw

3

คำถามที่คล้ายกันนี้มีคำตอบที่ใช้FMEเพื่อแปลง DWG เป็น JPG กระบวนการจะคล้ายกันสำหรับการแปลงรูปร่างไฟล์

ตัวอย่างนี้มีพื้นที่ทำงานตัวอย่างที่คุณสามารถดาวน์โหลดได้

FME เหมาะสมอย่างยิ่งกับการจัดการกระบวนการแบทช์ ตัวอย่างเช่นคุณสามารถชี้ผู้อ่านไปยังโฟลเดอร์และมันจะรวมรูปร่างทั้งหมดในโฟลเดอร์

ฉันสร้างเวิร์กโฟลว์แบบง่ายซึ่งอ่านรูปร่างไฟล์ทั้งหมดในโฟลเดอร์และเขียนออกเป็น JPG แบบแยก

ขั้นตอนการทำงาน


3

เมื่อวานนี้ฉันทำสิ่งนี้กับมณฑลในมอนแทนา! สายเกินไปที่จะตอบหรือไม่? สมมติว่าคุณใช้ Split เพื่อสร้าง shapefile สำหรับแต่ละสำมะโนฉันพบว่ามันง่าย (สันหลังยาว) ที่จะจัดการมันใน Group Layer สมมติว่าเป็นเลเยอร์กลุ่มเดียวในเอกสารของคุณไม่ต้องอายที่จะเปิดหน้าต่าง ArcPy และเข้าสู่:

# 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 คล้ายกัน แต่ jpgs เป็นคนที่โชคดี นี่เป็นประสบการณ์ ArcPy ครั้งแรกของฉันดังนั้นฉันแน่ใจว่ามีวิธีที่สง่างามมากขึ้นในการทำเช่นนี้


คุณทำสิ่งเดียวกันใช่มั้ย ดีใจที่คุณคิดออกขอบคุณสำหรับการตอบสนอง
camdenl

1

นี่เป็นสคริปต์ Python ที่ฉันใช้ สามารถแก้ไขเพื่อเปลี่ยนสีของรูปหลายเหลี่ยม & 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

เพียงแค่โหลดไฟล์ shp ลงใน ArcMaps และกำหนดค่าตามที่คุณต้องการ จากนั้นใช้ Alt + Print Screen หรือ Snipping Tool เพื่อรับภาพหน้าจอ จากนั้นคุณจะมี jpg หรือ png ที่มีลักษณะเหมือนกับที่แสดงไฟล์รูปร่าง


3
ฉันไม่คิดว่าจะพูดถึงองค์ประกอบสำคัญของคำถามซึ่งเป็นวิธีการทำให้กระบวนการเป็นแบบอัตโนมัติ
RyanKDalton
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.