发明内容
本发明实施例的目的在于提供一种基于leaflet实现行政区域聚合的方法及装置,以克服现有技术中需要多次复杂的距离计算,易出现图标重叠或点位遗漏的缺陷。
为实现上述目的,第一方面,本发明实施例提供了一种基于leaflet实现行政区域聚合的方法,所述方法包括:
从后端服务器中加载地图,并对所述地图初始化,以得到所需的行政区域内所有的地理行政范围,其中,所述地图为leaflet;
在所述所有的地理行政范围中创建多个polygon对象;
计算出各polygon对象的质心位置,并将其展示在地图上;
再从后端服务器中获取该行政区域内所有的点位信息,并进行遍历计算处理,以得出各点位信息所属的地理行政范围;
再将处理后的各点位信息定位到对应polygon对象的质心位置上。
作为本申请一种可选的实施方式,所述polygon对象为通过leaflet的Polygon函数创建而成。
作为本申请一种可选的实施方式,通过getPolygonCenter函数计算出各polygon对象的质心位置。
作为本申请一种可选的实施方式,所述方法还包括:
计算出各polygon对象的质心位置的同时,还进行存储操作;其中,所述存储包括存储在polygon的center属性上以及存储在polygonArray数组对象中。
第二方面,本发明实施例还提供了一种基于leaflet实现行政区域聚合的装置,其特征在于,包括:
初始化模块,用于从后端服务器中加载地图,并对所述地图初始化,以得到所需的行政区域内所有的地理行政范围,其中,所述地图为leaflet;
创建模块,用于在所述所有的地理行政范围中创建多个polygon对象;
处理模块,用于:
计算出各polygon对象的质心位置,并将其展示在地图上;
再从后端服务器中获取该行政区域内所有的点位信息,并进行遍历计算,以得出各点位信息所属的地理行政范围;
定位模块,用于将处理后的各点位信息定位到对应polygon对象的质心位置上。
作为本申请一种可选的实施方式,所述polygon对象为通过leaflet的Polygon函数创建而成。
作为本申请一种可选的实施方式,通过getPolygonCenter函数计算出各polygon对象的质心位置。
作为本申请一种可选的实施方式,计算出各polygon对象的质心位置的同时,还进行存储操作;其中,所述存储包括存储在polygon的center属性上以及存储在polygonArray数组对象中。
第三方面,本发明实施例还提供了一种基于leaflet实现行政区域聚合的装置,包括处理器、输入设备、输出设备和存储器,所述处理器、输入设备、输出设备和存储器相互连接,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行如第一方面所述的方法。
采用上述技术方案,具有以下优点:本发明提出的一种基于leaflet实现行政区域聚合的方法及装置,通过利用leaflet,实现运算速度快,每个点位只需计算一次,没有复杂的距离计算和多次迭代处理,同时也不会出现聚类图标重叠或点位单个遗漏情况,能够适应大多数应用场景,使用范围广。
具体实施方式
下面将结合附图对本发明技术方案的实施例进行详细的描述。以下实施例仅用于更加清楚地说明本发明的技术方案,因此只是作为示例,而不能以此来限制本发明的保护范围。
需要注意的是,除非另有说明,本申请使用的技术术语或者科学术语应当为本发明所属领域技术人员所理解的通常意义。
需要说明的是,leaflet是一个为移动设备设计的交互式地图的开源的地图Javascript库。
请参考图1,是本发明实施例所提供的一种基于leaflet实现行政区域聚合的方法,所述方法包括:
S101,从后端服务器中加载地图,并对所述地图初始化,以得到所需的行政区域内所有的地理行政范围,其中,所述地图为leaflet。
具体地,从后端服务器的数据库中提取地图;所述初始化包括选定地理坐标、设置地图视角和缩放级别等,从而得到所需进行处理的行政区域。
S102,在所述所有的地理行政范围中创建多个polygon对象。
具体地,所述polygon对象为通过leaflet的Polygon函数创建而成。
S103,计算出各polygon对象的质心位置,并将其展示在地图上。
具体地,通过getPolygonCenter函数计算出各polygon对象的质心位置;
也就是说,得出多边形质心横坐标和多边形质心纵坐标;
多边形质心横坐标=多边形剖分的每一个三角形的横坐标*该三角形的面积之和/多边形的总面积。
多边形质心纵坐标=多边形剖分的每一个三角形的纵坐标*该三角形的面积之和/多边形的总面积。
其中,计算过程如下:
1、拿到ploygon上连续两个顶点的坐标,我们可以将纬度看做成横坐标,经度看成纵坐标。
2、利用向量叉乘计算两个顶点和原点组成的三角形面积。
3、求出所有三角形面积之和也就是polygon的面积。
4、求出所有三角形的重心坐标之和;即为多边形剖分的每一个三角形的质心横坐标*该三角形的面积之和以及多边形剖分的每一个三角形的质心纵坐标*该三角形的面积之和。
5、套用前述的公式即可。
进一步地,实施时,计算出各polygon对象的质心位置的同时,还进行存储操作;其中,所述存储包括存储在polygon的center属性上以及存储在polygonArray数组对象中。
S104,再从后端服务器中获取该行政区域内所有的点位信息,并进行遍历计算处理,以得出各点位信息所属的地理行政范围。
具体地,通过inPolygon方法来遍历计算每一个点位属于哪个polygon对象的范围,并将该polygon对象的number属性+1;例如,某polygon对象范围内存在三个点位,每个点位都会使其number属性+1;这样通过获取number属性的值,即可得出该该polygon对象范围内有多少个点位。
S105,再将处理后的各点位信息定位到对应polygon对象的质心位置上。
具体地,通过leaflet的marker定位到每个polygon对象的质心上。
即,先通过leaflet的divIcon方法以及ploygon的number属性来创建marker的图标对象,再通过leaflet的marker方法以及ploygon的质心center和上面刚刚创建的图标对象,来创建一个新的marker对象展示在polygon的质心上。
通过上述步骤,基于leaflet对行政区域进行聚合,拥有运算速度快,每一个点位只需要计算一次,没有复杂到距离计算,适应场景多;本发明针对实际应用场景,实现可清晰显示各兴趣点的所属区域,各区域某种场所、点位的数量,不会出现聚类图标重叠或点位单个遗漏情况。
基于同样的发明构思,请参考图2,本发明实施例还提供了一种基于leaflet实现行政区域聚合的装置,包括:
初始化模块,用于从后端服务器中加载地图,并对所述地图初始化,以得到所需的行政区域内所有的地理行政范围,其中,所述地图为leaflet;
创建模块,用于在所述所有的地理行政范围中创建多个polygon对象;
处理模块,用于:
计算出各polygon对象的质心位置,并将其展示在地图上;
再从后端服务器中获取该行政区域内所有的点位信息,并进行遍历计算,以得出各点位信息所属的地理行政范围;
定位模块,用于将处理后的各点位信息定位到对应polygon对象的质心位置上。
其中,所述polygon对象为通过leaflet的Polygon函数创建而成;
通过getPolygonCenter函数计算出各polygon对象的质心位置;
计算出各polygon对象的质心位置的同时,还进行存储操作;其中,所述存储包括存储在polygon的center属性上以及存储在polygonArray数组对象中。
需要说明的是,上述装置实施例各模块的具体实施方式以及举例,可参见上一方法实施例的描述,在此不再赘述。
通过上述方案,利用leaflet,实现运算速度快,每个点位只需计算一次,没有复杂的距离计算和多次迭代处理,同时也不会出现聚类图标重叠或点位单个遗漏情况,能够适应大多数应用场景,使用范围广。
本发明实施例还提供了一种基于leaflet实现行政区域聚合的装置,包括处理器、输入设备、输出设备和存储器,所述处理器、输入设备、输出设备和存储器相互连接,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行如前文所述的方法。
在本发明实施例中,所称处理器可以是中央处理单元(Central ProcessingUnit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
输入设备可以包括键盘等,输出设备可以包括显示器(LCD等)、扬声器等。
该存储器可以包括只读存储器和随机存取存储器,并向处理器提供指令和数据。存储器的一部分还可以包括非易失性随机存取存储器。例如,存储器还可以存储设备类型的信息。
具体实现中,本发明实施例中所描述的处理器、输入设备、输出设备可执行本发明实施例提供的方法实施例中所描述的实现方式,在此不再赘述。
其中,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。