专栏首页给永远比拿愉快MongoDB导入Shapefile数据

MongoDB导入Shapefile数据

两种解决方案: 一、将整个shapefile转为GeoJSON然后直接导入mongoDB数据库中 首先,将shapefile数据转为WGS84地理坐标,然后使用GDAL的命令行工具ogr2ogr进行格式的转换,转换命令如下: ogr2ogr -f geoJSON continents.json continents.shp 删除生成JSON文件的前两行{ "type": "FeatureCollection",和最后一行}。 最后,使用mongodb的mongoimport工具进行导入: mongoimport --db world --collection continents < continents.json 这样子整个shapefile文件在mongodb中是以一个document存在的。

二、更加细粒度的存储方法是将shapefile中的每个feature取出来转为GeoJSON存入mongodb 具体实现代码入下(Java版本):

package cn.tzy.mongodb;

import java.io.File;
import java.io.IOException;
import java.io.StringWriter;

import org.bson.Document;
import org.geotools.data.FileDataStore;
import org.geotools.data.FileDataStoreFinder;
import org.geotools.data.simple.SimpleFeatureIterator;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.geojson.feature.FeatureJSON;
import org.opengis.feature.simple.SimpleFeature;

import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

public class MongoEx {
    public static void main(String[] args) throws IOException {

        final String IP_ADDRESS = "127.0.0.1";
        final String DB_NAME = "SpatialFeatures";
        final String COLLECTION_NAME = "continents";

        final String SHAPE_FILE = "/home/theone/Data/World/continent.shp";

        MongoClient client = new MongoClient(IP_ADDRESS, 27017);
        MongoDatabase db = client.getDatabase(DB_NAME);
        db.createCollection(COLLECTION_NAME);

        MongoCollection<Document> coll = db.getCollection(COLLECTION_NAME);

        File shapeFile = new File(SHAPE_FILE);
        FileDataStore store = FileDataStoreFinder.getDataStore(shapeFile);
        SimpleFeatureSource sfSource = store.getFeatureSource();
        SimpleFeatureIterator sfIter = sfSource.getFeatures().features();
        // 依次取出每一个Feature转为GeoJSON格式,然后插入到collection中
        while (sfIter.hasNext()) {
            SimpleFeature feature = (SimpleFeature) sfIter.next();
            FeatureJSON fjson = new FeatureJSON();
            StringWriter writer = new StringWriter();
            fjson.writeFeature(feature, writer);
            String sjson = writer.toString();

            Document doc = Document.parse(sjson);
            coll.insertOne(doc);
        }

        client.close();
    }

}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Neo4j Spatial数据导入

    首先,安装neo4j数据库。我的开发环境是Ubuntu,安装过程参考官网:Neo4j Debian Packages,安装后配置:Post-installati...

    卡尔曼和玻尔兹曼谁曼
  • Lucene入门实例

    下面的这个例子摘自Lucene in Action (2010版本),上面的示例使用的是Lucene 3.x,现在的Lucene最新版本是4.10.3。由于Lu...

    卡尔曼和玻尔兹曼谁曼
  • VS中C++的包含目录、附加包含目录和库目录和附加库目录的区别

    对Visual Studio中C++的包含目录、附加包含目录和库目录和附加库目录的区别不是很清楚,参考别人的文章整理出来的。供大家分享学习!

    卡尔曼和玻尔兹曼谁曼
  • springBoot生成SQL文件-使用Hibernate5的SchemaExport实现02

    在上篇springBoot生成SQL文件-使用Hibernate5的SchemaExport实现01中已经知道从Hibernate5.0.x开始通过程序生成SQ...

    汐楓
  • 大厂程序员为了更好的满足历史数据的保存和检索往往选择这种神操作!

    ElasticSearch是一款开源的非常火爆的文档索引引擎, 大小公司都比较青睐的一款做日志检索、分析、查询的工具。

    云存储
  • Quartz集成Spring 原

    (3):HelloWorldJob.java没有改动,HWTest.java修改如下

    wuweixiang
  • 注解 springMVC

    web.xml中配置servlet <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="htt...

    yawn
  • SpringMVC拦截器Interceptor

    SpringMVC拦截器(Interceptor)实现对每一个请求处理前后进行相关的业务处理,类似与servlet中的Filter。 SpringMVC 中的I...

    用户1225216
  • SpringFramework之mvc controller的单元测试

        项目里面经常会将controller的扫描配置与其它的分开以便于管理开发,但是controller的bean是在webApplicationContex...

    克虏伯
  • WebService接口调试如此简单

    我这边的Android终端调试webservice接口,一开始想看日志,用的方法真笨啊。

    特立独行的猫a

扫码关注云+社区

领取腾讯云代金券