我的编程空间,编程开发者的网络收藏夹
学习永远不晚

java  中Excel转shape file的实例详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

java  中Excel转shape file的实例详解

java  中Excel转shape file的实例详解

概述:

本文讲述如何结合geotools和POI实现Excel到shp的转换,再结合前文shp到geojson数据的转换,即可实现用户上传excel数据并在web端的展示功能。

截图:

java  中Excel转shape file的实例详解

 原始Excel文件

java  中Excel转shape file的实例详解

运行耗时

java  中Excel转shape file的实例详解

运行结果

代码:

package com.lzugis.geotools;import com.lzugis.CommonMethod;import com.vividsolutions.jts.geom.Coordinate;import com.vividsolutions.jts.geom.GeometryFactory;import com.vividsolutions.jts.geom.Point;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.poifs.filesystem.POIFSFileSystem;import org.geotools.data.FeatureWriter;import org.geotools.data.Transaction;import org.geotools.data.shapefile.ShapefileDataStore;import org.geotools.data.shapefile.ShapefileDataStoreFactory;import org.geotools.feature.simple.SimpleFeatureTypeBuilder;import org.geotools.referencing.crs.DefaultGeographicCRS;import org.opengis.feature.simple.SimpleFeature;import org.opengis.feature.simple.SimpleFeatureType;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.io.Serializable;import java.nio.charset.Charset;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class Xls2Shape {  static Xls2Shape xls2Shp = new Xls2Shape();  private static String rootPath = System.getProperty("user.dir");  private CommonMethod cm = new CommonMethod();  private HSSFSheet sheet;  private Class getCellType(HSSFCell cell) {    if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {      return String.class;    } else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {      return Double.class;    } else {      return String.class;    }  }  private Object getCellValue(HSSFCell cell) {    if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {      return cell.getRichStringCellValue().getString();    } else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {      return cell.getNumericCellValue();    } else {      return "";    }  }  private List<Map<String, Object>> getExcelHeader() {    List<Map<String, Object>> list = new ArrayList();    HSSFRow header = sheet.getRow(0);    HSSFRow value = sheet.getRow(1);    //获取总列数    int colNum = header.getPhysicalNumberOfCells();    for (int i = 0; i < colNum; i++) {      HSSFCell cellField = header.getCell(i);      HSSFCell cellvalue = value.getCell(i);      String fieldName = cellField.getRichStringCellValue().getString();      fieldName = cm.getPinYinHeadChar(fieldName);      Class fieldType = getCellType(cellvalue);      Map<String, Object> map = new HashMap<String, Object>();      map.put("name", fieldName);      map.put("type", fieldType);      list.add(map);    }    return list;  }  public void excel2Shape(String xlsfile, String shppath) {    POIFSFileSystem fs;    HSSFWorkbook wb;    HSSFRow row;    try {      InputStream is = new FileInputStream(xlsfile);      fs = new POIFSFileSystem(is);      wb = new HSSFWorkbook(fs);      sheet = wb.getSheetAt(0);      //获取总列数      int colNum = sheet.getRow(0).getPhysicalNumberOfCells();      // 得到总行数      int rowNum = sheet.getLastRowNum();      List list = getExcelHeader();      //创建shape文件对象      File file = new File(shppath);      Map<String, Serializable> params = new HashMap<String, Serializable>();      params.put(ShapefileDataStoreFactory.URLP.key, file.toURI().toURL());      ShapefileDataStore ds = (ShapefileDataStore) new ShapefileDataStoreFactory().createNewDataStore(params);      //定义图形信息和属性信息      SimpleFeatureTypeBuilder tb = new SimpleFeatureTypeBuilder();      tb.setCRS(DefaultGeographicCRS.WGS84);      tb.setName("shapefile");      tb.add("the_geom", Point.class);      for (int i = 0; i < list.size(); i++) {        Map<String, Object> map = (Map<String, Object>) list.get(i);        tb.add(map.get("name").toString(), (Class) map.get("type"));      }      ds.createSchema(tb.buildFeatureType());      //设置编码      Charset charset = Charset.forName("GBK");      ds.setCharset(charset);      //设置Writer      FeatureWriter<SimpleFeatureType, SimpleFeature> writer = ds.getFeatureWriter(ds.getTypeNames()[0], Transaction.AUTO_COMMIT);      //写下一条      SimpleFeature feature = null;      for (int i = 1; i < rowNum; i++) {        row = sheet.getRow(i);        feature = writer.next();        Map mapLonLat = new HashMap();        for (int j = 0; j < colNum; j++) {          HSSFCell cell = row.getCell(j);          Map<String, Object> mapFields = (Map<String, Object>) list.get(j);          String fieldName = mapFields.get("name").toString();          feature.setAttribute(fieldName, getCellValue(cell));          if (fieldName.toLowerCase().equals("lon") || fieldName.toLowerCase().equals("lat")) {            mapLonLat.put(fieldName, getCellValue(cell));          }        }        feature.setAttribute("the_geom", new GeometryFactory().createPoint(new Coordinate((double) mapLonLat.get("lon"), (double) mapLonLat.get("lat"))));      }      writer.write();      writer.close();      ds.dispose();    } catch (Exception e) {      e.printStackTrace();    }  }  public static void main(String[] args) {    long start = System.currentTimeMillis();    String xlspath = rootPath + "/data/xls/capital.xls",        shppath = rootPath + "/out/capital.shp";    xls2Shp.excel2Shape(xlspath, shppath);    System.out.println("共耗时" + (System.currentTimeMillis() - start) + "ms");  }}

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

java  中Excel转shape file的实例详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java  中Excel转shape file的实例详解

java 中Excel转shape file的实例详解概述:本文讲述如何结合geotools和POI实现Excel到shp的转换,再结合前文shp到geojson数据的转换,即可实现用户上传excel数据并在web端的展示功能。截图: 原
2023-05-31

java  StringBuilder类的详解及简单实例

java StringBuilder类的详解及简单实例实现代码:public class StringBuilderTest { public static void ma
2023-05-31

Java  队列 Queue 用法实例详解

队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。以下实例演示了队列(Queue)的用法:/* author
2023-05-31

Android  隐式Intent的实例详解

Android 隐式Intent的实例详解前言:顾名思义,隐式意图就是在不明确设置激活对象的前提下寻找最匹配的组件,举个例子,比如有5个人:(1)A:170cm(2)B:160cm(3)C:180cm(4)D:190cm(5)E:200c
2023-05-30

Android  Wifi的forget()操作实例详解

Android Wifi的forget()操作实例详解我们在处理某个Wifi连接时,有时会需要忘掉当前连接的密码信息。执行这项操作,我们需要调用WifiManager::forget()函数:/** * Delete the netwo
2023-05-31

java  中OkHttp的使用方法及实例

java 中OkHttp的使用方法及实例概述准备研究Retrofit,而它是依赖OkHttp的,所以先使用一下OkHttp,不深究源码,只探究使用方法。以后有机会再翻查源码。在进行之前,首先需要2个jar包,其中一个是okHttp的jar
2023-05-31

Json转化为Java对象的实例详解

Json转化为Java对象的实例详解问题:前后端数据交互时,经常会遇到Json串与Java对象转化的问题,有的Java对象中还包含了List对象等。解决方案: 引入 json-lib包,Maven坐标如下:
2023-05-31

java 中@Deprecated 注解的实例详解

java 中@Deprecated 注解的实例详解1 简介  Deprecated 同 SuppressWarnings 一样,都是 J2SE 5.0 中定义在Java.lang包中的标准 Annotation 之一,其可以标注在类、字段和
2023-05-31

java中Spring Security的实例详解

java中Spring Security的实例详解spring security是一个多方面的安全认证框架,提供了基于JavaEE规范的完整的安全认证解决方案。并且可以很好与目前主流的认证框架(如CAS,中央授权系统)集成。使用spring
2023-05-31

java中的interface接口实例详解

java中的interface接口实例详解接口:Java接口是一些方法表征的集合,但是却不会在接口里实现具体的方法。java接口的特点如下:1、java接口不能被实例化2、java接口中声明的成员自动被设置为public,所以不存在pri
2023-05-31

Java 中synchronize函数的实例详解

Java 中synchronize函数的实例详解java中的一个类的成员函数若用synchronized来修饰,则对应同一个对象,多个线程像调用这个对象的这个同步函数时必须等到上一个线程调用完才能由下一个线程调用。那么如果一个类同时有两个成
2023-05-31

java 中createStatement()方法的实例详解

java 中createStatement()方法的实例详解用缺省设置创建时,ResultSet 是一种只能访问一次(one-time-through)、只能向前访问(forward-only)和只读的对象。您只能访问数据一次,如果再次需要
2023-05-31

Java 中This用法的实例详解

Java 中This用法的实例详解用类名定义一个变量的时候,定义的只是一个引用,外面可以通过这个引用来访问这个类里面的属性和方法。 那们类里面是够也应该有一个引用来访问自己的属性和方法纳? 呵呵,Java提供了一个很好的东西,
2023-05-31

Java中类赋值的解释实例详解

Java中类赋值的解释实例详解Java是面向对象的存储语言,进行的是信息的传递,也就是类的赋值,实际上他们占用的是同样的存储空间;下面上一个自己写的例子:感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
2023-05-31

java中设计模式(多例)的实例详解

java中设计模式(多例)的实例详解多例:单例设计模式的变形,可以看成是一个缓存池的单例,而缓存池里面可以存多个数据实例代码://单例+缓存---没有控制池大小public class A { //1创建一个单例的池(private即把池
2023-05-31

Java中Properties类的操作实例详解

Java中Properties类的操作实例详解知识学而不用,就等于没用,到真正用到的时候还得重新再学。最近在看几款开源模拟器的源码,里面涉及到了很多关于Properties类的引用,由于Java已经好久没用了,而这些模拟器大多用Java来写
2023-05-31

java 中死锁问题的实例详解

java 中死锁问题的实例详解先看代码在做解释public class DeadLock implements Runnable{ String a; String b; boolean flag; public DeadLock(
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录