3. 漂亮的印刷

mappyfile可用于“漂亮打印”或格式化映射文件。这可用于标准化格式不一致的映射文件。例如:

map
/**
Some comments
*/
            EXTENT -180 -90 180 90    
    NAME "MyMap"
    WEB
metadata
'wms_enable_request'  '*'
'wms_feature_info_mime_type' 'text/html' # this is required to return the content-type for GetFeatureInfo requests       
END
    END

PROJECTION
"init=epsg:4326"
END
 # START OF THE LAYER DEFINITION
    LAYER
    PROCESSING 'BANDS=1'
        PROCESSING 'CONTOUR_ITEM=elevation'
    PROCESSING 'CONTOUR_INTERVAL=20'
     EXTENT -180 -90 180 90 # set this here as it is not stored in the image
     NAME "rgb"
        TYPE RASTER
     DATA '../data/raster/bluemarble.tif' 
     TEMPLATE 'raster.template.html'    
    END    
END

可以使用下面的代码将mappyfile转换为格式良好的版本:

import mappyfile
mf = mappyfile.load("./docs/examples/before.map")
mappyfile.write(mf, "./docs/examples/after.map")

结果:

MAP
    EXTENT -180 -90 180 90
    NAME 'MyMap'
    WEB
        METADATA
            'wms_enable_request' '*'
            'wms_feature_info_mime_type' 'text/html'
        END
    END
    PROJECTION
        "init=epsg:4326"
    END
    LAYER
        PROCESSING 'BANDS=1'
        PROCESSING 'CONTOUR_ITEM=elevation'
        PROCESSING 'CONTOUR_INTERVAL=20'
        EXTENT -180 -90 180 90
        NAME 'rgb'
        TYPE RASTER
        DATA '../data/raster/bluemarble.tif'
        TEMPLATE 'raster.template.html'
    END
END

可以使用高级映射文件API应用映射文件的格式-请参见 mapfile-reader-writer-api 或者使用命令行 格式 .

请尝试http://mappyfile.geographika.net/上的在线交互式演示,以测试mappyfile中的各种格式选项。

3.1. 选项

映射文件输出的格式可以通过以下几个选项进行配置:

  • spacer -用于在映射文件中缩进结构的字符。通常是空格或制表符( \\t

  • indent -可用于设置 spacer 在映射文件中缩进结构的字符

  • quote -要在映射文件中使用的引号字符(双引号或单引号)

  • newlinechar -用于在映射文件中插入换行符的字符

  • end_comment -在每个结束END语句处添加一个带有块类型的注释,例如 END # MAP

警告

标准化引号时,请注意,在字符串值中找不到为格式化选择的引号。例如大 DATA SQL块可能包含单引号,这将创建一个无效的映射文件。

3.2. 实例

下面的示例从一个字符串加载一个映射文件,然后将其作为字符串转储。单个选项卡用于缩进映射文件的块:

s = '''MAP NAME "TEST" END'''
d = mappyfile.loads(s)
output = mappyfile.dumps(d, indent=1, spacer="\t")
print(output)

此示例将块类型添加到其结束处 END 标签:

s=''map name“test”layer name“layer1”end end''d=mappyfile.loads(s)output=mappyfile.dumps(d,end_comment=true)print(输出)

MAP
    NAME "TEST"
    LAYER
        NAME "Layer1"
    END # LAYER
END # MAP

此示例用单引号括住所有属性,并将映射文件直接写入磁盘:

import tempfile
s = '''MAP NAME "TEST" LAYER NAME "Layer1" END END'''
d = mappyfile.loads(s)
output_file = os.path.join(tempfile.mkdtemp(), 'test_mapfile.map')
mappyfile.save(d, output_file)

此示例使用 dump 函数将映射文件写入打开的文件对象:

s = """MAP NAME "TEST" END"""
d = mappyfile.loads(s)
with tempfile.NamedTemporaryFile(mode="w+", delete=False) as fp:
    mappyfile.dump(d, fp)