一、将geotools依赖下载
geotools的依赖很难下载下来,下面提供两种下载方法
1、在pom.xml文件中指定下载地址(这也是geotools官网中推荐的下载方法,但是有时候这种方法并不能下载下来)
<!--geotools指定的下载地址-->
<repositories>
<repository>
<id>osgeo</id>
<name>OSGeo Release Repository</name>
<url>https://repo.osgeo.org/repository/release/</url>
<snapshots><enabled>false</enabled></snapshots>
<releases><enabled>true</enabled></releases>
</repository>
<repository>
<id>osgeo-snapshot</id>
<name>OSGeo Snapshot Repository</name>
<url>https://repo.osgeo.org/repository/snapshot/</url>
<snapshots><enabled>true</enabled></snapshots>
<releases><enabled>false</enabled></releases>
</repository>
</repositories>
<dependencies>
<!--geotools 27-SNAPSHOT 依赖-->
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-shapefile</artifactId>
<version>27-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-swing</artifactId>
<version>27-SNAPSHOT</version>
</dependency>
</dependencies>
2、如果第一种方法不行,则用这种;在maven的settings.xml中修改镜像地址(xml文件在你maven安装包下的conf文件里;这个方法亲测有效)
<!-- 将此镜像地址放到setttings.xml的<mirrors></mirrors>标签里 -->
<!-- 下面这个镜像的id、name、url就是上面第一个方法里指定的第一个下载地址 -->
<mirrors>
<mirror>
<id>osgeo</id>
<name>OSGeo Release Repository</name>
<url>https://repo.osgeo.org/repository/release/</url>
</mirror>
</mirrors>
二、代码
百度有很多这样的,大差不差
package com.hwhy.hainangismanager.common.utils.gis;
import lombok.extern.slf4j.Slf4j;
import org.geotools.data.DataStore;
import org.geotools.data.DataStoreFinder;
import org.geotools.data.FeatureWriter;
import org.geotools.data.Transaction;
import org.geotools.data.mysql.MySQLDataStoreFactory;
import org.geotools.data.shapefile.ShapefileDataStore;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.data.simple.SimpleFeatureIterator;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.geometry.jts.JTSFactoryFinder;
import org.geotools.jdbc.JDBCDataStore;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.io.WKTReader;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import java.io.File;
import java.nio.charset.Charset;
@Slf4j
public class ShpToMysql {
/**
* 读取shp文件
*
* @param file shp文件
* @return
*/
public static SimpleFeatureSource readSHP(File file) {
SimpleFeatureSource featureSource = null;
ShapefileDataStore shpDataStore = null;
try {
//File file = new File(shpfilePath);
shpDataStore = new ShapefileDataStore(file.toURL());
/*URL url = new URL(file.getAbsolutePath());
shpDataStore = new ShapefileDataStore(url);*/
//设置编码
Charset charset = Charset.forName("UTF8");
shpDataStore.setCharset(charset);
String tableName = shpDataStore.getTypeNames()[0];
featureSource = shpDataStore.getFeatureSource(tableName);
} catch (Exception e) {
e.printStackTrace();
} finally {
shpDataStore.dispose();
}
return featureSource;
}
/**
* 连接mysql数据库
*
* @param host
* @param dataBase
* @param port
* @param userName
* @param pwd
* @return
*/
public static JDBCDataStore connnection2mysql(String host, String dataBase, int port, String userName, String pwd) {
JDBCDataStore ds = null;
DataStore dataStore = null;
//连接数据库参数
java.util.Map params = new java.util.HashMap();
params.put(MySQLDataStoreFactory.DBTYPE.key, "mysql");
params.put(MySQLDataStoreFactory.HOST.key, host);
params.put(MySQLDataStoreFactory.PORT.key, port);
params.put(MySQLDataStoreFactory.DATABASE.key, dataBase);
params.put(MySQLDataStoreFactory.USER.key, userName);
params.put(MySQLDataStoreFactory.PASSWD.key, pwd);
try {
dataStore = DataStoreFinder.getDataStore(params);
if (dataStore != null) {
ds = (JDBCDataStore) dataStore;
System.out.println(dataBase + "连接成功");
} else {
System.out.println(dataBase + "连接失败");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ds;
}
/**
* 创建表格
*
* @param ds
* @param featureSource
* @return
*/
public static JDBCDataStore createTable(JDBCDataStore ds, SimpleFeatureSource featureSource) {
SimpleFeatureType schema = featureSource.getSchema();
try {
//创建数据表
ds.createSchema(schema);
} catch (Exception e) {
e.printStackTrace();
} finally {
//ds.dispose();
}
return ds;
}
/**
* 写入数据
*
* @param ds
* @param featureSource
* @param tableName 这里是指创建的表的名称,不想传也可以用featureSource.getSchema().getTypeName()来获取
*/
public static void writeShp2Mysql(JDBCDataStore ds, SimpleFeatureSource featureSource, String tableName) {
//开始写入数据
SimpleFeatureIterator features = null;
try {
FeatureWriter<SimpleFeatureType, SimpleFeature> writer = ds.getFeatureWriter(tableName, Transaction.AUTO_COMMIT);
SimpleFeatureCollection featureCollection = featureSource.getFeatures();
features = featureCollection.features();
while (features.hasNext()) {
try {
writer.hasNext();
SimpleFeature next = writer.next();
SimpleFeature feature = features.next();
for (int i = 0; i < feature.getAttributeCount(); i++) {
next.setAttribute(i, feature.getAttribute(i));
}
writer.write();
} catch (Exception e) {
e.printStackTrace();
log.error("添加数据的方法:" + e.toString());
continue;
}
}
writer.close();
log.info("导入成功");
} catch (Exception e) {
e.printStackTrace();
log.error("添加数据的方法有误,错误为:" + e.toString());
} finally {
ds.dispose();
features.close();
}
}
}