Скрипты для mapserver: mapinfo.py и mapdraw.py
Скрипты давно уже выложены, но приведу еще и здесь, для гарантии, что не потеряются. Реализация на питоне, поскольку именно в питоне лучшая поддержка модуля mapscript.
mapinfo.py
mapdraw.py
mapinfo.py
#!/usr/bin/python
# This program comes with ABSOLUTELY NO WARRANTY. This is free software, and
# you are welcome to redistribute it under certain conditions.
# See the GNU General Public Licence for details.
# Copyright (C) 2007, Alexey Pechnikov
import sys
import mapscript
def Usage():
print 'Usage: map.py [-extent ] -conf [-point ] [-width ] [-height ]'
sys.exit(1)
in_file = None
extent = None
point = None
width = None
height = None
args = sys.argv
arg = args.pop(0)
while len(args) > 0:
arg = args.pop(0)
if arg == '-extent':
if len(args) < 3:
Usage()
else:
minx = float(args.pop(0))
miny = float(args.pop(0))
maxx = float(args.pop(0))
maxy = float(args.pop(0))
extent = 1
elif arg == '-point':
if len(args) < 2:
Usage()
else:
point_x = float(args.pop(0))
point_y = float(args.pop(0))
point = 1
elif arg == '-width':
if len(args) < 1:
Usage()
else:
width_px = int(args.pop(0))
width = 1
elif arg == '-height':
if len(args) < 1:
Usage()
else:
height_px = int(args.pop(0))
height = 1
elif arg == '-conf':
if len(args) < 1:
Usage()
else:
in_file = args.pop(0)
else:
Usage()
if in_file is None:
Usage()
mf = mapscript.mapObj(in_file)
if not extent is None:
mf.extent.minx = minx
mf.extent.miny = miny
mf.extent.maxx = maxx
mf.extent.maxy = maxy
if not width is None:
mf.width = width_px
if not height is None:
mf.height = height_px
if not point is None:
point_geo = mapscript.pointObj();
point_geo.setXY (point_x, point_y);
mf.queryByPoint (point_geo, mapscript.MS_SINGLE, 5);
for i in range(mf.numlayers):
layer = mf.getLayer(i)
numResults = layer.getNumResults()
if numResults > 0:
layer.open()
results = layer.getResults()
for j in range(numResults):
result = results.getResult(j)
shape = layer.getFeature(result.shapeindex, result.tileindex)
numItems = layer.numitems
print 'array set ident_layer { map_name {',mf.name, '} layer_name {',layer.name,'} ', \
'layer_title {', layer.getMetaData('LYRNAME'), '} }'
print 'array set ident_fields { '
for k in range(numItems):
print '{',layer.getItem (k),'}'
print '{',shape.getValue(k),'}'
print '}'
layer.close()
mapdraw.py
#!/usr/bin/python
# This program comes with ABSOLUTELY NO WARRANTY. This is free software, and
# you are welcome to redistribute it under certain conditions.
# See the GNU General Public Licence for details.
# Copyright (C) 2007, Alexey Pechnikov
import sys
import mapscript
def Usage():
print 'Usage: map.py [-extent ] -conf -image [-point ] [-width ] [-height ]'
sys.exit(1)
in_file = None
out_file = None
extent = None
point = None
width = None
height = None
args = sys.argv
arg = args.pop(0)
while len(args) > 0:
arg = args.pop(0)
if arg == '-extent':
if len(args) < 3:
Usage()
else:
minx = float(args.pop(0))
miny = float(args.pop(0))
maxx = float(args.pop(0))
maxy = float(args.pop(0))
extent = 1
elif arg == '-point':
if len(args) < 2:
Usage()
else:
point_x = float(args.pop(0))
point_y = float(args.pop(0))
point = 1
elif arg == '-width':
if len(args) < 1:
Usage()
else:
width_px = int(args.pop(0))
width = 1
elif arg == '-height':
if len(args) < 1:
Usage()
else:
height_px = int(args.pop(0))
height = 1
elif arg == '-image':
if len(args) < 1:
Usage()
else:
out_file = args.pop(0)
elif arg == '-conf':
if len(args) < 1:
Usage()
else:
in_file = args.pop(0)
else:
Usage()
if in_file is None:
Usage()
if out_file is None:
Usage()
mf = mapscript.mapObj(in_file)
if not extent is None:
mf.extent.minx = minx
mf.extent.miny = miny
mf.extent.maxx = maxx
mf.extent.maxy = maxy
if not width is None:
mf.width = width_px
if not height is None:
mf.height = height_px
if not point is None:
point_geo = mapscript.pointObj();
point_geo.setXY (point_x, point_y);
mf.queryByPoint (point_geo, mapscript.MS_SINGLE, -1);
img = mf.drawQuery()
img.save(out_file)
Comments