前段时间参与了一个项目,客户有一个功能需求是上传SHP文件并在地图上显示,然后在此基础上做缓冲区处理。经过对比测试,最终选择了shapefile.js工具,在此做个记录。

shapfe.js能够将Esri的Shapefile文件转换为GeoJSON,它能够以Shapefile文件zip的压缩文件和单独的.shp文件作为输入参数。

shapefile.js安装

项目是基于Vue开发的,因此选择了npm的安装方式,安装非常简单,执行下面的命令就可以了。

npm install shpjs

获取上传的SHP文件

在HTML中可使用type为file的input标签获取上传的.shp文件或者压缩后的Shapefile文件。

<input type="file" id="uploadFileInput" name="zip" @change="selectShpFile()">
selectShpFile: function() {this.shpFile = document.getElementById("uploadFileInput").files[0];
}

使用FileReader处理上传后的SHP文件

JavaScript中的FileReader用来读取Blob或者File的内容。

FileReader共包含4个方法,其中三个用来读取文件内容,一个用来打断读取。

方法名称 方法参数 方法描述
abort 中断文件读取
readAsBinaryString File 将文件读取为二级制码
readAsDataURL File 将文件读取为DataURL
readAsText File, [encoding] 将文件读取为文本

FileReader处理事件共有6个,具体描述如下:

事件名称 事件描述
onabort 中断时触发
onerror 出错时触发
onload 文件读取成功时触发
onloadend 读取完成时触发,无论成功或失败
onloadstart 读取开始时触发
onprogress 读取中

这里需要注意的一点是,文件一旦开始读取,无论成功还是失败,实例的result属性都会被填充,也就是说如果读取失败,result的值为null,读取成功则为读取的结果。

在本项目中,我们使用了readAsBinaryString方法,并且监听onload事件获取文件的读取内容。

let fileReader = new FileReader();fileReader.readAsArrayBuffer(shpFile);
fileReader.onload = function() {// 获取读取的结果console.log(this.result);
}

使用shapefile.js将SHP文件读取为GeoJSON

shapefile.js使用也非常简单,我们使用其read方法,并将上一步的文件的二进制读取结果作为read方法的参数,然后在其回调函数中获取GeoJson。

这一步和上一步的整合后的代码如下:

let fileReader = new FileReader();fileReader.readAsArrayBuffer(shpFile);
fileReader.onload = function() {let shapefile = require("shapefile");shapefile.read(this.result).then(geoJson => {console.log(geoJson);}
}

GeoJSON文件内容如下图所示:

在地图中加载GeoJson

在地图中加载GeoJson需要遍历其features属性,将其中的每个feature转为对应的几何对象(点、线或者面),然后将转换的几何对象构建成一个Graphic,最后将Graphic添加到GraphicLayer中。

遍历features,构建Polygon对象

geoJson.features.map(feature => {const polygon = new EsriPolygon({spatialReference: new EsriSpatialReference({ wkid: 2380 })});feature.geometry.coordinates.forEach(function(coord) {const coordinates =feature.geometry.type === "MultiPolygon" ? coord[0] : coord;polygon.addRing(coordinates);});
}

Polygon构建Graphic,并添加到GraphicLayer

let graphics = [];
let graphicsExtent = null;geoJson.features.map(feature => {const polygon = new EsriPolygon({spatialReference: new EsriSpatialReference({ wkid: 2380 })});feature.geometry.coordinates.forEach(function(coord) {const coordinates =feature.geometry.type === "MultiPolygon" ? coord[0] : coord;polygon.addRing(coordinates);});const graphic = new EsriGraphic({geometry: polygon,attributes: feature.properties,symbol: {type: "simple-fill", // autocasts as new SimpleFillSymbol()color: [51, 51, 204, 0.9],style: "solid",outline: {color: "white",width: 1}}});graphics.push(graphic);
});graphicLayer.addMany(graphics);

至此,我们已经完成了上传并在地图中展示SHP文件的整个流程,下一步就可以调用相应的API函数创建缓冲区,并执行接下来的各种功能。

上传并在地图中显示Shp文件相关推荐

  1. shp文件显示 c语言,上传并在地图中显示Shp文件

    前段时间参与了一个项目,客户有一个功能需求是上传SHP文件并在地图上显示,然后在此基础上做缓冲区处理.经过对比测试,最终选择了shapefile.js工具,在此做个记录. shapfe.js能够将Es ...

  2. 为什么css效果在本地测试没问题,上传到服务器后却显示位置乱动,css下拉菜单本地正常,上传后360浏览器中显示错位,火狐、IE8显示正常...

    匿名用户 1级 2014-04-15 回答 首先你使用 #header .row-2 ul li:hover 这样ie6就不支持了.ie6支持的hover目前我知道的只有a标签. 要单纯用css实现下 ...

  3. axios获取图片显示_vue中使用axios post上传头像/图片并实时显示到页面的方法

    在前端开发中,为了更好的用户体验,在头像上传时会先将图片显示到页面然后点击保存按钮 完成图片的上传成功 代码部分有参考他人的写法. html代码: 请上传图片 js代码: //实时显示该图片在页面 g ...

  4. svg上传服务器无法显示,让WordPress支持上传SVG格式图片并显示在媒体库中的方法...

    让WordPress支持上传SVG格式图片并显示在媒体库中的方法 发布时间:2020-12-11 14:18:12 来源:亿速云 阅读:167 作者:小新 这篇文章将为大家详细讲解有关让WordPre ...

  5. vue中使用axios post上传头像/图片并实时显示到页面

    前端开发中,为了更好的用户体验,在头像上传时会先将图片显示到页面然后点击保存按钮 完成图片的上传成功 代码部分有参考他人的写法. html代码: <div id="myPhoto&qu ...

  6. 泛微ECOLOGY9流程模块(建模通用)office附件上传自动转为图片并显示在流程指定附件字段中

    泛微ECOLOGY9流程模块'建模通用'office附件上传自动转为图片并显示在流程指定附件字段中 目录说明 实现将office文件转为PDF文件及PDF文件转换为图片功能 1.首选在服务器中搭建环境 ...

  7. lede更改软件源_Linux的上传和下载——Ubuntu中软件的安装和ftp服务器的搭建

    [Linux操作系统]Linux的上传和下载--Ubuntu中软件的安装和ftp服务器的搭建 学习完Linux终端命令以后,我们现在要考虑的是怎么实现Linux中文件的上传和下载,这就是我们本篇博客要 ...

  8. 用纯ASP代码实现图片上传并存入数据库中

      用纯ASP代码实现图片上传并存入数据库中    热     ★ 用纯ASP代码实现图片上传并存入数据库中 用ASP编写网站应用程序时间长了,难免会遇到各式各样的问题,其中关于如何上传文件到服务器恐 ...

  9. asp如何将图片文件上传到mysql数据库中_怎样才能利用ASP把图片上传到数据库

    欢迎来到小编的文章进行学习阅读,想必大家又有很多问题吧,在这里会有你想要收获的答案,请大家慢慢学习吧! ASP(Active Server Pages)是Microsoft很早就推出的一种WEB应用程 ...

最新文章

  1. 图片基础知识梳理(3) BitmapBitmapFactory 解析
  2. AIX系统日志学习笔记之三
  3. 面向对象第七章,内存的管理,面向对象三大特征封装、继承、多态
  4. Eclipse 中切换不同的JDK设置
  5. excel 文档管理服务器,Excel Server Tutorial
  6. 安装了silverlight还是提示_win10系统安装.netframework3.5方法
  7. SAP Spartacus 里的 icon 设计
  8. 安阳师范学院计算机与信息工程学院吴琴霞,基于甲骨文字形动态描述库的甲骨文输入方法...
  9. zabbix 监控TCP状态连接数
  10. Redis的实现原理
  11. 服务器启动之后运行脚本在/etc/rc.d/rc.local中配置
  12. jdbc 生成建表语句_记录一次TDH的inceptor导出建表语句和数据
  13. css 背景图片虚化磨砂效果
  14. 最少多少步才能逮住兔子
  15. java连接jpi方式_Java数据库连接(Java Database Connectivity)
  16. wtc6508bsi,键释放引发的问题分析及解决
  17. 亚马逊和Global Optimism欢迎汉高和昕诺飞加入《气候宣言》
  18. 飞机游戏中子弹与飞机的移动与边界源码
  19. mysql用int做时间戳存储,最大2147483647, 大限2038年
  20. java插入数据库字段过长,【mybatis插入过长数据发生错误_mybatis】 | IT修真院·坑乎...

热门文章

  1. iphone开发每日一练【2011-10-07】
  2. Spring 01 初识 Spring
  3. 中国电信物联网发展研究中心与华为战略合作协议
  4. 鹿定制与国际大牌西服的10点区别?丨新浪官方长微博工具
  5. 【艾琪出品】《计算机应用基础》【试题汇总7】南开在线作业答案
  6. 股票交易日(动态规划)
  7. sklearn下绕过graph.rende查看图片
  8. MySQL数据库学习(二)
  9. yolov5 的 detect 层 与 anchor 机制
  10. IT行业吃香技能TOP榜,欢迎补充