• geotools实现将shp导入mysql


    一、需要的依赖(mysql)

    <dependency>
       <groupId>org.geotools.jdbc</groupId>
       <artifactId>gt-jdbc-mysql</artifactId>
       <version>${geotools.version}</version>
     </dependency>

    二、需要导入的jar包

     1   package com.hpu.jdbc;
     2 
     3 import java.io.File;
     4 import java.io.IOException;
     5 import java.nio.charset.Charset;
     6 import java.util.ArrayList;
     7 import java.util.List;
     8 
     9 import org.geotools.data.DataStore;
    10 import org.geotools.data.DataStoreFinder;
    11 import org.geotools.data.FeatureWriter; 
    12 import org.geotools.data.Transaction; 
    13 import org.geotools.data.mysql.MySQLDataStoreFactory;
    14 import org.geotools.data.shapefile.ShapefileDataStore;
    15 import org.geotools.data.simple.SimpleFeatureCollection;
    16 import org.geotools.data.simple.SimpleFeatureIterator;
    17 import org.geotools.data.simple.SimpleFeatureSource;
    18 import org.geotools.data.store.ContentEntry; 
    19 import org.geotools.feature.NameImpl; 
    20 import org.geotools.feature.simple.SimpleFeatureBuilder; 
    21 import org.geotools.feature.simple.SimpleFeatureTypeBuilder; 
    22 import org.geotools.geometry.jts.JTSFactoryFinder; 
    23 import org.geotools.jdbc.JDBCDataStore;
    24 
    25 import org.opengis.feature.simple.SimpleFeature; 
    26 import org.opengis.feature.simple.SimpleFeatureType;
    27 import org.opengis.feature.type.AttributeDescriptor;

    三、读取shp文件

     1 public static SimpleFeatureSource readSHP( String shpfile){
     2         SimpleFeatureSource featureSource =null;
     3         try {
     4             File file = new File(shpfile);
     5             ShapefileDataStore shpDataStore = null;
     6 
     7             shpDataStore = new ShapefileDataStore(file.toURL());
     8             //设置编码
     9             Charset charset = Charset.forName("GBK");
    10             shpDataStore.setCharset(charset);
    11             String tableName = shpDataStore.getTypeNames()[0];
    12              featureSource =  shpDataStore.getFeatureSource (tableName);
    13         }catch (Exception e){
    14             e.printStackTrace();
    15         }
    16         return featureSource;
    17     }

    四、连接数据库

     1     public static JDBCDataStore  connnection2mysql(String host,String dataBase,int port,String userName,String pwd ){
     2         JDBCDataStore ds=null;
     3         DataStore dataStore=null;
     4         //连接数据库参数
     5         java.util.Map params = new java.util.HashMap();
     6         params.put(MySQLDataStoreFactory.DBTYPE.key, "mysql");
     7         params.put(MySQLDataStoreFactory.HOST.key, host);
     8         params.put(MySQLDataStoreFactory.PORT.key, port);
     9         params.put(MySQLDataStoreFactory.DATABASE.key, dataBase);
    10         params.put(MySQLDataStoreFactory.USER.key, userName);
    11         params.put(MySQLDataStoreFactory.PASSWD.key, pwd);        
    12         try {
    13             dataStore=DataStoreFinder.getDataStore(params);
    14             if (dataStore!=null) {
    15                 ds=(JDBCDataStore)dataStore;
    16                 System.out.println(dataBase+"连接成功");
    17             }else{
    18                 
    19                 System.out.println(dataBase+"连接失败");        
    20             }
    21 
    22         } catch (IOException e) {
    23             // TODO Auto-generated catch block
    24             
    25             e.printStackTrace();
    26             
    27         }
    28         
    29       return ds;
    30     }

    五、创建表格

     1     public static JDBCDataStore createTable(JDBCDataStore ds, SimpleFeatureSource featureSource){
     2         SimpleFeatureType schema = featureSource.getSchema();
     3         try {
     4                  //创建数据表
     5                 ds.createSchema(schema);
     6                         
     7         } catch (IOException e) {
     8             // TODO Auto-generated catch block
     9             e.printStackTrace();
    10         }
    11         return ds;
    12     }

    六、写入数据

     1     public static void writeShp2Mysql(JDBCDataStore ds, SimpleFeatureSource featureSource ){
     2         SimpleFeatureType schema = featureSource.getSchema();
     3         //开始写入数据 
     4         try {
     5             FeatureWriter<SimpleFeatureType, SimpleFeature> writer = ds .getFeatureWriter(schema.getTypeName().toLowerCase(), Transaction.AUTO_COMMIT);
     6             SimpleFeatureCollection featureCollection = featureSource.getFeatures();
     7             SimpleFeatureIterator features = featureCollection.features();
     8             while (features.hasNext()) {
     9                 writer.hasNext();
    10                 SimpleFeature next = writer.next();
    11                 SimpleFeature feature = features.next();                
    12                 for (int i = 0; i < feature.getAttributeCount(); i++) {
    13                     next.setAttribute(i,feature.getAttribute(i) );
    14                 }                
    15                 writer.write();
    16             }            
    17             writer.close();
    18             ds.dispose();
    19             System.out.println("导入成功");
    20         } catch (IOException e) {
    21             // TODO Auto-generated catch block
    22             e.printStackTrace();
    23         } // SimpleFeatureIterator itertor = featureSource.getFeatures() // .features(); //create the builder SimpleFeatureBuilder builder = new SimpleFeatureBuilder(schema);
    24        
    25         
    26         
    27     }

    七、测试代码

    1     //测试代码
    2     public static void main(String[] args) {
    3         JDBCDataStore connnection2mysql = shp2mysql.connnection2mysql("localhost", "testjdbc", 3306, "root", "mysql");
    4         SimpleFeatureSource featureSource = readSHP("C:/Users/lenovo/Desktop/beijing/beijing.shp");
    5         JDBCDataStore ds = createTable(connnection2mysql, featureSource);
    6         writeShp2Mysql(ds, featureSource);
    7     }

    八、数据中的数据

  • 相关阅读:
    szoj657 【AHSDFZNOI 7.2 WuHongxun】Odd
    cogs2652 秘术「天文密葬法」
    bzoj1026 [SCOI2009]windy数
    bzoj1862/1056: [Zjoi2006]GameZ游戏排名系统
    java-PreparedStatement的用法
    java-JDBC登录注册代码
    java-String Date Calendar之间的转换
    java-如何用eclipse打包jar
    java-通过JDBC操作数据库
    java-JDBC配置驱动程序
  • 原文地址:https://www.cnblogs.com/tuboshu/p/10748821.html
Copyright © 2020-2023  润新知