网页版

This commit is contained in:
ZZX9599
2025-09-30 10:39:55 +08:00
parent fed3188f57
commit 6b3509f1d9
6 changed files with 57 additions and 41 deletions

View File

@ -29,7 +29,7 @@ public class GdalController {
public void importDataStreamGzip(@Parameter(description = "矢量文件路径", required = true) @RequestParam("path") String path, HttpServletResponse response) throws IOException {
// 解析矢量文件、得到JSON数据
String jsonData = GdalUtil.readVectorToJson(path);
String jsonData = GdalUtil.readVectorToGeoJson(path);
// 设置响应头
String filename = URLEncoder.encode("data.gz", StandardCharsets.UTF_8);

View File

@ -237,6 +237,7 @@ public class IconLibraryController {
params.add(fileSuffix);
params.add(file.getBytes());
params.add(LocalDateTime.now().toString());
System.out.println(insertSql);
SQLiteUtil.executeUpdate(iconPath, insertSql, params);
}

View File

@ -28,6 +28,9 @@ public class SaTokenConfig implements WebMvcConfigurer {
excludePathPatterns.add("/data/mbtiles/**");
excludePathPatterns.add("/data/pak/**");
excludePathPatterns.add("/systemService/**");
excludePathPatterns.add("/iconLibrary/data/icon/**");
excludePathPatterns.add("/militaryLibrary/data/military/**");
excludePathPatterns.add("/modelLibrary/data/**");
// 注册 Sa-Token 拦截器
registry.addInterceptor(new SaInterceptor(handle -> {

View File

@ -2,6 +2,7 @@ package com.yj.earth.common.util;
import org.gdal.gdal.gdal;
import org.gdal.ogr.*;
import org.gdal.osr.SpatialReference;
import java.util.ArrayList;
import java.util.HashMap;
@ -16,67 +17,82 @@ public class GdalUtil {
gdal.AllRegister();
}
public static String readVectorToJson(String filePath) {
/**
* 读取矢量文件并转换为标准GeoJSON格式
*/
public static String readVectorToGeoJson(String filePath) {
// 打开矢量文件
DataSource dataSource = ogr.Open(filePath);
if (dataSource == null) {
throw new RuntimeException("无法打开矢量文件: " + filePath);
}
// 存储所有数据的Map
Map<String, Object> result = new HashMap<>();
// 获取图层数量
// 创建GeoJSON根对象 - FeatureCollection
Map<String, Object> geoJson = new HashMap<>();
geoJson.put("type", "FeatureCollection");
// 存储所有要素
List<Map<String, Object>> features = new ArrayList<>();
geoJson.put("features", features);
// 获取所有图层
int layerCount = dataSource.GetLayerCount();
result.put("layerCount", layerCount);
// 存储所有图层数据
List<Map<String, Object>> layers = new ArrayList<>();
for (int i = 0; i < layerCount; i++) {
Layer layer = dataSource.GetLayer(i);
if (layer == null) continue;
// 图层信息
Map<String, Object> layerData = new HashMap<>();
layerData.put("layerName", layer.GetName());
layerData.put("featureCount", layer.GetFeatureCount());
// 获取空间参考信息
SpatialReference srs = layer.GetSpatialRef();
if (srs != null && features.isEmpty()) { // 只添加一次CRS信息
Map<String, Object> crs = new HashMap<>();
Map<String, Object> crsProps = new HashMap<>();
crsProps.put("name", srs.GetAttrValue("AUTHORITY", 0) + ":" + srs.GetAttrValue("AUTHORITY", 1));
crs.put("type", "name");
crs.put("properties", crsProps);
geoJson.put("crs", crs);
}
// 获取字段定义
FeatureDefn featureDefn = layer.GetLayerDefn();
int fieldCount = featureDefn.GetFieldCount();
List<Map<String, Object>> fields = new ArrayList<>();
for (int j = 0; j < fieldCount; j++) {
FieldDefn fieldDefn = featureDefn.GetFieldDefn(j);
Map<String, Object> fieldInfo = new HashMap<>();
fieldInfo.put("name", fieldDefn.GetName());
fieldInfo.put("type", fieldDefn.GetFieldTypeName(fieldDefn.GetFieldType()));
fields.add(fieldInfo);
}
layerData.put("fields", fields);
// 读取所有要素
List<Map<String, Object>> features = new ArrayList<>();
layer.ResetReading();
Feature feature;
while ((feature = layer.GetNextFeature()) != null) {
Map<String, Object> featureData = new HashMap<>();
// 创建Feature对象
Map<String, Object> featureObj = new HashMap<>();
featureObj.put("type", "Feature");
// 存储属性信息
Map<String, Object> attributes = new HashMap<>();
Map<String, Object> properties = new HashMap<>();
// 可以添加图层名称作为属性
properties.put("layerName", layer.GetName());
for (int j = 0; j < fieldCount; j++) {
attributes.put(featureDefn.GetFieldDefn(j).GetName(), feature.GetFieldAsString(j));
String fieldName = featureDefn.GetFieldDefn(j).GetName();
properties.put(fieldName, feature.GetFieldAsString(j));
}
featureData.put("attributes", attributes);
// 存储几何信息
featureObj.put("properties", properties);
// 存储几何信息转换为GeoJSON格式
Geometry geometry = feature.GetGeometryRef();
if (geometry != null) {
featureData.put("geometryType", geometry.GetGeometryName());
featureData.put("wkt", geometry.ExportToWkt());
String geometryJson = geometry.ExportToJson();
Map<String, Object> geometryObj = JsonUtil.jsonToMap(geometryJson);
featureObj.put("geometry", geometryObj);
}
features.add(featureData);
feature.delete(); // 释放资源
features.add(featureObj);
feature.delete();
}
layerData.put("features", features);
layers.add(layerData);
}
result.put("layers", layers);
// 关闭数据源
dataSource.delete();
// 转换为JSON并返回
return JsonUtil.toJson(result);
return JsonUtil.toJson(geoJson);
}
}

View File

@ -231,17 +231,13 @@ public class SQLiteConverter {
String sourcePath = "F:\\公司通用模型库.model";
// 目标数据库路径
String targetPath = "F:\\通用模型库.model";
System.out.println("开始数据库转换...");
System.out.println("源数据库: " + sourcePath);
System.out.println("目标数据库: " + targetPath);
long startTime = System.currentTimeMillis();
// 创建转换器并执行转换
SQLiteConverter converter = new SQLiteConverter(sourcePath, targetPath);
converter.convert();
long endTime = System.currentTimeMillis();
double elapsedTime = (endTime - startTime) / 1000.0;
System.out.printf("转换完成、耗时: %.2f秒%n", elapsedTime);

View File

@ -8,7 +8,7 @@ import lombok.Data;
import java.time.LocalDateTime;
@Data
public class IconVo extends Icon {
public class IconVo{
@Schema(description = "图标类型名称")
private String iconTypeName;
@Schema(description = "图标数据URL")