[0019] 下面通过具体实施例,并结合附图,对本发明的技术方案作进一步具体的说明,如图2所示,本发明方法包括如下步骤:
[0020] 步骤(1).地图数据预处理:
[0021] 读取地图数据,地图数据包括路段编号(LDID)、路段起点经纬度信息(QD_JD,QD_WD)、路段终点经纬度信息(ZD_JD,ZD_WD),将地图网格化得到“路段编号-经纬度”数据表(如表1所示)。
[0022] 表1
[0023] LDID QD_JD QD_WD ZD_JD ZD_WD
[0024] 步骤(2).通过百度地图API和人的居住地址获取人的地理信息数据,数据包括每个人对应的经度(jd)和纬度(wd):
[0025] 读取每个人的居住地址,通过百度地图提供的API将地址转换成对应的经纬度得到“人编号-经纬度”数据表(如表2所示)。
[0026] 表2
[0027] peopleID jd wd
[0028] 表2中的peopleID代表人的编号。
[0029] 步骤(3).通过方向判断以及闵可夫斯基距离获取人所对应路网网格的四个经纬度坐标点:
[0030] 3-1.通过在步骤(1)中获取到路网每个路段起点和终点的经纬度值,根据图1可知每个人的上下左右方向各有一个路段,且每个路段是有方向的。所有首先判断这个路段在人所对应路网网格的哪个方向,即上下左右四个方向。又因路段存在方向之分,所以每个方向要考虑两种情况。
[0031] 3-2.根据路段的起点经纬度坐标和终点经纬度坐标来判断其对于人的经纬度坐标的方向,判断公式如下,FX右代表方向为右,FX左代表方向为左,FX下代表方向为下,FX上代表方向为上,因为路段是有方向的,所以每个方向有两种情况,即:
[0032]
[0033]
[0034]
[0035]
[0036] 3-3.根据闵可夫斯基距离的定义计算点(jd,wd)到点(QD_JD,QD_WD)和点(ZD_JD,ZD_WD)之间的距离和。
[0037] 两个n维变量h(x11,x12,...,x1n)与f(x21,x22,…,x2n)间的闵可夫斯基距离定义为:
[0038]
[0039] p值的选择需根据具体的场景而选择,d代表两个向量之间的距离。对此场景,p应等于2,即求解欧式距离,然后根据公式计算点(jd,wd)到点(QD_JD,QD_WD)和点(ZD_JD,ZD_WD)之间的距离和。
[0040] 3-4.通过上述计算每个方向的最小距离和得到每个人对应每个方向的路段编号,并记录其四个方向的经纬度坐标点,即其对应路网网格的四个经纬度坐标点。
[0041] 步骤(4).对四个经纬度坐标点按逆时针方向进行排序。
[0042] 对于不规则的多边形,可以通过分割三角形法来实现多边形面积的求解。在求解前需要做一下排序的预处理,即将多边形的所有顶点按逆时针排序,避免叉积法求三角形面积时符号的正负上出问题。
[0043] 4-1.人对应路网网格的四个顶点经纬度坐标分别记为a(j1,w1),b(j2,w2),c(j3,w3),d(j4,w4),计算出其重心g(j0,w0)
[0044]
[0045] 4-2.从g点平行x轴构造一个单位矢量
[0046] 求出下面四个矢量与单位矢量之间的夹角关系:
[0047]
[0048]
[0049]
[0050]
[0051] 对四个矢量分别进行讨论:
[0052]
[0053]
[0054]
[0055]
[0056] 4-3.求解上述的三角方程,计算出从 到 的逆时针旋转角 到 的逆时针旋转角 到 的逆时针旋转角 到 的逆时针旋转角
按角度从小到大排序获取到4个点的逆时针排序。
[0057] 步骤(5).将排序好的经纬度坐标对应至xy坐标轴上,利用多边形面积计算公式计算每个人对应的路网网格的面积。
[0058] 5-1.求解每个人对应的路网网格面积需要将经纬度转换为xy坐标。先通过每个人所对应路网网格的四个坐标点获取在xy坐标轴上对应四边形的四条边和两条对角线的长度,另地球半径记为r,r=6371km。l1,l2,l3,l4是四边形四条边的长度,l5,l6是两条对角线的长度,即:
[0059]
[0060]
[0061]
[0062]
[0063]
[0064]
[0065] 5-2.通过将上一步中获取到的四边形的四条边和两条对角线的长度对应到xy坐标轴上,因为已知四条边和两条对角线的长度可以确定该四边形,故可以画出符合的四边形,按逆时针方向将该四边形的四个顶点坐标记为(x1,y1),(x2,y2),(x3,y3),(x4,y4)。
[0066] 5-3.路网网格面积记为area,根据路网网格面积(area)计算公式计算路网网格的面积,即:
[0067]
[0068] 步骤(6).利用步骤(3)和步骤(5)获取的每个人对应路网网格的经纬度坐标和面积计算出各个路网网格中的人口密度。
[0069] 6-1.利用步骤(3)和步骤(5)获取的每个人对应路网网格的经纬度坐标和面积构造“人编号-对应路网网格经纬度坐标-面积”数据表(如表3所示)。
[0070] 表3
[0071]peopleID a(j1,w1) b(j2,w2) c(j3,w3) d(j4,w4) area
[0072] 6-2.设立初始空集合S={},集合S中的值包含两部分,key1和value1,key1代表路网网格经纬度坐标,value1代表该路网网格对应的编号,可以通过查询S的key1获取对应的value1,设立n=1,对表3进行逐个扫描,获取peopleID对应的信息,然后对集合S的key1进行扫描,如果该人对应路网网格的四个顶点经纬度坐标a(j1,w1),b(j2,w2),c(j3,w3),d(j4,w4)不在集合S的key1中,则该人对应的路网网格编号为n,将{a(j1,w1),b(j2,w2),c(j3,w3),d(j4,w4),n}加入集合S中,然后将n的值自增加1,即n=n+1,否则将a(j1,w1),b(j2,w2),c(j3,w3),d(j4,w4)对应的value1值作为该人对应路网网格的编号。
[0073] 6-3.根据上一步的结果,构造“人编号-对应路网网格编号-面积”数据表(如表4所示)。
[0074] 表4
[0075]peopleID LWWGID area
[0076] 表4中的LWWGID代表路网网格编号。
[0077] 6-4.设立初始空集合G={},集合G中的值包含两部分,key2和value2,key2代表路网网格编号,value2代表该路网网格中人的个数,可以通过查询G的key2获取对应的value2,对表4进行逐个扫描,获取人编号对应的路网网格编号与路网网格面积,然后对集合G的key2进行扫描,如果LWWGID不在G的key2中,则将{LWWGID,1}加入G中,否则将LWWGID对应的value2值增加1。
[0078] 6-5.根据上一步的结果,构造“路网网格编号-面积-人的个数”数据表(如表5所示)。
[0079] 表5
[0080] LWWGID area peopleCount
[0081] 表5中的peopleCount为路网网格中的人数。
[0082] 6-6.对表5进行逐个扫描,通过peopleCount/area获得每个路网网格中人口密度。
[0083] 最后需要说明的是,以上具体的实施例仅用于详细说明本发明,但本领域的技术人员应该理解,本发明并不局限于以上所述实施例,可以对本发明的技术方案进行修改或者等同替换,但不会偏离本发明的精神和范围。