首页 > 其他分享 >天地图移动端部署(一):创建一个基础地图服务(uni-app环境)

天地图移动端部署(一):创建一个基础地图服务(uni-app环境)

时间:2024-09-27 10:50:19浏览次数:1  
标签:服务 script 创建 app mapRef 地图 XX uni

前言:

在一家测绘公司上班,接手了一个移动端APP项目,用uni-app开发的,地图服务用天地图底层支持,嗯,测绘用天地图十分合理。

“这地图看起来糊糊的,你给换成XX地图吧。” 老大某天跟我说。

圣谕下达,开始拉代码,读代码。

嗯,依旧是一坨的“清朝”项目代码,一堆的log,一堆的警告,一堆的 if ,就是段子里的代码了。

一段时间后,硬着头皮给替换成XX地图了,以为可以安稳一阵子了,结果就是这么离谱,刚写完,XX地图宣布对企业不在免费提供地图服务,某天突然地图的API接口服务全部无效,公司不愿意购买XX地图服务,老大沟通无果后决定API部分采用天地图的服务,嗯,于是就将接口层的API全部替换为了天地图。(懂得人都懂吧,两者的坐标系差异,转换有被恶心到)

安稳了半个月,又是某天,突然,测试跟我说,地图图层加载不出来了...

我先是差异,然后就是意料之中,终于还是来了,XX地图给图层渲染服务也关闭了

最后没办法,兜兜转转,又回到了天地图,谁叫它免费呢。

原来的老组件功能冗余,代码阅读性极差,所以决定舍弃,基于天地图重构一个地图服务。

 

一、资源申请

天地图官网:http://lbs.tianditu.gov.cn/home.html

进入控制台申请资源信息(注意不要频繁爬取天地图数据,会被锁)

连带之后 公司服务访问会被拦截无法申请资源哦

二、创建一个基础的地图服务

注意:创建涉及到renderJS内容

贴代码,胜过千言万语:

<template>
	<view class="map_container">
		<!-- #ifdef APP-PLUS || H5 -->
		<!-- :change:props="update" 绑定change props会被执行一次 -->
		<view id="MapContainer" :props="randerProps" :change:props="update" 
			style="width: 100%;height: 100%;"></view>
		<!-- #endif -->
	</view>
</template>

<script>
	
</script>

<script module="randerJSMap" lang="renderjs">
	export default {
		props: [ 'randerProps' ],
		data(){
			return{
				mapRef: null
			}
		},
		methods: {
			// props触发更新回调
			update() {
				
			},
			// 初始化地图
			initAmap() {
				try{
					const T = window.T
					this.mapRef = new T.Map('MapContainer');
					let lng = 112.955088;
					let lat = 28.197111;
					// 设置中心点
					this.mapRef.centerAndZoom(new T.LngLat(lng, lat), 14);
					// 设置图层 卫星图:TMAP_HYBRID_MAP 矢量图:TMAP_HYBRID_MAP
					this.mapRef.setMapType(TMAP_NORMAL_MAP)
            // 创建地图事件
            this.mapRef.addEventListener("moveend", (e) => {})
				}catch(e){
					console.log('e', e);
				}
			},
		},
		mounted() {
       // 检测是否存在地图实例 避免重复创建 if ( typeof window.T == 'function' ) { this.initAmap(); } else { const script = document.createElement('script'); script.src = `https://api.tianditu.gov.cn/api?v=4.0&tk=${你的资源Key}`; script.onload = this.initAmap.bind(this); document.head.appendChild(script); } } } </script> <style scoped lang="scss"> .map_container{ position: relative; width: 100vw; height: 100vh; } </style>c

渲染效果:

 

结语:

在Vue环境中,可以直接在index.html 直接创建<script> 完成初始化,移动端是用randerJS创建<script> 初始化,本质上同源。

因为randerJS限制,仅在H5环境以及APP环境生效,小程序端不支持。

另外的一种渲染模式可以使用<iframe> 引入本地的地图dist包(隔壁GIS组就是这么干的),理论上可以解决小程序端不支持的问题,未具体验证,读者可以自行尝试。

标签:服务,script,创建,app,mapRef,地图,XX,uni
From: https://www.cnblogs.com/FG452/p/18435120

相关文章

  • 深入理解 Nuxt.js 中的 app:error 钩子
    title:深入理解Nuxt.js中的app:error钩子date:2024/9/27updated:2024/9/27author:cmdragonexcerpt:摘要:本文深入讲解了Nuxt.js框架中的app:error钩子,介绍其在处理web应用中致命错误的重要作用、使用方法及实际应用场景。通过创建Nuxt项目、定义插件、触发错误与测......
  • 【春秋招必看】Unity相关笔试面试题(内有完整答案)第五期
    欢迎来到光光的奇妙冒险,我是你们的煎饼光子老师。今天是我们的第五期笔试面试题总结。C#部分:1、以上代码,谁的效率更高?为什么?答案:代码2的效率更高因为List的本质是数组,在初始化时,如果不默认为其指明分配多少容量,它会不断扩容扩容会带来效率的降低和垃圾的产生效率的降......
  • mapbox没有token/token失效,地图闪烁后变空白,报错Error: A valid Mapbox access token
    目录mapbox没有token/token失效,地图闪烁后空白,报错Error:AvalidMapboxaccesstokenisrequiredtouseMapboxGLJS.一、问题描述二、mapbox去除token验证1、找到mapbox-gl文件夹2、找到mapbox-gl.js文件3、找到对应位置并修改 4、清除缓存5、问题解决三、高阶......
  • 淘宝客APP的数据同步与一致性保障
    淘宝客APP的数据同步与一致性保障大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们来讨论淘宝客APP中的数据同步与一致性保障问题。随着系统复杂度的提升,特别是在分布式架构的情况下,如何确保数据同步和一致性成为了一个重要的技术挑战。......
  • 易优CMS安装时,提示在写入表ey_weapp_multicity记录失败-eyoucms
    当你在安装易优CMS时遇到“写入表ey_weapp_multicity记录失败”的提示时,这通常意味着在安装过程中数据库出现了问题,可能是由于数据库连接问题、权限问题、数据冲突等原因造成的。以下是一些可能的解决步骤:步骤1:检查数据库连接确认数据库连接信息确保数据库连接信息(主机名......
  • 通过示例在 Unity 和 NodeJS 上的游戏中创建安全、快速的多人游戏
    介绍规划多人游戏开发方法-在整个项目的进一步开发中发挥着最重要的作用之一,因为它包含了我们在创建真正高质量的产品时应该考虑的许多标准。在今天的宣言教程中,我们将看一个方法示例,该方法使我们能够创建真正快速的游戏,同时尊重所有安全和反违规规则。所以,让我们定义我们的主要......
  • Unity UI Tookite:实现命令控制台 [自定义元素]
    目录前言功能需求基础逻辑实现——输入输出分离逻辑实现——命令解析/历史指令切换历史指令解析指令基于反射的命令组自动装载逻辑实现——命令提示逻辑实现——定位报错逻辑实现——内容滚动/元素铺满逻辑实现——可变文本块最后前言最近在将Godot项目重写至Unit......
  • spring程序员前置知识-ApplicationContext执行过程分析-其一
    1.前置知识一个bean在加入spring容器之前,首先要读取class文件生成BeanDefinition,然后通过BeanDefinition实例化bean,BeanDefinition就是一个用来描述bean如何被创建出来的对象,最后执行bean的初始化。在spring中有两种Processor,一种是BeanFactoryPostProcessor,另一种是BeanP......
  • 使用duxapp开发 React Native App 事半功倍
    Taro的ReactNative端开发提供了两种开发方式,一种是将壳和代码分离,一种是将壳和代码合并在一起开发壳是用来打包调试版或者发版安装包使用的代码是运行在壳上的js代码Taro壳子的代码仓库https://github.com/NervJS/taro-native-shellduxapp中更进一步,你不需要太关注壳子什么......
  • uniapp 常用高度状态栏,导航栏,tab栏,底部安全高度
    实际效果//入参是否转换为rpxgetPosConfig(toRpx=true){ constsystemInfo=uni.getSystemInfoSync(); //#ifdefMP constmenuButtonInfo=uni.getMenuButtonBoundingClientRect(); //#endif constposConfig={ statu......