服务范围在空间维度如何逐步细化

    ​    ​这篇文章是一个思路,陆续接触空间范的细化过程中的体会和一些实践。抛出来供大家拍砖。

    ​    ​概述

    ​    ​本文的例子是拿物流公司的配送来展开,大家都知道,物流是一个空间属性很强的行业,有些地方能够送到,有些地方送不到,有些服务在一些去也没法履行,而这个时候,我们应该怎样做,才能满足这个需求呢?且看本文逐步道来。

    ​    ​首先国家标准行政区域,目前总体是分为三级:省、市、区(当然也有特殊,有些市下面就没有区,例如东莞市),如果范围精确到市和区这一级别,我们应该怎么做?如果精确到区下面的级别(例如文三路送到,文二路送不到),这个时候又应该如何处理呢?

 

    ​    ​服务范围精确到“省市区”这类标准区域上,如何处理?

    ​    ​其实这种范围的设定,也是目前的做法,物流公司或者商家在后台设置一下,杭州市我会服务,或者西湖区我会提供服务,这时候,系统会把这个区域的标准行政区域编码存下来,消费者在交易下单环节,会选择自己的收货地址,而收货地址中的“省市区”的选择,会有标准行政区域的ID,这时候到范围表中查询(由于地址库是树状结构,所以检索过程并不是简单的判断是否有值,而是遍历),即可判断这比交易能否提供物流服务。

    ​    ​例如商家A在自己的后台,设置我仅仅服务于杭州市,后台数据存储ID“330100”,标示这个ID提供服务 ,消费者B在下单的时候,地址如下“浙江省杭州市西湖区文三路478号”,地址对应的标准区域ID是“330106”,在范围表中查询,西湖区的父节点杭州市全境提供服务,从而在交易端可以展示这个服务了。

 

    ​    ​商圈是一个什么样的概念?

    ​    ​这是一个穿插的话题,商圈貌似没有明确的解释,我谈一下我自己的理解。所谓商圈,就是大众熟悉的大概范围。例如浙江大学玉泉校区附近、北京鸟巢附近、上海外滩附近,这些是一个范围的概要描述,在国家标准行政区域的下一级别。商圈有啥用呢?

    ​    ​举个例子,在天猫交易下单页面,会有提示用户选择杭州市下属区域的所有自提点,这个时候,自提点的数量很多,如何更好的方便用户筛选呢?这时候商圈可以派上用场了,在自提点列表的上面,提供商圈的标签体系,例如“浙大玉泉校区”、“文三路沿线”、“翠苑”等,用户点击商圈,即可快速选择,因为商圈大家都非常熟悉。比起仔细看每个地址的详细描述要快很多(这里大体讲一下实现,我有自提点地址A和B,会判断一下这个地址属于哪个商圈,假设A属于X和Y,B属于Y,这个时候再根据X和Y来做倒排,从而实现点击商圈,把具体地址筛选出来的功能)。

 

    ​    ​物流公司如何设置自己的服务范围呢?

    ​    ​如果是标准行政区,范围很好描述,直接提供出省市区的枚举信息,供物流公司和商家设置即可。但是在区下边的如何处理,有一个办法,就是借助地图的特性,在空间描述方面,有点和多边形,范围的话自然用多边形描述。可以让商家或者物流公司,在一个后台系统中,来用多边形描述出自己的范围来,系统存储下这个范围(其实就是多边形的拐点),用来做后续计算使用(可以存储在空间数据库,也可以获得点的经纬度属性,按照正常的文本来存储)。这时候,物流公司的一个范围就得到体现了,直观、可视化,最重要的一点,后面可以进行空间维度的计算。

 

    ​    ​京东特色化的物流服务是如何实现范围细化的呢?

    ​    ​京东的物流体系,是我们很赞不绝口的,包括我自己也经常在京东上面买东西,理由就是物流体验好。那京东的特色服务肯定不是特定区域全境覆盖的,他是怎么做的。在搜索引擎上面很少检索到这方面的文章,自己在页面上体验了一下。就拿京东的晚间配送服务来说吧,这个服务能够满足西湖区的 ”古荡附近“,但是无法满足“黄龙附近”。

    ​    ​第一步:京东在后台服务范围设置页面,维护一下,“古荡附近”-- 提供晚间配送服务,“黄龙附近”-- 不提供晚间配送服务;

    ​    ​第二步:消费者在下单的时候,需要选择地址,当用户选择了“西湖区”之后,会继续展示一个“商圈层级”,如果我的地址在“黄龙附近”,那我就会选择这个,然后填写我的详细地址;

    ​    ​第三步:根据“黄龙附近”这个标签到范围表中检索,非空间检索,匹配出这笔交易能够展示“晚间配送”服务,则允许用户选择此服务,否则就直接不用展示了;

    ​    ​综上,京东是在区这一级别后面,增加了一个“商圈级别”,在物流范围设置和消费者选择地址两个地方做了匹配,从而实现范围的精细化。

 

    ​    ​目前像淘宝或者亚马逊等有很多年历史的情况,服务空间范围如何实现呢?

    ​    ​京东的思路在淘宝或者亚马逊这样有多年历史地址的电子商务公司,能够复用吗?显然不能,为啥?因为目前淘宝或者亚马逊的地址仅仅是“省市区”级别,后面没有商圈级别,为啥没有呢,因为之前几年没有这个需求。那可以让消费者重新选择啊,这个成本太高,目前很多活跃的消费者,一个地址基本上半年或者一年不会变,这时候让他去改动地址,是不可接受的,并且还有一个原因,淘宝和京东不同的是,京东就自己一家物流公司,但是淘宝合作的有百余个 ,商圈的标准很难统一。

    ​    ​这种情况下,就没有解决方案了?当然有了,这也是本文的重点,思路如下:

    ​    ​第一步:各个物流公司在后台管理系统中,描述自己特定服务的特定范围(在地图上绘制多边形),系统保存下来:A公司,X服务,多边形的拐点信息;

    ​    ​第二步:交易环节,消费者选择了自己的地址,请求地址的geocoding服务(途径有多个,一个是提前算好经纬度的数据,在查询地址文本的时候,顺便把经纬度一起查出来,一个是实时的请求地图服务厂商提供的http地址解析接口),获取这个文本地址的经纬度数据,这个数据提交给服务计算引擎;

    ​    ​第三步:服务计算引擎,针对消费地址的经纬度(pointA ),以及物流公司维护的范围信息,进行空间计算,判断一下pointA有没有落到A公司-X服务的范围内,如果落在了,则这笔交易,可以享受A公司的X服务(这里有个点,如何进行空间计算,方案有多个,一种是利用数据库的空间特性,一种是利用geohash算法,自己来做前缀匹配,一种是利用solr的空间检索,各有利弊和适用场景);

    ​    ​综上,需要三个步骤,重点是文本数据空间话,然后进行空间计算,从而是实现服务范围的精细化。

 

    ​    ​这个服务范围空间实现了,如何来进行评测呢?

    ​    ​那这个方案是否靠谱呢,需要一定的机制来进行评测,如果A公司提供的X服务,在PointA点不能提供,但是系统判别出能够系统,这个给到消费者的体验是非常差的。评测说简单也简单,说复杂也复杂。就是监控这笔交易的后续状态,这个包裹消费者是否正常收到,服务是否享受到,评价情况如何,利用这些交易后的数据,来判断是否准确。

    ​  

    ​    ​ ​写到这里,算是完了,随着电子商务网站物流服务的多样化,空间维度的细化已经迫在眉睫,否则服务的体验会没有那么好。    ​​

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
geohash简介: geohash是一种地址编码,它能把二维的经纬度编码成一维的字符串。geohash有以下几个特点: 首先,geohash用一个字符串表示经度和纬度两个坐标。某些情况下无法在两列上同时应用索引 (例如MySQL 4之前的版本,Google App Engine的数据层等),利用geohash,只需在一列上应用索引即可。 其次,geohash表示的并不是一个点,而是一个矩形区域。比如编码wx4g0ec19,它表示的是一个矩形区域。 使用者可以发布地址编码,既能表明自己位于北海公园附近,又不至于暴露自己的精确坐标,有助于隐私保护。 第三,编码的前缀可以表示更大的区域。例如wx4g0ec1,它的前缀wx4g0e表示包含编码wx4g0ec1在内的更大范围。 这个特性可以用于附近地点搜索。首先根据用户当前坐标计算geohash(例如wx4g0ec1)然后取其前缀进行查询 (SELECT * FROM place WHERE geohash LIKE 'wx4g0e%'),即可查询附近的所有地点。Geohash比直接用经纬度的高效很多。用途: 移动互联网,lbs可以说是一个基础应用,geohash对于解决附近地点搜索提供了一个有效的解决方案。扩展: 这个php扩展,提供了三个函数:/**     *  $latitude    //纬度     *  $longitude   //经度     *  $precision   //精密度, 默认是12     *  返回 $precision 长度的 string     */    geohash_encode($latitude, $longitude, $precision=12);      /**     *  $hash    //geohash_encode后的值     *  返回 array // Array     *                    (     *                        [latitude] => 39.416916975752     *                        [longitude] => 100.92223992571     *                        [north] => 39.416917059571     *                        [east] => 100.92224009335     *                        [south] => 100.92223992571     *                        [west] => 100.92223975807     *                    )     */    geohash_decode($hash);    /**     *  $hash    //geohash_encode后的值     *  返回 在$hash 8个 (东南西北各二个)附近的hash值     */    geohash_neighbors($hash); 标签:geohash
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值