# nature-gis使用示例
### pom文件依赖
```xml
com.zjugis
gis
system
1.4.2-SNAPSHOT
${project.basedir}/src/lib/gis-1.4.2-SNAPSHOT.jar
com.zjugis
nature-gis
system
1.0-SNAPSHOT
${project.basedir}/src/lib/nature-gis-1.0-SNAPSHOT.jar
org.kabeja
kabeja
0.4
system
${project.basedir}/src/lib/kabeja-0.4.jar
org.apache.tika
tika-core
2.8.0
org.apache.tika
tika-parsers-standard-package
2.8.0
com.1spatial
dwg-lib
0.8
com.healthmarketscience.jackcess
jackcess
3.5.1
org.springframework.boot
spring-boot-starter-validation
true
```
### mdb导入示例
#### 实体
```java
public class LsydDTO extends MdbBaseDTO {
@NotNull(message = "pzmj(批准面积)不能为空")
private BigDecimal landArea;
@NotEmpty(message = "sqdw(申请单位)不能为空")
private String landUseCompany;
}
```
注:mdb导入相关DTO必须继承MDBbaseDTO且配合javax.validation相关注解,**不要使用lombok注解否则生成的getset会自动加入方法级的注解,会使验证信息重复**。
```
public class MdbBaseDTO {
@JSONField(
name = "SHAPE_GEOMETRY"
)
@NotEmpty(
message = "图形属性不能为空"
)
private JSONObject shapeGeometry;
@JSONField(
serialize = false,
deserialize = false
)
private String shape;
public MdbBaseDTO() {
}
public JSONObject getShapeGeometry() {
return this.shapeGeometry;
}
public void setShapeGeometry(JSONObject shapeGeometry) {
this.shapeGeometry = shapeGeometry;
}
public String getShape() {
return this.shape;
}
public void setShape(String shape) {
this.shape = shape;
}
}
```
#### 实现类使用方法
```java
public List mdbImport(MultipartFile mdbFile) {
List inspect = new ArrayList<>();
File file = new File(mdbFile.getOriginalFilename());
//必填字段
List existColumns = Arrays.asList("pzmj", "sqdw", "ytfl", "xmmc", "sxzqmc", "xzqmc", "zxzqmc", "zxzqdm", "xmzt", "qzgdmj", "qzyjjbntmj", "sqsj", "pzksrq", "pzwh", "pzdw", "pzzzrq", "fksj", "fkzt", "yssj", "tdzl", "sjzzsj", "syqx", "qzqtnyd", "qzjsyd", "qzwlyd", "sfcfw", "sfazghjs", "sfktqtc", "sfgbyt", "xxyt");
try {
FileUtils.copyInputStreamToFile(mdbFile.getInputStream(), file);
MdbTable lsyd = MdbReader.getMdbTable(file, "lsyd", GeometryType.POLYGON, "4490");
//mdb数据表字段校验
MdbUtils.mdbInspect(lsyd,existColumns,LsydDTO.class);
//检查列表数据是否符合规范
List vaildMdbMessage = MdbUtils.mdbInspect(lsyd,existColumns,LsydDTO.class);
inspect.addAll(vaildMdbMessage);
if(vaildMdbMessage==null){
//构建lsydDto
List lsydDTOS = JSONObject.parseArray(JSONObject.toJSONString(lsyd.getData()), LsydDTO.class);
buildLsydDTO(lsydDTOS);
landTemporaryMapper.insertLsydDTO(lsydDTOS);
inspect.add("mdb文件导入成功");
}else{
inspect.add(0,"mdb文件导入失败");
}
} catch (IOException e) {
e.printStackTrace();
inspect.add("mdb文件解析失败");
} catch (Exception e) {
e.printStackTrace();
inspect.add("请检查上传的mdb是否是提供的模板,以及数据图层名称是否是lsyd");
} finally {
file.delete();
}
return inspect;
}
private void buildLsydDTO(List lsydDTOS) {
lsydDTOS.forEach(lsydDTO -> {
//获得空间属性
JSONObject shapeGeometry = lsydDTO.getShapeGeometry();
//获取空间类型
String geometryType = (String) shapeGeometry.get("geometryType");
String wkt = "";
//获取wkt
if ("MULTIPOLYGON".equals(geometryType)) {
MultiPolygon multiPolygon = JSONObject.parseObject(JSONObject.toJSONString(shapeGeometry), MultiPolygon.class);
wkt = multiPolygon.toClobJSON();
}
if ("POLYGON".equals(geometryType)) {
Polygon polygon = JSONObject.parseObject(JSONObject.toJSONString(shapeGeometry), Polygon.class);
wkt = polygon.toClobJSON();
}
lsydDTO.setShape(wkt);
lsydDTO.setDksyh(UUID.randomUUID().toString().replace("-", ""));
if (lsydDTO.getRealExpireTime() == null) {
lsydDTO.setRealExpireTime(lsydDTO.getExpireTime());
}
});
}
```
### shp导入获取wkt
#### 实现类使用方法
```java
public String shapeImport(MultipartFile[] files) {
List multipartFiles = Arrays.asList(files);
File cpgFile = null, dbfFile = null, prjFile = null, sbnFile = null, sbxFile = null, shpFile = null, shxFile = null;
String wkt = "";
try {
for (MultipartFile multipartFile : multipartFiles) {
String originalFilename = multipartFile.getOriginalFilename();
String extension = "";
if (originalFilename != null && originalFilename.lastIndexOf(".") != -1) {
extension = originalFilename.substring(originalFilename.lastIndexOf(".") + 1).toLowerCase();
}
switch (extension) {
case "cpg":
cpgFile = new File(originalFilename);
FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), cpgFile);
break;
case "dbf":
dbfFile = new File(originalFilename);
FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), dbfFile);
break;
case "prj":
prjFile = new File(originalFilename);
FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), prjFile);
break;
case "sbn":
sbnFile = new File(originalFilename);
FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), sbnFile);
break;
case "sbx":
sbxFile = new File(originalFilename);
FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), sbxFile);
break;
case "shp":
shpFile = new File(originalFilename);
FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), shpFile);
break;
case "shx":
shxFile = new File(originalFilename);
FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), shxFile);
break;
default:
}
}
if (cpgFile == null) {
throw ServiceExceptionUtil.exception(CPG_FILE_NOT_FOUND);
}
if (dbfFile == null) {
throw ServiceExceptionUtil.exception(DBF_FILE_NOT_FOUND);
}
if (prjFile == null) {
throw ServiceExceptionUtil.exception(PRJ_FILE_NOT_FOUND);
}
if (sbnFile == null) {
throw ServiceExceptionUtil.exception(SBN_FILE_NOT_FOUND);
}
if (sbxFile == null) {
throw ServiceExceptionUtil.exception(SBX_FILE_NOT_FOUND);
}
if (shpFile == null) {
throw ServiceExceptionUtil.exception(SHP_FILE_NOT_FOUND);
}
if (shxFile == null) {
throw ServiceExceptionUtil.exception(SHX_FILE_NOT_FOUND);
}
wkt = ShpUtils.parse(shpFile);
} catch (BusinessException e) {
e.printStackTrace();
throw ServiceExceptionUtil.exception(CRS_CODE_ERROR);
} catch (Exception e) {
e.printStackTrace();
throw ServiceExceptionUtil.exception(SHAPE_ANALYSIS_ERROR);
} finally {
if (cpgFile != null) {
cpgFile.delete();
}
if (dbfFile != null) {
dbfFile.delete();
}
if (prjFile != null) {
prjFile.delete();
}
if (sbnFile != null) {
sbnFile.delete();
}
if (sbxFile != null) {
sbxFile.delete();
}
if (shpFile != null) {
shpFile.delete();
}
if (shxFile != null) {
shxFile.delete();
}
}
return wkt;
}
```
### txt导入获取wkt
#### 实现类使用方法
```java
public String txtImport(MultipartFile file) {
File txtFile = new File(file.getOriginalFilename());
String wkt = "";
try {
FileUtils.copyInputStreamToFile(file.getInputStream(), txtFile);
wkt = TxtUtils.getWkt(txtFile);
} catch (IOException e) {
e.printStackTrace();
throw ServiceExceptionUtil.exception(TXT_FILE_ERROR);
} catch (TikaException e) {
e.printStackTrace();
throw ServiceExceptionUtil.exception(TXT_PARSE_ERROR);
} catch (MutiDataException e) {
e.printStackTrace();
throw ServiceExceptionUtil.exception(TXT_MUTI_DATA_ERROR);
}finally {
txtFile.delete();
}
return wkt;
}
```
### dxf导入获取wkt
#### 实体类使用方法
```java
public String dxfImport(MultipartFile file) {
File dxfFile = new File(file.getOriginalFilename());
String wkt = "";
try {
FileUtils.copyInputStreamToFile(file.getInputStream(), dxfFile);
wkt = DxfUtils.getWkt(dxfFile);
} catch (IOException e) {
e.printStackTrace();
throw ServiceExceptionUtil.exception(DXF_FILE_ERROR);
} catch (ParseException e) {
e.printStackTrace();
throw ServiceExceptionUtil.exception(DXF_PARSE_ERROR);
} catch (LayerNotFoundException e) {
e.printStackTrace();
throw ServiceExceptionUtil.exception(DXF_LAYER_NOT_FOUND_ERROR);
} finally {
dxfFile.delete();
}
return wkt;
}
```
### dwg导入获取wkt
#### 实体类使用方法
```java
public String dwgImport(MultipartFile file) {
File dwgFile = new File(file.getOriginalFilename());
String wkt = "";
try {
FileUtils.copyInputStreamToFile(file.getInputStream(), dwgFile);
wkt = DwgUtils.getWkt(dwgFile);
} catch (IOException e) {
e.printStackTrace();
throw ServiceExceptionUtil.exception(DWG_FILE_ERROR);
} finally {
dwgFile.delete();
}
return wkt;
}
```
### pg入库wkt方法
```sql
update lsyd set shape = st_geometry(#{reqVO.wkt},4490) where dksyh = #{reqVO.dksyh}
```