利用NewGIS平台将FME模板发布为接口

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

一、模板编写

二、发布模板

三、接口获取

四、移动端调用

​​​​​


前言

        在实际的应用生产过程中,尤其是移动端GIS软件的开发,针对一些闭源的格式,比如dwg、esri-mdb、esri-gdb等等,这种非开源格式不像shp、dxf、kml这种明码格式可以通过手搓数据格式转换来实现解析,FME是一个很好的转换工具,但是没办法安装在移动端。我们团队开发的NewGIS平台能够实现自动解析FME写好的模板,并将模板发布为接口或者工具。


一、模板编写

        以矢量文件转换为例子,写一个读取文件夹中的文件并对矢量格式分类,然后再读取转换为geojson的模板

先通过path读模块读取文件路径

然后过滤成多个数据类型

统一转换为geojson并写出

参数就两个,一个写入,一个写出,可以理解为猪进去,香肠出来。

二、发布模板

登录NewGIS平台,上传模板

上传完成后,在列表栏可以搜索到模板,并运行该模板

三、接口获取

我们需要在其他端调用该接口,用F12爬取一下接口,

首先的上传文件接口

然后是运行模板接口

最后是获取运行结果的接口

然后用go语言将这几个接口封装为函数,函数的主要功能就是调用上述的接口,将文件转换为geojson,这儿因为是外网部署,为了安全性,接口地址修改了

func SendData(path string) geojson.FeatureCollection {
	var featureCollection geojson.FeatureCollection
	if filepath.Ext(path) != ".zip" && filepath.Ext(path) != ".rar" {
		dirPath := filepath.Dir(path)
		newdir := filepath.Join(dirPath, "temp_result")
		MoveFileToFolder(path, newdir)
		newpath := filepath.Join(dirPath, "temp_result.zip")
		ZipFolderTo(dirPath, newpath)
		path = newpath
	}
	//获取任务id
	resp, _ := http.Get("http://.goho.co/task/FmwParamsGet?FmwId=5915ad49-eb29-4c76-a963-08d31c264d84&users=%E6%A2%81%E8%BF%9B")
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	var taskjson map[string]interface{}
	json.Unmarshal(body, &taskjson)
	TaskId := taskjson["TaskId"].(string)
	//上传矢量文件
	file, _ := os.Open(path)
	defer file.Close()
	buf := new(bytes.Buffer)
	writer := multipart.NewWriter(buf)
	writer.WriteField("field", "导入矢量文件")
	writer.WriteField("filter", "")
	writer.WriteField("taskid", TaskId)
	part, _ := writer.CreateFormFile("file", path)
	io.Copy(part, file)
	writer.Close()
	req, err := http.NewRequest("POST", "http://.goho.co/task/TempFileAccept", buf)
	if err != nil {
		panic(err)
	}
	req.Header.Set("Content-Type", writer.FormDataContentType())
	client := &http.Client{}
	res, _ := client.Do(req)
	defer res.Body.Close()
	//运行模板

	data := map[string]interface{}{
		"taskid": TaskId,
		"data":   make(map[string]string),
	}
	jsonData, _ := json.Marshal(data)
	url := "http://15808108713.goho.co/task/TaskRun"
	req, _ = http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
	req.Header.Set("Content-Type", "application/json")
	client = &http.Client{}
	resp, _ = client.Do(req)
	//监控是否完成模板执行如果已完成则拿到下载链接
	downloadurl := ""
	status := ""
	for {
		resp, _ = http.Get("http://.goho.co/task/TaskGet?User=%E6%A2%81%E8%BF%9B&fmw_id=5915ad49-eb29-4c76-a963-08d31c264d84")
		body, _ = io.ReadAll(resp.Body)
		var resultjson []map[string]interface{}
		json.Unmarshal(body, &resultjson)
		for _, value := range resultjson {
			if TaskId == value["task_id"].(string) {
				if value["status"].(string) == "3" || value["status"].(string) == "4" {
					status = value["status"].(string)
					downloadurl = value["out_path"].(string)
				}
			}
		}
		time.Sleep(1 * time.Second)

		if status != "" {
			break
		}
	}
	if downloadurl != "" {
		resp, _ = http.Get(downloadurl)
		tempFile, _ := ioutil.TempFile("", "example-*.zip")
		defer tempFile.Close()
		_, err = io.Copy(tempFile, resp.Body)
		tempFile.Seek(0, 0)

		zr, _ := zip.OpenReader(tempFile.Name())
		defer zr.Close()

		file2 := zr.File[0]
		f, _ := file2.Open()
		defer f.Close()
		var content bytes.Buffer
		io.Copy(&content, f)
		data2 := content.Bytes()

		json.Unmarshal(data2, &featureCollection.Features)
		//删除任务

	}
	url = fmt.Sprintf("http://.goho.co/task/TaskDel?task_id=%s", TaskId)
	http.Get(url)
	return featureCollection
}

四、移动端调用

导入数据

选择dwg文件

可以看到图层属性读取成功

原始数据图


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/654821.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++学习笔记(21)——继承

目录 1. 继承的概念及定义1.1 继承的概念1.2 继承定义1.2.1 定义格式1.2.2 继承关系和访问限定符1.2.3 继承基类成员访问方式的变化 继承的概念总结: 2. 基类和派生类对象赋值转换3.继承中的作用域4.派生类的默认成员函数知识点:派生类中6个默认成员函数…

头文件大小写引发的报错

jenkins下打包编译报错如下,提示编译zynqCan.c时找不到“syscfgpll/sysCfgpll.h”文件。 但IDE下编译是没有报错也没有警告的,工程中也存在文件“syscfgpll/sysCfgPll.h”。 仔细观察发现,报错说的是找不到头文件“syscfgpll/sysCfgpll.h”…

蓝桥杯物联网竞赛_STM32L071_18_长短按键检测

长短按键的检测是国赛题里面遇到的,省赛没出过有两种实方法 定时器配置: 定时器的话要比delay准确,其中tim7定时器的准度最高 定时器预分配配置32 - 1,计数周期是10000 - 1这样做那么32MHZ/32也就是一秒钟记录10^6的数&#xf…

c++ vector实现出现的一些问题

目录 前言: 浅拷贝问题: typename指定类型: 前言: 最近学习了c vector的使用,然后也自己实现了一下vector的部分重要的功能。然后在其中出现了一些问题,在这就主要记录一下我解决哪些bug。 浅拷贝问题: 在实现res…

Weblogic SSRF漏洞 [CVE-2014-4210]

漏洞复现环境搭建请参考 http://t.csdnimg.cn/svKal docker未能成功启动redis请参考 http://t.csdnimg.cn/5osP3 漏洞原理 Weblogic的uddi组件提供了从其他服务器应用获取数据的功能并且没有对目标地址做过滤和限制,造成了SSRF漏洞,利用该漏洞可以向内…

若依跳转(新增)页面,在菜单中不显示的页面

在router.js文件中 跳转方式 this.$router.push(/monitor/b/b)

路由引入实验(思科)

华为设备参考:路由引入实验(华为) 技术简介 路由引入技术在网络通信中起着重要的作用,能够实现不同路由协议之间的路由传递,并在路由引入时部署路由控制,实现路径或策略的控制 实验目的 不同的路由协议之…

二十三篇:未来数据库革新:AI与云原生的融合之旅

未来数据库革新:AI与云原生的融合之旅 1. 智能数据库管理:AI的魔法 在数字化时代,数据库技术作为信息管理的核心,正经历着前所未有的变革。AI(人工智能)和云原生技术的融合,正在重新定义数据库…

力扣刷题--2965. 找出缺失和重复的数字【简单】

题目描述 给你一个下标从 0 开始的二维整数矩阵 grid,大小为 n * n ,其中的值在 [1, n2] 范围内。除了 a 出现 两次,b 缺失 之外,每个整数都 恰好出现一次 。 任务是找出重复的数字a 和缺失的数字 b 。 返回一个下标从 0 开始、…

蓝桥杯Web开发【大学组:国赛】2022年真题

1.分一分 如果给你一个数组,你能很快将它分割成指定长度的若干份吗? 1.1 题目问题 请在 js/index.js 文件中补全函数 splitArray 中的代码,最终返回按指定长度分割的数组。 具体要求如下: 将待分割的(一维&#x…

web前端之vue动态访问静态资源、静态资源的动态访问、打包、public、import、URL、Vite

MENU 静态资源与打包规则动态访问静态资源直接导入将静态资存放在public目录中动态导入URL构造函数结束语实践与坑附文 静态资源与打包规则 介绍 Vite脚手架在打包代码的时候,会把源代码里对于静态资源的访问路径转换为打包后静态资源文件的路径。主要的区别是文件指…

Vue中使用Vue-scroll做表格使得在x轴滑动

页面效果 首先 npm i vuescroll 在main.js中挂载到全局 页面代码 <template><div class"app-container"><Header :titletitle gobackgoBack><template v-slot:icon><van-icon clickgoHome classicon namewap-home-o /></templat…

深度解析Java 11核心新特性

码到三十五 &#xff1a; 个人主页 < 免责声明 > 避免对文章进行过度解读&#xff0c;因为每个人的知识结构和认知背景都不同&#xff0c;没有一种通用的解决方案。对于文章观点&#xff0c;不必急于评判。融入其中&#xff0c;审视自我&#xff0c;尝试从旁观者角度认清…

爬虫实战教程:深入解析配乐网站爬取1000首MP3

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、实战前准备 1. 选择目标网站 2. 分析网页结构 三、爬虫工作流程详解 1. 发…

内网穿透入门使用(frp和natapp)

内网穿透入门使用 简单介绍穿透工具推荐FrpFrp下载安装服务端配置启动服务端配置客户端启动客户端效果查看 NATAppNATApp下载安装NATApp配置启动NATApp 使用途径 我的博客&#xff1a;Lichg&#xff0c;欢迎大家访问留言。 简单介绍 什么是内网穿透&#xff1a; 首先我们对内网…

lvm概述和配额

lvm概述和配额 文章目录 lvm概述和配额LVM概述1、逻辑卷的作用&#xff1a;2、lvm主要命令和实操磁盘配额创建data目录&#xff0c;进入data目录限制创建文件数 LVM概述 逻辑卷管理liunx系统下对硬盘分区的一种管理机制 lvm机制特别适合管理大储存设备&#xff0c;可以动态的…

Echarts x轴坐标二级分组

在使用echarts 封装组件的时候&#xff0c;偶尔会遇到需要x轴坐标进行二层分组的需求。那么如何对echarts 进行二层分组呢&#xff0c;有以下几个步骤&#xff1a; 仅介绍二层分组的逻辑。有兴趣的可以进行三层延伸。 1&#xff0c;修改echarts Options 中xAxis 的配置。 此…

win11中文文件名称乱码解决方案

解压后出现以下的乱码 解决方案 步骤1.winR 输入intl.cpl 或 windows 自带的搜索搜“intl.cpl”&#xff0c;打开这个面板控制项 步骤2.在新打开的区域面板中&#xff0c;选择“管理”标签页&#xff0c;点击下方的“更改系统区域设置”按钮 步骤3.取消"Beta版…"选…

如何将RK R75键盘的右Alt键改为Ctrl键

打开注册表地址栏中输出 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout右键新建二进制值&#xff0c;名称设为ScanCode Map按下图输入数值

【NumPy】全面解析NumPy的bitwise_and函数:高效按位与操作指南

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…