一种多源矢量数据存储及迭代计算方法与流程

文档序号:17489445发布日期:2019-04-23 20:18阅读:368来源:国知局
一种多源矢量数据存储及迭代计算方法与流程

本发明涉及数据库技术领域,尤其是一种多源矢量数据存储及迭代计算方法。



背景技术:

现有技术中,矢量数据来源种类较多(shp、excel、geojson等),尚未存在一套解决多源矢量数据从上传、自动解析到快速定位展示的开源解决方案。虽然通过gdal等开源库能够实现shp数据的解析与定位,但是仅对shp支持具有一定的局限性。



技术实现要素:

本发明所要解决的技术问题在于,提供一种多源矢量数据存储及迭代计算方法,能够实现多源矢量数据的标准化存储与数据自动定位,并且全开源框架能够有效节约项目成本,采用的是主流的关系数据库,可以和现在的软件项目无缝集成。

为解决上述技术问题,本发明提供一种多源矢量数据存储及迭代计算方法,包括如下步骤:

(1)数据解析;通过开源库对上传的各类矢量数据作解析;

(2)数据入库;识别并提取空间信息字段,用字符串拼接方式转换成wkt标准的长字符串,新增coordniate字段存储wkt格式数据,随矢量数据一起入mysql库;

(3)迭代计算;后台计算入库数据的范围,当数据量超过一定范围时,计算当前数据所占polygon大小,分别存入链表,最后再计算链表内所有polygon范围的合集,得出总的范围。

优选的,步骤(1)中,矢量数据包括shp、excel和geojson。

优选的,步骤(1)中,通过开源库对上传的各类矢量数据作解析具体为:

shp解析:通过shapefileforpython、gdal开源库读取shp数据并获取其空间数据与特征数据;

excel解析:通过xlrd或者pandas开源库读取excel数据;

geojson解析:通过python的json库读取geojson数据,读入内存后转换成json对象,根据geojson通用格式标准,解析其features内的geometry、type和properties属性,获取空间、类型、特征数据,标准化入库。

优选的,步骤(3)中,后台计算入库数据的范围具体包括如下步骤:

(31)提取wkt空间信息,拼接geometrycollection();

(32)判断拼接字符串长度,超过限定范围后先行计算当前数据范围;

(33)字符串拼接完成,执行同上查询语句;

(34)链表若不为空,再次拼接链表中数据,执行上述查询语句,得到最后的范围。

优选的,步骤(3)中,判断拼接字符串长度,超过限定范围后先行计算当前数据范围;范围也是wkt格式,存入链表,执行mysql查询。

本发明的有益效果为:本发明采用基于wkt格式的数据存储和mysql5.7的空间查询机制实现多源矢量数据的标准化存储与数据自动定位,并且全开源框架能够有效节约项目成本,采用的是主流的关系数据库,可以和现在的软件项目无缝集成。

附图说明

图1为本发明的方法流程示意图。

具体实施方式

如图1所示,一种多源矢量数据存储及迭代计算方法,包括如下步骤:

(1)数据解析;通过开源库对上传的各类矢量数据作解析;

(2)数据入库;识别并提取空间信息字段,用字符串拼接方式转换成wkt标准的长字符串,新增coordniate字段存储wkt格式数据,随矢量数据一起入mysql库;

(3)迭代计算;后台计算入库数据的范围,当数据量超过一定范围时,计算当前数据所占polygon大小,分别存入链表,最后再计算链表内所有polygon范围的合集,得出总的范围。

通过开源库对上传的各类矢量数据作解析具体为:

shp解析:通过shapefileforpython、gdal开源库读取shp数据并获取其空间数据与特征数据,比如shapefile.reader(file)读取数据到内存,再通过fields、shapetypename、shaperecords等属性获取其字段名称、空间特征及数据等,解码以后入mysql库;

excel解析:通过xlrd(推荐,轻量化)或者pandas等开源库读取excel数据,比如用xlrd.open_workbook(filepath)加载excel数据到内存,再通过sheet_by_name(sheet)获取数据表,row_values()获取表内的行数据,进而解析入库;

geojson解析:通过python的json库读取geojson数据,读入内存后转换成json对象,根据geojson通用格式标准,解析其features内的geometry、type和properties属性,获取空间、类型、特征数据,标准化入库,这里需要用到geomet库的wkt格式转化接口,将空间数据转换成wkt格式,比较方便。

步骤(3)中,后台计算入库数据的范围具体包括如下步骤:

(31)提取wkt空间信息,拼接geometrycollection();

(32)判断拼接字符串长度,超过限定范围后先行计算当前数据范围;范围也是wkt格式,如ploygon(xxxxx,xxxx,xxxx,xxxx)),存入链表,计算方式为sql语句:“selectastext(envelope(geomfromtext('geometrycollection(%s)')))”执行mysql查询;

(33)字符串拼接完成,执行同上查询语句;

(34)链表若不为空,再次拼接链表中数据,执行上述查询语句,得到最后的范围。

判断拼接字符串长度,超过限定范围后先行计算当前数据范围;范围也是wkt格式,如ploygon(xxxxx,xxxx,xxxx,xxxx)),存入链表,计算方式为sql语句:“selectastext(envelope(geomfromtext('geometrycollection(%s)')))”执行mysql查询。

这里的总体范围是在一定情况下才会出现,比如拼接mysql查询语句的总大小超过数据库自身要求,这就需要根据数据大小分批次的执行“envelope(geomfromtext('geometrycollection(%s)'))”语句,查询结果将会是一个面区域范围“ploygon(xxxxx,xxxx,xxxx,xxxx)”,将每次查询结果存入一张链表,最后将链表中的所有ploygon再此拼接成一个'geometrycollection()',执行一次“envelope(geomfromtext('geometrycollection(%s)'))”,既得出总的范围。

本发明在数据入库后动态计算数据的extent,mysql5.7以上版本本身支持wkt格式字符串的地理空间转换,在做空间查询时通过geomfromtext(%s)接口能够有效的支持多源数据的空间查询。

本发明将excel、shape、geojson等通用格式数据解析,新增wkt字段存储空间数据;利用mysql5.7的空间查询特性动态生成数据范围实现矢量数据的标准化与快速定位;当数据量较大时通过迭代的方式分批计算数据范围,再计算所有范围的合集。

本发明采用基于wkt格式的数据存储和mysql5.7的空间查询机制实现多源矢量数据的标准化存储与数据自动定位,并且全开源框架能够有效节约项目成本,采用的是主流的关系数据库,可以和现在的软件项目无缝集成。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1