基于geotools postgis導(dǎo)入shp數(shù)據(jù)庫修改字段和表名
Temu優(yōu)惠達(dá)人跨境電商2024-10-17500
基于geotools postgis導(dǎo)入shp數(shù)據(jù)庫修改字段和表名
為了方便玩家搜索,單獨(dú)將次方法提出來
/** * 建表 * * @param ds * @param featureSource * @return */ public static JDBCDataStore createTable(JDBCDataStore ds, SimpleFeatureSource featureSource, String spatialName) { SimpleFeatureType schema = featureSource.getSchema(); try { String[] allTableNames = ds.getTypeNames(); //如果存在,則先刪除 //這里根據(jù)需求決定是否刪除表 if (allTableNames != null && ArrayUtils.contains(allTableNames, schema.getTypeName())) { ds.removeSchema(schema.getTypeName()); //防止shp文件名大寫的問題 } else if (ArrayUtils.contains(allTableNames, schema.getTypeName().toLowerCase())) { ds.removeSchema(schema.getTypeName().toLowerCase()); } else { } //由于此類屬性內(nèi)部不可變,所以需要獲取舊屬性,重新賦值給新建屬性. //獲取舊屬性 List<AttributeDescriptor> oldAttributeDescriptors = schema.getAttributeDescriptors(); //新屬性 List<AttributeDescriptor> newAttributeDescriptors = new ArrayList<>(); //新建feature構(gòu)造器 SimpleFeatureTypeBuilder simpleFeatureTypeBuilder = new SimpleFeatureTypeBuilder(); //設(shè)置表名 simpleFeatureTypeBuilder.setName(schema.getName().toString().toLowerCase()); //設(shè)置坐標(biāo)系 simpleFeatureTypeBuilder.setCRS(schema.getCoordinateReferenceSystem()); //獲取屬性 for (AttributeDescriptor oldAttributeDescriptor : oldAttributeDescriptors) { //屬性構(gòu)造器 AttributeTypeBuilder build = new AttributeTypeBuilder(); build.init(oldAttributeDescriptor.getType()); build.setNillable(true); //獲取字段名,改為小寫 String name = StringUtils.isNotEmpty(oldAttributeDescriptor.getLocalName()) ? oldAttributeDescriptor.getLocalName().toLowerCase() : oldAttributeDescriptor.getLocalName(); if (oldAttributeDescriptor instanceof GeometryDescriptor) { //修改空間字段名 name = StringUtils.isNotEmpty(spatialName) ? spatialName : "shape"; GeometryTypeImpl geometryDescriptor = (GeometryTypeImpl) oldAttributeDescriptor.getType(); //獲取坐標(biāo)系,用于坐標(biāo)系轉(zhuǎn)換 coordinateReferenceSystem = geometryDescriptor.getCoordinateReferenceSystem(); } else { } //設(shè)置字段名 build.setName(name); //創(chuàng)建新的屬性類 AttributeDescriptor descriptor = build.buildDescriptor(name, oldAttributeDescriptor.getType()); newAttributeDescriptors.add(descriptor); } //使用新的屬性類 simpleFeatureTypeBuilder.addAll(newAttributeDescriptors); //獲取新屬性值 schema = simpleFeatureTypeBuilder.buildFeatureType(); //創(chuàng)建數(shù)據(jù)表 ds.createSchema(schema); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return ds; }
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。