Автоматизація створення SHP в JPG


14

Хтось знає про спосіб пакетного перетворення формату файлів у jpegs чи іншого поширеного формату зображення?

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

Наприклад, у мене є урочища перепису населення в окрузі, і я хочу, щоб зображення кожного окремого урочища було виділено, тоді як інші урочища були однакового кольору.


Ви маєте на увазі якесь конкретне програмне забезпечення? Додаток, яким ви користуєтесь регулярно? Або вам просто можливий будь-який спосіб?
RyanKDalton

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

2
Тож для уточнення ви в основному просто шукаєте, щоб генерувати ескізи (або більші розміри) файлу форми, без стилізації, без кольорів, без міток тощо?
RyanKDalton

Я почав думати про це вчора ввечері, і бачу, що моє первісне питання може бути оманливим. Я хотів би застосувати стайлінг, а потім експортувати карту понад 100+ разів для кожного окремого файлу форм із застосованим стилем.
camdenl

Відповіді:


14

Існує багато безкоштовних інструментів, таких як:

Але в Python посиланням є Mapnik і Початок роботи в Python

  • Ви створюєте карту (ширина та висота у пікселях, колір тла тощо)
  • Ви створюєте стилі, які визначають спосіб відображення даних
  • Ви додаєте джерело даних (файл файлу тощо) і створюєте з нього шар.
  • Ви надаєте карту
  • однакові параметри карти та стилів можуть бути застосовані до декількох файлів (через XML-файл)

дивіться приклади на Картах Mapniks

Прості надані зображення з 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

О, я робив це вчора з повітами в штаті Монтана! Чи вже пізно відповідати? Припускаючи, що ви вже використовували Спліт для створення файлу форми для кожного переписного тракту, я виявив, що легко (ліниво) обробляти їх на груповому шарі. Припускаючи, що це єдиний груповий шар у вашому документі, не соромтесь відкривати вікно 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 і налаштуйте його, як вам подобається. Потім використовуйте Альт + Екран друку або Інструмент знімання, щоб отримати знімок екрана. Тоді у вас буде jpg або png, який виглядає точно так, як був наданий файл форми.


3
Я не думаю, що це стосується ключового компонента питання, який полягає в тому, як автоматизувати процес.
RyanKDalton
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.