Tự động tạo SHP sang JPG


14

Có ai biết một cách để chuyển đổi hàng loạt shapefiles thành jpeg hoặc định dạng hình ảnh phổ biến khác không?

chỉnh sửa: Tôi nên làm rõ rằng tôi muốn áp dụng một kiểu dáng cho mỗi shapefile, và sau đó xuất shapefile với kiểu dáng đó thành một hình ảnh.

Ví dụ: tôi có các vùng điều tra dân số trong một quận và tôi muốn một hình ảnh của từng đường riêng lẻ được tô sáng trong khi các vùng khác đều có cùng màu.


Bạn có bất kỳ phần mềm cụ thể trong tâm trí? Một ứng dụng mà bạn sử dụng thường xuyên? Hay bạn chỉ có cách nào có thể?
RyanKDalton-OffTheGridMaps

Tôi sử dụng Arc và Q khá thường xuyên và ngày càng quen thuộc hơn với Arcpy, nhưng tôi thực sự chỉ tìm mọi cách để làm điều này, ngay cả một gói phần mềm của bên thứ ba khác
camdenl

2
Vì vậy, để làm rõ, về cơ bản, bạn chỉ đang tìm cách tạo hình thu nhỏ (hoặc lớn hơn) của shapefile, không có kiểu dáng, không màu sắc, không nhãn, v.v. phải không?
RyanKDalton-OffTheGridMaps

Tôi bắt đầu suy nghĩ về điều này tối qua, và tôi thấy rằng câu hỏi ban đầu của tôi có thể gây hiểu nhầm. Tôi muốn áp dụng một kiểu dáng và sau đó xuất bản đồ hơn 100 lần cho mỗi hình dạng ngẫu nhiên với kiểu dáng được áp dụng.
camdenl

Câu trả lời:


14

Có nhiều công cụ miễn phí như:

Nhưng trong Python, tham chiếu là MapnikBắt đầu bằng Python

  • Bạn tạo bản đồ (chiều rộng và chiều cao tính bằng pixel, màu nền, v.v.)
  • Bạn tạo Kiểu xác định cách hiển thị dữ liệu
  • Bạn thêm một nguồn dữ liệu (shapefile, v.v.) và tạo một lớp từ nó.
  • Bạn kết xuất bản đồ
  • các tham số kiểu và bản đồ giống nhau có thể được áp dụng cho nhiều tệp (thông qua tệp XML)

xem các ví dụ trong Mapniks Maps

Hình ảnh được kết xuất đơn giản từ TM_WORLD_BORDERS-0.3.shp

nhập mô tả hình ảnh ở đây

lựa chọn một quốc gia (Angola) trong shapefile:

nhập mô tả hình ảnh ở đây

Một ví dụ khác từ Mapniks Maps

nhập mô tả hình ảnh ở đây


4

Bạn có thể thêm tất cả các lớp vào mxd, sau đó lặp qua chúng và chạy

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

cho mỗi lớp trong bản đồ.


Chỉ cần thêm vào giải pháp này, bạn có thể sử dụng arcpy.da.walk để tạo danh sách dữ liệu đầu vào ban đầu: resource.arcgis.com/en/help/main/10.1/index.html#//
tựa

3

Đây câu hỏi tương tự có câu trả lời có sử dụng FME để chuyển đổi định dạng DWG sang JPG. Quá trình sẽ tương tự để chuyển đổi shapefiles.

Ví dụ này có không gian làm việc mẫu bạn có thể tải xuống.

FME rất phù hợp để xử lý các quy trình hàng loạt. Ví dụ, bạn có thể trỏ trình đọc đến một thư mục và nó sẽ bao gồm tất cả các shapefile trong thư mục.

Tôi đã tạo ra một quy trình công việc đơn giản để đọc tất cả các shapefile trong một thư mục và ghi chúng ra các tệp JPG riêng biệt.

quy trình làm việc


3

Ồ, tôi đã làm điều này ngày hôm qua với các quận ở Montana! Có quá muộn để trả lời không? Giả sử bạn đã sử dụng Split để tạo một shapefile cho mỗi đường điều tra dân số, tôi thấy rằng thật dễ dàng (lười biếng) để xử lý chúng trong Lớp nhóm. Giả sử đó là Lớp nhóm duy nhất trong tài liệu của bạn, đừng ngại mở cửa sổ ArcPy và nhập:

# 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

Xuất sang jpg là tương tự, nhưng jpg là hơi may mắn. Đây là trải nghiệm ArcPy đầu tiên của tôi, vì vậy tôi chắc chắn có nhiều cách thanh lịch hơn để làm điều này.


Bạn đã làm điều tương tự chính xác nhỉ? Vui mừng bạn đã tìm ra nó, cảm ơn vì đã trả lời
camdenl

1

Đây là tập lệnh Python tôi sử dụng. Nó có thể sửa đổi để thay đổi màu của đa giác, & 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

Thay vào đó, chỉ cần tải tệp shp vào ArcMaps và định cấu hình tệp theo cách bạn muốn. Sau đó sử dụng Alt + Print Screen hoặc Snipping Tool để có ảnh chụp màn hình. Sau đó, bạn sẽ có một jpg hoặc png trông giống hệt như cách tệp hình được hiển thị.


3
Tôi không nghĩ rằng giải quyết các thành phần chính của câu hỏi đó là làm thế nào để tự động hóa quá trình.
RyanKDalton-OffTheGridMaps
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.