Vue读取解析shapefile本地数据并在地图上演示_Maptalks 地图入门

maptalks简介

Maptalks是一个开源的脚本库,用于创建集成的2D / 3D地图,其中包含用于制图项目的基本功能。

Shapefile

整体思路就是获取到shp文件,利用FileReader将shp转为二进制文件,再利用shapefile将二进制转为geojson数据。

安装

maptalks下载

引入在线链接

<link href="path/to/maptalks.css" rel="stylesheet" type="text/css" />
<script src="path/to/maptalks.min.js" type="text/javascript"></script>

npm引入

npm install maptalks --save

使用

使用ES6语法引入

import * as maptalks from 'maptalks';

shapeFile下载

npm i shapefile

使用

使用node引入使用

let shpfile = require('shapefile')

代码片段

<input type="file" id="uploadFileInput" name="zip" @change="selectShpFile()" />
async selectShpFile() {
            //获取上传文件
            const shpFile = document.getElementById("uploadFileInput").files[0];
            console.log(shpFile)
            //将文件转为二进制编码
            let fileReader = new FileReader();
            fileReader.readAsArrayBuffer(shpFile)
            //定义一个变量a作为虚拟dom节点,因为试验数据没有id属性
            var a = 1
            //文件读取成功
            const that = this
            fileReader.onload = function () {
                //导入shpfile包
                let shapefile = require("shapefile");
                //读取二进制数据转成geojson
                shapefile.read(this.result).then((geojson) => {
                    console.log(geojson, "转好的数据")
                    //遍历geojson数据
                    geojson.features.map((feature) => {
                        //console.log(feature)
                        //获取类型
                        let type = feature.geometry.type
                        let mapdata = feature.geometry.coordinates
                        //判断shp数据类型
                        if (type == "LineString") {
                            //创建线
                            const line = new maptalks.LineString(mapdata, {
                                arrowStyle: null, // arrow-style : now we only have classic
                                arrowPlacement: 'vertex-last', // arrow's placement: vertex-first, vertex-last, vertex-firstlast, point
                                visible: true,
                                editable: true,
                                cursor: null,
                                shadowBlur: 0,
                                shadowColor: 'black',
                                draggable: false,
                                dragShadow: false, // display a shadow during dragging
                                drawOnAxis: null,  // force dragging stick on a axis, can be: x, y
                                symbol: {
                                    'lineColor': 'red',
                                    'lineWidth': 10
                                }
                            })
                            //导入map中
                            new maptalks.VectorLayer(a++, line).addTo(that.map);
                        } else if (type == "Polygon") {
                            const polygon = new maptalks.Polygon(mapdata, {
                                visible: true,
                                editable: true,
                                cursor: 'pointer',
                                shadowBlur: 0,
                                shadowColor: 'black',
                                draggable: false,
                                dragShadow: false, 
                                drawOnAxis: null,  
                                symbol: {
                                    'lineColor': '#34495e',
                                    'lineWidth': 2,
                                    'polygonFill': 'rgb(135,196,240)',
                                    'polygonOpacity': 0.6
                                }
                            })
                            new maptalks.VectorLayer(a++, polygon).addTo(that.map);
                        } else if (type == "Point") {
                            const marker = new maptalks.Marker(mapdata, {
                                visible: true,
                                editable: true,
                                cursor: 'pointer',
                                shadowBlur: 0,
                                shadowColor: 'black',
                                draggable: false,
                                dragShadow: false, 
                                drawOnAxis: null,
                            })
                            new maptalks.VectorLayer(a++, marker).addTo(that.map);
                        }
                    })
                })
            }
        }

效果

点数据

点数据

加载线数据

线数据

加载面数据

面数据

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Vue3中安装shapefile,可以按照以下步骤进行操作: 1. 首先,使用npm或者yarn安装shapefile模块。可以在终端中运行以下命令: ``` npm install shapefile ``` 或 ``` yarn add shapefile ``` 2. 接下来,在Vue3项目中的需要使用shapefile的地方,可以使用ES6语法导入shapefile模块。可以在相应的文件中添加如下代码: ```javascript import * as shapefile from 'shapefile'; ``` 3. 然后,你就可以在Vue3项目中使用shapefile模块了,根据你的需求进行相应的操作。 请注意,以上步骤是针对Vue3项目中安装和使用shapefile模块的一般步骤。具体的安装和使用方式可能还会根据你的项目结构和需求有所不同。你可以根据shapefile模块的文档或者官方示例进行更详细的配置和使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Vue读取解析shapefile本地数据并在地图演示_Maptalks 地图入门](https://blog.csdn.net/weixin_45390762/article/details/127531717)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Vue项目在线读取ShapeFile文件,并解析为GeoJson](https://blog.csdn.net/GISuuser/article/details/127212682)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值