Shapefile获取空间数据和中心点坐标

关键技术

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);
相关推荐
caoyc1 小时前
RAG 赛道全景扫描:ragflow 一骑绝尘、微软谷歌跟进乏力、下半场属于 Agent
java
屋外雨大,惊蛰出没1 小时前
深入浅出Spring Boot
java·spring boot·ioc·aop
Zella折耳根1 小时前
复习篇-继承和接口
java·开发语言·python
程序员二叉2 小时前
【JVM】OOM详解+JVM参数+FullGC排查+CPU飙高+死锁+内存泄漏+命令大全
java·开发语言·jvm·面试
云烟成雨TD2 小时前
Spring AI 1.x 系列【47】 MCP Annotations 模块
java·人工智能·spring
不知名的老吴2 小时前
线程的生命周期之线程同步
java·开发语言·jvm
协享科技2 小时前
Spring Boot 与 Go 双服务架构实践:从单体拆分到通信设计
java·人工智能·spring boot·后端·架构·golang·ai编程
码语智行3 小时前
地图上图、空间拓扑查询示例
java·arcgis
程序员黑豆3 小时前
AI全栈开发 - Java:变量
java·前端·ai编程