9. mappyfile API

此页列出顶级 mappyfile API。

9.1. mapfile 读取器和编写器函数

这些函数用于打开 Mapfile 并将其写入文件和字符串。

mappyfile.open(fn, expand_includes=True, include_comments=False, include_position=False, **kwargs)

将提供的文件名中的mapfile加载到python字典中。

参数:
  • fn (string) -- Mapfile 或部分 Mapfile 文件的路径
  • expand_includes (boolean) -- 载入任何 INCLUDE 映射文件中的文件
  • include_comments (boolean) -- 从映射文件中包含或放弃注释字符串- 实验
  • include_position (boolean) -- 在输出中包括mapfile标记的位置
返回:

以mappyfile格式表示映射文件的python字典

返回类型:

dict

例子

要从文件名打开映射文件并将其作为字典对象返回,请执行以下操作:

d = mappyfile.open('mymap.map')

笔记

也可以打开部分映射文件,例如包含 LAYER 对象。

mappyfile.load(fp, expand_includes=True, include_position=False, include_comments=False, **kwargs)

从打开的文件或类似文件的对象加载映射文件。

参数:
  • fp (file) -- 类似文件的对象
  • expand_includes (boolean) -- 载入任何 INCLUDE 映射文件中的文件
  • include_comments (boolean) -- 从映射文件中包含或放弃注释字符串- 实验
  • include_position (boolean) -- 在输出中包括mapfile标记的位置
返回:

以mappyfile格式表示映射文件的python字典

返回类型:

dict

例子

要从文件中打开映射文件并将其作为字典对象返回,请执行以下操作:

with open('mymap.map') as fp:
    d = mappyfile.load(fp)

笔记

也可以打开部分映射文件,例如包含 LAYER 对象。

mappyfile.loads(s, expand_includes=True, include_position=False, include_comments=False, **kwargs)

从字符串加载映射文件

参数:
  • s (string) -- 映射文件,或部分映射文件,文本
  • expand_includes (boolean) -- 载入任何 INCLUDE 映射文件中的文件
  • include_comments (boolean) -- 从映射文件中包含或放弃注释字符串- 实验
  • include_position (boolean) -- 在输出中包括mapfile标记的位置
返回:

以mappyfile格式表示映射文件的python字典

返回类型:

dict

例子

要从字符串中打开映射文件并将其作为字典对象返回,请执行以下操作:

s = '''MAP NAME "TEST" END'''

d = mappyfile.loads(s)
assert d["name"] == "TEST"
mappyfile.dump(d, fp, indent=4, spacer=' ', quote='"', newlinechar='\n', end_comment=False)

将d(mapfile字典)作为格式化流写入fp

参数:
  • d (dict) -- 基于mappyfile模式的python字典
  • fp (file) -- 类似文件的对象
  • indent (int) -- 在映射文件中缩进结构的 spacer 字符数
  • spacer (string) -- 用于在映射文件中缩进结构的字符。通常是空格或制表符( \t
  • quote (string) -- 要在映射文件中使用的引号字符(双引号或单引号)
  • newlinechar (string) -- 用于在映射文件中插入换行符的字符
  • end_comment (bool) -- 在每个结束结束语句处添加一个带有块类型的注释,例如end map

例子

要从字符串中打开映射文件,然后将其转储回打开的文件,使用2个空格作为缩进,使用单引号作为属性:

s = '''MAP NAME "TEST" END'''

d = mappyfile.loads(s)
with open(fn, "w") as f:
    mappyfile.dump(d, f, indent=2, quote="'")
mappyfile.dumps(d, indent=4, spacer=' ', quote='"', newlinechar='\n', end_comment=False, **kwargs)

以字符串形式输出映射文件字典

参数:
  • d (dict) -- 基于mappyfile模式的python字典
  • indent (int) -- 在映射文件中缩进结构的 spacer 字符数
  • spacer (string) -- 用于在映射文件中缩进结构的字符。通常是空格或制表符( \t
  • quote (string) -- 要在映射文件中使用的引号字符(双引号或单引号)
  • newlinechar (string) -- 用于在映射文件中插入换行符的字符
  • end_comment (bool) -- 在每个结束结束语句处添加一个带有块类型的注释,例如end map
返回:

作为字符串的映射文件

返回类型:

string

例子

要从字符串中打开映射文件,然后使用制表符将其作为字符串打印出来,请执行以下操作:

s = '''MAP NAME "TEST" END'''

d = mappyfile.loads(s)
print(mappyfile.dumps(d, indent=1, spacer="\t"))
mappyfile.save(d, output_file, indent=4, spacer=' ', quote='"', newlinechar='\n', end_comment=False, **kwargs)

将字典写入磁盘上的输出映射文件

参数:
  • d (dict) -- 基于mappyfile模式的python字典
  • output_file (string) -- 输出文件名
  • indent (int) -- 在映射文件中缩进结构的 spacer 字符数
  • spacer (string) -- 用于在映射文件中缩进结构的字符。通常是空格或制表符( \t
  • quote (string) -- 要在映射文件中使用的引号字符(双引号或单引号)
  • newlinechar (string) -- 用于在映射文件中插入换行符的字符
  • end_comment (bool) -- 在每个结束结束语句处添加一个带有块类型的注释,例如end map
返回:

传递给函数的输出文件

返回类型:

string

例子

要从字符串中打开映射文件,然后将其保存到文件中,请执行以下操作:

s = '''MAP NAME "TEST" END'''

d = mappyfile.loads(s)
fn = "C:/Data/mymap.map"
mappyfile.save(d, fn)

9.2. 字典帮助程序函数

9.2.1. 总结

这些函数有助于使用mapfile字典结构,例如按键查找对象。

mappyfile.find(lst, key, value)

使用键和值在听写列表中查找项

参数:
  • list (list) -- 复合字典列表,例如 layersclasses
  • key (value) -- 用于搜索列表中每个词典的关键字名称
  • key -- 要搜索的值
返回:

具有与值匹配的键的第一个复合字典对象

返回类型:

dict

例子

在层列表中 NAME 找到 LAYER 设置为 Layer2 ::

s = '''
MAP
    LAYER
        NAME "Layer1"
        TYPE POLYGON
    END
    LAYER
        NAME "Layer2"
        TYPE POLYGON
        CLASS
            NAME "Class1"
            COLOR 0 0 -8
        END
    END
END
'''

d = mappyfile.loads(s)
cmp = mappyfile.find(d["layers"], "name", "Layer2")
assert cmp["name"] == "Layer2"
mappyfile.findall(lst, key, value)

在lst中查找键与值匹配的所有项。例如,全部查找 LAYER A中的S MAP 在哪里? GROUP 等于 VALUE

参数:
  • list (list) -- 复合字典列表,例如 layersclasses
  • key (value) -- 用于搜索列表中每个词典的关键字名称
  • key -- 要搜索的值
返回:

包含匹配的复合字典的python列表

返回类型:

list

例子

找到所有 LAYERGROUP 设置为 test ::

s = '''
MAP
    LAYER
        NAME "Layer1"
        TYPE POLYGON
        GROUP "test"
    END
    LAYER
        NAME "Layer2"
        TYPE POLYGON
        GROUP "test1"
    END
    LAYER
        NAME "Layer3"
        TYPE POLYGON
        GROUP "test2"
    END
    LAYER
        NAME "Layer4"
        TYPE POLYGON
        GROUP "test"
    END
END
'''

d = mappyfile.loads(s)
layers = mappyfile.findall(d["layers"], "group", "test")
assert len(layers) == 2
mappyfile.findunique(lst, key)

查找lst中项目的所有唯一键值。

参数:
  • lst (list) -- 复合字典列表,例如 layersclasses
  • key (string) -- 用于搜索列表中每个词典的关键字名称
返回:

列表中唯一键的排序python列表

返回类型:

list

例子

LAYER 中找到 CLASS 的所有 GROUP 值 ::

s = '''
LAYER
    CLASS
        GROUP "group1"
        NAME "Class1"
        COLOR 0 0 0
    END
    CLASS
        GROUP "group2"
        NAME "Class2"
        COLOR 0 0 0
    END
    CLASS
        GROUP "group1"
        NAME "Class3"
        COLOR 0 0 0
    END
END
'''

d = mappyfile.loads(s)
groups = mappyfile.findunique(d["classes"], "group")
assert groups == ["group1", "group2"]
mappyfile.findkey(d, *keys)

根据键列表和/或列表索引从字典中获取值。

参数:
  • d (dict) -- Python词典
  • keys (list) -- 关键字名或列表索引的列表
返回:

由键指定的路径处的复合字典对象

返回类型:

dict

例子

要返回映射文件中第一层的第一个类的值,请执行以下操作:

s = '''
MAP
    LAYER
        NAME "Layer1"
        TYPE POLYGON
        CLASS
            NAME "Class1"
            COLOR 0 0 255
        END
    END
END
'''

d = mappyfile.loads(s)

pth = ["layers", 0, "classes", 0]
cls1 = mappyfile.findkey(d, *pth)
assert cls1["name"] == "Class1"
mappyfile.update(d1, d2)

使用d2中的属性更新dict d1

注解

允许删除具有特殊 __delete__ 任何听写列表的键更新时可以添加新项目

参数:
  • d1 (dict) -- Python词典
  • d2 (dict) -- 一个python字典,用于更新d1中具有相同名称的任何键
返回:

更新后的词典

返回类型:

dict

9.3. 映射文件验证函数

9.3.1. 总结

这些函数用于验证映射文件,并确保匹配映射文件模式。参见 验证 更多详情。

mappyfile.validate(d)

使用映射文件架构验证映射文件字典

参数:d (dict) -- 基于mappyfile模式的python字典