著录项信息
| 专利名称 | 一种交互式三维数字城市的构建和显示方法 |
| 申请号 | CN201510353556.3 | 申请日期 | 2015-06-24 |
| 法律状态 | 授权 | 申报国家 | 中国 |
| 公开/公告日 | 2017-01-04 | 公开/公告号 | CN106296815A |
| 优先权 | 暂无 | 优先权号 | 暂无 |
| 主分类号 | G06T17/05 | IPC分类号 | G;0;6;T;1;7;/;0;5查看分类表>
|
| 申请人 | 程昊;王平;冯京 | 申请人地址 | 四川省成都市青羊区蜀鑫东路51号6-2-201
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
| 权利人 | 程昊,王平,冯京 | 当前权利人 | 程昊,王平,冯京 |
| 发明人 | 程昊;王平;冯京 |
| 代理机构 | 暂无 | 代理人 | 暂无 |
摘要
本发明公开了一种交互式三维数字城市的构建方法。由1种途径实现,是实景化三维数字城市的构建和显示,利用相机拍摄制作的全景图,将全景图贴图到一个三维球面上,按空间顺序模拟人的运动轨迹,实时更换球面上对应坐标位置的全景图,显示给用户。该方法提供了一种低成本、高效率、标准化、平台化三维数字城市的构建和显示方法。
1.实景化三维数字城市的构建方法,其特征在于如下步骤:
步骤一:全景图拍摄
A1、制定全景图拍摄计划,拍摄并生成全景图;
A101、使用同一拍摄地点不同拍摄角度的照片合成全景图,不同拍摄点的照片按照统
一的起始拍摄方向、拍摄顺序及统一的合成顺序,保证所有拍摄点的全景图拥有统一的方
向;
A102、定义2条或2条以上的道路交叉口为“路口”,定义每两个相邻路口间的道路为“路
段”,拍摄点类型分为2类,一类位于“路口”,定义为“路口点”,一类位于“路段”,定义为“路段点”;
A2、为全景图编号,记录全景图的坐标值、街道门牌号;
A201、定义“全景图编号”包括以下字段:城市标识、拍摄点类型标识、路段或路口序号、全景图序号;
A3、定义“全景图路径”为全景图在设备上的保存路径,将“全景图路径”、“全景图编
号”、对应的全景图坐标值、街道门牌号存入数据库保存;
A4、在数据库中设置一个“路口点”数据表,为每个“路口点”的“全景图编号”存储与“路口点”在空间位置上相邻的“全景图编号”;
A5、将所有全景图拍摄点以全景图图标的方式显示在二维电子地图上,每个全景图图
标对应一个“全景图编号”;
步骤二:构建三维虚拟空间
B1、运用编程工具,构建一个三维数据格式的主显示文件;
B2、构建一个三维球面的“类”,为这个“类”设置参数和方法,参数包括“球面标识”、“全景图编号”、“全景图路径”、“显示状态”、“热点状态”、“热点编号”、“热点标识”、“热点代码”、“视点坐标”、“球面中心坐标”、“半径”、“顶点数量”、“顶点坐标”、“经度”、“纬度”、“视点方向”、“视觉角度”,方法包括参数的设置与调用、实例的构建与重绘,将这个“类”存为一个引用文件,由主显示文件调用;
B3、构建一个方向指示牌的“类”,这个“类”是在三维空间中构建一个三维球面,参数包括“球面标识”、“显示状态”、“球面中心坐标”、“半径”、“全景图路径”,方法包括参数的设置与调用、实例的构建与重绘,将这个“类”存为一个引用文件,由主显示文件调用;
B4、编辑主显示文件,调用三维球面的“类”,构建数个三维球面,每个三维球面对应一
个全景图拍摄点,为每个三维球面设置“球面标识”,设置每个三维球面的“全景图编号”为“空”、“显示状态”为“假”、其他参数设置为缺省值;
B5、编辑主显示文件,调用指示牌的“类”,构建一个“方向指示牌”,设置“方向指示牌”的“半径”小于B4步骤中三维球面的“半径”、大于1,“显示状态”为“假”,在图片编辑器中打开一张全景图,在全景图上按该全景图拍摄时记录的方向,在全景图上标注方向,然后将除方向标注外的所有图像信息清空,背景设置为透明,另存为一张PNG格式的图片,将这张图片在设备上的保存路径传递给“方向指示牌”的“全景图路径”;
步骤三:热点设置与交互编程
C1、定义三维空间或二维空间中需要响应用户动作的对象为“热点”;
C2、在数据库中查询需要设置热点的“全景图编号”,编辑主显示文件,将“全景图路径”和“全景图编号”写入其中一个三维球面,将视点坐标设置为该三维球面的“球面中心坐
标”,该三维球面“显示状态”设置为“真”,其他不变;
C3、在浏览器中打开主显示文件,在三维空间中寻找需要设置热点的图像区域,用鼠标
在该图像的四周按顺序点击一周,勾勒出该图像的大致边线,采集鼠标点击的坐标值,将这些坐标值作为三维球面“类”中的“顶点坐标”,和“热点编号”、“顶点数量”、“热点代码”、“热点标识”一起,存储到数据库中,将数据库中对应“全景图编号”的数据段“热点状态”设置为“真”;
步骤四:实景化三维数字城市显示流程
D1、当用户在二维电子地图上打开实景功能,点击地图中某个全景图图标时,采集该图
标的“全景图编号”bh,在浏览器主窗口中打开主显示文件,将电子地图以小窗口的形式显示在主窗口的右下角,在电子地图中显示该“全景图编号”的坐标轨迹,根据A201的编号规则,判断该“全景图编号”bh的拍摄点类型,如果是“路段点”类型就执行D2到D3步骤,如果是“路口点”类型则执行D4步骤,以后的步骤按顺序执行;
D2、在数据库中查询“全景图编号”bh的数据段,将“全景图编号”bh及对应的“全景图路径”传递给主显示文件中的“02号”三维球面,当前视点设置为“02号”三维球面的“球面中心坐标”,“02号”三维球面“显示状态”设置为“真”,其他不变,重绘球面;
D3、在数据库中查询是否存在编号为“bh-1”或“bh+1”的“全景图编号”,如果有就将
“bh-1”或“bh+1”的“全景图编号”及对应的“全景图路径”一起传递给其他未传递“全景图编号”的三维球面,同时执行D11步骤后返回,如果没有就到A4所述的“路口点”数据表中查询“bh”是否为某个“路口点”的相邻“全景图编号”,如果是就将该“路口点”的“全景图编号”、“全景图路径”传递给其中一个未传递全景图编号的三维球面,同时执行D11步骤后返回,如果不是就判定不存在编号为“bh-1”或“bh+1”的“全景图编号”,“bh”已经是最后的一个“全景图编号”,重绘球面;
D4、如果“bh”属于“路口点”,就在数据库中查询编号为“bh”的“全景图编号”数据段,将“全景图编号”“bh”、“bh”对应的“全景图路径”传递给主显示文件中的“02号”三维球面,同时执行D11步骤后返回,当前视点设置为“02号”三维球面的“球面中心坐标”,“02号”三维球面的“显示状态”设置为“真”,将“bh”的相邻“全景图编号”及各个编号对应的“全景图路径”传递给其他未传递全景图编号的三维球面,同时执行D11步骤后返回,重绘球面;
D5、在主显示文件中设置一个如下表的“球面编号状态表”,记录“球面标识”和“全景图编号”的对应关系,每当球面“全景图编号”发生变化时,实时更新“球面编号状态表”中的数据;
“01号”三维球面 “02号”三维球面 “03号”三维球面
全景图编号bh-1 全景图编号bh 全景图编号bh+1
显示状态“假” 显示状态“真” 显示状态“假”
D6、根据“球面编号状态表”,将数据库中查询到的各“全景图编号”对应的坐标值,为每个坐标值增加一位高程坐标值“0”,生成三维坐标值,传递给各自三维球面的“球面中心坐标”,重新排列这些球面的空间位置,计算所有2个相邻三维球面之间的距离,划定相邻球面之间的范围边界为2个三维球面的中间位置;
D7、当模拟的人在主显示文件三维空间中移动,从“02号”三维球面,“全景图编号”为
“bh”的范围越过边界,到达相邻的“03号”三维球面,“全景图编号”为“bh+1”的范围时,将“02号”三维球面,“全景图编号”为“bh”的“显示状态”设置为“假”,将“03号”三维球面,“全景图编号”为“bh+1”的“显示状态”设置为“真”,将当前视点设置为“03号”三维球面,“全景图编号”为“bh+1”的“球面中心坐标”,将“01号”三维球面的“全景图编号”设置为“bh+2”,视点方向从“02号”三维球面,“全景图编号”为“bh+1”指向“01号”三维球面,“全景图编号”为“bh+2”,这时“球面编号状态表”如下表;
“02号”三维球面 “03号”三维球面 “01号”三维球面
全景图编号bh 全景图编号bh+1 全景图编号bh+2
显示状态“假” 显示状态“真” 显示状态“假”
D8、在数据库中查询是否存在全景图编号为“bh+2”的“全景图编号”,如果有就将“bh+
2”的“全景图编号”、“bh+2”对应的“全景图路径”、“bh+2”对应的坐标值一起传递给“01号”三维球面,同时执行D11步骤后返回,如果没有就到A4步骤的“路口点”数据表中查询“bh+1”是否为某个“路口点”的相邻“全景图编号”,如果是就将该“路口点”的“全景图编号”及“全景图路径”传递给“01号”三维球面,同时执行D11步骤后返回,如果不是就可以判定不存在编号为“bh+2”的“全景图编号”,“bh+1”已经是最后的一个“全景图编号”,按D6步骤重新设置“01号”三维球面的“球面中心坐标”,计算“01号”三维球面和“03号”三维球面的中间位置,重绘球面;
D9、当模拟的人在主显示文件三维空间中继续移动时,按D7、D8步骤的规则执行;
D10、采集模拟的人的空间位置和方向,删除三维坐标值中的高程坐标值,生成二维坐
标值,输出到二维电子地图中,实时显示模拟的人在二维电子地图上的运动轨迹和方向,结束流程;
D11、查询“全景图编号”对应的数据中字段“热点状态”是否为“真”,如果为“真”执行D12步骤后返回,如果为“假”则直接返回;
D12、在数据库中查询该“全景图编号”对应的“热点编号”、“顶点数量”、“顶点坐标”、“热点代码”、“热点标识”,将以上数据传递给该“全景图编号”的球面,返回D11步骤;
D13、当用户在功能菜单上打开方向指示牌功能时,设置B5步骤中的“方向指示牌”“显
示状态”为“真”,查询“球面编号状态表”中当前视点所在的“球面标识”,将“方向指示牌”的“球面中心坐标”设置为当前视点所在三维球面的“球面中心坐标”;
D14、当用户在功能菜单上关闭方向指示牌功能时,设置B5步骤中的“方向指示牌”“显
示状态”为“假”,当“球面编号状态表”中的视点所在的三维球面发生变化时,“方向指示牌”的“球面中心坐标”保持与视点所在三维球面的“球面中心坐标”一致。
一种交互式三维数字城市的构建和显示方法\n一、技术领域\n[0001] 本发明属于空间信息技术领域,涉及一种三维数字城市的构建和显示方法。\n二、背景技术\n[0002] 三维城市建筑模型及街景地图的使用,正日益成为数字城市建设的重要内容,与\n二维地图相比,三维模型和街景地图更加直观,但是目前的三维模型只能浏览建筑外部特\n征,无法做到内部细节查看及人机交互,也无法在数据库中统一管理。\n[0003] 目前的街景地图主要是通过点击图片中的箭头来实现不同地点全景图的切换,是\n运用二维平面模拟的三维空间,没有立体空间的纵深感,也没有交互功能。\n三、发明内容\n[0004] 本发明提供的交互式三维数字城市的构建方法的原理是,将实景数据和模型数据\n存储在数据库中,由授权用户操作二维电子地图,查询当前地理位置的实景数据和模型数\n据,然后将查询到的数据传递到三维场景和二维场景中,显示给用户,用户可以操作三维场景和二维场景中的节点,实现互动功能(图1)。\n[0005] 本发明提供了一种实景化三维数字城市的构建方法,利用相机拍摄城市街道的全\n景图,将全景图以图标的方式按拍摄点坐标加载到二维电子地图上,编辑一个三维数据格\n式的文件,将各个拍摄点的全景图按空间顺序逐步贴图到三维数据文件中的球面上,利用\n预先编制好的浏览器插件,打开包含全景图的三维数据文件,浏览三维空间,同时提供人机交互和数据管理。\n[0006] 本发明提供的实景化三维数字城市的构建方法具体步骤为:\n[0007] 第一步:全景图拍摄等数据准备。\n[0008] 第二步:构建三维虚拟空间。\n[0009] 第三步:编制浏览器插件。\n[0010] 第四步:实景化三维数字城市显示流程。\n[0011] 本发明的优点在于:低成本、高效率、标准化、平台化。\n[0012] 统一数据格式,为多种应用提供基础数据和实现方法。\n四、附图说明\n[0013] 图1实景化三维数字城市的构建原理。\n[0014] 图2-1用于方向指示牌的图片\n[0015] 图2-2贴图后的方向指示牌\n[0016] 图3附加在设备上的“热点”对象\n[0017] 图4-1“路段点”的贴图方式\n[0018] 图4-2“路口点”的贴图方式\n[0019] 图5三维球面贴图流程\n[0020] 图6贴图后的三维球面\n[0021] 图7-1模拟的人在移动前的球面状态\n[0022] 图7-2模拟的人在第一次移动后的球面状态\n[0023] 图7-3模拟的人在第二次移动后的球面状态\n[0024] 图8-1打开方向指示牌后显示的“东方”\n[0025] 图8-2打开方向指示牌后显示的“南方”\n五、具体实施方式\n[0026] 实景化三维数字城市的构建方法,其特征在于如下步骤:\n[0027] 步骤一:全景图拍摄\n[0028] A1、制定全景图拍摄计划,拍摄并生成全景图;\n[0029] A101、使用同一拍摄地点不同拍摄角度的照片合成全景图,不同拍摄点的照片按\n照统一的起始拍摄方向、拍摄顺序及统一的合成顺序,保证所有拍摄点的全景图拥有统一\n的方向;\n[0030] A102、定义2条或2条以上的道路交叉口为“路口”,定义每两个相邻路口间的道路为“路段”,拍摄点类型分为2类,一类位于“路口”,定义为“路口点”,一类位于“路段”,定义为“路段点”;\n[0031] A2、为全景图编号,记录全景图的坐标值、街道门牌号;\n[0032] A201、定义“全景图编号”包括以下字段:城市标识、拍摄点类型标识、路段或路口序号、全景图序号;\n[0033] A3、定义“全景图路径”为全景图在设备上的保存路径,将“全景图路径”、“全景图编号”、对应的全景图坐标值、街道门牌号存入数据库保存;\n[0034] A4、在数据库中设置一个“路口点”数据表,为每个“路口点”的“全景图编号”存储与“路口点”在空间位置上相邻的“全景图编号”;\n[0035] A5、将所有全景图拍摄点以全景图图标的方式显示在二维电子地图上,每个全景\n图图标对应一个“全景图编号”;\n[0036] 步骤二:构建三维虚拟空间\n[0037] B1、运用编程工具,构建一个三维数据格式的主显示文件;\n[0038] B2、构建一个三维球面的“类”,为这个“类”设置参数和方法,参数包括“球面标识”、“全景图编号”、“全景图路径”、“显示状态”、“热点状态”、“热点编号”、“热点标识”、“热点代码”、“视点坐标”、“球面中心坐标”、“半径”、“顶点数量”、“顶点坐标”、“经度”、“纬度”、“视点方向”、“视觉角度”,方法包括参数的设置与调用、实例的构建与重绘,将这个“类”存为一个引用文件,由主显示文件调用;\n[0039] B3、构建一个方向指示牌的“类”,这个“类”是在三维空间中构建一个三维球面,参数包括“球面标识”、“显示状态”、“球面中心坐标”、“半径”、“全景图路径”,方法包括参数的设置与调用、实例的构建与重绘,将这个“类”存为一个引用文件,由主显示文件调用;\n[0040] B4、编辑主显示文件,调用三维球面的“类”,构建数个三维球面,每个三维球面对应一个全景图拍摄点,为每个三维球面设置“球面标识”,设置每个三维球面的“全景图编号”为“空”、“显示状态”为“假”、其他参数设置为缺省值;\n[0041] B5、编辑主显示文件,调用指示牌的“类”,构建一个“方向指示牌”,设置“方向指示牌”的“半径”小于B4步骤中三维球面的“半径”、大于1,“显示状态”为“假”,在图片编辑器中打开一张全景图,在全景图上按该全景图拍摄时记录的方向,在全景图上标注方向,然后将除方向标注外的所有图像信息清空,背景设置为透明,另存为一张PNG格式的图片,将这张图片在设备上的保存路径传递给“方向指示牌”的“全景图路径”;\n[0042] 步骤三:热点设置与交互编程\n[0043] C1、定义三维空间或二维空间中需要响应用户动作的对象为“热点”;\n[0044] C2、在数据库中查询需要设置热点的“全景图编号”,编辑主显示文件,将“全景图路径”和“全景图编号”写入其中一个三维球面,将视点坐标设置为该三维球面的“球面中心坐标”,该三维球面“显示状态”设置为“真”,其他不变;\n[0045] C3、在浏览器中打开主显示文件,在三维空间中寻找需要设置热点的图像区域,用鼠标在该图像的四周按顺序点击一周,勾勒出该图像的大致边线,采集鼠标点击的坐标值,将这些坐标值作为三维球面“类”中的“顶点坐标”,和“热点编号”、“顶点数量”、“热点代码”、“热点标识”一起,存储到数据库中,将数据库中对应“全景图编号”的数据段“热点状态”设置为“真”;\n[0046] 步骤四:实景化三维数字城市显示流程\n[0047] D1、当用户在二维电子地图上打开实景功能,点击地图中某个全景图图标时,采集该图标的“全景图编号”bh,在浏览器主窗口中打开主显示文件,将电子地图以小窗口的形式显示在主窗口的右下角,在电子地图中显示该“全景图编号”的坐标轨迹,根据A201的编号规则,判断该“全景图编号”bh的拍摄点类型,如果是“路段点”类型就执行D2到D3步骤,如果是“路口点”类型则执行D4步骤,以后的步骤按顺序执行;\n[0048] D2、在数据库中查询“全景图编号”bh的数据段,将“全景图编号”bh及对应的“全景图路径”传递给主显示文件中的“02号”三维球面,当前视点设置为“02号”三维球面的“球面中心坐标”,“02号”三维球面“显示状态”设置为“真”,其他不变,重绘球面;\n[0049] D3、在数据库中查询是否存在编号为“bh-1”或“bh+1”的“全景图编号”,如果有就将“bh-1”或“bh+1”的“全景图编号”及对应的“全景图路径”一起传递给其他未传递“全景图编号”的三维球面,同时执行D11步骤后返回,如果没有就到A4所述的“路口点”数据表中查询“bh”是否为某个“路口点”的相邻“全景图编号”,如果是就将该“路口点”的“全景图编号”、“全景图路径”传递给其中一个未传递全景图编号的三维球面,同时执行D11步骤后返回,如果不是就判定不存在编号为“bh-1”或“bh+1”的“全景图编号”,“bh”已经是最后的一个“全景图编号”,重绘球面;\n[0050] D4、如果“bh”属于“路口点”,就在数据库中查询编号为“bh”的“全景图编号”数据段,将“全景图编号”“bh”、“bh”对应的“全景图路径”传递给主显示文件中的“02号”三维球面,同时执行D11步骤后返回,当前视点设置为“02号”三维球面的“球面中心坐标”,“02号”三维球面的“显示状态”设置为“真”,将“bh”的相邻“全景图编号”及各个编号对应的“全景图路径”传递给其他未传递全景图编号的三维球面,同时执行D11步骤后返回,重绘球面;\n[0051] D5、在主显示文件中设置一个如下表的“球面编号状态表”,记录“球面标识”和“全景图编号”的对应关系,每当球面“全景图编号”发生变化时,实时更新“球面编号状态表”中的数据;\n[0052] “01号”三维球面 “02号”三维球面 “03号”三维球面\n全景图编号bh-1 全景图编号bh 全景图编号bh+1\n显示状态“假” 显示状态“真” 显示状态“假”\n[0053] D6、根据“球面编号状态表”,将数据库中查询到的各“全景图编号”对应的坐标值,为每个坐标值增加一位高程坐标值“0”,生成三维坐标值,传递给各自三维球面的“球面中心坐标”,重新排列这些球面的空间位置,计算所有2个相邻三维球面之间的距离,划定相邻球面之间的范围边界为2个三维球面的中间位置;\n[0054] D7、当模拟的人在主显示文件三维空间中移动,从“02号”三维球面,“全景图编号”为“bh”的范围越过边界,到达相邻的“03号”三维球面,“全景图编号”为“bh+1”的范围时,将“02号”三维球面,“全景图编号”为“bh”的“显示状态”设置为“假”,将“03号”三维球面,“全景图编号”为“bh+1”的“显示状态”设置为“真”,将当前视点设置为“03号”三维球面,“全景图编号”为“bh+1”的“球面中心坐标”,将“01号”三维球面的“全景图编号”设置为“bh+2”,视点方向从“02号”三维球面,“全景图编号”为“bh+1”指向“01号”三维球面,“全景图编号”为“bh+2”,这时“球面编号状态表”如下表;\n[0055] “02号”三维球面 “03号”三维球面 “01号”三维球面\n全景图编号bh 全景图编号bh+1 全景图编号bh+2\n显示状态“假” 显示状态“真” 显示状态“假”\n[0056] D8、在数据库中查询是否存在全景图编号为“bh+2”的“全景图编号”,如果有就将“bh+2”的“全景图编号”、“bh+2”对应的“全景图路径”、“bh+2”对应的坐标值一起传递给“01号”三维球面,同时执行D11步骤后返回,如果没有就到A4步骤的“路口点”数据表中查询“bh+1”是否为某个“路口点”的相邻“全景图编号”,如果是就将该“路口点”的“全景图编号”及“全景图路径”传递给“01号”三维球面,同时执行D11步骤后返回,如果不是就可以判定不存在编号为“bh+2”的“全景图编号”,“bh+1”已经是最后的一个“全景图编号”,按D6步骤重新设置“01号”三维球面的“球面中心坐标”,计算“01号”三维球面和“03号”三维球面的中间位置,重绘球面;\n[0057] D9、当模拟的人在主显示文件三维空间中继续移动时,按D7、D8步骤的规则执行;\n[0058] D10、采集模拟的人的空间位置和方向,删除三维坐标值中的高程坐标值,生成二\n维坐标值,输出到二维电子地图中,实时显示模拟的人在二维电子地图上的运动轨迹和方\n向,结束流程;\n[0059] D11、查询“全景图编号”对应的数据中字段“热点状态”是否为“真”,如果为“真”执行D12步骤后返回,如果为“假”则直接返回;\n[0060] D12、在数据库中查询该“全景图编号”对应的“热点编号”、“顶点数量”、“顶点坐标”、“热点代码”、“热点标识”,将以上数据传递给该“全景图编号”的球面,返回D11步骤;\n[0061] D13、当用户在功能菜单上打开方向指示牌功能时,设置B5步骤中的“方向指示牌”“显示状态”为“真”,查询“球面编号状态表”中当前视点所在的“球面标识”,将“方向指示牌”的“球面中心坐标”设置为当前视点所在三维球面的“球面中心坐标”;\n[0062] D14、当用户在功能菜单上关闭方向指示牌功能时,设置B5步骤中的“方向指示牌”“显示状态”为“假”,当“球面编号状态表”中的视点所在的三维球面发生变化时,“方向指示牌”的“球面中心坐标”保持与视点所在三维球面的“球面中心坐标”一致。
法律信息
- 2020-11-10
- 2017-02-01
实质审查的生效
IPC(主分类): G06T 17/05
专利申请号: 201510353556.3
申请日: 2015.06.24
- 2017-01-04
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有引用任何外部专利数据! |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |