精华内容
下载资源
问答
  • mid音频文件下载

    2017-11-08 14:52:40
    mid音频文件下载,小容量音频下载,mid音频文件下载,小容量音频下载,
  • mid文件解析成曲谱

    2018-11-23 16:09:35
    mid音乐文件的解析成自定义view的曲谱,可以实现播放,滚动等功能
  • MID常用PCB库

    2018-07-05 16:23:04
    MID平板常用的元件库,MID平板常用的元件库,MID平板常用的元件库,MID平板常用的元件库,MID平板常用的元件库,MID平板常用的元件库,MID平板常用的元件库,MID平板常用的元件库,MID平板常用的元件库,MID平板常用...
  • mid钢琴曲制作

    2014-01-30 19:18:32
    mid(midi)格式钢琴曲的制作软件下载器。
  • mid格式音乐

    热门讨论 2012-07-09 21:27:09
    能够供简单的Java编写的音乐播放器播放的音乐格式
  • 最好的MID转换成WAV音频文件的工具

    热门讨论 2012-08-16 21:44:41
    著名的MIDI软音源播放工具,音响效果一流. 还可以把.mid文件转换为.wav文件。
  • mif/mid文件说明 mid、mif文件是Mapinfo用来存储空间数据的一种格式,mif文件保存了地图的属性表结构和空间信息(点、线、面),mid文件则按照mif文件里表结构的顺序在每行保存了各个字段的属性信息,具体介绍可以...

    mif/mid文件说明

    mid、mif文件是Mapinfo用来存储空间数据的一种格式,mif文件保存了地图的属性表结构和空间信息(点、线、面),mid文件则按照mif文件里表结构的顺序在每行保存了各个字段的属性信息,具体介绍可以参考这篇博文

    https://ershi.blog.csdn.net/article/details/99696139

    mid、mif文件如何转成我们常见的shapefile、geojson等格式的数据

    下面的方法,其中包括转wkt、geometry、SimpleFeature等格式的都可以作为参考(以线数据为例),直接上代码

    需要注意的是:DataUtilities.createType方法创建要素时,String类型的字段长度默认是254,如果字段很多和要素也很多,dbf文件会比正常变大很多,如果需要自定义String类型长度,可以看一下DataUtilities类源码,重写一下;

        private void roadMidMiftoShp(String path,String mid,String mif){
            //List<LineString> lineList = new ArrayList<>();
            List<List<String>> midRows = loadMidFile(new File(mid));
            logger.info("加载mid结束");
            List<String> colField = new ArrayList<>();
            Map<Integer, List<List<Double>>> lineRows = new HashMap<>();
            loadMifFile(new File(mif),true,colField,lineRows);
            logger.info("加载mif结束");
            List<SimpleFeature> lineFeatures = new ArrayList<>();
            String typeSpec = "the_geom:LineString:srid=4326";
            for (String col : colField){
                typeSpec = typeSpec + "," + col + ":String";
            }
            try {
                SimpleFeatureType featureType = DataUtilities.createType("dsline",typeSpec);
                SimpleFeatureBuilder linefeatureBuilder = new SimpleFeatureBuilder(featureType);
                for (int i = 0; i < midRows.size(); i++){
                    for (int j = 0; j < colField.size(); j++){
                       linefeatureBuilder.set(colField.get(j),midRows.get(i).get(j));
                    }
                    SimpleFeature featureLine = linefeatureBuilder.buildFeature(String.valueOf(i));
                    String lineStr = "LINESTRING(";
                    List<List<Double>> lineRow = lineRows.get(i);
                    for (List<Double> line : lineRow){
                        lineStr = lineStr + line.get(0) + " " + line.get(1) + ",";
                    }
                    lineStr = lineStr.substring(0,lineStr.length()-1) + ")";
                    LineString roadLine = createLineByWKT(lineStr);
                    featureLine.setDefaultGeometry(roadLine);
                    lineFeatures.add(featureLine);
                }
    //            List<Geometry> geometryList = featuresToGeometrys(lineFeatures);
    //            lineList = toSimpleLine(geometryList);
            }catch (Exception e){
                logger.error("roadMidMiftoLine异常:", e);
            }
            String lineFile = path + File.separator  + "line.shp";
            String lineJson = path + File.separator  + "line.geojson";
            featureToGeojson(lineJson , lineFeatures);
            featureToShp(lineFile , lineFeatures);
            logger.info("转换shp结束");
        }
    
        
        public List<List<String>> loadMidFile(File file) {
            List<List<String>> midRows= new ArrayList<>();
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "gbk"));
                String line;
                while ((line = reader.readLine()) != null) {
                    List<String> cols = Arrays.asList(line.split(",",-1));
                    if (cols.size() > 0) {
                        for (int i = 0; i < cols.size(); i++) {
                            String value = cols.get(i).replace("\"", "");
                            cols.set(i, value);
                        }
                        midRows.add(cols);
                    }
                }
                reader.close();
            } catch (FileNotFoundException e) {
                logger.error("loadMidFile():", e);
            } catch (IOException e) {
                logger.error("loadMidFile():", e);
            }
            return midRows;
        }
    
        public void loadMifFile(File file, Boolean isLoadMifData,List<String> colField,Map<Integer, List<List<Double>>> lineRows) {
            //colField 为mid文件里各个值对应的字段
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "gbk"));
                String line;
                while ((line = reader.readLine()) != null) {
                    if (line.toUpperCase().startsWith("COLUMNS")) {
                        int num = Integer.parseInt(line.substring("Columns ".length()));
                        for (int i = 0; i < num; i++) {
                            line = reader.readLine().trim();
                            List<String> cols = Arrays.asList(line.split(","));
                            if (cols.size() > 0) {
                                colField.add(cols.get(0).split(" ")[0].trim());
                            }
                        }
                        if (isLoadMifData) {
                            //装载mif里的geo数据(点,线,面不同类型)
                            loadMifFileGeoDatas(reader,lineRows);
                        }
                        break;
                    }
                }
                reader.close();
            } catch (Exception e) {
                logger.error("loadMifFile():", e);
            }
    
        }
    
        //如果geo数据为线
        public void loadMifFileGeoDatas(BufferedReader reader,Map<Integer, List<List<Double>>> lineRows)  {
            Integer rowIndex = -1;
            try {
                String line;
                while ((line = reader.readLine()) != null) {
                    List<List<Double>> lines = new ArrayList<>();
                    line = line.trim();
                    if (line.toUpperCase().contains("NONE")){
                        lineRows.put(++rowIndex, lines);
                    }
                    if (line.toUpperCase().startsWith("LINE")) {
                        List<String> point = Arrays.asList(line.split(" "));
                        if (point.size() == 5) {
                            List<Double> point1 = new ArrayList<>();
                            point1.add(Double.parseDouble(point.get(1)));
                            point1.add(Double.parseDouble(point.get(2)));
                            lines.add(point1);
    
                            List<Double> point2 = new ArrayList<>();
                            point2.add(Double.parseDouble(point.get(3)));
                            point2.add(Double.parseDouble(point.get(4)));
                            lines.add(point2);
                        }
                        lineRows.put(++rowIndex, lines);
                    }
                    if (line.startsWith("Pline")) {
                        int num = Integer.parseInt(line.substring("Pline ".length()));
                        for (int i = 0; i < num; i++) {
                            line = reader.readLine().trim();
                            List<String> point = Arrays.asList(line.split(" "));
                            if (point.size() == 2) {
                                List<Double> points = new ArrayList<>();
                                points.add(Double.parseDouble(point.get(0)));
                                points.add(Double.parseDouble(point.get(1)));
                                lines.add(points);
                            }
                        }
                        lineRows.put(++rowIndex, lines);
                    }
                }
                reader.close();
            } catch (Exception e) {
                logger.error("loadMifFileGeoDatas():", e);
            }
        }
    
        public LinkedHashMap<String, Object> getGeometryMap(Map<Integer, List<List<Double>>> lineRows,Integer rowIdx) {
            if (lineRows!= null) {
                List<List<Double>> line = lineRows.getOrDefault(rowIdx, null);
                LinkedHashMap<String, Object> geometryMap = new LinkedHashMap<String, Object>() {{
                    put("type", "LineString");
                    put("coordinates", line);
                }};
                return geometryMap;
            }
            return null;
        }
    
        
        public LineString createLineByWKT(String lineStr) throws ParseException {
            GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);
            WKTReader reader = new WKTReader( geometryFactory );
            LineString line = (LineString) reader.read(lineStr);
            return line;
        }
    
        public void featureToShp(String path, List<SimpleFeature> outFeatures){
            try {
                FileDataStoreFactorySpi factory = new ShapefileDataStoreFactory();
                File file = new File(path);
                if (file.exists()) {
                    return;
                }
                Map map = Collections.singletonMap("url", file.toURI().toURL());
                ShapefileDataStore dataStore = (ShapefileDataStore)factory.createNewDataStore(map);
                SimpleFeatureType featureType =outFeatures.get(0).getType();
                dataStore.createSchema(featureType);
                dataStore.forceSchemaCRS(CRS.decode("EPSG:4326"));
                Transaction transaction = new DefaultTransaction("create");
                String typeName = dataStore.getTypeNames()[0];
                SimpleFeatureSource featureSource = dataStore.getFeatureSource(typeName);
                if (featureSource instanceof SimpleFeatureStore) {
                    SimpleFeatureStore featureStore = (SimpleFeatureStore) featureSource;
                    SimpleFeatureCollection collection = new ListFeatureCollection(featureType, outFeatures);
                    featureStore.setTransaction(transaction);
                    try {
                        featureStore.addFeatures(collection);
                        transaction.commit();
                    } catch (Exception problem) {
                        problem.printStackTrace();
                        transaction.rollback();
                    } finally {
                        transaction.close();
                    }
                } else {
                    logger.info(typeName + " does not support read/write access");
                }
            }catch (Exception e){
                logger.error("featureToShp异常:",e);
            }
        }
    
        public static void featureToGeojson(String path, List<SimpleFeature> outFeatures){
            Writer gjsonWriter = null;
            try{
                File file = new File(singleRoadPath);
                if (file.exists()) {
                    file.delete();
                }
                if (outFeatures.isEmpty()) {
                    return;
                }
                FeatureJSON featureJSON = new FeatureJSON(new GeometryJSON(6));
                gjsonWriter = new OutputStreamWriter(new FileOutputStream(singleRoadPath), StandardCharsets.UTF_8);
                featureJSON.writeFeatureCollection(new ListFeatureCollection(outFeatures.get(0).getType(), outFeatures), gjsonWriter);
    
            }catch (Exception e){
                logger.error("feature写入异常:" + e);
            }finally {
                try{
                    if (gjsonWriter != null) {
                        gjsonWriter.flush();
                        gjsonWriter.close();
                    }
                }catch (IOException ie){
                    logger.error("流关闭异常:" + ie);
                }
            }
        }
        
        public static List<LineString> toSimpleLine(List<? extends Geometry> geometryList) {
            List<LineString> simpleLineList = new ArrayList<>();
            for (Geometry geometry : geometryList) {
                if (geometry instanceof MultiLineString) {
                    for (int j = 0; j < geometry.getNumGeometries(); j += 1) {
                        simpleLineList.add((LineString) geometry.getGeometryN(j));
                    }
                } else if (geometry instanceof LineString) {
                    simpleLineList.add((LineString) geometry);
                }
            }
            return simpleLineList;
        }
    

    展开全文
  • 46个经典MID音效

    2011-08-09 14:40:25
    46个经典MID音效,网页制作时候可以用此作为背景音效。
  • MIF/MID格式简介

    万次阅读 2019-08-17 18:05:54
    MapInfo MIF/MID文件格式描述 这种通用的格式允许把普通的数据添加到多种的图像元素中。MIF/MID文件采用ASCII编码,因此它是可编辑的、相对比较容易生成、并且可以工作在MapInfo支持的所有平台上。也许理解MIF格式...

    微信搜索:“二十同学” 公众号,欢迎关注一条不一样的成长之路

    MapInfo MIF/MID文件格式描述

            这种通用的格式允许把普通的数据添加到多种的图像元素中。MIF/MID文件采用ASCII编码,因此它是可编辑的、相对比较容易生成、并且可以工作在MapInfo支持的所有平台上。也许理解MIF格式的最好的方法是在读完这篇文章后,拿着MIF格式说明,研究一个MIF文件。你也可以通过“exporting files to MIF”创建你自己的MIF文件,然后在文本编辑器中好好的研究它。

            MapInfo数据存在于两种文件中--图形数据存储在.MIF文件、文本数据存储在.MID文件。文本数据包括每一项记录的一行和回车,回车加换行,行之间的换行。MIF文件的数据包括两部分--文件头和数据区。文件头存放着如何创建MapInfo表格的信息;数据区存放着图形对象的解释。

            下面是MIF文件头的描述(包括可选项,下表中由“[ ]”括起来的部分就是可选项)

    Version n 
    
    Charset "characterSetName"
    
    [ DELIMITER "<c>" ] 
    
    [ UNIQUE n,n.. ] 
    
    [ INDEX n,n.. ]
    
    [ COORDSYS... ] 
    
    [ TRANSFORM... ]
    
    COLUMNS n
    
    <name> <type> 
    
    <name> <type> 
    
    … 
    
    … 
    
    DATA
    
    

    1.Version 版本号

    Version”说明你使用的MIF格式的版本(VERSION 1, VERSION 2, VERSION 300中的一种)Version 300,引自Mapinfo 3.0,允许形容由多段组成的折线对象。

    2.Charset 字符集

    Charset”指定表中创建文本所使用的字符集。比如说:"WindowsLatin1"说明文件使用的是the Windows US & Western Europe字符集;"MacRoman"说明文件使用的是the Macintosh US & Western Europe字符集;或者,注明"Neutral"是为了防止将文本转成了另外的字符集。如果你没有使用其中任何一个字符集,你可以通过exporting a tableexamining the .MIF file in a text editor为你的字符集指定正确的语法。

    3.Delimiter 分隔符

    指定引号(即""或者'')之间的分隔符,比如说:

    DELIMITER ";"

    默认的分隔符是Tab;如果你使用的是默认分隔符,你不需要“DELIMITER”这一行。

    4.Unique

    指定一个数字。这个数字指定一个数据库的列;3是第三列,7是第七列,以此类推。发生在UNIQUE指定的列上的事情是微妙的。比如说,想象一下你建立一个高速公路的数据库。每一条路都只有一个名字,但是在每一路段中都会把名字重写一遍。这时你会把NAME这一列放在一个单独的表中,而包含每个路段的信息的其他列不会放在那个表中。这样就可以创建两个相关的表格:一个NAME表,一个包含其他信息。This is how MapInfo's various street maps(StreetInfo) are prepared.

    5.Index 索引

    Index”指明表中已经建立索引的列,“INDEX”项包括一个数字(或者一系列数字)。每一个数字指定一个数据库的列;3是第三列,7是第七列,以此类推。在“INDEX”表中指定的列会建立索引。

    6.CoordSys

    指定“COORDSYS”项表示数据不是以经纬度的形式存储的。当没有指定“COORDSYS”这一项时,数据被认为是以经纬度的方式存储。All coordinates are stored with respectto the northeast quadrant.。 在美国的点的x坐标为负而在欧洲的点(Greenwich以东)的坐标为正。在北半球的点的y坐标为正而在南半球的点的坐标为负。 

    7.Transform 转换

    你可以通过“Transform”实现地理元素的坐标转换。

    --------------------------------------------

    | Quadrant 2: | Quadrant 1: |

    | Nortwest Quadrant | Norteast Quadrant |

    --------------------------------------------

    | Quadrant 3: | Quadrant 4: |

    | Southwest Quadrant | Southeast Quadrant |

    --------------------------------------------

    8.Columns 

    指定列数。然后,为每一列,建立一行(包括the column namethe column type、一个用来指定域长度的数字--仅为characterdecimal类型的列建立)用来说明其格式。有效的列类型包括:

    char(width)

    integer        [说明:which is 4 bytes, from -2^31 to 2^31-1]

    smallint        [说明:which is 2 bytes, so it can only store numbers between -32767 and +32767)]

    decimal (width, decimals)

    float

    date

    logical 

    下面是mif文件头的COLUMNS部分的一个例子:

    STATE char (15) 

    POPULATION integer 

    AREA decimal (8,4) 

    通过上面指定的数据库,我们知道对应的MID文件有三列:

    列名            列类型

    STATE           char(15) 15位长的字符串

    POPULATION     INTGER   整型

    AREA            decimal(8,4) 一个最长8位、小数点后有4位的小数

     

    MIF文件的“data”部分紧跟着文件头并且必须由一个单行“DATA”引出:

    DATA

    MIF文件的数据部分可以包括任意长度的图形变量,其中每一项对映着一个图形对象。MapInfo自动使MIFMID文件里面的每一条相一致,比如说:MIF文件的第一个object对应着MID文件的第一行,MIF文件的第二个object对应着MID文件的第二行。

    MIF文件中没有图形对象与MID文件的行对应时,一个“blank”对象必须写在MIF文件中相应的位置。

    NONE

    图形对象可以被指定为如下几种类型:

    point          //

    line           //线

    polyline       //折线

    region         //区域

    arc            //

    text           //文本

    rectangle      //矩形

    rounded rectangle   //圆矩(即4个角做“钝化”处理的矩形)

    ellipse        //椭圆

    展开全文
  • 88首mid歌曲打包下载,开发软件必备歌曲
  • 大疆Livox Mid-40 SLAM

    千次阅读 热门讨论 2020-09-01 18:18:51
    1.1 Livox Mid-40三维激光雷达 1.2 基于LOAM-Livox的SLAM开源方案 2、Livox Mid-40驱动安装 2.1 编译和安装Livox SDK 2.2 Livox ROS Driver驱动安装 2.3 运行Livox ROS Driver驱动 3、LOAM-Livox开源方案编译 3.1 ...

    原博主琨特,本人便于学习写到了自己的账号下,见谅。
    介绍基于Livox三维激光雷达和开源LOAM-Livox进行定位和建图实验。
    目录
    1、简介
    1.1 Livox Mid-40三维激光雷达
    1.2 基于LOAM-Livox的SLAM开源方案
    2、Livox Mid-40驱动安装
    2.1 编译和安装Livox SDK
    2.2 Livox ROS Driver驱动安装
    2.3 运行Livox ROS Driver驱动
    3、LOAM-Livox开源方案编译
    3.1 需要的环境和库
    3.2 LOAM-Livox构建
    3.3 运行LOAM-Livox

    1、简介
    本实验环境是基于Ubuntu16.04进行的。
    1.1 Livox Mid-40三维激光雷达
    Livox Mid-40是一款高性价比、安全可靠的激光探测测距仪传感器,可广泛应用于包括无人驾驶环境感知、机器人导航、动态路径规划、高精度测绘等众多领域。该款激光探测测距仪采用独有的非重复扫描技术,提供更高密度的点云,精确探测视场中的每个细节。用户可通过Livox Viewer软件实时获取三维图像,更能基于Livox SDK进行开发,轻松获取3D点云数据,满足个性化的应用需求。Livox Mid-40的高可靠性设计,有效确保无论是极寒天气还是酷热环境下都能稳定运行。
    Livox Mid-40最大探测距离可达260米。
    1.2 基于LOAM-Livox的SLAM开源方案
    激光雷达作为新一代测绘利器,在移动三维建图中有着巨大的潜力。使用激光雷达可以快速构建周围环境的3D地图,具有测量精度高、方向性好等优点,且不易受周围环境光、雨尘等影响。针对此专题,香港大学MaRS实验室(web.hku.hk/~fuzhang) 使用了Livox Mid-40激光雷达,并开发出一种针对性的测距和建图算法—LOAM-Livox。
    LOAM-Livox算法采用开源算法,供开发者免费使用(https://github.com/hku-mars/loam_livox)。
    在这里插入图片描述该LOAM 算法仅使用一个 Livox Mid-40 单元,没有融合其他传感器如 IMU、GPS 或摄像头。通过运动补偿机制进行连续扫描匹配,从而实现 LiDAR位姿的实时解算(即测距)。有了LiDAR位姿, 所有LiDAR测量的点云就可以投影到同一个全局坐标系中, 得到环境的三维地图。为提升算法性能和可靠性,一系列核心问题得以解决,包括有限视场下的特征提取和筛选、杂点剔除、移动物体过滤以及帧内运动补偿。该算法的测距和建图部分均可以同时在MacBook上以 20 Hz 的频率实时运行。

    仅凭一个 Livox Mid-40 和一台手提电脑,MaRS 实验室就完成了香港科技大学主校区的高精度三维地图测绘,如下图示,即便是细微的细节也清晰可见。这一解决方案也大大降低大范围移动测绘的成本和门槛。

    相关的论文已经发布:
    1、Loam_livox: A fast, robust, high-precision LiDAR odometry and mapping package for LiDARs of small FoV (地址:https://arxiv.org/abs/1909.06700)
    2、A fast, complete, point cloud based loop closure for LiDAR odometry and mapping
    (地址:https://arxiv.org/abs/1909.11811)

    2、Livox Mid-40驱动安装
    2.1 编译和安装Livox SDK
    Livox ROS Driver驱动取决于Livox-SDK ,如果您从未安装过Livox-SDK ,则必须首先安装Livox-SDK ,如果您安装了最新版本的Livox-SDK,请跳过此步骤并转到下一步。
    Step1:在Linux终端中安装相应的依赖库

    sudo apt install cmake pkg-config libapr1-dev libboost-atomic-dev libboost-system-dev
    

    Step2:在Github上下载或克隆Livox-SDK/Livox-SDK存储库

    git clone https://github.com/Livox-SDK/Livox-SDK.git
    

    Step3:在build目录下编译并安装Livox-SDK

    cd Livox-SDK/build
    cmake ..
    make
    sudo make install
    

    2.2 Livox ROS Driver驱动安装
    Step1:从github克隆livox_ros_driver软件包

    git clone https://github.com/Livox-SDK/livox_ros_driver.git ws_livox / src
    

    Step2:编译livox_ros_driver软件包

    cd ws_livox
    catkin_make
    

    Step3:软件包环境设置

    source ./devel/setup.sh
    

    2.3 运行Livox ROS Driver驱动
    根据Livox Mid-40说明书(https://www.livoxtech.com/mobile/cn/mid-40-and-mid-100/downloads)把三维激光雷达和安装有Ubuntu的笔记本电脑连接起来,在rviz中查看是否能够看到点云信息。

    roslaunch livox_ros_driver livox_lidar_rviz.launch
    

    在这里插入图片描述3、LOAM-Livox开源方案编译
    3.1 需要的环境和库
    Ubuntu and ROS安装
    Ubuntu 64-bit 16.04 or 18.04 ROS Kinetic or Melodic.
    (地址:http://wiki.ros.org/ROS/Installation)
    Ceres Solver安装
    Ceres优化求解器的安装。
    (地址:http://ceres-solver.org/installation.html)
    PCL安装
    PCL点云库的安装。
    (地址:https://pointclouds.org/downloads/linux.html)
    3.2 LOAM-Livox构建
    克隆LOAM-Livox到自己的工作空间,并进行编译。

        cd ~/catkin_ws/src
        git clone https://github.com/hku-mars/loam_livox.git
        cd ../
        catkin_make
        source ~/catkin_ws/devel/setup.bash
    

    3.3 运行LOAM-Livox
    假如步骤2的驱动正确安装的话,能够显示实时的点云数据,下面可以运行LOAM-Livox进行点云定位和建图。
    启动Livox Mid-40

    roslaunch livox_ros_driver livox_lidar.launch
    

    启动LOAM-Livox

    roslaunch loam_livox livox.launch
    

    假如暂时没有Livox Mid-40三维激光雷达,可以利用官方给你实例数据(https://drive.google.com/drive/folders/1HWomWWPSEVvka2QVB2G41iRvSwIt5NWf)进行测试SLAM方案。之后直接按下面方式进行试验;

    roslaunch loam_livox rosbag.launch
    rosbag play YOUR_DOWNLOADED.bag
    

    在这里插入图片描述

    展开全文
  • MID音乐包下载.zip

    2009-12-17 15:32:40
    这里有好听的MID音乐,可以让大家沉迷于音乐的世界里,同时能大家带来一个好心情。
  • mid、mif文件操作工具类

    万次阅读 2019-08-17 18:07:00
    读写mid、mif文件操作工具类 装载mid文件,将mid文件里的数据变为 List<List<String>> 形式的 public List<List<String>> loadMidFile(File file) { List<List<String>> ...

    微信搜索:“二十同学” 公众号,欢迎关注一条不一样的成长之路

    读写mid、mif文件操作工具类

    装载mid文件,将mid文件里的数据变为  List<List<String>> 形式的

    public List<List<String>> loadMidFile(File file) {
            List<List<String>> midRows= new ArrayList<>();
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "gbk"));
                String line;
                while ((line = reader.readLine()) != null) {
                    List<String> cols = Arrays.asList(line.split(",",-1));
                    if (cols.size() > 0) {
                        for (int i = 0; i < cols.size(); i++) {
                            String value = cols.get(i).replace("\"", "");
                            cols.set(i, value);
                        }
                        midRows.add(cols);
                    }
                }
                reader.close();
            } catch (FileNotFoundException e) {
                logger.error("loadMidFile():", e);
            } catch (IOException e) {
                logger.error("loadMidFile():", e);
            }
            return midRows;
        }

    装载mif文件

    public List<String> loadMifFile(File file, Boolean isLoadMifData) {
            //colField 为mid文件里各个值对应的字段
            List<String> colField = new ArrayList<>();
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "gbk"));
                String line;
                while ((line = reader.readLine()) != null) {
                    if (line.toUpperCase().startsWith("COLUMNS")) {
                        int num = Integer.parseInt(line.substring("Columns ".length()));
                        for (int i = 0; i < num; i++) {
                            line = reader.readLine().trim();
                            List<String> cols = Arrays.asList(line.split(","));
                            if (cols.size() > 0) {
                                colField.add(cols.get(0).split(" ")[0].trim());
                            }
                        }
    
                        if (isLoadMifData) {
                            //装载mif里的geo数据(点,线,面不同类型)
                            loadMifFileGeoDatas(reader);
                        }
    
                        break;
                    }
                }
                reader.close();
    
            } catch (Exception e) {
                logger.error("loadMifFile():", e);
            }
    
            return colField;
        }
    //如果geo数据为面
    public Map<Integer, List<List<List<Double>>>> loadMifFileGeoDatas(BufferedReader reader) {
            Map<Integer, List<List<List<Double>>>> regions = new HashMap<>();
            Integer rowIndex = -1;
            try {
                String line;
                while ((line = reader.readLine()) != null) {
                    line = line.trim();
                    if (line.toUpperCase().contains("NONE")){
                        regions.put(++rowIndex, new ArrayList<>());
                    }
                    if (line.toUpperCase().startsWith("REGION")) {
                        int num = Integer.parseInt(line.substring("Region ".length()));
                        List<List<List<Double>>> dataGroups = new ArrayList<>();
    
                        for (int i = 0; i < num; i++) {
                            line = reader.readLine().trim();
                            int rowCount = Integer.parseInt(line);
                            List<List<Double>> datas = new ArrayList<>();
                            for (int j = 0; j < rowCount; j++) {
                                line = reader.readLine().trim();
                                List<String> xy = Arrays.asList(line.split(" "));
                                List<Double> points = new ArrayList<>();
    
                                if (xy.size() == 2) {
                                    points.add(Double.parseDouble(xy.get(0)));
                                    points.add(Double.parseDouble(xy.get(1)));
                                    datas.add(points);
                                }
                            }
                            dataGroups.add(datas);
                        }
                        regions.put(++rowIndex, dataGroups);
                    }
                }
                reader.close();
    
            } catch (Exception e) {
                logger.error("loadMifFileGeoDatas():", e);
            }
            return regions;
        }
    
    
     public LinkedHashMap<String, Object> getGeometryMap(Map<Integer, List<List<List<Double>>>> regions,Integer rowIdx) {
    
            if (regions != null) {
                List<List<List<Double>>> coordinates = regions.getOrDefault(rowIdx, null);
                LinkedHashMap<String, Object> geometryMap = new LinkedHashMap<String, Object>() {{
                    put("type", "Polygon");
                    put("coordinates", coordinates);
                }};
    
                return geometryMap;
            }
    
            return null;
    
        }
    //如果geo数据为点
    public Map<Integer, List<Double>> loadMifFileGeoDatas(BufferedReader reader) {
            Map<Integer, List<Double>> pointRows = new HashMap<>();
            Integer rowIndex = -1;
            try {
                String line;
                while ((line = reader.readLine()) != null) {
                    line = line.trim();
                    if (line.toUpperCase().contains("NONE")){
                        pointRows.put(++rowIndex, new ArrayList<>());
                    }
                    if (line.toUpperCase().startsWith("POINT")) {
                        List<String> point = Arrays.asList(line.split(" "));
                        if (point.size() == 3) {
                            List<Double> point1 = new ArrayList<>();
                            point1.add(Double.parseDouble(point.get(1)));
                            point1.add(Double.parseDouble(point.get(2)));
                            pointRows.put(++rowIndex, point1);
                        }
                    }
                }
                reader.close();
    
            } catch (Exception e) {
                logger.error("loadMifFileGeoDatas():", e);
            }
            
            return pointRows;
    
        }
    
    
     public LinkedHashMap<String, Object> getGeometryMap(Map<Integer, List<Double>> pointRows,Integer rowIdx) {
            if (pointRows!= null) {
                List<Double> pointRow = pointRows.getOrDefault(rowIdx, null);
                LinkedHashMap<String, Object> geometryMap = new LinkedHashMap<String, Object>() {{
                    put("type", "Point");
                    put("coordinates", pointRow);
                }};
    
                return geometryMap;
            }
            return null;
        }
    //如果geo数据为线
    public Map<Integer, List<List<Double>>> loadMifFileGeoDatas(BufferedReader reader)  {
            Map<Integer, List<List<Double>>> lineRows = new HashMap<>();
            Integer rowIndex = -1;
            try {
                String line;
                while ((line = reader.readLine()) != null) {
                    List<List<Double>> lines = new ArrayList<>();
                    line = line.trim();
                    if (line.toUpperCase().contains("NONE")){
                        lineRows.put(++rowIndex, lines);
                    }
                    if (line.toUpperCase().startsWith("LINE")) {
                        List<String> point = Arrays.asList(line.split(" "));
                        if (point.size() == 5) {
                            List<Double> point1 = new ArrayList<>();
                            point1.add(Double.parseDouble(point.get(1)));
                            point1.add(Double.parseDouble(point.get(2)));
                            lines.add(point1);
    
                            List<Double> point2 = new ArrayList<>();
                            point2.add(Double.parseDouble(point.get(3)));
                            point2.add(Double.parseDouble(point.get(4)));
                            lines.add(point2);
                        }
                        lineRows.put(++rowIndex, lines);
                    }
                    if (line.startsWith("Pline")) {
                        int num = Integer.parseInt(line.substring("Pline ".length()));
                        for (int i = 0; i < num; i++) {
                            line = reader.readLine().trim();
                            List<String> point = Arrays.asList(line.split(" "));
                            if (point.size() == 2) {
                                List<Double> points = new ArrayList<>();
                                points.add(Double.parseDouble(point.get(0)));
                                points.add(Double.parseDouble(point.get(1)));
                                lines.add(points);
                            }
                        }
                        lineRows.put(++rowIndex, lines);
                    }
                }
                reader.close();
    
            } catch (Exception e) {
                logger.error("loadMifFileGeoDatas():", e);
            }
            return lineRows;
        }
    
    public LinkedHashMap<String, Object> getGeometryMap(Map<Integer, List<List<Double>>> lineRows,Integer rowIdx) {
            if (lineRows!= null) {
                List<List<Double>> line = lineRows.getOrDefault(rowIdx, null);
                LinkedHashMap<String, Object> geometryMap = new LinkedHashMap<String, Object>() {{
                    put("type", "LineString");
                    put("coordinates", line);
                }};
    
                return geometryMap;
            }
            return null;
        }

    展开全文
  • livox_loam试跑与livox_mid40使用

    千次阅读 热门讨论 2020-04-16 10:07:40
    livox_loam是HKU做的一个非重复扫描激光雷达的SLAM系统,使用的是大疆的livox_mid40这款激光雷达 代码开源:https://github.com/hku-mars/loam_livox
  • 经典mid手机铃声集合

    2009-08-09 22:48:06
    收集的手机铃声 自己感觉不错哦 容量不大 数量可观
  • excel函数使用方法-mid()和find()

    千次阅读 2019-02-28 08:58:02
    excel函数mid和find配合使用处理字符串
  • 能够将mid文件装换成乐谱的软件, 能够够快速转换,很方便
  • mid()函数

    千次阅读 2019-08-14 09:20:08
    MID() 函数用于从返回结果中提取字符 SELECT MID(City,1,3) AS ShortCity FROM Customers; 表示从返回的City中提取前面三个字符 比如第一列是beijing 那么第一列返回的是bei ...
  • QT中QString中的mid的使用

    千次阅读 2020-06-29 11:34:56
    qt中的QString中的mid的使用 1、一般使用的规则是 QString QString::mid(int position, int n = -1); 默认是-1,指的是切割的长度,第一个参数指的是切割的位置,具体位置 表示从第几个数开始进行切割 代码分析: ...
  • 大疆Livox_mid 40雷达初体验

    千次阅读 热门讨论 2020-04-29 17:02:01
    为了解决无人车上镭神雷达FOV小而导致的车前3m内无法看到锥形桶问题,东家给公司邮寄了一台大疆的mid40雷达,不得不说,颜值真的高.(光看颜值,就甩镭神几条街) ...
  • Ubuntu16.04使用Livox Mid-40

    千次阅读 热门讨论 2020-10-28 11:40:45
    Ubuntu16.04上使用Livox Mid-40 参考大疆提供的资料github地址。 1、安装Livox-SDK 安装依赖 sudo apt install cmake pkg-config 编译Livox-SDK 在 Livox SDK 目录中,执行以下指令编译工程: git clone ...
  • MID格式铃声剪切器

    2010-06-29 19:12:19
    可以剪切mid格式的铃声喔、、打开软件后点击、、文件--打开--浏览找到你要剪切的mid铃声,点击--播放--播放-点击 剪刀图标 弹出窗口,输入剪切起始时间(时间可以从播放进度条下面看),点击确定、、然后可以在播放...
  • 目录1 简介1.1 Livox Mid-40三维激光雷达1.2 基于LOAM-Livox的SLAM开源方案2 Livox Mid-40驱动安装2.1 编译和安装Livox SDK2.2 Livox ROS Driver驱动安装2.3 运行Livox ROS Driver驱动3 LOAM-Livox开源方案编译3.1 ...
  • SQL MID() 函数

    千次阅读 2017-12-29 09:04:45
    MID()函数用于从文本字段中提取字符。 SQL MID() 语法   SELECT MID(column_name,start[,length]) FROM table_name;           演示数据库 示例   SELECT MID(name,1,4) AS ShortTitle ...
  • 二分法用mid = left+(right - left)/2,而不是 mid = (left +right)/2的原因 因为不管是什么值数据类型,底层都是有字节限制的,所以要是left+right造成位数的溢出,不就造成mid结果错误了吗!!!
  • 大疆旗下livox(mid100)激光雷达loam建图

    万次阅读 热门讨论 2019-10-25 09:15:20
    mid100点云输出时,其实是连续输出三个mid40节点,livox_loam不支持mid100,因此需要将mid100中的点云合成叠加再发布 _______________________________________ 实际操作...
  • WPS表格MID函数结合分列完成提取出生日期教程 从身份证号中提取出生日期是职场中作为HR必须掌握知识点,而今天读书屋OFFICE网陈飞讲解的是通过MID函数和分列命令完成的。相比使用DATE日期拼接函数更为快捷。 MID...
  • 原画图和PCB为cadence16.3格式 MID平板电脑注意做平板电脑和高清机的骗子
  • 本期介绍的是VBA中的Mid函数。 Mid()函数是截取字符串用的,比如“ABCDEF”字符串,我们想截取前面一部分,变成“ABCD”,那我们就需要Mid()函数,摘取网路上的书面解释,Mid()的释义如下: Mid()函数返回给定...
  • VB中MID如何使用

    千次阅读 2019-01-19 15:06:56
    MID表示取出字符串 上面程序表示在aabbcc中又第3个字符串开始,连续取出2个字符串。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 590,181
精华内容 236,072
关键字:

mid