CN104008209B - 以GeoJSON格式结构化方式存储地理数据的MongoDB集群的地理数据读写方法 - Google Patents
以GeoJSON格式结构化方式存储地理数据的MongoDB集群的地理数据读写方法 Download PDFInfo
- Publication number
- CN104008209B CN104008209B CN201410277320.1A CN201410277320A CN104008209B CN 104008209 B CN104008209 B CN 104008209B CN 201410277320 A CN201410277320 A CN 201410277320A CN 104008209 B CN104008209 B CN 104008209B
- Authority
- CN
- China
- Prior art keywords
- metadata
- geodata
- class
- layer
- document
- 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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
-
- 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)
- Software Systems (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),每个空间数据库包含有一个元数据集合(G_sys_Metadata)、若干个与地理图层(Layer)一一对应的地理要素集合(Collection),所述元数据集合中包含与地理图层一一对应的空间元数据文档,所述空间元数据文档存储有与相应地理图层相关的空间元数据信息,每个地理要素集合中包含有若干与地理要素(Feature)一一对应的GeoJSON文档,所述地理要素以GeoJSON文档的形式进行存储。
进一步的,本发明MongoDB集群还具有如下改进:
1、所述空间元数据文档以JSON文档的形式存储。
2、所述空间元数据信息至少包括图层空间参考、图层外边界、图层内地理要素个数、图层名称。
此外,本发明提供的以GeoJSON格式结构化方式存储地理数据的MongoDB集群中地理数据的读取方法,其特征在于步骤如下:
第1步、根据给定的连接参数建立与MongoDB集群的相应空间数据库(Database)元数据集合、对应地理要素集合(Collection)的数据连接;
第2步、从元数据集合(G_sys_Metadata)中查找指定的空间元数据文档,获取相应的空间元数据信息;
第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),在所述空间数据库内创建元数据集合(G_sys_Metadata)、与地理图层对象对应的地理要素集合(Collection),并将每个地理图层对象的空间元数据信息分别以单独JSON文档的形式存入元数据集合(G_sys_Metadata)中;
第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集群。
本发明针对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中名称为Jiangsu DB的空间数据库为例,该空间数据库中包括有名称为G_sys_metadata的元数据集合,地理图层的元数据信息以JSON文档(空间元数据文档)的形式存储在元数据集合中,空间元数据文档中一般记载有图层名称、图层空间参考、图层外边界、图层内地理要素个数、图层创建时间等信息;Jiangsu DB空间数据库中还包括名称为Mayor Roads、Sub-regions的地理要素集合(每个地理要素集合都对应一个图层),MayorRoads图层中包括名称为Jinghu Highway、Ninglian Highway等若干个记载地理要素信息的GeoJSON文档。
本实施例中,以结构化方式存储地理数据的MongoDB集群中地理数据的读取方法,步骤如下:
第1步、根据给定的连接参数建立与MongoDB集群的相应空间数据库(Database)元数据集合、对应地理要素集合(Collection)的数据连接;
第2步、从元数据集合(G_sys_Metadata)中查找指定的空间元数据文档,获取相应的空间元数据信息;
第3步、在计算机内存中构建以下OGR地理对象:地理数据源对象、地理图层对象、地理要素对象、空间参考对象,所述OGR地理对象是OGR类库中对应类的实例,所述地理数据源对象包含有与对应地理要素集合数目相等的地理图层对象,每个地理图层对象包含有若干地理要素对象;从所述第2步中获取的空间元数据信息中抽取空间参考信息赋值给空间参考对象,完成对空间参考对象的实例化;
第4步、根据查询条件利用JSON解析函数库对相应空间数据库(Database)对应地理要素集合(Collection)中的GeoJSON文档进行结构解析,逐个提取GeoJSON文档中存储的地理要素信息,赋值给地理要素对象,完成地理要素对象的实例化;
第5步、将所有实例化的地理要素对象更新至相应的地理图层对象中,再将地理图层对象更新至地理数据源对象中,至此,完成将MongoDB集群中地理数据读取至内存。
本实施例中,以结构化方式存储地理数据的MongoDB集群的地理数据写入方法,步骤如下:
第1步、使用OGR类库读取地理数据矢量文件,在内存中实例化获得以下地理对象:地理数据源对象、地理图层对象、地理要素对象、空间参考对象,所述地理数据源对象包含有若干地理图层对象,地理图层对象包含若干地理要素对象,所述地理对象是OGR类库中对应类的实例;
第2步、在MongoDB集群中创建与地理数据源对象对应的空间数据库(Database),在所述空间数据库内创建元数据集合(G_sys_Metadata)、与地理图层对象对应的地理要素集合(Collection),并将每个地理图层对象的空间元数据信息分别以单独JSON文档的形式存入元数据集合(G_sys_Metadata)中;
第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.3919308819 2642658.9359302446) | Annette | 35 | 58 | 46 |
2 | POINT(339822.54171705083 2766364.1128069465) | Kodiak | 30 | 54 | 40 |
3 | POINT(2639893.5816210639 3759624.5375258112) | Yakutat | 26 | 54 | 39 |
4 | POINT(-1759042.8629358942 2008976.8247891644) | Cold Bay | 28 | 50 | 38 |
5 | POINT(-1759042.8629358942 2008976.8247891644) | St.Paul | 26 | 47 | 35 |
6 | POINT(721725.23594301904 4097294.8952605384) | Anchorage | 16 | 59 | 36 |
7 | POINT(501930.44144661998 3432253.6293672188) | Homer | 23 | 54 | 38 |
8 | POINT(671122.35719730402 4469314.168442511) | Talkeetna | 11 | 59 | 34 |
9 | POINT(-456378.62933878187 3074549.6386594619) | King Salmon | 15 | 56 | 34 |
10 | POINT(-1212470.0058617084 6233300.6285879379) | Kotzebue | 2 | 54 | 22 |
11 | POINT(-1750610.656301921 5467552.0967166601) | Nome | 6 | 52 | 27 |
12 | POINT(1019933.543595112 5345878.5889872853) | Fairbanks | -10 | 63 | 27 |
13 | POINT(-229930.74502216728 4598529.547886855) | McGrath | -7 | 60 | 27 |
14 | POINT(-298500.30950460123 7728392.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内的元数据集合G_sys_Metadata、地理要素集合climate,并将源数据climate.shp中图层的空间元数据信息以独立JSON文档的形式存储在元数据集合G_sys_Metadata中;ogr2ogr再调用内存中的MongoLayer对象将图层中每个OGRFeature对象逐一以GeoJSON文档的形式写入对应的地理要素集合climate中,完成将内存中的地理数据写入MongoDB集群。
上述步骤执行完毕后,在MongoDB集群gisdb数据库中产生climate地理要素集合以及元数据集合G_sys_Metadata,其中climate地理要素集合包含14个GeoJSON文本,G_sys_Metadata元数据集合则包含有1个JSON文档,GeoJSON文档中存储每个气象站的地理数据,JSON文档则存储有气象站图层的空间信息。
接下来,使用ogr2ogr工具将MongoDB集群gisdb数据库中的气象站点数据信息导出至其他地理矢量文件。
首选使用上述读写驱动从MongoDB集群中读取地理数据:在内存中构建MongoDriver对象,根据给定的连接参数建立与MongoDB集群中空间数据库gisdb的连接,同时实例化MongoDatasource对象,并在元数据集合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步、从元数据集合中查找指定的空间元数据文档,获取相应的空间元数据信息;
第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 |
---|---|---|---|
CN201410277320.1A CN104008209B (zh) | 2014-06-20 | 2014-06-20 | 以GeoJSON格式结构化方式存储地理数据的MongoDB集群的地理数据读写方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410277320.1A CN104008209B (zh) | 2014-06-20 | 2014-06-20 | 以GeoJSON格式结构化方式存储地理数据的MongoDB集群的地理数据读写方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104008209A CN104008209A (zh) | 2014-08-27 |
CN104008209B true CN104008209B (zh) | 2017-02-01 |
Family
ID=51368866
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410277320.1A Expired - Fee Related CN104008209B (zh) | 2014-06-20 | 2014-06-20 | 以GeoJSON格式结构化方式存储地理数据的MongoDB集群的地理数据读写方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104008209B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104966311B (zh) * | 2015-06-10 | 2017-03-15 | 江苏中威科技软件系统有限公司 | 一种用于手写签批系统的矢量图型存储方法 |
CN106383831B (zh) * | 2016-08-26 | 2019-06-14 | 王立刚 | 一种dlg更新方法 |
CN106934011A (zh) * | 2017-03-09 | 2017-07-07 | 济南浪潮高新科技投资发展有限公司 | 一种json数据的结构化解析方法及装置 |
CN108153716B (zh) * | 2017-12-26 | 2021-05-04 | 东软集团股份有限公司 | 表单处理方法、装置、存储介质及电子设备 |
CN113420184A (zh) * | 2020-07-30 | 2021-09-21 | 武汉慧人信息科技有限公司 | 基于MongoDB的英语语法库封装和读写方法 |
CN114356851B (zh) * | 2022-01-12 | 2024-06-18 | 北京字节跳动网络技术有限公司 | 数据文件的存储方法、装置、电子设备及存储介质 |
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 CN201410277320.1A patent/CN104008209B/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 |
---|---|
CN104008209A (zh) | 2014-08-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104008209B (zh) | 以GeoJSON格式结构化方式存储地理数据的MongoDB集群的地理数据读写方法 | |
CN104021210B (zh) | 以GeoJSON格式半结构化方式存储地理数据的MongoDB集群的地理数据读写方法 | |
US9535927B2 (en) | Method and apparatus for situational context for big data | |
CN101916299B (zh) | 一种基于文件系统的三维空间数据存储管理方法 | |
CN106897954A (zh) | 智慧城市时空信息云平台 | |
CN103412962A (zh) | 一种海量瓦片数据的存储方法及读取方法 | |
CN102693306A (zh) | 一种多尺度地理数据的在线联动更新服务方法 | |
CN101853305A (zh) | 一种构建综合农业环境信息数据库的方法 | |
CN102662610A (zh) | 一种遥感影像数据管理系统及方法 | |
CN114625820A (zh) | 一种面向人工智能遥感影像解译的样本库系统及组织方法 | |
Karpinskyi et al. | Topographic mapping in the National Spatial Data Infrastructure in Ukraine | |
Ladner et al. | Mining Spatio-Temporal Information Systems | |
CN103198148A (zh) | 地图出版数据一体化管理及多媒介发布方法 | |
Lin et al. | Building Linked Data from Historical Maps. | |
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 | |
Wiemer | Standardisation: the key to archaeological data quality | |
Bai et al. | Mapping the past with historical geographic information systems: layered characteristics of the historic urban landscape of Nanjing, China, since the Ming Dynasty (1368–2024) | |
Lim et al. | Integration of movement data into 3d gis | |
Brisaboa et al. | Collecting and publishing large multiscale geographic datasets | |
CN105260461B (zh) | 实现空间大数据快速处理及检索的方法 | |
Senanayake et al. | Development of Geo-Database to Recommend Suitable Crops at Village Level in Sri Lanka | |
CN114707805B (zh) | 基于aoi数据的交通小区各类型用地面积获取方法及设备 | |
Coetzee | An analysis of a data grid approach for spatial data infrastructures | |
Kljucanin et al. | Design, Implementation and Distribution of 3D Geospatial Data Types for Urban Topographic Applications |
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: 20170201 Termination date: 20170620 |
|
CF01 | Termination of patent right due to non-payment of annual fee |