有谁知道将shapefile批量转换为jpeg或其他常见图像格式的方法吗?
编辑:我应该澄清一下,我想对每个shapefile应用一种样式,然后将具有该样式的shapefile导出到图像。
例如,我在一个县中有人口普查区,我想突出显示每个单独区的图像,而其他区都具有相同的颜色。
有谁知道将shapefile批量转换为jpeg或其他常见图像格式的方法吗?
编辑:我应该澄清一下,我想对每个shapefile应用一种样式,然后将具有该样式的shapefile导出到图像。
例如,我在一个县中有人口普查区,我想突出显示每个单独区的图像,而其他区都具有相同的颜色。
Answers:
有许多免费工具,例如:
请参阅Mapniks地图中的示例
来自TM_WORLD_BORDERS-0.3.shp的简单渲染图像
在shapefile中选择一个国家(安哥拉):
Mapniks Maps的另一个例子
您可以将所有图层添加到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来为每个人口普查区域制作一个shapefile,我发现在组图层中处理它们很容易(懒惰)。假设这是文档中唯一的“图层组”,请不要打开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外观与形状文件完全相同的外观。