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);
相关推荐
古法安卓2 小时前
Android-日志系统源码解析
android·java·android studio
小夏coding3 小时前
从"一把梭"到"精妙拆解" —— 滑动窗口计时框架的设计演进
java·后端
MacroZheng4 小时前
同事问我:"Claude Code经常失忆,不怕它把项目搞炸?",我:"怕,三个Markdown文件给它装个永不丢失的外置大脑!"
java·人工智能·后端
十年Java程序媛5 小时前
深度实战:JDK21 虚拟线程 + HikariCP 生产正确配比、坑点、监控全套
java·spring boot
xiaoqiMikko5 小时前
有人在搜一个不存在的 Tomcat 版本
java·tomcat
用户3126874877209 小时前
ConcurrentHashMap 怎么保证线程安全?从分段锁到 CAS+synchronized
java
vipxieliang9 小时前
ValidX vs Apache Commons Validator:功能与性能对比
java·spring boot
SimonKing9 小时前
升级Spring Boot 4后,从 Jackson 2 到 3,到底有哪些变化
java·后端·程序员
吃饱了得干活10 小时前
一篇讲清楚Spring Boot:自动装配、启动器、过滤器、拦截器、设计模式
java·spring boot·后端
lhldsg11 小时前
AI零售系统实战指南:从架构设计到落地部署全解析
java·人工智能·小程序·uni-app·零售