栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

geotools和gdal解析shp文件

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

geotools和gdal解析shp文件

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 List saveShp(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 List saveShp(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;
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/671478.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号