关键技术
1. Shapefile 读取
java
// 创建 ShapefileDataStore,指定文件路径
File file = new File("G:\\xxx\\xxx.shp");
ShapefileDataStore shape = new ShapefileDataStore(file.toURL());
// 设置字符集解决中文乱码
shape.setCharset(Charset.forName("GBK"));
// 获取 FeatureSource 和 FeatureCollection
SimpleFeatureSource featureSource = shape.getFeatureSource();
SimpleFeatureCollection features = featureSource.getFeatures();
2. Feature 遍历
java
// 创建迭代器遍历每个 Feature
SimpleFeatureIterator iterator = features.features();
while (iterator.hasNext()) {
SimpleFeature feature = iterator.next();
// 按名称获取属性值
Object value = feature.getAttribute("属性名");
// 获取默认几何对象
Geometry geometry = (Geometry) feature.getDefaultGeometryProperty().getValue();
}
// 关闭迭代器释放资源
iterator.close();
3. 坐标转换
java
// 将坐标转换为目标坐标系 EPSG:4490 (CGCS2000)
Geometry geometry = CoordinateUtil.coordinateTransform(feature, 4490);
// 计算几何中心点
Point centroid = geometry.getCentroid();
double lon = centroid.getX(); // 经度
double lat = centroid.getY(); // 纬度
// 获取 WKT 格式字符串
String wkt = geometry.toString();
4. 数据库更新
java
// 方式一:直接设置字段值
LambdaUpdateWrapper<KsJbxxhz> updateWrapper = new LambdaUpdateWrapper<KsJbxxhz>()
.eq(KsJbxxhz::getXkzh, xkzh) // 条件:许可证号
.set(KsJbxxhz::getLon, centroid.getX()) // 设置经度
.set(KsJbxxhz::getLat, centroid.getY()); // 设置纬度
ksJbxxhzService.update(null, updateWrapper);
// 方式二:使用原生 SQL 设置几何字段
LambdaUpdateWrapper<KsCkqbj> geomWrapper = new LambdaUpdateWrapper<KsCkqbj>()
.eq(KsCkqbj::getXkzh, xkzh)
.setSql("geom = ST_GeomFromText('" + wkt + "')"); // PostGIS 函数:WKT 转几何
ksCkqbjMapper.update(null, geomWrapper);