Автоматизируйте создание SHP для JPG


14

Кто-нибудь знает способ пакетного преобразования шейп-файлов в JPEG или другой распространенный формат изображения?

изменить: я должен был уточнить, что я хотел бы применить стиль к каждому шейп-файлу, а затем экспортировать шейп-файл с этим стилем в изображение.

Например, у меня есть участки переписи в графстве, и я хочу, чтобы изображение каждого отдельного участка было выделено, в то время как другие участки имеют одинаковый цвет.


У вас есть какое-то конкретное программное обеспечение? Приложение, которое вы используете регулярно? Или ты просто каким-либо образом возможен?
RyanKDalton

Я использую Arc и Q довольно регулярно и знакомлюсь с arcpy, но на самом деле просто ищу какой-либо способ сделать это, даже другой сторонний программный пакет
camdenl

2
Итак, для пояснения, вы в основном просто хотите сгенерировать миниатюры (или больше) шейп-файла, без стилей, без цветов, без меток и т. Д. Не так ли?
RyanKDalton

Я начал думать об этом прошлой ночью и вижу, что мой первоначальный вопрос может вводить в заблуждение. Я хотел бы применить стиль, а затем экспортировать карту более 100 раз для каждого отдельного шейп-файла с примененным стилем.
Camdenl

Ответы:


14

Есть много бесплатных инструментов, таких как:

Но в Python ссылка называется Mapnik и Начало работы в Python.

  • Вы создаете карту (ширина и высота в пикселях, цвет фона и т. Д.)
  • Вы создаете стили, которые определяют, как данные отображаются
  • Вы добавляете источник данных (шейп-файл и т. Д.) И создаете из него слой.
  • Вы предоставляете карту
  • одни и те же параметры карты и стилей могут применяться к нескольким файлам (через файл 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/en/help/main/10.1/index.html#//…
scw

3

На этот похожий вопрос есть ответы, которые используют FME для преобразования DWG в JPG. Процесс будет аналогичным для преобразования шейп-файлов.

В этом примере есть примеры рабочих пространств, которые вы можете скачать.

FME хорошо подходит для обработки периодических процессов. Например, вы можете указать читателю папку, и она будет включать в себя все шейп-файлы в папке.

Я создал простой рабочий процесс, который считывает все шейп-файлы в папке и записывает их в отдельные файлы JPG.

рабочий процесс


3

О, я сделал это вчера с графствами в Монтане! Не поздно ли ответить? Предполагая, что вы уже использовали Split для создания шейп-файла для каждого участка переписи, я обнаружил, что обрабатывать их в групповом слое было легко (лениво). Предполагая, что это единственный групповой слой в вашем документе, не стесняйтесь открыть окно 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.