geotools:
1、maven依赖添加
org.geotools
gt-geometry
${geotools.version}
org.geotools
gt-shapefile
${geotools.version}
org.geotools
gt-geojson
${geotools.version}
org.geotools
gt-cql
${geotools.version}
org.geotools
gt-data
${geotools.version}
org.geotools
gt-opengis
${geotools.version}
org.geotools
gt-metadata
${geotools.version}
org.geotools
gt-main
${geotools.version}
org.geotools
gt-api
${geotools.version}
org.geotools
gt-data
${geotools.version}
org.geotools
gt-geometry
${geotools.version}
org.geotools
gt-coverage
${geotools.version}
org.geotools
gt-render
${geotools.version}
org.geotools.xsd
gt-xsd-ows
${geotools.version}
org.geotools.xsd
gt-xsd-filter
${geotools.version}
org.geotools.xsd
gt-xsd-wps
${geotools.version}
org.geotools
gt-epsg-hsql
${geotools.version}
org.geotools
gt-epsg-extension
${geotools.version}
org.geotools
gt-epsg-wkt
${geotools.version}
org.geotools
gt-arcgrid
${geotools.version}
org.geotools.ogc
net.opengis.wfs
${geotools.version}
org.geotools.ogc
net.opengis.wps
${geotools.version}
org.geotools.xsd
gt-xsd-fes
${geotools.version}
org.geotools.xsd
gt-xsd-wfs
${geotools.version}
org.geotools
gt-epsg-wkt
${geotools.version}
import org.apache.commons.io.FileUtils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.geotools.data.shapefile.ShapefileDataStore; import org.geotools.data.shapefile.ShapefileDataStoreFactory; import org.geotools.data.simple.SimpleFeatureIterator; import org.geotools.data.simple.SimpleFeatureSource; import org.opengis.feature.GeometryAttribute; import org.opengis.feature.Property; import org.opengis.feature.simple.SimpleFeature; import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.springframework.data.elasticsearch.core.geo.GeoPoint; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.Serializable; import java.nio.charset.Charset;
private ListsaveShp(MultipartFile file) throws IOException { ArrayList list = new ArrayList<>(); ShapefileDataStoreFactory dataStoreFactory = new ShapefileDataStoreFactory(); File fileTemp = new File(file.getOriginalFilename()); FileUtils.copyInputStreamToFile(file.getInputStream(), fileTemp); ShapefileDataStore sds = (ShapefileDataStore) dataStoreFactory.createDataStore(fileTemp.toURI().toURL()); sds.setCharset(Charset.forName("GBK")); SimpleFeatureSource featureSource = sds.getFeatureSource(); SimpleFeatureIterator iterator = featureSource.getFeatures().features(); Property per = null;// org.opengis.feature; StringBuffer transformBuffer = new StringBuffer(); while (iterator.hasNext()) { SimpleFeature feature = iterator.next(); // geometry属性 GeometryAttribute geometryAttribute = feature.getDefaultGeometryProperty(); // 获取坐标参考系信息 CoordinateReferenceSystem crsSource = geometryAttribute.getDescriptor().getCoordinateReferenceSystem(); Iterator it = feature.getProperties().iterator(); ShpEntity shpEntity = new ShpEntity(); while (it.hasNext()) { per = it.next(); //the_geom =POINT (118.87316 31.32326) String pointName = per.toString().split("id=")[1].split(">")[0].toString(); shpEntity.setText(pointName); String pointStr = per.getValue().toString(); String point = pointStr.split("\(")[1].split("\)")[0].toString(); String id = point.replace(".", "").replace(" ", ""); shpEntity.setId(id); String lon = point.split(" ")[0]; String lat = point.split(" ")[1]; GeoPoint location = new GeoPoint(Double.valueOf(lat), Double.valueOf(lon)); shpEntity.setLocation(location); list.add(shpEntity); } } // 会在本地产生临时文件,用完后需要删除 if (fileTemp.exists()) { fileTemp.delete(); } shpDao.saveAll(list); return list; }
gdal:
1、环境配置:gdal环境配置资源gdal依赖包
配置好java环境后,将上面的C:Program FilesJava1916-x64-gdal-3-3-0-mapserver-7-6-3bin
拷贝到C:Program FilesJavajdk1.8.0_261bin全部替换即可使用gdal
2、maven依赖
org.gdal gdal 3.2.0
3、测试代码
public HttpResponse test(MultipartFile file) throws Exception {
//注册gdal
ogr.RegisterAll();
// 为了支持中文路径,请添加下面这句代码
gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
// 为了使属性表字段支持中文,请添加下面这句
gdal.SetConfigOption("SHAPE_ENCODING", "CP936");
Driver driver = ogr.GetDriverByName("ESRI Shapefile");
// File fileTemp = new File(file.getOriginalFilename());
// FileUtils.copyInputStreamToFile(file.getInputStream(), fileTemp);
// if (fileTemp.exists()) {
// fileTemp.delete();
// }
DataSource dataSource = driver.Open("C:\Users\EDZ\Desktop\库管系统\地名地址的数据\POI\酒店.shp");
List list = new ArrayList<>();
int countLayer = dataSource.GetLayerCount();
for (int i = 0; i < countLayer; i++) {
Layer layer = dataSource.GetLayer(i);
long l = layer.GetFeatureCount();
for (long j = 0; j < l; j++) {
Feature feature = layer.GetFeature(j);
String lon = feature.GetFieldAsString("LON");
String lat = feature.GetFieldAsString("LAT");
GeoPoint location = new GeoPoint(Double.parseDouble(lon), Double.parseDouble(lat));
String text = feature.GetFieldAsString("ADDRESSNAME");
String point = lat+lon;
String id = point.replace(".", "");
ShpEntity shpEntity = new ShpEntity();
shpEntity.setId(id);
shpEntity.setText(text);
shpEntity.setLocation(location);
list.add(shpEntity);
// FeatureDefn featureDefn = layer.GetLayerDefn();
// int columnCount = featureDefn.GetFieldCount();
// for (int k = 0; k <= columnCount - 1; k++) {
// FieldDefn ret = featureDefn.GetFieldDefn(k);
// System.out.println((ret.GetName() + "t" + ret.GetTypeName() + "t" + feature.GetFieldAsString(ret.GetName())));
// }
}
}
return new HttpResponse((Serializable) list);
}
附项目中代码:
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.file.FileNameUtil; import org.apache.commons.io.FileUtils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.*; import org.gdal.ogr.*; import org.springframework.data.elasticsearch.core.geo.GeoPoint; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.text.ParseException; import java.text.SimpleDateFormat;
private ListsaveShp(MultipartFile file) throws IOException, ParseException { File fileTemp = new File(file.getOriginalFilename()); FileUtils.copyInputStreamToFile(file.getInputStream(), fileTemp); List filePaths = ExcelUtil.unzipFile(fileTemp, path+"/temp"); List list = new ArrayList<>(); SimpleDateFormat sdfRead = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); SimpleDateFormat sdfwrite = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); for (String filePath : filePaths) { Driver driver = ogr.GetDriverByName("ESRI Shapefile"); DataSource dataSource = driver.Open(filePath); int countLayer = dataSource.GetLayerCount(); for (int i = 0; i < countLayer; i++) { Layer layer = dataSource.GetLayer(i); long l = layer.GetFeatureCount(); for (long j = 0; j < l; j++) { Feature feature = layer.GetFeature(j); String lon = feature.GetFieldAsString("LON"); String lat = feature.GetFieldAsString("LAT"); GeoPoint location = new GeoPoint(Double.parseDouble(lat), Double.parseDouble(lon)); String text = feature.GetFieldAsString("ADDNAME"); String colDate = feature.GetFieldAsString("COLDATE"); String addCode = feature.GetFieldAsString("ADDCODE"); String namDate = feature.GetFieldAsString("NAMDATE"); String endDate = feature.GetFieldAsString("ENDDATE"); String name = feature.GetFieldAsString("NAME"); String entiId = feature.GetFieldAsString("ENTIID"); String clasId = feature.GetFieldAsString("CLASID"); String point = lon + lat; String id = point.replace(".", ""); ShpEntity shpEntity = new ShpEntity(); shpEntity.setId(id); shpEntity.setText(text.equals("") && null == text ? "未知" : text); shpEntity.setLocation(location); shpEntity.setName(name.equals("") && null == name ? "" : name); shpEntity.setClasId(clasId.equals("") && null == clasId ? "" : clasId); shpEntity.setAddCode(addCode.equals("") && null == addCode ? "" : addCode); shpEntity.setAddName(text.equals("") && null == text ? "未知" : text); Date nam = sdfRead.parse(namDate); Date col = sdfRead.parse(colDate); Date end = sdfRead.parse(endDate); shpEntity.setNamDate(namDate.equals("") && null == namDate ? null : sdfwrite.format(nam)); shpEntity.setColDate(colDate.equals("") && null == colDate ? null : sdfwrite.format(col)); shpEntity.setEndDate(endDate.equals("") && null == endDate ? null : sdfwrite.format(end)); shpEntity.setEntiId(entiId.equals("") && null == entiId ? "" : entiId); list.add(shpEntity); feature.delete(); } layer.delete(); } dataSource.delete(); FileUtil.del(filePath); } shpDao.saveAll(list); return list; }



