大家好! 我们正在开发
Okdesk ,这是一个基于云的服务台,为b2b客户提供售后服务。 我们产品的用户包括收银机的中央供暖和自动化中心,贸易自动化的集成商,零售网络运营服务,为商业房地产服务的公司以及许多其他服务公司。 在这类公司中,服务的具体内容是“现场”的大量工作:设备工作,基础设施维护,定期维护工作-所有这些都需要专业人员亲自到场。 这种情况对服务台解决方案提出了许多其他要求,即:工程师的移动工作站以及在地图上可视化计划中的工作并显示最近的员工。 适用于工程师的Okdesk移动应用程序(适用于iOS和Android)很久以前就出现了,我们将继续积极开发它。 但是前几天我们在地图上显示了应用程序和最近的员工。

但是本文不会重点介绍新功能-有兴趣的人可以在
网站上获得14天的免费试用帐户,并自己了解系统。 这将是关于用于实现功能的映射服务的选择以及应向其提出哪些产品要求的内容。 如果对于您的项目而言,为制图模块选择解决方案的任务很重要-欢迎加入。
问题和决策选择标准
那我们想要什么? 我们希望将地址转移到地图服务,并在地图上显示该地址。 但这不是那样的。 只有坐标可以显示在地图上。 因此,您必须首先在坐标中转换地址的字符串表示形式。 在GIS术语中,这称为“地理编码”。
怎么做? 这里应该做一个小题外话。 事实是,在服务b2b的细节中,服务请求被绑定到固定地址(服务对象)。 应用程序不能具有任意的且以前未知的地址。 所有地址都是在服务合同订立时固定的,并且在新请求过程中不会突然发生新地址的添加。 因此,当管理员在数据库中输入地址时,查看公共Yandex地图上相应结构的坐标并将其手动输入到服务对象的卡中时,该选项可能适合我们:

但是这种方法并没有引起我们的热情-用户会感到不舒服(尽管,我再说一遍,在我们的情况下,将服务对象插入到系统中只是一次操作)。 我们决定寻找一种方法来自动填写地址中的坐标。 有这样的服务,它仍然只有选择。 为此,您需要设置选择标准。 我们从以下要求出发:
- 地理编码应在俄罗斯和说俄语的前苏联(今天是Okdesk的主要市场)的地址工作。 找到一个在世界范围内都能运作良好的地理编码服务将是理想的选择,但是展望未来,我会说我们找不到它。
- 地理编码应该可以将坐标存储在我们的数据库中,而没有任何限制。 我们不想每次都需要在地图上显示此地址时执行地理编码(此要求可能看起来很奇怪,但并非所有服务都允许这样做);
- 合理的成本和使用条款(地理编码是Okdesk的辅助功能之一,今天我们还不准备为此每年支付数十万卢布);
- 地理编码应在输入地址时提供建议(当用户输入地址字符时,将动态为用户提供与输入字符相对应的选择选项):

当地址坐标已知时,它可以显示在地图上。 我们对地图服务有最低要求):
因此,我们决定了我们需要哪些工具,并根据什么标准选择它们。 因此,是时候分析可用服务并选择适当的配置来解决问题了。
考生
为了选择解决方案,我们确定了潜在候选人的列表。 他们成为:
- 服务dadata.ru(地理编码);
- Geoservices 2GIS(地理编码和地图);
- Google地理服务(地理编码和地图);
- Yandex地理服务(地理编码和地图);
- OpenStreetMaps项目的服务(地理编码和地图)。
地理编码选择
Dadata.ru
Dadata.ru提供了许多有用的服务来处理数据。 在我们的例子中,我们正在谈论服务
“地址提示”。 Dadata具有许多优点。 提示“开箱即用”,并且在技术上内置于第三方产品中。 不仅坐标,而且其他信息也返回到该地址(在我们的情况下,这无关紧要,但对某人可能有用)。 数据是“新的”,可以在家中存储。 有一个免费的费率,每天限制为10,000个请求,但是有偿费率的价格超出了可承受的价格(组织每年7,000卢布,个人每年5,000卢布)。
但有一个缺点:该服务仅适用于俄语地址。
地理服务2GIS
2GIS具有大量参考地理服务,而地理编码就是其中之一。 根据官方数据,地理服务在全球9个国家/地区的370个城市中运营。 这为俄罗斯提供了良好的覆盖范围(但比Dadata差)(我们有选择地看-在有10万居民的城市中,一切都很好,但是在规模较小的城市中-有5万居民,通常只有街道有细节),而对其他人的覆盖范围则比较薄弱讲俄语的前苏联国家(例如,在2GIS目录中缺少相对较大的哈萨克斯坦城市Ekibastuz,居民超过13万)。 在前苏联之外,这项服务是有针对性的。
有明显的缺点。 首先,禁止存储接收到的数据。 即 必要时,在地图上显示地址,您需要提出坐标请求。 服务中也没有免费的收费标准:最低套餐的费用为每月5000卢布,包括向地址解析API发出的5000个请求(即每个请求卢布)。 随着请求数量的增加,每1个请求的成本降低。 例如,如果您每月发出超过5,000,000个请求,则一个请求的成本将降至5戈比。 有趣的是,请求是输入地址时的提示请求,是从提示中选择时的地址坐标请求(即,在地址处获取坐标的最小请求数为2)。 再加上地理编码数据无法存储在家里,并且每次在地图上绘制对象时,您都需要提出地理编码请求,在我们的案例中,使用2GIS进行地理编码将产生大量的地理信息。
是的,除此之外,还有“入场费”-连接时的一次性费用为15,000卢布。 看起来有点恶作剧:)
(有关费用的信息与2019年上半年有关,但我认为自从我们沉迷于服务的可能性和条件以来,一切都没有发生太大变化)。
Google地理服务
Google地理服务已合并为
Google Maps Platform品牌。 其中还包括带有提示的地理编码。 该网站声称覆盖了我们地球上99%的地址。 我们没有检查99%,但只检查了俄罗斯。 而且,我告诉您,关于俄罗斯的数据的质量和相关性还有很多不足之处。 例如,根据Google的说法,尽管我最初居住的房屋是在3年前启用的,但我所居住的住宅区并不存在(莫斯科,有超过1000万居民)。 但是我出生和成长的“住宅区”(奔萨,有50万居民)仍然存在,尽管实际上它已经被拆除了4年。 作为Google Maps Platform的一个小借口,您可以添加全景图中的数据更相关-它们具有我当前的家,而我的“父母”家看起来像这样:

这可能会结束Google对地理编码的审查-具有所述的覆盖范围和相关性,不适用于我们的目的。 但是,老实说,我们从另一端开始研究服务:条件和价格。 因此,无论如何我们都会写它们。
因此,条件相当人道。 所有请求均需付费:每1000个地理编码请求从4美元到5美元不等,小费另计-每1000个请求2.83美元。 此外,Google每月向该帐户收取200虚拟美元,可用于支付平台服务费用。
Google甚至允许您在家保存地理编码的结果。 但是,只有当该地图是Google Maps时,您才能在地图上显示它们,如地址
解析API政策文档的第一部分中明确指出的那样:
显示地址解析API结果
您可以在Google地图上显示地理编码API结果,也可以不显示地图。 如果要在地图上显示Geocoding API结果,则这些结果必须显示在Google地图上。 禁止在非Google地图上使用Geocoding API数据。
遗憾的是,并非所有在阅读决策过程中的同事都阅读法律信息。 使用这种方法,您可以轻松地替代客户,使他们有机会从Google接收地理编码结果,但可以在OpenStreetMaps等上显示对象。
Yandex地理服务
Yandex用于地理编码的服务称为
Geocoder 。 俄罗斯的覆盖面极佳-甚至有成千上万居民的定居点也有地址。 对于说俄语的前苏联国家来说,报道并不差。 全球覆盖是象征性的。 数据的相关性很高。
总的来说,如果不是商业项目的使用条款(非商业项目–有许多限制,则是免费的),一切都会很好。
商业项目的使用条款如下。 最低费用为每年120,000卢布,按此速率,每日限额为1,000个请求。 随着每日请求数量的增加,每1个请求的成本下降。 通常,如果没有一个BUT,成本不会令人震惊:如果您想在家里保留地理编码数据,那么每年的关税成本将再增加500,000卢布(我强调:不是一次,而是每年)。 结果,我们的“入门门槛”从每年620,000卢布开始,每天限制1000个请求。 这样的事情。
地理服务OpenStreetMaps
OpenStreetMaps(OSM)是一个非营利性的网络映射项目,旨在通过参与者社区-Internet用户创建详细的免费世界地图。 (c)维基百科。
OSM有一个称为
Nominatim的地理编码服务。 数据被“全世界”维护和更新。 总的来说,数据是相关的,但覆盖面并不深-在俄罗斯人口20到3万的城市中,通常缺少详细的门牌号码。
使用条款-免费。 数据可以存储在家里,数据可以任何合法方式使用。 通常,作为地理编码的辅助资源-可以! (破坏者:我们决定在此状态下使用它)。
地理编码数据透视表
现在一切都一样,只是在表中简要介绍了一下:
选择地图服务
更高一点,我们研究了各种地理编码的优缺点。 选择卡片时,我们的指导原则是卡片应具有相关性,覆盖范围广,使用成本和使用条款-解除。 由于地图的相关性和覆盖范围完全对应于地理编码的相关性(并且没有必要重复此信息),因此在地图概述中,我们将仅关注成本和条款。
2GIS地图
使用2GIS的卡的条件非常可靠。 计费不是基于请求/呈现卡的数量,而是以固定成本进行的。 费用包括“入场费”(一次性费用15,000卢布)和年度订阅费60,000卢布。
谷歌地图
与地理编码一样,来自Google的地图的使用基于请求的数量(request =地图显示)。 但是请求的费用取决于您要显示的地图以及在何处。
例如,如果您需要显示具有指定特征和标签的静态地图(即,当您请求地图时,Google会返回带有给定标签的给定图片)-每1000个请求将花费2美元。 如果您对Android上的应用程序使用相同的格式-免费。 顺便说一下,对于移动应用程序,谷歌地图基本上是免费的。 但是请不要自欺欺人-Google随时可能单方面更改使用条款。 例如,在2018年,Google将在网络界面中使用地图的成本提高了14倍。
对于我们的使用场景(Web界面中的动态映射),每千次卡片展示的成本为7美元。 当每月的印象数超过1亿(亿)个时,成本“下降”到每1000个印象5.6美元。
由于该公司的“个人帐户”对于所有Google Maps Platform服务都是相同的,因此您可以从Google每月向您的帐户收取的相同200美元虚拟费用中支付使用Google卡的费用。
Yandex地图
如果您有一个免费项目,则访问地图不需要在该项目中注册用户,并且每天拨打电话少于25,000次,则可以免费使用Yandex.Maps。 否则,只有商业用途可用于您的项目。 对地址解析器和卡的请求均收取相同的费用。 年度订阅的费用为每年12万卢布(包括每天1000个请求,超出每日限额的每1000个请求收取120卢布)。 对地址解析器和地图的请求限制是一般性的。
而且,如果您想将查询的结果保留在家中,则每年需要支付500,000卢布以上的费用。
打开街道地图
我会简短地说:免费和免费。 但有一个细微差别-有时俄罗斯的牌会放慢速度。
upd:还有一个细微差别-如果您使用OSM联机服务(并且不将其部署在您的服务器上),则措辞中会表达一些非正式的限制:
未经系统管理员事先许可,禁止大量使用(例如分发使用openstreetmap.org中的图块的应用程序)。 请参阅下面的替代方法。
即 OSM服务不适用于需要大量使用地图的大型项目,但是您可以将它们部署在服务器上并不受限制地使用。
汇总表
我们选择了什么?
地理编码
对于地理编码,我们选择了Dadata.ru服务和OpenStreetMaps的Nominatim服务的混合解决方案。 地理编码的工作方式如下。
输入地址后,用户将显示Dadata.ru服务的提示。 如果提示包含用户想要的内容,则他单击提示,所选的地址将显示在地图上,并且坐标将显示在该地址的文本表示形式下方(从Dadata.ru接收)。
YouTube视频 。
如果缺少用户在Dadata.ru服务中输入的地址,则用户可以按Enter键,该地址的请求将转到Nominatim服务。 如果在搜索结果中找到该地址,则用户单击该地址,该地址将显示在地图上,并且坐标将显示在该地址的字符串表示形式下。
YouTube视频 。
最后,如果在Dadata.ru或Nominatim中都找不到该地址,则用户可以简单地获取并在地图上指示一个点-并将指定点的坐标添加到输入的地址字符串表示中。
YouTube视频 。
卡片
我会简短。 我们选择了OpenStreetMaps。 有很多优点,没有明显的缺点。
奖励视频:卡在Okdesk中的工作方式
但是在此视频中,您可以看到地图上应用程序的显示如何与向Okdesk中最近的员工分配职责相关联:
顺便说一句,
在网站上注册一个测试帐户
,并免费试用14天。