`
jjxliu306
  • 浏览: 157181 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

基于udig(开源GIS软件)二次开发(4)

    博客分类:
  • GIS
阅读更多

本次主要基于udig做一个简单的二次开发实例,假如我们手里有一批经纬度的信息,想直接在地图上查看。当然这时候方法非常多,譬如我通过postgis+geoserver+openlayers很容易实现,或者在udig里有create point也可以直接绘制,还有通过openlayers的marker只需要一个简单的txt文件也行,完全用不到二次开发,但这里只是说做一个简单的范例看看udig是怎么样加载地图数据和怎么样我们可以生成一份地图数据。

    本次我们生成比较通用的shp文件(postgis等以后再说),生成shp我们这里需要用到geotools,不过udig里已经集成进去了geotoolsjar包,我们只需要在我们自己的插件里引用net.refractions.udig.libs这个插件即可。闲话不多说,我们开始先创建一个插件项目(因为是DEMO,所以就一个插件,记得勾选RCP)

1、 创建项目,如图:

 

 

 

1、 2、创建几个包,如图:


 

 

 

其中command下我们生成一个类ImportDataCommand extends  AbstractHandler pojo下我们生成一个基础的点实体类 DemoPoint {

       private double lon ;

    private double lat ;

    private String site_name ;

   

   

    public double getLon() {

       return lon;

    }

    public void setLon(double lon) {

       this.lon = lon;

    }

    public double getLat() {

       return lat;

    }

    public void setLat(double lat) {

       this.lat = lat;

    }

    public String getSite_name() {

       return site_name;

    }

    public void setSite_name(String site_name) {

       this.site_name = site_name;

}

 

 

}

 

 

3、1、 Command中实现 public Object execute(ExecutionEvent event) throws ExecutionException {} 这个方法。里面需要的操作有

a、 a  弹出选择文件对话框,要求使用者导入需要导入的经纬度文件(文件格式预先定义好)

b、 b  读取文件转换为实体数据

c、 c  根据实体数据生成shp 图层数据文件

d、 d  shp图层数据文件加载显示到udig的地图中

 

 

1、 4、多话不说,我贴代码

a、 a 弹出对话框要求用户选择需要导入的文件。

 

//弹出选择文件对话框 要求选择文件,要求格式csv  字段要求为LON,LAT,SITE_NAME

FileDialog dialog = new FileDialog(Display.getDefault().getActiveShell(), SWT.OPEN);

       dialog.setText("请选择要导入的文件");

      

       String path = dialog.open();

       if(path != null) {

           //选择的文件不为空 开始读取文件信息 转换为实体数据

          

          

     }

 

b、 b  解析文件,转换为我们需要的实体数据

 

/**

     * 解析文件,转换为我们需要的实体数据

     * @param path 文件路径

     * @return 演示用的点信息集合  文件不存在时返回空

     */

    private Collection<DemoPoint> parseFile(String path) {

      

       List<DemoPoint> points = new LinkedList<DemoPoint>();

      

       BufferedReader br = null;

      

       try {

           br = new BufferedReader(new FileReader(path));

          

           String line = br.readLine() ;//跳过表头

          

          

           while((line = br.readLine()) != null) {

             

              String[] _ss = line.split(",");

             

              //由于是演示 所以这里不做数据检查

              DemoPoint point = new DemoPoint();

              point.setLon(Double.valueOf(_ss[0]));

              point.setLat(Double.valueOf(_ss[1]));

              point.setSite_name(_ss[2]);

             

              points.add(point);

             

           }

          

          

       } catch (FileNotFoundException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

           return null;

       } catch (IOException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       } finally {

           if(br != null) {

              try {

                  br.close();

              } catch (IOException e) {

                  // TODO Auto-generated catch block

                  e.printStackTrace();

              }

           }

       }

      

       return points ;

      

      

}

 

c、c  生成shp图层文件

 

/**

     * 根据数据生成图层文件

     * @param data

     * @return 返回生成好的图层文件地图 SHP图层  数据保存在当前workspace

     */

    protected String createShpData(Collection<DemoPoint> data){

      

       //拿到当前的workspace路径

      

       String ws = Platform.getInstanceLocation().getURL().getPath();

      

       //文件名用当前系统时间

       String layerName = String.valueOf(System.currentTimeMillis()) ;

      

       File shpFile = new File(ws , layerName + ".shp");

      

       //图层的属性配置 坐标系采用4326

       String layerFeatures = "GEOM:Point:srid=4326,LON:Double,LAT:Double,SITE_NAME:String" ;

      

        

      

      

       FeatureWriter<SimpleFeatureType, SimpleFeature> fw = null;

      

       try {

          

           ShapefileDataStore myData = new ShapefileDataStore(shpFile

                  .toURI().toURL());

 

           myData.setStringCharset(Charset.forName("GBK"));

 

           SimpleFeatureType ft = DataUtilities.createType(layerName,

                  layerFeatures);

 

           myData.createSchema( ft);

 

           //手动事物 发现有时候给自动回出些问题

           Transaction tran = new DefaultTransaction();

          

          

           fw = myData.getFeatureWriter(layerName,

                  tran);

 

           GeometryFactory gf = new GeometryFactory();

          

          

          

           for(DemoPoint point : data) {

             

               Geometry geo =   gf.createPoint(new Coordinate(point.getLon(), point.getLat()));

             

              SimpleFeature sf = (SimpleFeature) fw.next();

             

              sf.setDefaultGeometry(geo);

             

              //添加属性

              sf.setAttribute("SITE_NAME",point.getSite_name());

              fw.write();

             

          

              

           }

          

           fw.close();

          

           tran.commit();

           tran.close();

          

       } catch (IOException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       } catch (SchemaException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       } finally {

          

           try {

              if(fw != null)

                  fw.close();

             

           } catch (IOException e) {

              // TODO Auto-generated catch block

              e.printStackTrace();

           }

       }  

      

      

      

      

      

      

       return shpFile.getAbsolutePath();

      

      

}

 

d、 d  创建一个新的地图,加载我们刚才生成的shp图层文件

 

/**

     * 创建一个新地图并打开shp图层文件

     * @param path 文件路径

     */

    protected void createMapAndOpenShp(String path) {

      

       IRepository local = CatalogPlugin.getDefault().getLocal();

        

       IService service = null;

        

       List<IGeoResource> resources = null;

        

       try {

           service = local.acquire(

                  URLUtils.fileToURL(new File(path)),

                  new NullProgressMonitor());

           resources = (List<IGeoResource>) service.resources(new NullProgressMonitor());

   

           //发布

           ApplicationGIS.createAndOpenMap(resources);

          

       } catch (IOException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

      

        

      

 

    }

 

 

 


 5、
注意事项

插件中引用要因为udigapplicationgis,并且需要生成图层,所以在当前插件里我们要引入5个插件(本次的开发环境udig1.2的版本):




 
创建product文件后,最好引入udig的所有包(新手必须).

 

 

 

 

6、1、 好了 打开看看效果

 

 

 



 



 

 

 

代码和演示数据在附件中可以下载,有问题请留言或者加我们的 群  251615521

251615521251615521251615521
 

  • 大小: 19.9 KB
  • 大小: 51.5 KB
  • 大小: 75.1 KB
  • 大小: 23.9 KB
  • 大小: 17 KB
  • 大小: 19.9 KB
  • 大小: 32.4 KB
分享到:
评论

相关推荐

    uDig 二次开发指南

    uDig 是一款开源桌面 GIS 软件,基于 Java 和 Eclipse 平台,可以进行 shp 格式地图文件的编辑和查看······ 但是,纵观整个网络,都是泛泛地讲了讲如何简单地使用 uDig,却从未见过讲解如何对其进行二次开发的...

    GIS - udig - gis桌面应用工具

    是一款开源桌面GIS软件,基于Java和Eclipse平台,可以进行shp格式地图文件的编辑和查看;是一个开源空间数据查看器/编辑器,对OpenGIS标准,关于互联网GIS、网络地图服务器和网络功能服务器有特别的加强。uDig提供一...

    开源GIS大全(java)

    java是GIS开发的主要语言之一,下面将对java开发GIS的主要开源项目进行介绍。 1. uDig uDIG是一个基于Eclipse RCP的开源项目,同时也是一个GeoSpatial应用程序和平台。开发者可以通过这个平台创建新的应用程序,...

    OSGeo:开源GIS软件、在线教程、数据相关资料

    * User-friendly Desktop Internet GIS (uDig):是一个基于 Eclipse 的桌面 GIS 软件,支持多种数据格式的导入和编辑。 * Kosmo Desktop:是一个功能强大且用户友好的桌面 GIS 软件,支持多种数据格式的导入和编辑。...

    基于开源GIS构建地理信息系统

    在构建一个基于开源GIS的地理信息系统时,首先要理解GIS的核心组成部分和其工作原理。GIS,即地理信息系统,是一个集成了地图、数据管理和分析的综合工具,用于处理与地理位置相关的复杂信息。本文将深入探讨如何...

    udig软件安装包解压即用.zip

    uDig(User-friendly Desktop GIS,用户友好的桌面地理信息系统)是一款开源的桌面GIS软件,它提供了丰富的地图数据处理、分析和展示功能。这个名为“udig软件安装包解压即用.zip”的压缩文件包含了uDig的安装程序...

    开源GIS架构实现思路.docx

    因此,开发一套基于开源技术的GIS平台成为了一种可行的选择。 #### 二、开源GIS平台架构设计 ##### 1. 技术选型 在设计开源GIS平台时,主要考虑了以下几种技术: - **Udig**:作为开源GIS桌面系统的代表,Udig...

    udig2.0安装程序包

    8. **自定义开发**:由于UDIG是开源项目,用户可以根据自己的需求进行二次开发。开发者可以使用Java API和插件系统来扩展UDIG的功能,创建自定义工具或模块。 总之,UDIG 2.0作为一款强大的桌面GIS软件,提供了一...

    开源GIS---java系列

    1. **uDig**:uDig(User-friendly DIgital Geographical Environment)是一个基于Eclipse RCP的开源GIS应用,它不仅是一个独立的桌面GIS软件,还是一个开发平台,允许开发者构建基于uDig的定制化应用。uDig支持Web...

    开源GIS平台调研报告

    GRASS(Geographic Resources Analysis Support System)是一款基于GNU GPL协议的开源GIS软件,拥有强大的空间数据管理和分析功能。GRASS广泛应用于政府机构、大学和环境咨询公司中。其最新稳定版本为2010年9月3日...

    符合我公司GIS开源解决方案的探讨

    根据开发环境的不同,可以将主流的WebGIS开源解决方案分为两大类:基于C/C++的解决方案和基于JavaEE的解决方案。 - **C/C++解决方案**: - Mapserver(服务器) - QGIS(桌面软件) - Tomcat(中间件) - ...

    uDig文档两篇

    uDig(Understanding Digital Geography)是一款基于Java开发的开源地理信息系统(GIS),它提供了一个用户友好的界面,使得用户能够轻松处理、分析和展示地理数据。这款软件广泛应用于地理数据的可视化、空间分析...

    常用GIS平台方案对比

    然而,Udig缺乏空间分析功能,需要二次开发实现。 Quantum GIS(QGIS) Quantum GIS(QGIS)是一个功能强大的开源GIS平台方案,主要功能包括制作地图、支持常见GIS数据编辑绘制、数据格式的转换导入、生成地图样式...

    qgis和udig安装包.zip

    7. **教学与研究**:由于其开源性质,UDIG常被用于地理信息系统教学和研究,因为它允许深入学习GIS原理和开发实践。 在下载“qgis和udig安装包.zip”后,你将获得QGIS和UDIG的安装程序。在解压并运行安装程序之前,...

    开源gis shape文件入PostgreSQL库

    udig 是一个开源的 GIS 工具,能够查看和处理空间数据。使用 udig 工具可以查看导入的 Shape 文件,包括空间数据和属性数据。 本篇文章介绍了如何使用 PostGIS 将 Shape 文件导入 PostgreSQL 数据库的详细步骤。...

    uDig定制地图样式发布到Geoserver并使用Openlayers和Cesium验证.rar

    uDig(User-friendly DIgital Geographics Environment)是一款开源的桌面GIS软件,它提供了数据编辑、分析和可视化的功能。在这个过程中,uDig被用来创建和编辑地图样式。地图样式是决定地图外观和感觉的关键元素,...

    GIS应用开发课件1.ppt

    【开源GIS】在课件中提到了一些开源GIS软件和库,如GRASS、Quantum GIS(QGIS)、OpenJUMP、SharpMap、MapWindow、gvSIG、uDig等,这些都是用于桌面GIS应用的工具。同时,还有JTS、GEOS、NTS、GeoTools等开源地理...

Global site tag (gtag.js) - Google Analytics