一个工具,可以更容易地自动化osm编辑而不会引起问题。
osm-bot-abstraction-layer的Python项目详细描述
osm bot抽象层是一个python包,使osm编辑更容易自动化而不会引起问题。
此项目包含OSM机器人之间共享的代码,以避免多次编写相同的功能。
例如,自动编辑可以跨大区域更改许多对象。在这种情况下,最好将其拆分为多个编辑,以避免国家大小的边界框。此逻辑作为此项目中包含的工具之一可用。
安装
pip install osm-bot-abstraction-layer
贡献
与任何项目的第一次接触都是至关重要的,因此请在本自述文件中报告所有问题。如果你需要这样的工具,但决定不使用它的某些固定原因-请打开一个问题!
关于如何改进文档的报告,bug报告,pull请求都是受欢迎的!
从最小的排版到大的新特性,pull请求都是受欢迎的——不过,在发生巨大变化的情况下,从打开一个问题开始总是一个好主意。
目的
此工具适用于同时使用此工具的人
- 程序员
- 有经验的OSM编辑
- 遵循OSM规则
任何运行自动编辑的人都要对出现的所有问题负责,包括在像这样的外部库中导致错误的问题。
我消除了我注意到的所有错误,毕竟我自己在使用这段代码,但有些仍然潜伏着。欢迎发布报告和拉取请求!
有关OSM规则的提示
请注意,未经社区协商或同意,不得进行自动化。
有关详细信息,请参见Import/Guidelines和Automated Edits/Code of Conduct。
注意,违反上述规则的自动编辑通常会被撤消。未经讨论的自动编辑可以由任何人恢复,无需任何咨询。
是的,这意味着一些可以节省时间和完全合理的自动化编辑被拒绝,不应该被编辑。它仍然优于无限制的自动编辑。
配置
创建包含以下内容的secret.json
文件:
{
"bot_account": {
"username": "Your OSM username for a bot account",
"password": "?6ofGZm=qr*skR?C,a,1E#k9g8:kE7"
},
"human_account": {
"username": "Your OSM username for a human operated account",
"password": "t?\q~,?m;2l?Dd$cKc`?n9PeSDBjj/"
}
}
用法示例
下面是一个基于真正的自动编辑的示例,在guidelines for the automatic edits之后。
- 询问了相关社区。在本例中,它影响了波兰映射器,因此线程出现了in Polish section of forum.openstreetmap.org。请注意,不同的社区可以使用不同的论坛或邮件列表作为他们的沟通渠道。
- 另外Page documenting the automated edit was created at OSM wiki。
- OSM社区接受了编辑。
- 以下代码是使用
run_simple_retagging_task
组件创建的。运行此脚本将导致:
- 使用overpass turbo下载osm数据,如
objects_to_consider_query
参数中所指定 - 遍历所有和对象,忽略函数作为参数传递的对象
is_element_editable_checker_function
返回false - 对于所有其他
edit_element_function
应用 - 更改将自动拆分为多个更改集(如果需要),以避免在一次编辑中出现过大的边框或过多的对象
changeset_comment
、discussion_url
、osm_wiki_documentation_page
参数值用于应用正确的变更集标记
from osm_bot_abstraction_layer.generic_bot_retagging import run_simple_retagging_task
def is_element_editable(tag_dictionary, identifier):
if tag_dictionary.get('name') == ("bankomat"):
return True
if tag_dictionary.get('name') == ("Bankomat"):
return True
return False
def edit_element(tags):
tags.pop('name', None)
return tags
def main():
run_simple_retagging_task(
max_count_of_elements_in_one_changeset=500,
objects_to_consider_query="""
[out:xml][timeout:25000];
area[name="Polska"]->.a;
(
nwr[amenity='atm'][name='Bankomat'](area.a);
nwr[amenity='atm'][name='bankomat'](area.a);
);
out body;
>;
out skel qt;
""",
objects_to_consider_query_storage_file='/media/mateusz/5bfa9dfc-ed86-4d19-ac36-78df1060707c/OSM-cache/overpass/tags_for_retagging_descriptive_atm.osm',
is_in_manual_mode=False,
changeset_comment='usuwanie nazw opisowych z bankomatów (name="bankomat" i name="Bankomat")',
discussion_url='https://forum.openstreetmap.org/viewtopic.php?id=66038',
osm_wiki_documentation_page='https://wiki.openstreetmap.org/wiki/Mechanical_Edits/Mateusz_Konieczny_-_bot_account/fix_descriptive_name_on_ATMs_in_Poland',
is_element_editable_checker_function=is_element_editable,
edit_element_function=edit_element,
)
main()
其他文档
文件目前大多丢失-请打开一个问题,如果它对你有用(拉请求也欢迎)。
历史和词源
项目的一部分建立在osmapi之上,并提供了额外的抽象层。这部分是初始的,是项目名称的来源。
项目地点
这个项目位于https://github.com/matkoniecz/osm_bot_abstraction_layer