网站首页 > 开源技术 正文
不得不说很佩服老外,为了保护自己的隐私,地图服务代码也开源,程序员的工匠精神让人敬佩!
这款开源地图名叫 Qwant Maps ,是一款来自法国的,不追踪用户的网络搜索引擎 Qwant 最近推出的一款地图服务,基于 OpenStreetMap 地图数据,支持电脑与手机访问。
通过地图可以收集太多的数据了,住在哪、在哪工作、去过哪、计划要去哪等等,一切和地图有关的数据组成了关于你的大数据。
来自法国的 Qwant 网络搜索引擎本身就在强调保护隐私,而这个地图服务,也是主打保护隐私以及开源,你可以在 GitHub 为 Qwant Maps 查看或者贡献代码,
Qwant Maps URL
Qwant Maps 提供可与好友共享的链接,以帮助他们切换到“SwitchToQwant”和“SwitchToOSM”。例如,您可以:
- 使用以下格式在地图上搜索特定位置:
https://www.qwant.com/maps/#map=<zoom level>/<latitude>/<longitude>
https://www.qwant.com/maps/#map=12.08/48.8642287/2.3391427
- 使用以下路径在地图上搜索特定位置:
https://www.qwant.com/maps/place/<id>
https://www.qwant.com/maps/place/osm:node:532031656@LExpress_de_Lyon
路由请求
这个端点指向一个路由表单,可以预先填充一些字段。例如:
https://www.qwant.com/maps/routes/?origin=latlon:48.8459543:2.3714015@LExpress_de_Lyon&destination=latlon:48.8702200:2.2786330&arrival_datetime=20160613T135400&mode[]=walking#map=18.00/48.8459543/2.3714015
与此端点对应的参数如下:
origin:用作起点的某个位置的id
destination:用作终点的某个位置的id
mode:如果要在路由窗体中预先选择路由模式。步行、骑自行车、开车、公共交通工具
架构
Qwant Maps 可以看作是4个分离的组件:
- 一个地图的“地砖”服务器,
- 搜索引擎(地理编码器),
- 一个API来详细描述兴趣点和地点,
- 前端。
地图的“地砖”服务器
提供显示地图的一部分所需的所有信息。
Qwant Maps 只提供矢量平铺,因此平铺服务器不提供图像(就像使用光栅平铺一样),而是提供原始数据。前端Erdapfel接收数据并将其呈现为用户可浏览的地图。
tile服务器是两个伟大的开源项目的组合:
- kartotherian, Wikimedia堆栈有一个高度可用的tile服务器。它本身基于许多mapbox组件,
- OpenMapTiles, 为一个非常棒而灵活的“地砖”模式。
OpenMapTiles使Qwant映射有一个易于定义/扩展的矢量平铺模式成为可能。
所有数据(见下文)主要使用impom导入PostgreSQL数据库。然后,使用kartotherian的tilerator生成世界上所有的矢量块,并将其存储在Cassandra中。这使得Qwant地图能够以一种快速且可伸缩的方式来服务。
地理编码器
用于Qwant地图的地理搜索引擎(也称为geocoder)是Mimirsbrunn。
Mimirsbrunn是一个基于Kisio Digital开发的Elasticsearch和rust组件的地理编码器。
位置API
为了获得更多关于地点和兴趣点 (POIs), 的详细信息,Qwant地图使用了一个附加的 API: Idunn, 它将地理编码器中的信息与外部API相结合,以格式化要在前端显示的详细 POIs 数据.
前端
Qwant地图的前端Erdapfel是一个Javascript单页应用程序,允许浏览地图、搜索位置、查看地图上的位置等。您还可以使用Masq保存您最喜欢的位置。
前端使用Mapbox GL渲染地图,使用tile服务器中的分幅和Qwant Maps自定义地图样式。
“地砖”数据
tile服务器的主要数据源是令人敬畏的OpenStreetMap(OSM)数据,而还有来自其他地方的数据,如natural earth, better water polygon等。
所有tile的数据导入过程都是在python脚本中定义的。
这个脚本导入PostgreSQL数据库中的所有数据,并运行许多后处理SQL函数(这些函数被定义为PostgreSQL触发器),因此它们也可以在OSM更新上运行。
当数据加载到PostgreSQL中时,我们使用tilerator生成缩放级别为0到14的所有分片,并将它们存储在Cassandra中。这样,当向tiles API kartotherian请求向量块时,不需要进行任何计算,只需在高度可用的Cassandra上按id进行简单的查询,就可以得到存储在其中的原始protobuf块。
地理编码器数据
Mimirsbrunn中的数据导入过程在python脚本中定义。
首先,OSM数据被提供给Cosmogony,Cosmogony输出一个包含世界所有行政区域的大JSON文件。此文件随后由cosmogony2mimir导入Mimir。
然后我们使用地址导入器导入地址。它下载地址的数据集(主要来自OpenAddresses和OpenStreetMap),对它们进行重复数据消除,然后使用openaddresses2mimir将它们导入到我们的地理编码器中。
然后使用osm2mimir从OSM pbf文件导入街道。
最后使用Fafnir从PostgreSQL数据库中提取POI(因此我们有一个统一的POI处理)。
位置API数据
Idunn 不需要自己的数据导入过程,但API依赖于:
- 地理编码器的数据,
- Wikipedia data, 从WikipediaAPI或自定义Elasticsearch数据库中获取。
OSM 升级
世界在不断变化,OpenStreetMap数据每天都在变得越来越好,因此我们需要定期更新所有组件中的数据。世界数据的导入是一个相当长的过程,所以在初始导入之后,我们每天都有一个cron任务来读取OSM差异更新并在PostgreSQL数据库中应用diff。
一旦我们在PostgreSQL中获得了最新数据,我们就可以再次导入geocoder POIs数据并重新生成受更改影响的分片。
我们每月更新余下的地理编码器数据(行政区域、街道和地址)。
整体架构
注意:为了提供Qwant地图服务,Qwant在自己的服务器上托管tile服务器、geocoder和idunnapi的实例。
请注意,Qwant实例是内部组件,除了作为Qwant映射的一部分之外,并不意味着直接使用。
接下来介绍如何运行
“地砖”服务器
要运行tileserver,最简单的方法是使用Docker。
项目kartotherian_docker提供了一个docker-compose与所有需要。
这个存储库很大程度上依赖于包含真正的Qwant地图业务逻辑的kartotherian配置:
- imposm映射/openmappiles配置(从Qwant的openmappiles fork和openmappiles工具生成,参见自述文件)
- 数据导入管道脚本
- 更新脚本
- kartotherian/tilerator 通用配置
地理编码器
存储库docker_mimir包含一个docker compose,可以轻松生成所需的docker容器并导入其中所需的数据。
位置API
Idunn的使用非常简单,因为它是一个简单的python API(使用apistar)。
自述文件详细说明了运行它的方法。
前端
Erdapfel 是一个简单的节点应用程序,但您也可以使用Docker来运行它。
猜你喜欢
- 2025-01-02 每日GitHub探索|省时提效神器:一键将网页变桌面应用
- 2025-01-02 大数据应用案例:英国ViziCities专案用3D即时地图
- 2025-01-02 基于 Vue3.0+Echarts 可视化大屏数据分析系统
- 2025-01-02 俄军上周占领了乌克兰近200平方公里土地 创下今年最快单周推进速度
- 2025-01-02 ECCV'24开源 | 碾压MapTRv2!MapQR:在线高精地图构建SOTA!
- 2025-01-02 全球三维地形+建筑模型抓取插件BlenderGIS-master
- 2025-01-02 无广告、无追踪、不收集用户信息的免费离线地图
- 2024-08-05 手把手教你做GIS地图——第一节搭建GIS地图服务
- 2024-08-05 Vue3 + TS + Leafletjs 打造企业级原神大地图【完结】
- 2024-08-05 Vue3 + TS + Leafletjs 打造企业级原神大地图FX
你 发表评论:
欢迎- 05-16东契奇:DFS训练时喷了我很多垃圾话 我不懂他为什么比赛不这么干
- 05-16这两球很伤!詹姆斯空篮拉杆不中 DFS接里夫斯传球空接也没放进
- 05-16湖人自媒体调查:89%球迷希望DFS回归79%希望詹姆斯回归
- 05-16Shams:湖人得到全能球员DFS 节省了1500万奢侈税&薪金空间更灵活
- 05-16G5湖人胜率更高!詹姆斯不满判罚,DFS谈5人打满下半场:这很艰难
- 05-16DFS:当东契奇进入状态 所有防守者在他面前都像个圆锥桶
- 05-16上一场9中6!DFS:不能让纳兹-里德这样的球员那么轻松地投三分
- 05-16WIDER FACE评测结果出炉:滴滴人脸检测DFS算法获世界第一
- 最近发表
-
- 东契奇:DFS训练时喷了我很多垃圾话 我不懂他为什么比赛不这么干
- 这两球很伤!詹姆斯空篮拉杆不中 DFS接里夫斯传球空接也没放进
- 湖人自媒体调查:89%球迷希望DFS回归79%希望詹姆斯回归
- Shams:湖人得到全能球员DFS 节省了1500万奢侈税&薪金空间更灵活
- G5湖人胜率更高!詹姆斯不满判罚,DFS谈5人打满下半场:这很艰难
- DFS:当东契奇进入状态 所有防守者在他面前都像个圆锥桶
- 上一场9中6!DFS:不能让纳兹-里德这样的球员那么轻松地投三分
- WIDER FACE评测结果出炉:滴滴人脸检测DFS算法获世界第一
- 湖人自媒体调查:89%球迷希望DFS回归 79%希望詹姆斯回归
- 一觉醒来湖人苦盼的纯3D终于到位 DFS能带给紫金军多少帮助
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)