发明内容
针对现有技术中,对经纬度坐标进行逆地理编码需要通过服务器端完成,对网络依赖较大,从而导致终端设备无法联网时无法完成逆地理编码的技术问题。
一种离线的逆地理编码的方法,包括:
接收携带有经纬度坐标的逆地理编码请求;
从预置的组成电子地图的地理区域块中,确定出包含所述经纬度坐标的地理区域块;
获取确定出的地理区域块对应的城市代码;
判断获取到的城市代码是否为一个,若是,则从预置的城市代码与地理位置描述信息的对应关系中,查找与所述城市代码对应的地理位置描述信息;若否,则获取所述城市代码对应的多边形数据,计算出多边形数据描述的多边形中包含所述经纬度坐标的多边形,并从预置的所述城市代码与地理位置描述信息的对应关系中,查找描述该包含所述经纬度坐标的多边形的多边形数据的城市代码对应的地理位置信息;
将查找到的地理位置信息作为所述经纬度坐标对应的逆地理编码结果。
一种离线的逆地理编码的装置,包括:
逆地理编码请求接收单元,用于接收携带有经纬度坐标的逆地理编码请求;
地理区域块确定单元,用于从预置的组成电子地图的地理区域块中,确定出包含所述经纬度坐标的地理区域块;
城市代码获取单元,用于获取确定出的地理区域块对应的城市代码;
判断单元,判断获取到的城市代码是否为一个,若是则触发第一地理位置描述信息查找单元,若否则触发第二地理位置描述信息查找单元;
第一地理位置描述信息查找单元,用于从预置的城市代码与地理位置描述信息的对应关系中,查找与所述城市代码对应的地理位置描述信息;
第二地理位置描述信息查找单元,用于获取所述城市代码对应的多边形数据,计算出多边形数据描述的多边形中包含所述经纬度坐标的多边形,从预置的所述城市代码与地理位置描述信息的对应关系中,查找描述该包含所述经纬度坐标的多边形的多边形数据的城市代码对应的地理位置信息;
逆地理编码单元,用于将查找到的地理位置信息作为所述经纬度坐标对应的逆地理编码结果。
一种终端设备,包括前述离线的逆地理编码的装置。
本发明技术方案,预先将电子地图划分成多个地理区域块,且每个地理区域块对应于至少一个城市代码,每个城市代码对应有其指示的城市的多边形数据以及对应的地理位置描述信息;当接收到携带有经纬度坐标的逆地理编码请求时,确定出包含该经纬度坐标的地理区域块,并获取该地理区域块对应的城市代码;当获取的城市代码为一个时,将该城市代码对应的地理位置描述信息作为所述经纬度坐标对应的逆地理编码结果;当获取的城市代码为多个时,需要从该多个城市代码中确定出一个对应的多边形数据描述的多边形包含所述经纬度坐标的城市代码,并将该城市代码对应的地理位置描述信息作为所述经纬度坐标对应的逆地理编码结果。采用本发明技术方案,只要在终端设备存储了组成电子地图的各地理区域块对应的城市代码,以及各城市代码对应的多边形数据以及地理位置描述信息,即可在接收到携带有经纬度坐标的逆地理编码请求时,在终端设备本地进行逆地理编码,得到该经纬度坐标的地理位置描述信息;在终端设备本地实现逆地理编码,不需要联网即可实现逆地理编码,提高逆地理编码的速度,并且避免了网络掉线或网络拥堵等情况导致逆地理编码失败的问题,因此,采用本发明技术方案能够提高逆地理编码的速度和成功率。
具体实施方式
参见图1,为本发明实施例中提供的一种离线的逆地理编码的方法流程图,该方法应用于终端设备,该方法包括:
步骤101、接收携带有经纬度坐标的逆地理编码请求。
步骤102、从预置的组成电子地图的地理区域块中,确定出包含所述经纬度坐标的地理区域块。
本发明实施例中,预先将电子地图划分成多个地理区域块,该地理区域块可以是相同尺寸的矩形、正方形,也可以是针对不同的省市划分的地理区域块的尺寸不一样,如对于人口密集地区(如北京、上海、深圳、广州、杭州等),其划分的地理区域块的尺寸要小于人口疏散的地区(如陕西、新疆、内蒙古等)的地理区域块。具体的地理区域块划分方式可以根据实际需要灵活设置,本发明实施例不做严格限制。如果地理区域块位于省、区的边界,将有可能使得该地理区域块跨多个区,因此,该地理区域块对应多个城市代码。
步骤103、获取确定出的地理区域块对应的城市代码。
步骤104、判断获取到的城市代码是否为一个,若是则执行步骤105,若否则执行步骤106。
步骤105、从预置的城市代码与地理位置描述信息的对应关系中,查找与所述城市代码对应的地理位置描述信息。
本发明实施例中,地理位置描述信息的格式可以设置为如省-市-区,如图1A所示。
步骤106、获取所述城市代码对应的多边形数据,并计算出多边形数据描述的多边形中包含所述经纬度坐标的多边形。
步骤107、从预置的所述城市代码与地理位置描述信息的对应关系中,查找描述该包含所述经纬度坐标的多边形的多边形数据的城市代码对应的地理位置信息。
步骤108、将查找到的地理位置信息作为所述经纬度坐标对应的逆地理编码结果。
优选地,为提高确定出包含经纬度坐标的地理区域块,预先采用geohash算法对各个地理区域块进行geohash编码,得到与该地理区域块对应的geohash值,并建立地理区域块的geohash值与该地理区域块隶属的城市的城市代码的对应关系。前述步骤102中,确定出包含所述经纬度坐标的地理区域块,可以通过以下方式1实现:
方式1、按照预置的geohash算法,计算所述经纬度坐标对应的geohash值;将所述经纬度坐标对应的geohash值与预置的地理区域块对应的geohash值进行匹配,将匹配成功的geohash值对应的地理区域块确定为包含所述经纬度坐标的地理区域块。
基于前述方式1,前述步骤103中,获取确定出的地理区域块对应的城市代码,可通过以下方式实现:从预置的地理区域块对应的geohash值与该地理区域块隶属城市的城市代码的对应关系中,获取确定出的地理区域块的geohash值对应的城市代码。
本发明实施例中,geohash值是一个字符串,该字符串表示一个坐标区域,如geohash值为wx4g0ec19,它表示的是一个矩形区域。预置的地理区域块对应的geohash值与该地理区域块隶属城市的城市代码的对应关系,如图1B所示。
本发明实施例中,根据geohash编码算法计算经纬度坐标的geohash值,可通过以下方式实现,具体以经纬度坐标(116.3906,39.92324)为例进行描述:
首先,将纬度范围(-90,90)平分成两个区间(-90,0)、(0,90),如果目标经纬度坐标的纬度位于前一个区间,则编码为0,否则编码为1。由于纬度39.92324属于(0,,90),所以取编码为1。
然后,再将(0,90)分成(0,45),(45,90)两个区间,而纬度39.92324位于(0,45),所以编码为0。
以此类推,直到精度符合要求为止,得到纬度39.92324的编码为10111000110001111001,编码过程如图1C所示。
同理,对于经度,将经度范围(-180,180)进行细分,得到经度116.3906的编码为11010010110001000100,编码过程如图1D所示。
将经度和纬度的编码进行合并后,得到编码为:1110011101001000111100000011010101100001,将该编码进行base32编码,得到该经纬度坐标的geohash值为wx4g0ec1。
优选地,本发明实施例中,前述步骤102确定出包含所述经纬度坐标的地理区域块,还可以通过以下方式2实现:
方式2、将所述经纬度坐标与预置的地理区域块对应的经纬度范围进行计算,确定出包含所述经纬度坐标的经纬度范围,并将包含所述经纬度坐标的经纬度范围对应的地理区域块确定为包含所述经纬度坐标的地理区域块;
基于前述方式2,前述步骤103中确定出地理区域块的城市代码,具体实现如下:从预置的地理区域块对应的ID标识与该地理区域块隶属城市的城市代码的对应关系中,获取确定出的地理区域块的ID标识所对应的城市代码。
本发明实施例中,预先在终端设备本地存储有各城市代码对应的多边形数据,以该城市代码为索引条件查找城市代码所对应的多边形数据。多边形数据所描述的多边形即为其对应的城市代码对应的城市的地理区域,如图1E所示,为北京市朝阳区的多边形数据,其中北京市朝阳区的城市代码为110105。
本发明实施例中,前述步骤106中,获取所述城市代码对应的多边形数据,计算出多边形数据描述的多边形中包含所述经纬度坐标的多边形,具体可通过以下方式1或方式2实现:
方式1、遍历所述城市代码;从预置的城市代码与多边形数据的对应关系中,获取当前遍历到的城市代码所对应的多边形数据;并计算所述经纬度坐标是否在该多边形数据所描述的多边形内,若是则将该多边形确定为包含所述经纬度坐标的多边形;若否则遍历下一个城市代码,重复前述步骤,直到确定出包含所述经纬度坐标的多边形为止。
方式2、从预置的城市代码与多边形数据的对应关系中,获取所述城市代码对应的多边形数据;遍历获取的多边形数据,计算所述经纬度坐标是否在当前遍历的多边形数据所描述的多边形内,若是,则将该多边形确定为包含所述经纬度坐标的多边形,若否,则遍历下一个多边形数据,重复前述步骤,直到确定出包含所述经纬度坐标的多边形为止。
本发明实施例中,确定一个多边形是否包含一个经纬度坐标的方式采用目前较为常规的算法即可。本便于本领域技术人员快速的了解,本发明实施例中列举一个确定多边形是否包含一个经纬度坐标的方式,假设经纬度坐标为P,具体如下:
从点P作水平向左的射线,判断该射线与多边形的交点是奇数还是偶数,若为偶数则确定该点P在该多边形的外部,确定该多边形不包含该点P,若为奇数则确定该点P再该多边形的内部,即确定该多边形包含该点P。
基于前述描述的离线的逆地理编码方法相同构思,本发明实施例还提供一种离线的逆地理编码装置,该装置应用于终端设备,装置的结构如图2所示,具体包括:
逆地理编码请求接收单元21,用于接收携带有经纬度坐标的逆地理编码请求;
地理区域块确定单元22,用于从预置的组成电子地图的地理区域块中,确定出包含所述经纬度坐标的地理区域块;
城市代码获取单元23,用于获取确定出的地理区域块对应的城市代码;
判断单元24,判断获取到的城市代码是否为一个,若是则触发第一地理位置描述信息查找单元25,若否则触发第二地理位置描述信息查找单元26;
第一地理位置描述信息查找单元25,用于从预置的城市代码与地理位置描述信息的对应关系中,查找与所述城市代码对应的地理位置描述信息;
第二地理位置描述信息查找单元26,用于获取所述城市代码对应的多边形数据,计算出多边形数据描述的多边形中包含所述经纬度坐标的多边形,从预置的所述城市代码与地理位置描述信息的对应关系中,查找描述该包含所述经纬度坐标的多边形的多边形数据的城市代码对应的地理位置信息;
逆地理编码单元27,用于将查找到的地理位置信息作为所述经纬度坐标对应的逆地理编码结果。
优选地,本发明实施例中,地理区域块确定单元22,具体用于:按照预置的geohash算法,计算所述经纬度坐标对应的geohash值;将所述经纬度坐标对应的geohash值与预置的地理区域块对应的geohash值进行匹配,将匹配成功的geohash值对应的地理区域块确定为包含所述经纬度坐标的地理区域块。
优选地,城市代码获取单元23,具体用于:从预置的地理区域块对应的geohash值与该地理区域块隶属城市的城市代码的对应关系中,获取确定出的地理区域块的geohash值对应的城市代码。
优选地,本发明实施例中,地理区域块确定单元22,还可通过以下方式实现:将所述经纬度坐标与预置的地理区域块对应的经纬度范围进行计算,确定出包含所述经纬度坐标的经纬度范围,并将包含所述经纬度坐标的经纬度范围对应的地理区域块确定为包含所述经纬度坐标的地理区域块。
此时,城市代码获取单元23,具体用于:从预置的地理区域块对应的ID标识与该地理区域块隶属城市的城市代码的对应关系中,获取确定出的地理区域块的ID标识所对应的城市代码。
优选地,所述第二地理位置描述信息查找单元26获取所述城市代码对应的多边形数据,计算出多边形数据描述的多边形中包含所述经纬度坐标的多边形,可通过以下方式1或方式2实现:
方式1、遍历所述城市代码;从预置的城市代码与多边形数据的对应关系中,获取当前遍历到的城市代码所对应的多边形数据;并计算所述经纬度坐标是否在该多边形数据所描述的多边形内,若是则将该多边形确定为包含所述经纬度坐标的多边形;若否则遍历下一个城市代码,重复前述步骤,直到确定出包含所述经纬度坐标的多边形为止。
方式2、从预置的城市代码与多边形数据的对应关系中,获取所述城市代码对应的多边形数据;遍历获取的多边形数据,计算所述经纬度坐标是否在当前遍历的多边形数据所描述的多边形内,若是,则将该多边形确定为包含所述经纬度坐标的多边形,若否,则遍历下一个多边形数据,重复前述步骤,直到确定出包含所述经纬度坐标的多边形为止。
本发明实施例还提供一种终端设备,该终端设备包含前述图2所示的离线的逆地理编码装置。该装置的结构如前所述,在此不再赘述。
本发明技术方案,预先将电子地图划分成多个地理区域块,且每个地理区域块对应于至少一个城市代码,每个城市代码对应有其指示的城市的多边形数据以及对应的地理位置描述信息;当接收到携带有经纬度坐标的逆地理编码请求时,确定出包含该经纬度坐标的地理区域块,并获取该地理区域块对应的城市代码;当获取的城市代码为一个时,将该城市代码对应的地理位置描述信息作为所述经纬度坐标对应的逆地理编码结果;当获取的城市代码为多个时,需要从该多个城市代码中确定出一个对应的多边形数据描述的多边形包含所述经纬度坐标的城市代码,并将该城市代码对应的地理位置描述信息作为所述经纬度坐标对应的逆地理编码结果。采用本发明技术方案,只要在终端设备存储了组成电子地图的各地理区域块对应的城市代码,以及各城市代码对应的多边形数据以及地理位置描述信息,即可在接收到携带有经纬度坐标的逆地理编码请求时,在终端设备本地进行逆地理编码,得到该经纬度坐标的地理位置描述信息;在终端设备本地实现逆地理编码,不需要联网即可实现逆地理编码,提高逆地理编码的速度,并且避免了网络掉线或网络拥堵等情况导致逆地理编码失败的问题,因此,采用本发明技术方案能够提高逆地理编码的速度和成功率。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若对本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。