CN104021210B - 以GeoJSON格式半结构化方式存储地理数据的MongoDB集群的地理数据读写方法 - Google Patents
以GeoJSON格式半结构化方式存储地理数据的MongoDB集群的地理数据读写方法 Download PDFInfo
- Publication number
- CN104021210B CN104021210B CN201410276517.3A CN201410276517A CN104021210B CN 104021210 B CN104021210 B CN 104021210B CN 201410276517 A CN201410276517 A CN 201410276517A CN 104021210 B CN104021210 B CN 104021210B
- Authority
- CN
- China
- Prior art keywords
- geodata
- class
- document
- mongodb
- geographic
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/80—Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/29—Geographical information databases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Remote Sensing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明针对MongoDB集群设计了大规模地理数据存储方案,在MongoDB集群中以GeoJSON格式半结构化方式组织地理数据,使分布式高速MongoDB集群高效存储大规模地理数据成为可能。针对该地理数据存储方案,本发明提出了地理数据的读写方法以及可实现该地理数据读写方法的驱动程序,以OGR类库为地理数据读写驱动的设计架构,以GeoJSON格式半结构化的读写MongoDB集群地理数据源。本发明采用OGR函数库,在地理数据与MongoDB集群之间通过内存中构建的OGR对象建立桥梁,使针对MongoDB集群的地理数据高效读写成为可能,使得高性能地理分析算法可以运行在MongoDB数据库集群之上。
Description
技术领域
本发明涉及MongoDB集群中地理数据的存储方式,特别涉及以GeoJSON格式半结构化方式存储地理数据的MongoDB集群的地理数据读写方法。
背景技术
随着地理信息技术的不断发展,如高分辨率空间传感器、移动定位技术以及雷达激光遥测等技术的大范围普及与应用,尤其是全球对地观测系统(Global EarthObservation System of Systems,GEOSS)、国家信息高速公路(National InformationInfrastructure,NII)、国家地理数据基础设施(National Spatial DataInfrastructure,NSDI)等重大计划的实施,人类对地球不同层面、不同现象的综合观测能力达到了前所未有的水平。这些进步一方面使得海量地理信息得以在更广阔的领域不断获取和更新,带来了极其丰富翔实的地物信息,但同时也衍生了海量地理数据存储与管理问题。
地理数据库的存储需求已经从目前的GB级和TB级达到了PB级,海量地理数据已无法沿用传统集中存储管理方式(蔡磊等,2009;朱庆等,2006)。如何对海量地理数据进行高效的存储、组织、管理与处理,使得海量空间信息能高效的为各行各业所用,成为一个迫切需要解决的问题。与此同时,另一方面,信息技术特别是信息通讯技术的迅速发展,使得互联网、WEB2.0、社交网络、物联网、移动互联网、云计算等相继进入人们的日常工作和生活中,尤其是近年来移动互联网、移动定位技术、地图服务以及基于位置的服务(LocationBased Services,LBS)等新兴业务的迅猛崛起,为互联网产业注入了新的维度——位置信息。
全球数据无论在信息量还是在多样性方面都呈现出指数式爆炸增长。根据国际数据公司IDC发布的研究报告,2011年全球创建和复制的数据总量为1.8ZB(约1.8万亿GB),预计全球数据量大约每两年翻一番,到2020年全球将达到35ZB的数据信息量(IDC,2011)。如今,人在每分每秒产生的数据(包括位置、状态,见闻、言论等等)都能够被数字化并进入互联网,各类传感器可以应用到各个领域收集我们所需的数据,甚至能植入人体。新的互联网址协议IPv6可以标识如家用电器、远程照相机、汽车、传感器等,甚至可以细微到大海里的一颗沙子。数据库巨人Jim Gray预测,到2047年现实世界人、事、物的所有信息都将上网(Gordon Bell,Jim Gray,1999)。前所未有的巨量数据信息正在朝着数字地球-智慧地球的方向迅速聚集,人类步入大数据时代。
当前地理数据主要依赖关系型数据库进行存储与管理,但是关系型数据库在大数据时代背景下面临以下三个方面的突出问题:
(1)性能问题关系型数据库建立在关系模型的基础上,多表的连接査询及关系型数据库严格的事务要求限制了数据读写的速度,特别是在高并发的条件下,事务的ACID属性——原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),成为影响读写性能的瓶颈。
(2)易扩展性问题在云计算架构下,关系型数据库很难进行横向扩展。当一个应用系统的数据量和访问量与日俱增时,关系型数据库系统很难通过简单的添加更多硬件和服务节点来扩展性能,并同时实现系统负载均衡。
(3)数据库模式的问题关系型数据库的关系模式有严格的定义,如果业务发生变化,需要增加或减少某个属性会给系统带来较大的改动。对于一些半结构化的数据而言,如果使用关系模式进行数据建模,表中会有很多元组的属性列是空值。这不仅造成存储空间的浪费,而且影响系统性能。
针对上述问题,近年来出现了一些新的数据管理系统,它们只提供简单的读写操作,具有很好的水平扩展能力,可以分布式的部署在多个服务器上。这些系统的出现,很好地解决了现阶段大数据管理中出现的问题,打破了关系型数据库在云计算环境下的性能瓶颈。由于它们不是用关系模型作为其主要的数据模型,并且不提供SQL接口,而被统称为“NoSQL”。NoSQL(Not Only SQL)也被称为非关系型数据库,是一系列与关系型数据库典型模型有较大差异的数据管理系统的统称,其中最显著的差异在于它不使用SQL作为基本的査询语言。NoSQL数据库没有特定的表结构,通常不支持连接操作,不支持完整的ACID属性,并且通常具有强大的水平扩展性。
其中,MongoDB是最受欢迎的开源NoSQL数据库之一,由10gen公司在2009年2月推出第一版,因其高效的性能和丰富的使用功能在生产中有非常广泛的应用。MongoDB的设计定位是在具有key/value存储方式的高性能和高度扩展性的同时,具备传统的关系数据库管理系统的丰富功能,集两者的优势于一身。MongoDB使用数据结构松散的JSON格式面向文档存储数据,使用自动分片(Auto-Sharding)实现海量数据存储,支持全类型索引,使用的查询语言语法类似面向对象査询语言,可以实现类似关系数据库单表查询的绝大部分功能(丰富的查询功能是其相较其他NoSQL数据库的突出优点),支持主/从(Master/Slave)和复制集(Replica Set)两种数据复制机制。
但是将NoSQL数据应用于地理数据存储的研究与技术很少见,地理数据缺少向NoSQL数据库输入和输出的读写技术,从而严重限制了地理数据在大数据背景下应用和实施。
发明内容
本发明要解决的技术问题是:克服现有技术缺点,提出一种以GeoJSON格 式半结构化方式存储地理数据的MongoDB集群的地理数据读写方法。
本发明以GeoJSON格式半结构化方式存储地理数据的MongoDB集群,其特征在于:MongoDB集群中包含有若干与地理数据源(DataSource)对应的空间数据库(Database),每个空间数据库包含有若干个与地理图层(Layer)一一对应的地理要素集合(Collection),每个地理要素集合中包含有一个空间元数据文档、若干与地理要素(Feature)一一对应的GeoJSON文档,所述地理要素以GeoJSON文档的形式进行存储,所述空间元数据文档存储有与相应地理图层相关的空间元数据信息。
进一步的,本发明MongoDB集群还具有如下改进:
1、所述空间元数据文档以JSON文档的形式存储。
2、所述空间元数据信息至少包括图层空间参考、图层外边界、图层内地理要素个数、图层名称。
此外,本发明提供的以GeoJSON格式半结构化方式存储地理数据的MongoDB集群中地理数据的读取方法,其特征在于步骤如下:
第1步、根据给定的连接参数建立与MongoDB集群的相应空间数据库(Database)对应地理要素集合(Collection)的数据连接;
第2步、查找所述MongoDB集群对应地理要素集合中的空间元数据文档,获取相应的空间元数据信息;
第3步、在计算机内存中构建以下OGR地理对象:地理数据源对象、地理图层对象、地理要素对象、空间参考对象,所述OGR地理对象是OGR类库中对应类的实例,所述地理数据源对象包含有与对应地理要素集合数目相等的地理图层对象,每个地理图层对象包含有若干地理要素对象;从所述第2步中获取的空间元数据信息中抽取空间参考信息赋值给空间参考对象,完成对空间参考 对象的实例化;
第4步、根据查询条件利用JSON解析函数库对相应空间数据库(Database)对应地理要素集合(Collection)中的GeoJSON文档进行结构解析,逐个提取GeoJSON文档中存储的地理要素信息,赋值给地理要素对象,完成地理要素对象的实例化;
第5步、将所有实例化的地理要素对象更新至相应的地理图层对象中,再将地理图层对象更新至地理数据源对象中,至此,完成将MongoDB集群中地理数据读取至内存。
本发明地理数据读取方法,进一步改进在于:
1、第5步完成之后,MongoDB集群中的地理数据以OGR地理对象的形式存在,用于进一步空间分析和数据处理;
2、所述OGR地理对象可用其他地理要素类库中相应类的实例进行替换。
另外,本发明还提供了以GeoJSON格式半结构化方式存储地理数据的MongoDB集群的地理数据写入方法,其特征在于,步骤如下:
第1步、使用OGR类库读取地理数据矢量文件,在内存中实例化获得以下地理对象:地理数据源对象、地理图层对象、地理要素对象、空间参考对象,所述地理数据源对象包含有若干地理图层对象,地理图层对象包含若干地理要素对象,所述地理对象是OGR类库中对应类的实例;
第2步、在MongoDB集群中创建与地理数据源对象对应的空间数据库(Database),在所述空间数据库内创建与地理图层对象对应的地理要素集合(Collection),并将每个地理图层对象的空间元数据信息分别以单独JSON文档的形式存入相应的地理要素集合(Collection);
第3步、将地理要素对象逐一以单独GeoJSON文档的形式写入空间数据库的相应地理要素集合中,至此,完成将地理数据写入MongoDB集群。
为了实现上述读写方法,本发明在OGR类库框架下研发了以GeoJSON格式半结构化方式存储地理数据的MongoDB集群的读写实现方法。其借助读写驱动完成,首先需构建读写驱动的类库。
构建OGRDriver类的子类MongoDriver类,负责与MongoDB数据源的连接信息管理以及MongoDatasource类的创建与管理;构建OGRDatasource子类MongoDatasource类,负责空间元数据的读取以及MongoLayer对象管理;构建MongoLayer类,继承自OGRLayer类,负责地理要素对象的读写与管理;构建MongoReader类处理GeoJSON文档的解析工作。
从MongoDB集群中读取地理数据时,在内存中构建MongoDriver对象,根据给定的连接参数建立与MongoDB集群中空间数据库对应地理要素集合的数据连接,同时实例化MongoDatasource对象,并在对应地理要素集合中查找空间元数据文档,并从该空间元数据文档中提取空间参考信息、图层外边界信息,实例化待读取图层的空间参考对象,以属性的形式存储在MongoDataSource对象中;创建MongoLayer对象和MongoReader对象,通过MongoReader对象利用JSON解析函数库对待读取的地理要素集合中的GeoJSON文档进行结构解析,将每个GeoJSON文档解析形成OGRFeature对象(OGR地理要素对象),将OGRFeature对象加载至MongoLayer对象中,MongoLayer对象加载至MongoDatasource对象中,完成将MongoDB集群中的地理数据读取至内存;
向MongoDB集群存储地理数据时,首先实例化MongoDriver对象,由MongoDriver对象建立与MongoDB集群的连接,在MongoDB中创建空间数据库,以及空间数据库内的地理要素集合,并将每个图层的空间元数据信息以独立JSON文档的形式存储在对应地理要素集合中;内存中所有的MongoLayer对象将各自图层中每个OGRFeature对象逐一以GeoJSON文档的形式写入对应的地理要素集合中,完成将内存中的地理数据写入MongoDB集群。
所述MongoDriver对象为MongoDriver类的实例,所述MongoDatasource对象为MongoDatasource类的实例,MongoLayer对象为MongoLayer类的实例, 所述MongoReader对象为MongoReader类的实例,所述OGRFeature实例为OGR类库中Feature类的实例。
本发明针对MongoDB集群提出了一种大规模地理数据存储方案,在MongoDB分布式数据库集群中以GeoJSON格式半结构化的方式组织地理数据。具体来说,将地理要素以GeoJSON文档的形式存储在MongoDB集群的地理要素集合中,把描述图层信息的元数据文档也存储在与相应地理要素集合中,从而在MongoDB集群中构建起与通用地理数据组织方式对应的层次关系,使得采用分布式高速MongoDB集群高效存储大规模地理数据成为可能。
针对该地理数据存储方案,本发明提出了地理数据的读写方法以及可实现该地理数据读写方法的驱动程序,以GDAL/OGR类库为地理数据读写驱动的设计架构,以GeoJSON格式半结构化的读写MongoDB集群地理数据源。本发明采用OGR函数库,在地理数据与MongoDB集群之间通过内存中构建的OGR对象建立桥梁,使针对MongoDB集群的地理数据高效读写成为可能,突破了传统分布式数据库对大规模地理数据存储的约束,同时也扩展了GDAL/OGR对MongoDB分布式地理数据库的支持,提供了读写MongoDB分布式地理数据库的有效方法,使得高性能地理分析算法可以运行在MongoDB数据库集群之上。
附图说明
下面结合附图对本发明作进一步的说明。
图1是MongoDB集群中地理数据半结构化组织方式示意图。
图2是MongoDB地理数据库半结构化读写驱动类库设计示意图。
具体实施方式
下面根据附图详细阐述本发明,使本发明的技术路线和操作步骤更加清晰。
如图1所示,为本发明实施例MongoDB集群中地理数据半结构化组织方式示意图。本例中,MongoDB集群中包含2个与地理数据源(DataSource)对应的空间数据库(Database),每个空间数据库包含有若干个与地理图层(Layer) 一一对应的地理要素集合(Collection),每个地理要素集合中包含有一个空间元数据文档、若干与地理要素(Feature)一一对应的GeoJSON文档,地理要素以GeoJSON文档的形式进行存储,空间元数据文档存储有与相应地理图层相关的空间元数据信息(空间元数据信息至少包括图层空间参考、图层外边界、图层内地理要素个数、图层名称)。
以图1中名称为Alaska DB的空间数据库为例,该空间数据库中包括有3个名称依次为railroads、Climate、regions的地理要素集合(每个地理要素集合都对应一个图层),以地理要素集合Climate为例,该地理要素集合中含有一个名为G_sys_Metadata的空间元数据文档,以及若干个记载地理要素信息的GeoJSON文档,该空间元数据文档以JSON文档的形式存储,空间元数据文档中一般记载有图层名称、图层空间参考、图层外边界、图层内地理要素个数、图层创建时间等信息。
本实施例中,以半结构化方式存储地理数据的MongoDB集群中地理数据的读取方法,步骤如下:
第1步、根据给定的连接参数建立与MongoDB集群的相应空间数据库(Database)对应地理要素集合(Collection)的数据连接;
第2步、查找所述MongoDB集群对应地理要素集合中的空间元数据文档,获取相应的空间元数据信息;
第3步、在计算机内存中构建以下OGR地理对象:地理数据源对象、地理图层对象、地理要素对象、空间参考对象,所述OGR地理对象是OGR类库中对应类的实例,所述地理数据源对象包含有与对应地理要素集合数目相等的地理图层对象,每个地理图层对象包含有若干地理要素对象;从所述第2步中获取的空间元数据信息中抽取空间参考信息赋值给空间参考对象,完成对空间参考对象的实例化;
第4步、根据查询条件利用JSON解析函数库对相应空间数据库(Database) 对应地理要素集合(Collection)中的GeoJSON文档进行结构解析,逐个提取GeoJSON文档中存储的地理要素信息,赋值给地理要素对象,完成地理要素对象的实例化;
第5步、将所有实例化的地理要素对象更新至相应的地理图层对象中,再将地理图层对象更新至地理数据源对象中,至此,完成将MongoDB集群中地理数据读取至内存。
本实施例中,以半结构化方式存储地理数据的MongoDB集群的地理数据写入方法,步骤如下:
第1步、使用OGR类库读取地理数据矢量文件,在内存中实例化获得以下地理对象:地理数据源对象、地理图层对象、地理要素对象、空间参考对象,所述地理数据源对象包含有若干地理图层对象,地理图层对象包含若干地理要素对象,所述地理对象是OGR类库中对应类的实例;
第2步、在MongoDB集群中创建与地理数据源对象对应的空间数据库(Database),在所述空间数据库内创建与地理图层对象对应的地理要素集合(Collection),并将每个地理图层对象的空间元数据信息分别以单独JSON文档的形式存入相应的地理要素集合(Collection);
第3步、将地理要素对象逐一以单独GeoJSON文档的形式写入空间数据库的相应地理要素集合中,至此,完成将地理数据写入MongoDB集群。
为了实现对本发明MongoDB集群中地理数据的读写,本发明设计了读写驱动ogr2ogr,读写驱动ogr2ogr的类库设计图见图2。
该读写驱动包括:
MongoDriver类,为OGRDriver类的子类,负责与MongoDB数据源的连接信息管理以及MongoDatasource类的创建与管理;
MongoDatasource类,为OGRDatasource类的子类,负责空间元数据的读取以及MongoLayer对象管理;
MongoLayer类,继承自OGRLayer类,负责地理要素对象的读写与管理;
MongoReader类,负责处理GeoJSON文档的解析工作。
下面通过读写驱动ogr2ogr的读写操作来对本发明做进一步的说明。
本实施例先将ESRI Shapefile文件数据通过ogr2ogr以半结构化的方式导入MongoDB中,用以说明MongoDB地理数据库半结构化读写驱动的写入能力;然后再以ogr2ogr程序将MongoDB中的地理数据导出到ESRI Shapefile格式文件中,用以说明MongoDB地理数据库半结构化读写驱动的读取地理数据的能力。
本实施例测试数据采用QGIS开源项目提供的Alaska开放数据(下载地址:http://download.osgeo.org/qgis/data/qgis_sample_data.zip)中的气象站点数据(Climate.shp)。该数据一共包含了14个气象站点,记录了每个气象站点名称、1月平均气温、7月平均气温和年平均气温等信息,采用了阿尔伯斯等面积投影(Albers_Equal_Area),详细信息参加表1。测试过程在Microsoft Windows7x86_64位操作系统下进行,MongoDB服务器取默认端口(27017),测试数据climate.shp处于GPATH目录下。
表1 美国阿拉斯加气象站点数据(ESRI Shapefile格式)
ID | GEM_FIELD | STATION | T_F_JAN | T_F_JUL | T_F_MEAN |
1 | POINT(4637397.39193088192642658.9359302446) | Annette | 35 | 58 | 46 |
2 | POINT(339822.541717050832766364.1128069465) | Kodiak | 30 | 54 | 40 |
3 | POINT(2639893.58162106393759624.5375258112) | Yakutat | 26 | 54 | 39 |
4 | POINT(-1759042.86293589422008976.8247891644) | Cold Bay | 28 | 50 | 38 |
5 | POINT(-1759042.86293589422008976.8247891644) | St.Paul | 26 | 47 | 35 |
6 | POINT(721725.235943019044097294.8952605384) | Anchorage | 16 | 59 | 36 |
7 | POINT(501930.441446619983432253.6293672188) | Homer | 23 | 54 | 38 |
8 | POINT(671122.357197304024469314.168442511) | Talkeetna | 11 | 59 | 34 |
9 | POINT(-456378.629338781873074549.6386594619) | King Salmon | 15 | 56 | 34 |
10 | POINT(-1212470.00586170846233300.6285879379) | Kotzebue | 2 | 54 | 22 |
11 | POINT(-1750610.6563019215467552.0967166601) | Nome | 6 | 52 | 27 |
12 | POINT(1019933.5435951125345878.5889872853) | Fairbanks | -10 | 63 | 27 |
13 | POINT(-229930.745022167284598529.547886855) | McGrath | -7 | 60 | 27 |
14 | POINT(-298500.309504601237728392.2580691334) | Barrow | -14 | 40 | 10 |
表1中,ID:气象站点编号,GEM_FIELD:站点坐标,STATION:站点名称, T_F_JAN:1月份平均温度,T_F_JUL:7月份平均温度,T_F_MEAN:年平均温度,温度单位:华氏度(°F)。
具体实施步骤如下:
ogr2ogr工具首先使用源数据的读写驱动(ESRI Shapefile)解析源数据格式文件,将源数据climate.shp读入内存,内存中该地理数据以地理对象形式存在,包括有MongoLayer对象,OGRFeature对象,MongoDatasource对象。
在写入MongoDB数据库时,ogr2ogr首先实例化MongoDriver对象,由MongoDriver对象建立与MongoDB集群的连接,在MongoDB中创建空间数据库gisdb,以及空间数据库gisdb内的地理要素集合climate,并将源数据climate.shp的空间元数据信息以独立JSON文档(名称为G_sys_Metadata)的形式存储在地理要素集合climate中;ogr2ogr再调用内存中的MongoLayer对象将图层中每个OGRFeature对象逐一以GeoJSON文档的形式写入对应的地理要素集合climate中,完成将内存中的地理数据写入MongoDB集群。
上述步骤执行完毕后,在MongoDB集群gisdb数据库中产生climate地理要素集合,climate地理要素集合包含14个GeoJSON文档和一个JSON文档,GeoJSON文档中存储每个气象站的地理数据,JSON文档则存储有气象站图层的空间信息。
接下来,使用ogr2ogr工具将MongoDB集群gisdb数据库中的气象站点数据信息导出至其他地理矢量文件。
首选使用上述读写驱动从MongoDB集群中读取地理数据:在内存中构建MongoDriver对象,根据给定的连接参数建立与MongoDB集群中空间数据库gisdb对应地理要素集合climate的连接,同时实例化MongoDatasource对象,并在地理要素集合climate中查找与空间元数据文档G_sys_Metadata,并从该空间元数据文档中提取空间参考信息、图层外边界信息,实例化空间参考对象, 以属性的形式存储在MongoDataSource对象中;创建MongoLayer对象和MongoReader对象,通过MongoReader对象利用JSON解析函数库对待读取的地理要素集合climate中的GeoJSON文档进行结构解析,将每个GeoJSON文档解析形成OGRFeature对象(OGR地理要素对象),将OGRFeature对象加载至MongoLayer对象中,MongoLayer对象加载至MongoDatasource对象中,完成将MongoDB集群中的地理数据读取至内存。
然后使用ogr2ogr工具将内存中的地理对象通过GDAL/OGR类库转化为ESRIShapefile格式矢量文件climate_fr_mongo.shp。
对比源文件climate数据和由MongoDB转出的climate_fr_mongo数据,发现地理数据的属性数据并没有变化,空间点坐标偏移量为0.00m(参见表2)。
表2 阿拉斯加气象站点空间坐标导入导出偏移量对照
ID | SHP_X | SHP_Y | M_X | M_Y | DX | DY |
1 | 4637397.39 | 2642658.94 | 4637397.39 | 2642658.94 | 0.00 | 0.00 |
2 | 339822.54 | 2766364.11 | 339822.54 | 2766364.11 | 0.00 | 0.00 |
3 | 2639893.58 | 3759624.54 | 2639893.58 | 3759624.54 | 0.00 | 0.00 |
4 | -1759042.86 | 2008976.82 | -1759042.86 | 2008976.82 | 0.00 | 0.00 |
5 | -1759042.86 | 2008976.82 | -1759042.86 | 2008976.82 | 0.00 | 0.00 |
6 | 721725.24 | 4097294.90 | 721725.24 | 4097294.90 | 0.00 | 0.00 |
7 | 501930.44 | 3432253.63 | 501930.44 | 3432253.63 | 0.00 | 0.00 |
8 | 671122.36 | 4469314.17 | 671122.36 | 4469314.17 | 0.00 | 0.00 |
9 | -456378.63 | 3074549.64 | -456378.63 | 3074549.64 | 0.00 | 0.00 |
10 | -1212470.01 | 6233300.63 | -1212470.01 | 6233300.63 | 0.00 | 0.00 |
11 | -1750610.66 | 5467552.10 | -1750610.66 | 5467552.10 | 0.00 | 0.00 |
12 | 1019933.54 | 5345878.59 | 1019933.54 | 5345878.59 | 0.00 | 0.00 |
13 | -229930.75 | 4598529.55 | -229930.75 | 4598529.55 | 0.00 | 0.00 |
14 | -298500.31 | 7728392.26 | -298500.31 | 7728392.26 | 0.00 | 0.00 |
表格中,ID:站点编号,SHP_X:shapefile格式数据站点X坐标值,SHP_Y:shapefile格式数据站点Y坐标值,M_X:MongoDB及其导出数据站点X坐标值,M_Y:MongoDB及其导出数据站点Y坐标值,DX=SHP_X-MX,DY=SHP_Y-MY。
可见实施例MongoDB地理数据库半结构化读写驱动ogr2ogr具有较强的读写能力,不管是导出还是导入,地理信息不发生丢失和偏差。
本实施例以一个图层信息的读写方法来对本发明进行说明,显然本发明方法能够实现多个图层的读写,甚至是多个空间数据库的读写。
除上述实施例外,本发明还可以有其他实施方式。凡采用等同替换或等效变换形成的技术方案,均落在本发明要求的保护范围。
Claims (7)
1.以GeoJSON格式半结构化方式存储地理数据的MongoDB集群中地理数据的读取方法,所述MongoDB集群中包含有若干与地理数据源对应的空间数据库,每个空间数据库包含有若干个与地理图层一一对应的地理要素集合,每个地理要素集合中包含有一个空间元数据文档、若干与地理要素一一对应的GeoJSON文档,所述地理要素以GeoJSON文档的形式进行存储,所述空间元数据文档存储有与相应地理图层相关的空间元数据信息,其特征在于所述地理数据的读取方法步骤如下:
第1步、根据给定的连接参数建立与MongoDB集群的相应空间数据库对应地理要素集合的数据连接;
第2步、查找所述MongoDB集群对应地理要素集合中的空间元数据文档,获取相应的空间元数据信息;
第3步、在计算机内存中构建以下OGR地理对象:地理数据源对象、地理图层对象、地理要素对象、空间参考对象,所述OGR地理对象是OGR类库中对应类的实例,所述地理数据源对象包含有与对应地理要素集合数目相等的地理图层对象,每个地理图层对象包含有若干地理要素对象;从所述第2步中获取的空间元数据信息中抽取空间参考信息赋值给空间参考对象,完成对空间参考对象的实例化;
第4步、根据查询条件利用JSON解析函数库对相应空间数据库对应地理要素集合中的GeoJSON文档进行结构解析,逐个提取GeoJSON文档中存储的地理要素信息,赋值给地理要素对象,完成地理要素对象的实例化;
第5步、将所有实例化的地理要素对象更新至相应的地理图层对象中,再将地理图层对象更新至地理数据源对象中,至此,完成将MongoDB集群中地理数据读取至内存。
2.根据权利要求1所述的地理数据的读取方法,其特征在于:第5步完成之后,MongoDB集群中的地理数据以OGR地理对象的形式存在,用于进一步空间分析和数据处理。
3.根据权利要求1或2所述的地理数据的读取方法,其特征在于:所述OGR地理对象用其他地理要素类库中相应类的实例进行替换。
4.以半结构化方式存储地理数据的MongoDB集群的地理数据写入方法,所述MongoDB集群中包含有若干与地理数据源对应的空间数据库,每个空间数据库包含有若干个与地理图层一一对应的地理要素集合,每个地理要素集合中包含有一个空间元数据文档、若干与地理要素一一对应的GeoJSON文档,所述地理要素以GeoJSON文档的形式进行存储,所述空间元数据文档存储有与相应地理图层相关的空间元数据信息,其特征在于所述地理数据写入方法步骤如下:
第1步、使用OGR类库读取地理数据矢量文件,在内存中实例化获得以下地理对象:地理数据源对象、地理图层对象、地理要素对象、空间参考对象,所述地理数据源对象包含有若干地理图层对象,地理图层对象包含若干地理要素对象,所述地理对象是OGR类库中对应类的实例;
第2步、在MongoDB集群中创建与地理数据源对象对应的空间数据库,在所述空间数据库内创建与地理图层对象对应的地理要素集合,并将每个地理图层对象的空间元数据信息分别以单独JSON文档的形式存入相应的地理要素集合;
第3步、将地理要素对象逐一以单独GeoJSON文档的形式写入空间数据库的相应地理要素集合中,至此,完成将地理数据写入MongoDB集群。
5.权利要求4所述的地理数据写入方法,其特征在于:所述OGR地理对象用其他地理要素类库中相应类的实例进行替换。
6.以GeoJSON格式半结构化方式存储地理数据的MongoDB集群的读写实现方法,其特征在于借助读写工具完成,该读写工具包含有:
MongoDriver类,为OGRDriver类的子类,负责与MongoDB数据源的连接信息管理以及MongoDatasource类的创建与管理;
MongoDatasource类,为OGRDatasource类的子类,负责空间元数据的读取以及MongoLayer对象管理;
MongoLayer类, 继承自OGRLayer类,负责地理要素对象的读写与管理;
MongoReader类,负责处理GeoJSON文档的解析工作;
从MongoDB集群中读取地理数据时,在内存中构建MongoDriver对象,根据给定的连接参数建立与MongoDB集群中空间数据库对应地理要素集合的数据连接,同时实例化MongoDatasource对象,并在对应地理要素集合中查找空间元数据文档,并从该空间元数据文档中提取空间参考信息、图层外边界信息,实例化待读取图层的空间参考对象,以属性的形式存储在MongoDataSource对象中;创建MongoLayer对象和MongoReader对象, 通过MongoReader对象利用JSON解析函数库对待读取的地理要素集合中的GeoJSON文档进行结构解析,将每个GeoJSON文档解析形成OGRFeature对象,将OGRFeature对象加载至MongoLayer对象中,MongoLayer对象加载至MongoDatasource对象中,完成将MongoDB集群中的地理数据读取至内存;
向MongoDB集群存储地理数据时,首先实例化MongoDriver对象,由MongoDriver对象建立与MongoDB集群的连接,在MongoDB中创建空间数据库,以及空间数据库内的地理要素集合,并将每个图层的空间元数据信息以独立JSON文档的形式存储在对应地理要素集合中;内存中所有的MongoLayer对象将各自图层中每个OGRFeature对象逐一以GeoJSON文档的形式写入对应的地理要素集合中,完成将内存中的地理数据写入MongoDB集群。
7.根据权利要求6所述的读写实现方法,其特征在于:所述MongoDriver对象为MongoDriver类的实例,所述MongoDatasource对象为MongoDatasource类的实例,MongoLayer对象为MongoLayer类的实例,所述MongoReader对象为MongoReader类的实例,所述OGRFeature实例为OGR类库中Feature类的实例。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410276517.3A CN104021210B (zh) | 2014-06-20 | 2014-06-20 | 以GeoJSON格式半结构化方式存储地理数据的MongoDB集群的地理数据读写方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410276517.3A CN104021210B (zh) | 2014-06-20 | 2014-06-20 | 以GeoJSON格式半结构化方式存储地理数据的MongoDB集群的地理数据读写方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104021210A CN104021210A (zh) | 2014-09-03 |
CN104021210B true CN104021210B (zh) | 2017-02-15 |
Family
ID=51437964
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410276517.3A Expired - Fee Related CN104021210B (zh) | 2014-06-20 | 2014-06-20 | 以GeoJSON格式半结构化方式存储地理数据的MongoDB集群的地理数据读写方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104021210B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106886586B (zh) * | 2017-02-16 | 2020-01-21 | 中科宇图科技股份有限公司 | 一种基于开源项目的互联网地图应用开发平台 |
CN109726211B (zh) * | 2018-12-27 | 2020-02-04 | 无锡华云数据技术服务有限公司 | 一种分布式时序数据库 |
CN113377710B (zh) * | 2020-03-10 | 2023-08-01 | 中国移动通信集团湖南有限公司 | 一种数据获取方法、装置及电子设备 |
CN113420184A (zh) * | 2020-07-30 | 2021-09-21 | 武汉慧人信息科技有限公司 | 基于MongoDB的英语语法库封装和读写方法 |
CN111950994B (zh) * | 2020-09-03 | 2021-03-23 | 深圳市不动产评估中心(深圳市地质环境监测中心) | 一种地质环境及监测信息管理方法、系统、终端及存储介质 |
CN113032513B (zh) * | 2021-05-21 | 2021-08-24 | 北京数字政通科技股份有限公司 | 一种针对空间地理数据的切片方法及渲染方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103839479A (zh) * | 2012-11-20 | 2014-06-04 | 江苏省测绘研究所 | 一种高效电子地图注记交互方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8694603B2 (en) * | 2011-06-20 | 2014-04-08 | International Business Machines Corporation | Geospatial visualization performance improvement for contiguous polylines with similar dynamic characteristics |
-
2014
- 2014-06-20 CN CN201410276517.3A patent/CN104021210B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103839479A (zh) * | 2012-11-20 | 2014-06-04 | 江苏省测绘研究所 | 一种高效电子地图注记交互方法 |
Non-Patent Citations (1)
Title |
---|
分布式环境下海量空间数据的存储和并行查询技术研究;张广弟;《中国优秀硕士学位论文全文数据库 基础科学辑》;20140415(第04期);第14-23、38页,第3章,第5.13节 * |
Also Published As
Publication number | Publication date |
---|---|
CN104021210A (zh) | 2014-09-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104021210B (zh) | 以GeoJSON格式半结构化方式存储地理数据的MongoDB集群的地理数据读写方法 | |
CN104008209B (zh) | 以GeoJSON格式结构化方式存储地理数据的MongoDB集群的地理数据读写方法 | |
CN101916299B (zh) | 一种基于文件系统的三维空间数据存储管理方法 | |
CN111427847B (zh) | 面向用户自定义元数据的索引与查询方法和系统 | |
CN106897954A (zh) | 智慧城市时空信息云平台 | |
Vacca et al. | A spatial information system (SIS) for the architectural and cultural heritage of Sardinia (Italy) | |
CN107766402A (zh) | 一种楼盘字典云房源大数据平台 | |
CN106708993A (zh) | 基于大数据技术的空间数据存储处理中间件框架实现方法 | |
CN107423422A (zh) | 基于网格的空间数据分布式存储及检索方法和系统 | |
CN105389367B (zh) | 基于Mongo数据库的电网图形多时态多级分布式存储方法 | |
CN101853305A (zh) | 一种构建综合农业环境信息数据库的方法 | |
CN102693306A (zh) | 一种多尺度地理数据的在线联动更新服务方法 | |
CN106503214A (zh) | 一种基于Redis内存数据库的复杂规则匹配方法 | |
CN106202378A (zh) | 一种流式气象数据的快速处理方法及系统 | |
Karpinskyi et al. | Topographic mapping in the National Spatial Data Infrastructure in Ukraine | |
Gad et al. | Hybrid data warehouse model for climate big data analysis | |
CN101916260A (zh) | 一种灾害本体和关系数据库间语义映射构建的方法 | |
CN103198148A (zh) | 地图出版数据一体化管理及多媒介发布方法 | |
Sang et al. | A WebGIS for Visualizing historical activities based on photos: The project of Yunnan–Vietnam railway web map | |
Azri et al. | Crisp clustering algorithm for 3D geospatial vector data quantization | |
Sobotkova et al. | Arbitrary offline data capture on all of your androids: The FAIMS mobile platform | |
Liu et al. | Identification and Analysis of Potential Open-Sharing Subjects of Unit-Affiliated Green Spaces in Shanghai Based on POI Data | |
Song et al. | Spatial distribution characteristics and the evolution of Buddhist Monasteries in Xi’an City Area | |
Wiemer | Standardisation: the key to archaeological data quality | |
CN105260461B (zh) | 实现空间大数据快速处理及检索的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170215 Termination date: 20170620 |
|
CF01 | Termination of patent right due to non-payment of annual fee |