基于Java标准库读取CSV实现天地图POI分类快速导入PostGIS数敌比罕侥厝
AI云服务公司Hyperbolic联合创始人兼首席技术官Yuchen Jin在社交媒体上透露,他在OpenAI的朋友现在非常兴奋,因为OpenAI首席执行官山姆·奥尔特曼刚宣布每位员工都能在两年内获得150万美元的奖金。据周五凌晨的最新报道,有知情人士透露,OpenAI正在向其技术研究和工程团队的约1000名员工发放奖金,大约占总人数三分之一左右,金额从小几十万美元至数百万美元不等。
·
基于Java标准库读取CSV实现天地图POI分类快速导入PostGIS
前言
在GIS应用开发中,经常需要将POI(兴趣点)数据导入到PostGIS数据库中。天地图提供了丰富的POI数据资源,通常以CSV格式提供。本文将介绍如何使用Java标准库读取CSV文件,并将天地图POI数据快速导入PostGIS数据库。
实现思路
1.使用Java标准库中的`java.io`和`java.util`包读取CSV文件
2.解析CSV中的POI数据
3.使用JDBC连接PostGIS数据库
4.批量插入POI数据
核心代码实现
```java
importjava.io.BufferedReader;
importjava.io.FileReader;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.PreparedStatement;
importjava.util.ArrayList;
importjava.util.List;
publicclassPOIImporter{
privatestaticfinalStringDB_URL="jdbc:postgresql://localhost:5432/gisdb";
privatestaticfinalStringUSER="postgres";
privatestaticfinalStringPASS="password";
publicstaticvoidmain(String[]args){
StringcsvFile="tianditu_poi.csv";
Stringline;
StringcsvSplitBy=",";
List<POI>poiList=newArrayList<>();
try(BufferedReaderbr=newBufferedReader(newFileReader(csvFile))){
//跳过标题行
br.readLine();
while((line=br.readLine())!=null){
String[]data=line.split(csvSplitBy);
POIpoi=newPOI();
poi.setId(data[0]);
poi.setName(data[1]);
poi.setCategory(data[2]);
poi.setLongitude(Double.parseDouble(data[3]));
poi.setLatitude(Double.parseDouble(data[4]));
poiList.add(poi);
}
//批量导入数据库
importToPostGIS(poiList);
}catch(Exceptione){
e.printStackTrace();
}
}
privatestaticvoidimportToPostGIS(List<POI>poiList){
Stringsql="INSERTINTOpoi_data(id,name,category,geom)"+
"VALUES(?,?,?,ST_SetSRID(ST_MakePoint(?,?),4326))";
try(Connectionconn=DriverManager.getConnection(DB_URL,USER,PASS);
PreparedStatementpstmt=conn.prepareStatement(sql)){
for(POIpoi:poiList){
pstmt.setString(1,poi.getId());
pstmt.setString(2,poi.getName());
pstmt.setString(3,poi.getCategory());
pstmt.setDouble(4,poi.getLongitude());
pstmt.setDouble(5,poi.getLatitude());
pstmt.addBatch();
}
pstmt.executeBatch();
System.out.println("成功导入"+poiList.size()+"条POI数据");
}catch(Exceptione){
e.printStackTrace();
}
}
}
classPOI{
privateStringid;
privateStringname;
privateStringcategory;
privatedoublelongitude;
privatedoublelatitude;
//省略getter和setter方法
}
```
关键点说明
1.CSV解析:使用`BufferedReader`逐行读取CSV文件,通过`split()`方法分割每行数据
2.PostGIS连接:使用JDBC连接PostgreSQL数据库,PostGIS作为其扩展
3.空间数据插入:使用PostGIS的`ST_MakePoint`函数创建点几何,`ST_SetSRID`设置坐标系为WGS84(4326)
4.批量操作:使用`PreparedStatement`的`addBatch()`方法实现批量插入,提高性能
优化建议
1.对于大数据量CSV文件,可以考虑使用OpenCSV等专门库提高解析效率
2.实现分批处理机制,避免一次性加载过多数据导致内存溢出
3.添加错误处理和日志记录,便于排查问题
总结
本文介绍了使用Java标准库实现天地图POI数据从CSV到PostGIS的导入流程。该方法简单高效,适合中小规模数据迁移。对于更复杂的场景,可以考虑结合SpringBatch等框架实现更强大的批处理功能。
希望本文对您的GIS开发工作有所帮助!如有任何问题,欢迎在评论区留言讨论。
基于Java标准库读取CSV实现天地图POI分类快速导入PostGIS
前言
在GIS应用开发中,经常需要将POI(兴趣点)数据导入到PostGIS数据库中。天地图提供了丰富的POI数据资源,通常以CSV格式提供。本文将介绍如何使用Java标准库读取CSV文件,并将天地图POI数据快速导入PostGIS数据库。
实现思路
1.使用Java标准库中的`java.io`和`java.util`包读取CSV文件
2.解析CSV中的POI数据
3.使用JDBC连接PostGIS数据库
4.批量插入POI数据
核心代码实现
```java
importjava.io.BufferedReader;
importjava.io.FileReader;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.PreparedStatement;
importjava.util.ArrayList;
importjava.util.List;
publicclassPOIImporter{
privatestaticfinalStringDB_URL="jdbc:postgresql://localhost:5432/gisdb";
privatestaticfinalStringUSER="postgres";
privatestaticfinalStringPASS="password";
publicstaticvoidmain(String[]args){
StringcsvFile="tianditu_poi.csv";
Stringline;
StringcsvSplitBy=",";
List<POI>poiList=newArrayList<>();
try(BufferedReaderbr=newBufferedReader(newFileReader(csvFile))){
//跳过标题行
br.readLine();
while((line=br.readLine())!=null){
String[]data=line.split(csvSplitBy);
POIpoi=newPOI();
poi.setId(data[0]);
poi.setName(data[1]);
poi.setCategory(data[2]);
poi.setLongitude(Double.parseDouble(data[3]));
poi.setLatitude(Double.parseDouble(data[4]));
poiList.add(poi);
}
//批量导入数据库
importToPostGIS(poiList);
}catch(Exceptione){
e.printStackTrace();
}
}
privatestaticvoidimportToPostGIS(List<POI>poiList){
Stringsql="INSERTINTOpoi_data(id,name,category,geom)"+
"VALUES(?,?,?,ST_SetSRID(ST_MakePoint(?,?),4326))";
try(Connectionconn=DriverManager.getConnection(DB_URL,USER,PASS);
PreparedStatementpstmt=conn.prepareStatement(sql)){
for(POIpoi:poiList){
pstmt.setString(1,poi.getId());
pstmt.setString(2,poi.getName());
pstmt.setString(3,poi.getCategory());
pstmt.setDouble(4,poi.getLongitude());
pstmt.setDouble(5,poi.getLatitude());
pstmt.addBatch();
}
pstmt.executeBatch();
System.out.println("成功导入"+poiList.size()+"条POI数据");
}catch(Exceptione){
e.printStackTrace();
}
}
}
classPOI{
privateStringid;
privateStringname;
privateStringcategory;
privatedoublelongitude;
privatedoublelatitude;
//省略getter和setter方法
}
```
关键点说明
1.CSV解析:使用`BufferedReader`逐行读取CSV文件,通过`split()`方法分割每行数据
2.PostGIS连接:使用JDBC连接PostgreSQL数据库,PostGIS作为其扩展
3.空间数据插入:使用PostGIS的`ST_MakePoint`函数创建点几何,`ST_SetSRID`设置坐标系为WGS84(4326)
4.批量操作:使用`PreparedStatement`的`addBatch()`方法实现批量插入,提高性能
优化建议
1.对于大数据量CSV文件,可以考虑使用OpenCSV等专门库提高解析效率
2.实现分批处理机制,避免一次性加载过多数据导致内存溢出
3.添加错误处理和日志记录,便于排查问题
总结
本文介绍了使用Java标准库实现天地图POI数据从CSV到PostGIS的导入流程。该方法简单高效,适合中小规模数据迁移。对于更复杂的场景,可以考虑结合SpringBatch等框架实现更强大的批处理功能。
希望本文对您的GIS开发工作有所帮助!如有任何问题,欢迎在评论区留言讨论。
基于Java标准库读取CSV实现天地图POI分类快速导入PostGIS
前言
在GIS应用开发中,经常需要将POI(兴趣点)数据导入到PostGIS数据库中。天地图提供了丰富的POI数据资源,通常以CSV格式提供。本文将介绍如何使用Java标准库读取CSV文件,并将天地图POI数据快速导入PostGIS数据库。
实现思路
1.使用Java标准库中的`java.io`和`java.util`包读取CSV文件
2.解析CSV中的POI数据
3.使用JDBC连接PostGIS数据库
4.批量插入POI数据
核心代码实现
```java
importjava.io.BufferedReader;
importjava.io.FileReader;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.PreparedStatement;
importjava.util.ArrayList;
importjava.util.List;
publicclassPOIImporter{
privatestaticfinalStringDB_URL="jdbc:postgresql://localhost:5432/gisdb";
privatestaticfinalStringUSER="postgres";
privatestaticfinalStringPASS="password";
publicstaticvoidmain(String[]args){
StringcsvFile="tianditu_poi.csv";
Stringline;
StringcsvSplitBy=",";
List<POI>poiList=newArrayList<>();
try(BufferedReaderbr=newBufferedReader(newFileReader(csvFile))){
//跳过标题行
br.readLine();
while((line=br.readLine())!=null){
String[]data=line.split(csvSplitBy);
POIpoi=newPOI();
poi.setId(data[0]);
poi.setName(data[1]);
poi.setCategory(data[2]);
poi.setLongitude(Double.parseDouble(data[3]));
poi.setLatitude(Double.parseDouble(data[4]));
poiList.add(poi);
}
//批量导入数据库
importToPostGIS(poiList);
}catch(Exceptione){
e.printStackTrace();
}
}
privatestaticvoidimportToPostGIS(List<POI>poiList){
Stringsql="INSERTINTOpoi_data(id,name,category,geom)"+
"VALUES(?,?,?,ST_SetSRID(ST_MakePoint(?,?),4326))";
try(Connectionconn=DriverManager.getConnection(DB_URL,USER,PASS);
PreparedStatementpstmt=conn.prepareStatement(sql)){
for(POIpoi:poiList){
pstmt.setString(1,poi.getId());
pstmt.setString(2,poi.getName());
pstmt.setString(3,poi.getCategory());
pstmt.setDouble(4,poi.getLongitude());
pstmt.setDouble(5,poi.getLatitude());
pstmt.addBatch();
}
pstmt.executeBatch();
System.out.println("成功导入"+poiList.size()+"条POI数据");
}catch(Exceptione){
e.printStackTrace();
}
}
}
classPOI{
privateStringid;
privateStringname;
privateStringcategory;
privatedoublelongitude;
privatedoublelatitude;
//省略getter和setter方法
}
```
关键点说明
1.CSV解析:使用`BufferedReader`逐行读取CSV文件,通过`split()`方法分割每行数据
2.PostGIS连接:使用JDBC连接PostgreSQL数据库,PostGIS作为其扩展
3.空间数据插入:使用PostGIS的`ST_MakePoint`函数创建点几何,`ST_SetSRID`设置坐标系为WGS84(4326)
4.批量操作:使用`PreparedStatement`的`addBatch()`方法实现批量插入,提高性能
优化建议
1.对于大数据量CSV文件,可以考虑使用OpenCSV等专门库提高解析效率
2.实现分批处理机制,避免一次性加载过多数据导致内存溢出
3.添加错误处理和日志记录,便于排查问题
总结
本文介绍了使用Java标准库实现天地图POI数据从CSV到PostGIS的导入流程。该方法简单高效,适合中小规模数据迁移。对于更复杂的场景,可以考虑结合SpringBatch等框架实现更强大的批处理功能。
希望本文对您的GIS开发工作有所帮助!如有任何问题,欢迎在评论区留言讨论。
更多推荐
所有评论(0)