誰もがシェープファイルをJPEGまたは別の一般的な画像形式にバッチ変換する方法を知っていますか?
編集:各シェープファイルにスタイリングを適用し、そのスタイリングを含むシェープファイルを画像にエクスポートすることを明確にする必要がありました。
たとえば、郡に国勢調査地区があり、個々の地区の画像を強調表示し、他の地区はすべて同じ色にする必要があります。
誰もがシェープファイルをJPEGまたは別の一般的な画像形式にバッチ変換する方法を知っていますか?
編集:各シェープファイルにスタイリングを適用し、そのスタイリングを含むシェープファイルを画像にエクスポートすることを明確にする必要がありました。
たとえば、郡に国勢調査地区があり、個々の地区の画像を強調表示し、他の地区はすべて同じ色にする必要があります。
回答:
次のような多くの無料ツールがあります。
ただし、Pythonの場合、参照はMapnikおよびPython入門です
Mapniks Mapsの例を参照してください
TM_WORLD_BORDERS-0.3.shpからの単純なレンダリング画像
シェイプファイル内の国(アンゴラ)の選択:
すべてのレイヤーをmxdに追加し、それらをループして実行することができます
arcpy.mapping.ExportToJPEG(map_document, out_jpeg, {data_frame}, {df_export_width}, {df_export_height}, {resolution}, {world_file}, {color_mode}, {jpeg_quality}, {progressive})
マップ内の各レイヤー。
ああ、昨日これをモンタナ州の郡でやった!答えるには遅すぎますか?すでに国勢調査地区ごとにシェープファイルを作成するためにSplitを使用していると仮定すると、グループレイヤーでそれらを処理するのは簡単(怠laz)であることがわかりました。それがドキュメント内の唯一のグループレイヤーであると仮定して、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へのエクスポートも似ていますが、jpgはちょっと不愉快です。これは私の最初のArcPyの経験であったため、これを行うためのよりエレガントな方法があると確信しています。
これが私が使用している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)
代わりに、shpファイルをArcMapsに読み込み、好きなように構成します。次に、Alt + Print ScreenまたはSnipping Toolを使用してスクリーンショットを取得します。次に、シェイプファイルがレンダリングされた方法とまったく同じように見えるjpgまたはpngがあります。