GIS gentools jar包使用

2023-10-26

package ghgf; 
 
import java.io.File; 
import java.io.IOException; 
import java.io.Serializable; 
import java.net.MalformedURLException; 
import java.nio.charset.Charset; 
import java.util.Collection; 
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map; 
 
import org.geotools.data.DataUtilities; 
import org.geotools.data.DefaultTransaction; 
import org.geotools.data.FeatureSource; 
import org.geotools.data.Transaction; 
import org.geotools.data.shapefile.ShapefileDataStore; 
import org.geotools.data.shapefile.ShapefileDataStoreFactory; 
import org.geotools.data.shapefile.ShapefileFeatureLocking; 
import org.geotools.data.shapefile.ShpFiles; 
import org.geotools.data.shapefile.dbf.DbaseFileHeader; 
import org.geotools.data.shapefile.dbf.DbaseFileReader; 
import org.geotools.feature.FeatureCollection; 
import org.geotools.feature.FeatureCollections; 
import org.geotools.feature.FeatureIterator; 
import org.geotools.feature.simple.SimpleFeatureBuilder; 
import org.geotools.referencing.crs.DefaultGeographicCRS; 
import org.opengis.feature.Property; 
import org.opengis.feature.simple.SimpleFeature; 
import org.opengis.feature.simple.SimpleFeatureType; 
 
import com.vividsolutions.jts.geom.Coordinate; 
import com.vividsolutions.jts.geom.GeometryFactory; 
import com.vividsolutions.jts.geom.MultiLineString; 
import com.vividsolutions.jts.geom.Point; 
 
/**
*
* Class MapbarReader.java
*
* Description  Geotools  shp格式文件的读取,创建,和写入操作
*
* Company mapbar
*
* author Chenll E-mail: Chenll@mapbar.com
*
* Version 1.0
*
* Date 2012-2-9 下午03:31:51
*/ 
public class ffg { 
 
    /**
     * 读取dbf格式的文件
     *
     * @param path
     */ 
    public void readDBF(String path) { 
        DbaseFileReader reader = null; 
        try { 
            reader = new DbaseFileReader(new ShpFiles(path),false, 
                    Charset.forName("GBK")); 
            DbaseFileHeader header = reader.getHeader(); 
            int numFields = header.getNumFields(); 
            // 迭代读取记录 
            while (reader.hasNext()) { 
                try { 
                    Object[] entry = reader.readEntry(); 
                    for (int i =0; i < numFields; i++) { 
                        String title = header.getFieldName(i); 
                        Object value = entry[i]; 
                        String name = title.toString(); 
                        String info = value.toString(); 
                    } 
                } catch (Exception e) { 
                    e.printStackTrace(); 
                } 
            } 
        } catch (Exception ex) { 
            ex.printStackTrace(); 
        } finally { 
            if (reader != null) { 
                // 关闭 
                try { 
                    reader.close(); 
                } catch (Exception e) { 
                } 
            } 
        } 
    } 
 
    /**
     * 读取shap格式的文件
     *
     * @param path
     */ 
    public void readSHP(String path) { 
        ShapefileDataStore shpDataStore = null; 
        try { 
            shpDataStore = new ShapefileDataStore(new File(path).toURI() 
                    .toURL()); 
            shpDataStore.setStringCharset(Charset.forName("GBK")); 
            // 文件名称 
            String typeName = shpDataStore.getTypeNames()[0]; 
            FeatureSource<SimpleFeatureType, SimpleFeature> featureSource =null; 
            featureSource = (FeatureSource<SimpleFeatureType, SimpleFeature>) shpDataStore 
                    .getFeatureSource(typeName); 
            FeatureCollection<SimpleFeatureType, SimpleFeature> result = featureSource 
                    .getFeatures(); 
            FeatureIterator<SimpleFeature> itertor = result.features(); 
            while (itertor.hasNext()) { 
                SimpleFeature feature = itertor.next(); 
                Collection<Property> p = feature.getProperties(); 
                Iterator<Property> it = p.iterator(); 
                while (it.hasNext()) { 
                    Property pro = it.next(); 
                    // 坐标属性 
                    if (pro.getValue()instanceof MultiLineString) { 
                        // 坐标信息 
                        MultiLineString line = (MultiLineString) pro.getValue(); 
                        // 总坐标个数 
                        int pointNums = line.getNumPoints(); 
                        // 中心点坐标 
                        double centX = line.getCentroid().getX(); 
                        double centY = line.getCentroid().getY(); 
 
                    } else { 
                        // 其它属性以及值 
                        String name = pro.getName().toString(); 
                        String value = pro.getValue().toString(); 
                        String  vvv = "ffff";
                    } 
                } 
            } 
            itertor.close(); 
        } catch (MalformedURLException e) { 
            e.printStackTrace(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
    } 
     
    /**
     * 创建shp文件
     * @param outPath
     */ 
    public void createShp(String outPath) { 
        try { 
            // 定义属性 
            final SimpleFeatureType TYPE = DataUtilities.createType("Location", 
                    "location:Point," +"NAME:String," + "INFO:String," 
                            + "OWNER:String"); 
            FeatureCollection<SimpleFeatureType, SimpleFeature> collection = FeatureCollections 
                    .newCollection(); 
            GeometryFactory geometryFactory = new GeometryFactory(); 
            SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(TYPE); 
            double latitude = Double.parseDouble("116.123456789"); 
            double longitude = Double.parseDouble("39.120001"); 
            String NAME = "运通110路"; 
            String INFO = "白班车,学生票有效"; 
            String OWNER = "001"; 
            // 创建坐标 
            Point point = geometryFactory.createPoint(new Coordinate(longitude, 
                    latitude)); 
            Object[] obj = { point, NAME, INFO, OWNER }; 
            SimpleFeature feature = featureBuilder.buildFeature(null, obj); 
            collection.add(feature); 
            // shap文件的输出路径 
            File newFile = new File(outPath); 
            Map<String, Serializable> params = new HashMap<String, Serializable>(); 
            params.put("url", (Serializable) newFile.toURI().toURL()); 
            params.put("create spatial index", (Serializable) Boolean.TRUE); 
            ShapefileDataStoreFactory dataStoreFactory = new ShapefileDataStoreFactory(); 
            ShapefileDataStore newDataStore = (ShapefileDataStore) dataStoreFactory 
                    .createNewDataStore(params); 
            newDataStore.createSchema(TYPE); 
            newDataStore.setStringCharset(Charset.forName("GBK")); 
            newDataStore.forceSchemaCRS(DefaultGeographicCRS.WGS84); 
            String typeName = newDataStore.getTypeNames()[0]; 
            System.out.println(typeName);
            ShapefileFeatureLocking featureSource = (ShapefileFeatureLocking) newDataStore 
                    .getFeatureSource(typeName); 
            // 创建一个事务 
            Transaction transaction = new DefaultTransaction("create"); 
            featureSource.setTransaction(transaction); 
            try { 
                featureSource.addFeatures(collection); 
                // 提交事务 
                transaction.commit(); 
            } catch (Exception problem) { 
                problem.printStackTrace(); 
                transaction.rollback(); 
            } finally { 
                transaction.close(); 
            } 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    } 
 
    public static void main(String[] args) { 
        String DBFinput = "D:\\安康公交线_polyline.dbf"; 
        String shapinput = "D:\\华微\\中国详细shapefile文件\\地级城市驻地.shp"; 
        ffg mr = new ffg(); 
        String outShp =  "D:\\busStation.shp"; 
        mr.readSHP(shapinput);
        mr.createShp(outShp); 
    } 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GIS gentools jar包使用 的相关文章

  • Linux驱动——设备树

    在对总线设备驱动进行详细说明时可以看出 虽然总线设备驱动可以实现驱动和设备分离 但是总线设备驱动引发另外的一个问题就是在相同的芯片不同的开发板上 当外设资源不同时需要在不同的设备文件中去定义引脚 这样就导致开发板中保留大量设备文件 为了解决
  • 多元任务,高额奖金!首届“开放原子开源大赛”等你参与!

    人类有各种交流方式 包括语言 文字 音乐 影像等 有的贴近生活 有的充满艺术感 然而 在人工智能时代 代码作为一种特殊的交流形式愈发重要 它使得人与人 人与机器之间能够高效便捷地沟通 从而为科技发展注入活力 开源 则是让这种交流变得更加丰富

随机推荐

  • Android ADB命令大全(通过ADB命令查看wifi密码、MAC地址、设备信息、操作文件、查看文件、日志信息、卸载、启动和安装APK等)

    ADB很强大 记住一些ADB命令有助于提高工作效率 获取序列号 adb get serialno 查看连接计算机的设备 adb devices 重启机器 adb reboot 重启到bootloader 即刷机模式 adb reboot b
  • URL、URI和URN之间的区别

  • 程序员应该掌握的 10 个搜索技巧

    在今天 用户可以通过搜索引擎轻松找出自己想要的信息 但还是难以避免结果不尽如人意的情况 实际上 用户仅需掌握几个常用技巧即可轻松化解这种尴尬 下面介绍 10 个在进行 Google 搜索时可以使用的便捷技巧 其他搜索引擎也支持这 10 种技
  • C++外观模式

    外观模式 1 外观模式简介及应用场景 外观者模式其实就是相当于对一组子系统功能的组合 对外提供统一的简单接口的模式 当我们在实际开发中 一般情况下是一个单独的子系统对应的是一个独立的功能模块 但是随着业务功能的不断增加 对应子系统的迭代必然
  • CentOS8 服务篇4:FTP文件传输服务搭建与配置

    FTP 文件传输服务三种配置模式 匿名模式 本地用户模式 虚拟用户模式 安装ftp服务 安装完后再根据不同模式进行配置 root localhost yum repos d yum install y vsftpd ftp vsftpd是搭
  • Qt中qss样式表

    qss样式表是用于设置QT程序UI界面中控件的背景图片 大小 字体颜色 字体类型 按钮状态变化等属性 美化UI界面 实现界面和程序的分离 可以快速切换皮肤 1 基本语法 selector attribute value 说明 selecto
  • Java生成exe执行文件

    一 准备工作 下载可将jar包转换的工具EXE4J工具 下载地址为 https www ej technologies com download exe4j files 下载完成 直接点击下一步安装 直到安装完成 导出项目jar包 按以下步
  • javaFile类知识点总结

    1 File类 Java io File类是文件和目录路径名的抽象表示 主要用于文件和目录的创建 查找 删除等操作 File中的静态成员变量 pathSeparator与系统有关的路径分隔符 File pathSeparator 代表路径分
  • android系统删除apk的广播,研究androidapk安装卸载等产生的系统广播

    想更加清楚的了解 android 系统在安装 卸载时产生的系统广播 于是写了一个 demo 来做监听 BroadReceiver 配置如下 html 这里有一点要注意 需配置 否则收不到广播 1 当你第一次安装某个应用的时候 java 10
  • 干货

    SpringCloud的从整体架构上看 相对来说是完整的 庞大的 它不仅仅是一个基础性架构工具 它为微服务架构提供了一个 全家桶 的套餐 每一个模块关注各自的职能 并且能够很好地配合与协作 能够帮助入门者快速搭建起一套微服务架构的服务 内容
  • MyBatis之使用JSONObject代替JavaBean优雅返回多表查询结果

    项目中需要返回多个表的查询结果 比如user表中的用户信息和user个人的所在班的班级信息 目前我们有user实体类和class实体类 一般情况下如果是单表查询 比如查询user信息 那么查询的返回值就是一个user对象或一个user对象列
  • Qt_Qt报错multiple target patterns

    去看看pro文件中的路径是否有问题
  • ARM7的三级流水线过程

    看到汇编中很多关于程序返回与中断返回时处理地址都很特别 仔细想想原来是流水线作用的效果 所以 决定总结学习下ARM流水线 ARM7处理器采用3级流水线来增加处理器指令流的速度 能提供0 9MIPS MHz的指令处理速度 PS MIPS Mi
  • Android RxJava第一弹之原理详解、使用详解、常用场景(基于Rxjava2.0)

    Android RxJava第一弹之原理详解 使用详解 常用场景 基于Rxjava2 0 Android RxJava第二弹之RxJava封装库 RxJava Animation RxJava Glide Android RxJava第三弹
  • C语言数据结构复杂度

    文章目录 前言 什么是数据结构 什么是算法 算法效率 算法的复杂度 时间复杂度 时间复杂度的概念 大O的渐进表示法 常见时间复杂度计算举例 空间复杂度 常见复杂度对比 前言 从这篇博客开始为数据结构与算法的相关内容 数据结构比较难 博主建议
  • Leecode初级算法字符串——验证回文串

    给定一个字符串 验证它是否是回文串 只考虑字母和数字字符 可以忽略字母的大小写 说明 本题中 我们将空字符串定义为有效的回文串 示例 1 输入 A man a plan a canal Panama 输出 true 解释 amanaplan
  • tcp三次握手

    在TCP IP协议中 TCP协议提供可靠的连接服务 采用三次握手建立一个连接 第一次握手 建立连接时 客户端发送syn包 syn j 到服务器 并进入SYN SEND状态 等待服务器确认 第二次握手 服务器收到syn包 必须确认客户的SYN
  • Ubuntu18.04安装教程

    Ubuntu18 04安装教程 一 准备工作 1 下载 Ubuntu 镜像 2 制作U盘启动盘 3 给 Ubuntu 分配硬盘空间 二 安装 Ubuntu18 04 1 设置启动项 2 正式安装 1 选择语言 2 键盘布局 3 无线连网 4
  • Python 字典10种意想不到的用途

    Python 字典10种意想不到的用途 1 switch case语句 2 记忆化 3 稀疏矩阵 4 图表 5 状态机 6 计数频率 7 XML HTML 解析 8 配置文件 9 缓存 API 响应 10 编码和解码数据 源码 参考 Pyt
  • GIS gentools jar包使用

    package ghgf import java io File import java io IOException import java io Serializable import java net MalformedURLExce