高德地图+threejs打造智慧景区大屏本项目是一个智慧景区(商场)项目,项目主旨在于对景区的智能化管理,是对AI赋能的

本项目代码使用umi+react+高德地图amap+threejs开发的一款景区管理项目,其中模型使用svg文件并嵌入高德地图中,实现新增景区、绑定店铺、绑定点位设施等功能,使用高德地图的导航功能,可以直接导航到景区内。页面内容包含景区的创建和景区大屏展示,在大屏展示中可以对商铺和点位进行绑定,另页面中集成了coze的ai智能系统,可进行对话,绑定商铺活动或者一些可自动化生产的内容,将在视频演示中详细讲解。

下面跟着作者一步一步来实现吧~

调用

useAsyncEffect(async()=>{AMapRef.current=awaitCreateAMap()if(containerRef.current){createMap()}},[])将AMAP实例存放在AMapRef.current中,在后面的方法中都可以使用,并且在containerRef.current存在的时候绘制地图,containerRef.current是将要绘制地图的容器,id为container

constcreateMap=async()=>{letAMap=AMapRef.current//创建地图varmap=newAMap.Map("container",{resizeEnable:true,center:[119.986,30.2235],//地图中心点zoom:17.4,//地图显示的缩放级别viewMode:'3D',//开启3D视图,默认为关闭buildingAnimation:true,//楼块出现是否带动画pitch:45,rotation:45,features:['bg','building'],//只显示建筑、道路、区域//showLabel:false,//隐藏标注信息mapStyle:"amap://styles/grey",showIndoorMap:false,//rotateEnable:false,//pitchEnable:false,zIndex:9});mapRef.current=mapvarloca=new(windowasany).Loca.Container({map,zIndex:9});locaRef.current=loca……}以上配置项都是基础需要配置的,可以参照官网上面的介绍进行配置,这里需要说明一点是features和viewMode一个是过滤标注信息,项目中去掉了其他的元素,只展示了建筑和背景,而mapStyle则是官网提供的一个3d黑色主题的风格,当然,你用自己的自定义地图生成的地址也可以放在这里,下面从图中看一下具体创建出一个什么样的地图

从图中可以看到一个类似矩形的区域,那个就是本次要做的景区——闲林埠,下一步就是要将自制的景区模型加载到高德地图中

首先说明,本人不是UI,只是一个技术死宅,对于美术上的事儿一窍不通,在做的过程中,就有一种感觉,我加入的3d景区,还不如高德原本的模型好看~,勿喷

exportconstcleanBuild=(AMap:any,map:any)=>{//底图楼块扣除varbuilding=newAMap.Buildings({zIndex:10,});building.setStyle({hideWithoutStyle:false,//是否隐藏设定区域外的楼块areas:[{visible:false,//是否可见rejectTexture:false,//是否屏蔽自定义地图的纹理color1:'00000000',//楼顶颜色color2:'00000000',//楼面颜色path:[ClearBuildPoint]}]});map.add(building);}需要在cleanBuild方法中传入之前我们创建的AMAP实例和地图map的实例,那么你也可以对3d楼块自定义颜色,path传入的是围栏的经纬度,ClearBuildPoint是围栏的经纬度数据。

这样我们就去除了原有的模块,下面我们将在高德地图中加入threejs的3d世界,景区模型是使用svg文件绘制的,这样不需要3d设计师的介入,靠前端也可以生成一个3d模型,如果有3d模型设计师,那自然是更好的了。svg生成的模型肯定没有3d设计师绘制的模型好看,本文主要讲实现的过程,细节咱们不深究

exportconstcreateScene=(AMap:any,map:any,css2dRenderDom:any)=>{customCoords=map.customCoords;constcenter=map.getCenter()customCoords.setCenter([center.lng,center.lat]);returnnewPromise((resolve,reject)=>{vargllayer=newAMap.GLCustomLayer({zIndex:110,//图层的层级init:async(gl)=>{……},render:()=>{……},})map.add(gllayer);})}在init回调中可以用来创建镜头、渲染器、灯光等场景元素

renderer=newWebGLRenderer({context:gl});这里着重介绍一下context,官网是这么介绍的

而init的回调接受一个参数gl,这个参数就是高德地图提供的canvas实例,就是说我们绘制的3d场景都将在这个高德地图的canvas中去绘制,场景中还有2d元素图层,光照等内容,这里不一一赘述,开发过程中有一个疑问,一直没找答案

render的回调中,可以对相机和渲染器进行设置,将AMAP的一些参数和自有数据图层的数据赋值到threejs的元素中。包含设置相机位置,渲染器重绘等

svg文件是作者用AdobeIllustrator制作的,制作成本低,它大概长这样,根据高德地图上的景区绘制的,

这是它在高德地图中的样子

import{SVGLoader}from'three/examples/jsm/loaders/SVGLoader';constsvgLoader=newSVGLoader()exportfunctionloadSVG(url:string){returnnewPromise((res,reg)=>{svgLoader.load(url,(data:any)=>{res(data)})})}在threejs中加载svg使用SVGLoader的API,由于不是threejs内置的方法,所以要用显示引用将方法引入进来,loadSVG接受路径,并在加载后将数据使用promise的成功回调传出去,加载后得到参数类型是#形状路径(ShapePath),接下来对路径进行加工,并使用#挤压缓冲几何体(ExtrudeGeometry)挤出高度

map.on('click',async(e:any)=>{console.log(e.lnglat.lng,e.lnglat.lat);constlnglat=[e.lnglat.lng,e.lnglat.lat]map.render();})前面创建的mapRef对地图进行点击事件的绑定,e参数包含了经纬度、目标、事件类型等信息。

rallyist便是与射线交互的模型信息,从这个数组的长度便可判断出,当前点击的位置是在高德地图上,还是在模型上,并且还知道在哪个模型上,从而进行模型的绑定。

想象一下这个场景,3d设计师给了你一个飞机的模型,并规划好了行动路线(vector3向量组),而你呢,需要在飞机飞行的过程中检测飞机是否经过某个建筑(经纬度标注),从而来进行一些对于飞机或者建筑的交互。

官网对坐标转换功能,没有过多的内容,只有api的介绍,我想大概是高等机密吧,这两个坐标一个是地理坐标,一个是映射坐标,或许通过常见的投影方式如墨卡托投影、高斯-克吕格投影等进行的投影变换,亦或是其他。

我们只管用,做一个api搬运工,下面做一个实验,在map的点击事件里,获取到地图经纬度beforelnglat和模型的射线交互的世界坐标rallyList[0].point,在世界坐标通过一系列的转换后得到的经纬度坐标和点击地图获取到的经纬度进行对比,看看两者是否有区别。。。

从打印的数据看来,两者是完全一样的。

上面的代码用到了两个方法,一个是getViewCp世界坐标转屏幕坐标,另一个是coordsToLngLats屏幕坐标转经纬度,这个是高德地图提供的api。

像素坐标,确定地图上的一个像素点。

这样便将一个用react组件写的标记添加到高德地图中,顺便提一嘴,如果不是在AMAP中添加标记,而是在threejs的css3drender中添加标记也是同样的道理,需要将react组件转成html标识或者dom节点,所以个人标识不喜欢用虚拟dom的框架开发threejs,太繁琐。

前面的所有内容都是对于模型和地图的定义和交互的设置,下面将对景区的数据进行绑定解绑等功能的开发。

由于没有后端给写服务器,所以只采用前端基于浏览器的indexDB进行数据管理,在代码中封装了对于数据的增删改查功能,

项目的UI使用的antd的组件库

这里就是一个简单的像indexdb库里插入一条景区的数据,不过多赘述,起始位置是设定模型在高德地图中的位置,按理说模型路径应该是上传文件,我这里是将oss路径内置到选项中,直接选择就可以,你可以增加很多个景区,但是模型只有一个。

前面写过的map.on来监听click事件,并通过射线获取当前点击到的模型,并存储模型的经纬度,并将数据和景区的数据绑定。

//弹窗确定按钮constadd=()=>{form.validateFields().then((values)=>{if(storeState.isEdit){editStore(storeState.storeId||'',values)}else{if(props.addId){addStore({...values,lnglat,storeId:props.addId})}}})}在添加点位后还需要调用refreshStore方法刷新一下模型,将刚添加的模型进行重绘和绑定。

绑定设施点位逻辑与绑定店铺相同,只不过只需要存下经纬度和基础信息即可不需要记录模型信息。

项目中集成了coze的ai系统,并且设置了bot

从流程图中可以看到,当用户输入肯德基这个关键词,bot会执行工作流,并最终输出一条预支好的消息。

这里做了交互,点击店铺的marker,则获取店铺的信息,并向aibot进行询问,aibot识别到关键字“肯德基”则会自动回复预设好的内容,如果输入其他内容,aibot也会回答的,如下图

另注:coze的aibot将在8月15日后进行限流访问,可以在代码中替换自己的ai智慧体,高德地图的api也是限流的,超过额度就不可使用了,尽量在项目中使用自己申请的key

THE END
1.如何在Illustrator中应用效果若要删除效果,请在“外观”面板选择相应的效果列表,然后单击“删除”按钮。 实时描摹工具 在Illustrator 中应用专色后,IllustratorCS3 及更高版本和 CS2 会保留灰度栅格对象中的专色。在使用实时描摹命令时,所有其他栅格格式文件中的专色,无论是链接专色还是嵌入专色,都会转换为印刷色或被忽略。 https://helpx.adobe.com/cn/illustrator/using/effects.ug.html
2.当AI遇上建筑,到底可以有多神奇!界面新闻你以为的草图渲染,是不是只有草图生成效果图?!大漏特漏,草图渲染支持风格草图、写实草图、实拍模型、草图大师模型、CAD、照片实拍一键生成效果图,如果在设定的「通用、建筑、室内、产品、游戏/动漫」都无法满足你的需求,一切按「通用」处理。在「通用」场景中,还能得到以下一些创意作品。 https://www.jiemian.com/article/9363516.html
3.豆绘ai更可以继续按需调整风格、材质和光线设置,AI将实时呈现新的效果图。Step 7: 优化和导出检查生成的效果图,选择最终满意的效果图,保存为高分辨率图像文件(有2k和4K可选)。通过学习使用SU+AI工具,你可以大大缩短效果图制作的时间,提高工作效率和质量,同时减少成本支出。这种技能的掌握将使你在室内设计和建筑设计https://openi.cn/sites/109676.html
4.豆绘AI:AI建筑设计AI室内设计豆绘AI 是一个国内领先的 AI 创作平台,专为建筑、室内设计和园林景观从业者提供专业的空间设计服务。平台功能包括 AI 绘图、AI 设计助手、AI 全景合成等,优势在于提供一键生成优秀作品、优化设计流程、提高工作效率。豆绘 AI 定价方案包括免费试用、付费 Pro 会员和每日https://top.aibase.com/tool/douhui-ai
5.人像分割Java给透明图片加背景色腾讯云开发者社区【人像分割】Java给透明图片加背景色 之前在百度AI社区写的人像分割帖子,最近有一些开发者会遇到返回的透明图的base64存图片有问题,还想知道存起来的透明图片如何更改背景色,想快速做个证件照的应用。 此文呢。就从接口返回的透明图片搞起。把返回的foreground - 人像前景抠图,透明背景保存成png格式的图片。并进行https://cloud.tencent.com/developer/article/1926411
6.现代多层建筑效果图图片现代多层建筑效果图设计素材红动中国素材网提供23个现代多层建筑效果图图片、现代多层建筑效果图素材、现代多层建筑效果图背景、现代多层建筑效果图模板、现代多层建筑效果图海报等PS素材下载,包含PSD、AI、PNG、JPG、CDR等格式源文件素材,更多精品现代多层建筑效果图设计素材下载,就来红动中国,最https://so.redocn.com/jianzhu/cfd6b4fab6e0b2e3bda8d6fed0a7b9fbcdbc.htm
7.广联达FalconVAI出图,让建筑设计更轻松!在FalconV渲染器的右侧工具栏可以看到带有AI字样的【视点管理AI版】图标样式,点击此图标便可进入AI出图界面。 在右下角的描述框中输入您想要的效果图的关键词,以便让AI为您呈现心目中理想的效果。请务必包括建筑设计类型,例如住宅、办公楼等,后续您可以加上您所需要的一些风格类的关键词。 https://www.fwxgx.com/articles/237625
8.建筑学长——千万建筑师的资源库和AI绘图创作平台建筑学长AI渲染SU/3Dmax/Rhino/Revit插件,点击下载 建筑学长APP已发布,点击下载 建筑学长AI渲染SU/3Dmax/Rhino/Revit插件,点击下载 建筑学长APP已发布,点击下载 AI工具 查看更多 AI绘图创作 AI效果图细节增强 AI室内装修 AI旧房改造 AI风格模仿 AI线稿上色 http://jianzhuxuezhang.com/
9.Max制作室内建筑效果图教程舞台背景舞台背景 VR360VR360 商用 免费商用 (CC协议)免费商用 (CC协议) 版权商用 (39元/条)版权商用 (39元/条) 3D 通用模型 模型库模型库 C4DC4D 游戏游戏 动画|绑定动画|绑定 MayaMaya BlenderBlender 专用模型 SU模型SU模型 产品|机械产品|机械 https://www.aigei.com/item/3d_palace_archi_18.html
10.建筑学长ai画设计图共有1259551个建筑学长ai画设计图相关内容为您呈现 亚当设计考研 亚当设计考研 建筑快题设计 南昌大学建筑学考研 1 亚当设计考研 建筑快题设计 建筑学考研 39 亚当设计考研 亚当设计考研 WitherKing 观明和人工智能 免费领香港云服务器 12 个月 + 永久免费 CDN 服务 + 免费 VPS广告 https://www.zcool.com.cn/tag/ZODEyMjg1Mg==.html
11.AI教程!教你绘制超简单的国潮插画,不会手绘也能快速上手关于教程 首先,国潮插画的特点,是采用中国传统绘画(工笔画、版画)的配色和造型,搭配现代设计思路产生的时下流行的设计风格。常见的国潮插画其主要元素是古建筑,然后根据主题配以植物、花、云等装饰物。本教程将按5个步骤,来完成该初级AI插画的绘制:1.新建文档 -> 2.https://uiiiuiii.com/illustrator/1212492945.html
12.一键「中式建筑」图转3D大设AI工作流大设网官网大设基于人工智能自动生成技术,快速准确地实现AI一键「中式建筑」图转3D,工作流融合了中式建筑的传统美学和现代3D技术,将平面图转换为三维建筑模型。https://www.bigbigai.com/dt-workflow/zjsd
13.RelightAI艺术创作与编辑工具由#clipdrop#开发的智能 AI 打光神器可以在图片的任意位置打出真实立体光影效果, 并且可以改变光源的颜色、大小、亮度等等, 效果图后期调整超棒, 很好用的#AI图像#处理工具, 算是一个打光修图的神器网站 用这个工具可以直接在线上拖拽光源, 从不同的角度给照片增添看上去非常自然的立体光感。 https://hao.archcookie.com/sites/2522.html?menu-id=913
14.简单简易简约图片简单简易简约素材简单简易简约图片下载视觉中国为您找到1494159个原创简单简易简约素材图片,包括简单简易简约图片,简单简易简约插画,简单简易简约模板,简单简易简约元素,简单简易简约图标等源文件下载服务,包含PSD、PNG、JPG、AI、CDR等格式素材,更多关于简单简易简约素材、图片、海报、背景、插画、配图https://www.vcg.com/creative-image/137440648
15.图片用AI加背景吾爱破解任选8-10张图 用AI添加背景 背景需要是AI生成的 想看看AI 效果图的效果 要求就是和谐 协调 ,https://www.52pojie.cn/thread-1938617-1-1.html
16.我要自学网天正建筑ID建筑方案RevitBIM钢结构盈建科3DS MAX建筑效果图SketchUp古建筑园林景观LumionThea render建筑动画手绘亮化工程/日照广联达/预算ArcGISPKPM道路交通 更多 天正建筑入门教程--建筑设计篇 盈建科高层剪力墙住宅结构教程 建筑工程安全专项施工方案编制教程 http://51zxw.net/
17.AI的背景图怎么换颜色?然后在屏幕顶部的菜单栏中单击“ 文件”,然后单击“ 打开”。选择要在其中更改背景颜色的文件,https://www.3d66.com/answers/question_1375663.html
18.建筑设计AIGC模型:StableDiffusion建筑类模型第一类,建筑类综合大模型 此类模型,是在原有SD大模型基础上进行的训练,由于SD大模型训练对素材要求较高,训练较为复杂,因此这类模型较少,目前首推来自老王大模型,通过测试,这是一款适应性较高的优质模型。模型在写实照片风格与设计效果图风格之间取得了平衡,使得图片生成结果更加适用于行业。 https://yuanjineng.cn/models.php
19.头条文章合作机构:北京市建筑装饰协会、上海市装饰装修行业协会、天津市环境装饰协会、重庆市建筑装饰协会、广东省建筑业协会、浙江省建筑装饰行业协会、江苏省装饰装修行业协会、江苏省室内设计学会、福建省建筑装饰行业协会、广西建筑装饰协会、河北省建筑装饰业协会、辽宁省装饰协会、陕西省建筑装饰协会、山东省装饰协会、云南省室https://card.weibo.com/article/m/show/id/2309404999059067764787
20.将2D效果图转化为3D模型的方法AI建筑设计3D数字教程虎课网为您推荐将2D效果图转化为3D模型的方法--AI建筑设计视频教程、图文教程、素材源文件下载,学员课后练习、作品以及评价等内容。将2D效果图转化为3D模型的方法--AI建筑设计教程讲师:设计师的工具箱-杰森,使用软件:StableDiffusion、Rhino,难度等级:新手入门,视频时长:3分28秒 查看全部 相关教程: 建筑模型设计教程https://huke88.com/course/154737.html
21.用几根手绘线条Ai生成灵感建筑效果图(附素材文件和视频)感兴趣的小伙伴,赠送全套AIGC学习资料和安装工具,包含AI绘画、AI人工智能等前沿科技教程,模型插件,具体看下方。 AI绘画基础教学:我用AI做建筑设计,10分钟完成100个方案 2401_84815887的博客 1200 AI建筑设计就是使用AI绘图工具()只通过简单的提示词或者一个手绘草稿,就能无中生有堪比现实照片的效果图方案。对https://blog.csdn.net/m0_58477260/article/details/139063195