占位符-SQLite支持的离线粗略地理编码器

2020-08-22 01:03:36

Pelias是一个由开放数据提供支持的全球地点搜索引擎。它将地址和地名转换为地理坐标,并将地理坐标转换为地点和地址。使用Pelias,您可以将用户的位置搜索转换为可操作的地理数据,并将您的地理数据转换为真实位置。我们认为开放数据、开放源码和开放战略在堆栈的任何部分都胜过专有解决方案,我们希望确保我们提供的服务符合这一愿景。我们相信,只有当社区能够融入真正有代表性的本地知识时,开放的地理编码器才能长期改进。此存储库提供运行您自己的粗略地理编码器所需的所有代码和地理数据。

请阅读我们的带有Docker的(几乎)一行粗略地理编码器的博客文章,以获得快速入门指南,并查看我们的演示。

该服务旨在作为Pelias Gecoder的一部分运行,但是可以很容易地独立运行,因为它没有外部依赖。

该引擎接受非结构化输入文本,如中性湾北悉尼、新南威尔士州,并尝试推断用户所指的地理区域。

人类(熟悉澳大利亚地理)能够快速扫描文本并确定有3个不同的象征组:中性海湾、北悉尼和新南威尔士州。

该引擎使用与我们大脑类似的技术,扫描文本,在学习术语的字典中循环,然后尝试建立逻辑符号组。

一旦建立了令牌组,就使用约简算法来确保令牌组在地理环境中是逻辑的。我们不想退还纽约市这样的条款,所以我们只需要在名为“法兰西”的地方退还名为“NYC&39;”的东西就行了。(译者注:这句话的意思是:“我们不想退还像”NYC France“这样的条款,所以我们只需要在”法兰西“这样的地方退还名为”NYC&39;“的东西。)。

引擎从最右边的组开始,向左工作,确保令牌组表示包含在之前的令牌组中的地理实体。重复此过程,直到用完所有组,或者返回0个结果。

然后返回最佳估计,或者作为一组表示这些地区的ID的整数,或者作为还包含人口计数等附加信息的JSON结构。

数据来源于WhosonFirst项目,该项目还包括地名的不同语言翻译。

占位符支持搜索和检索不同语言的令牌,还支持同义词和缩写。

该引擎包括基本的语言检测算法,该算法试图检测从右到左的语言以及以从大到小的格式书写其地址的语言。然后,它将反转这些令牌,以将它们重新排序为从次要到主要的排序。

$npm run cli--San fran&>[email protected] cli&>node cmd/cli.js";San";;Fran";San francorts:3MS-85922583 Locality San Francisco。

占位符服务将绑定到的网络地址。默认为当前Node.js的默认值,即当前侦听0.0.0.0(所有接口)。有关详细信息,请参阅Node.js Net文档。

服务器现在应该正在运行,您应该能够访问http API:

/parser/search端点接受?lang=xxx属性,该属性可用于改变返回数据的语言。

/parser/search返回的文档包含名为languageDefaulted的布尔属性,该属性指示服务是否能够找到您请求的语言的翻译(False)或是否返回默认语言(True)。

Parser/findbyid端点还接受?lang=xxx属性,如果翻译存在,该属性将返回选定的lang,否则返回所有翻译。

该演示还可以通过在URL锚中提供语言代码来提供不同语言的响应:

/parser/search端点接受?placeType=xxx参数,该参数可用于控制返回的记录的placeType。

该API没有提供任何性能优势,它只是一个根据白名单进行过滤的便捷API。

您可以使用逗号分隔多个Placetype,例如?placeType=xxx,yyy,这些将作为OR条件进行匹配。例如:(xxx或yyy)。

#All Matching Results Search?Text=卢森堡#Only Return Matching Country recordssearch?text=luxemburg&;placetype=country#Return Matching Country or Region recordssearch?text=luxemburg&;placetype=country,Region。

Parser/search端点接受一个?mode=live参数对,该参数对可用于启用自动完成风格的API。

在此模式下,每个输入文本的最终令牌被视为不完整,这意味着用户可能只键入了令牌的一部分。

默认匹配策略使用谱系表来确保令牌对表示有效的子代-父代关系。这确保了像法国伦敦这样的查询不匹配,因为谱系表中没有将这两个地方链接在一起的条目。

在某些情况下,更可取的做法是采用一种匹配策略,即考虑具有匹配名称的地理上邻近的地方,即使这种关系不明确地存在于谱系表中。

例如,法国巴塞尔将返回瑞士巴塞尔。这对于处理用户输入错误以及谱系表中的错误和遗漏非常有用。

在上面的示例中,法国巴塞尔的匹配只是因为巴塞尔的边界框与法国的边界框重叠,并且不存在法国巴塞尔的其他有效条目。

什么是附近的定义是可配置的,次要项(左标记)的BBox被扩展一个阈值(该阈值被添加或减去到每个BBox顶点)。

默认情况下,阈值设置为0.2(度),可以通过环境变量RTREE_THRESHOLD指定0到1之间的任何浮点值。

小于0的设置将完全禁用rtree功能。禁用rtree将导致附近的查询,如法国巴塞尔返回法国,而不是瑞士巴塞尔。

占位符&>伦敦on-101735809 Locality伦敦占位符&>搜索伦敦on-101735809 Locality伦敦占位符&>标记化悉尼新南威尔士[[';悉尼;,&39;新南威尔士]]占位符&>Token Kelburn[85772991]占位符&>id 85772991{名称:';凯尔本&39;,位置类型:';邻里&。,血统:{大陆id:102191583,国家id:85633345,县id:102079339,地点id:101915529,邻里id:85772991,地区id:85687233},姓名:{eng:[';kelburn';]}}。

虽然占位符可以作为独立的应用程序使用,也可以与其他地理软件/搜索引擎一起使用,但它是为Pelias地理编码器设计的。

要将占位符服务连接到Pelias API,请使用占位符在其上运行的端口配置Pelias配置文件。

Whosonfirst项目是作为Geojson文件分发的,因此为了加快开发速度,我们首先将相关数据提取到一个文件中:data/wof.tract。

以下命令将迭代WOF_DIR路径下的所有Geojson文件,将相关属性提取到文件data/wof.tract中。

此过程可能需要30-60分钟来运行并消耗约350MB的磁盘空间,您只需运行此命令一次,或者在更新本地的Whosonfirst-data文件时运行此命令。

构建最新的Docker映像,并从我们的持续集成渠道自动推送到Docker Hub