[LBS学习笔记 1]高德数据可视化初体验

简介: 换了新工作,虽然还是java开发,但是之前搞做在线教育的,现在做地图相关的事。因此,花了些时间学了空间索引相关的内容,后期会写关于空间索引相关的内容,这期写地理数据可视化相关的内容。

高德数据可视化初体验

背景

换了新工作,虽然还是java开发,但是之前搞做在线教育的,现在做地图相关的事。因此,花了些时间学了空间索引相关的内容,后期会写关于空间索引相关的内容,这期写地理数据可视化相关的内容。

准备

1.高德开发平台账号

高德开放平台:https://lbs.amap.com/

申请账号并在应用管理创建需要的key,如图

1_1.png

2.学习高德JS API文档

这里我主要关注多边形的展示,所以贴一下矢量图形的链接,有需要的可自行看其他内容
https://lbs.amap.com/api/jsapi-v2/guide/overlays/vector-overlay

然后,楼主又花了点时间在B站上学了JS基本语法相关的内容,然后就可以动手做了

开发

后端接口

接口主要提供国内的行政区划数据,即省市区的编码和多边形围栏数据,在网上google找了一个可以用的数据https://github.com/Civitasv/DataV_GeoJSON,将区级别的json数据解析出来,导入数据库里,这样我们就有了基础数据。

然后提供一个接口,可以返回多边形边界数据

    @GetMapping("/queryByAdcode")
    @CrossOrigin
    public ShapeListDTO queryByAdcode(@RequestParam("adcode") Integer adcode) {
   
   
        log.info("queryByAdcode,adcode:{}", adcode);
        return cityService.queryByAdcode(adcode);
    }


//返回对象数据结构
@Data
public class ShapeListDTO {
   
   
    private Integer total;
    private List<String> shape;
}

前端

前端通过ajax请求后端接口获取数据,然后调高德JS API方法将多边形边界数据在页面上渲染即可

直接贴代码:

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
    <link rel="stylesheet" href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css"/>
    <title>地图显示</title>
    <style>
        html,
        body,
        #container {
    
    
            width: 100%;
            height: 100%;
        }
    </style>
</head>
<body>
<div id="container"></div>
<!-- 加载地图JSAPI脚本 -->
<script src="https://webapi.amap.com/maps?v=2.0&key=【你申请的key】"></script>
<script>
    var req = new XMLHttpRequest();
    req.open("GET", "http://127.0.0.1:8080/queryByAdcode?adcode=110000")
    req.onload = function () {
    
    
            if (req.responseText == '') {
    
    
                errorMsg.style.display = 'block'
            } else {
    
    
                console.log(req.responseText)
                var map = new AMap.Map('container', {
    
    
                    viewMode: '3D', // 默认使用 2D 模式,如果希望使用带有俯仰角的 3D 模式,请设置 viewMode: '3D',
                    zoom: 11, //初始化地图层级
                    center: [116.397428, 39.90923], //初始化地图中心点
                });

                var resp = JSON.parse(req.responseText);
                var total = resp.total;
                var shapes = resp.shape;
                for (var i = 0; i < total; i++) {
    
    
                    var poly = shapes[i];
                    var points = poly.split(",");
                    var list = [];
                    for (var j = 0; j < points.length; j++) {
    
    
                        var pp = points[j].split(" ");
                        list.push(pp);
                    }
                    var polygon1 = new AMap.Polygon({
    
    
                        path: list,          //设置线覆盖物路径
                        fillColor: '#42cee0', // 多边形填充颜色
                        borderWeight: 2, // 线条宽度,默认为 1
                        strokeColor: 'red', // 线条颜色
                    });
                    map.add(polygon1);
                }
            }
    }
    req.send();

</script>
</body>
</html>

效果图

1_2.png

代码

我的代码仓库地址,这里只有后端代码:https://github.com/longbig/LBS-learn

相关文章
|
10月前
|
存储 缓存 NoSQL
分布式系统架构8:分布式缓存
本文介绍了分布式缓存的理论知识及Redis集群的应用,探讨了AP与CP的区别,Redis作为AP系统具备高性能和高可用性但不保证强一致性。文章还讲解了透明多级缓存(TMC)的概念及其优缺点,并详细分析了memcached和Redis的分布式实现方案。此外,针对缓存穿透、击穿、雪崩和污染等常见问题提供了应对策略,强调了Cache Aside模式在解决数据一致性方面的作用。最后指出,面试中关于缓存的问题多围绕Redis展开,建议深入学习相关知识点。
715 8
|
10月前
|
NoSQL 关系型数据库 MySQL
分布式系统学习9:分布式锁
本文介绍了分布式系统中分布式锁的概念、实现方式及其应用场景。分布式锁用于在多个独立的JVM进程间确保资源的互斥访问,具备互斥、高可用、可重入和超时机制等特点。文章详细讲解了三种常见的分布式锁实现方式:基于Redis、Zookeeper和关系型数据库(如MySQL)。其中,Redis适合高性能场景,推荐使用Redisson库;Zookeeper适用于对一致性要求较高的场景,建议基于Curator框架实现;而基于数据库的方式性能较低,实际开发中较少使用。此外,还探讨了乐观锁和悲观锁的区别及适用场景,并介绍了如何通过Lua脚本和Redis的`SET`命令实现原子操作,以及Redisson的自动续期机
1045 7
|
4月前
|
编解码 算法 数据安全/隐私保护
手机常用压缩工具推荐,RAR,ZIP,7Z解压缩,zip解压缩,Bandizip,ZArchiver等解压工具
在手机上解压RAR、ZIP、7Z等格式文件时,选择一款功能强大的解压缩工具至关重要。本文介绍了多款实用的解压软件,如7Z解压缩、ZArchiver、RAR、Bandizip等,它们不仅支持多种压缩格式的解压和压缩,还具备文件管理、加密、分享、媒体预览等功能。无论是处理文档、图片还是视频,这些工具都能提供高效便捷的解决方案,满足日常使用需求。
1647 0
|
9月前
|
机器学习/深度学习 存储 人工智能
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
MNN-LLM App 是阿里巴巴基于 MNN-LLM 框架开发的 Android 应用,支持多模态交互、多种主流模型选择、离线运行及性能优化。
7321 80
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
|
搜索推荐 区块链 开发者
【python程序打包教程】PyInstaller一键打包Python程序为独立可执行exe文件
【python程序打包教程】PyInstaller一键打包Python程序为独立可执行exe文件
|
11月前
|
存储 NoSQL Java
使用lock4j-redis-template-spring-boot-starter实现redis分布式锁
通过使用 `lock4j-redis-template-spring-boot-starter`,我们可以轻松实现 Redis 分布式锁,从而解决分布式系统中多个实例并发访问共享资源的问题。合理配置和使用分布式锁,可以有效提高系统的稳定性和数据的一致性。希望本文对你在实际项目中使用 Redis 分布式锁有所帮助。
699 5
Threejs中导入GLTF模型克隆后合并
这篇文章详细说明了在Three.js中如何导入GLTF模型,对其进行克隆,并将多个克隆模型合并成一个整体模型的过程。
510 2
Threejs中导入GLTF模型克隆后合并
|
Dubbo Java 应用服务中间件
为什么大厂用的都是RPC服务
在很久以前,笔者刚毕业开始工作那会儿,对于企业开发的模式一直以为HTTP接口开发,也就是我们常说的RESTful风格的服务接口。的确,对于在接口不多、系统与系统交互较少的情况下,解决信息孤岛初期常使用的一种通信手段;优点就是简单、直接、开发方便。
435 1
|
前端开发 JavaScript API
前端的全栈之路Meteor篇(完):关于前后端分离及与各框架的对比,浅析分离之下的潜在耦合
本文探讨了Meteor.js这一全栈JavaScript框架的特点与优势,特别是在前后端分离架构中的应用。Meteor通过共享数据结构和简化全栈开发流程,实现了前后端的紧密协作。文章还对比了其他全栈框架,如Next.js、Nuxt.js等,分析了各自的优势与适用场景,最后讨论了通过定义文档归属者和用户专有数据集简化后端构建及端云数据同步的方法。
911 0
|
测试技术
单元测试问题之使用TestMe时利用JUnit 5的参数化测试特性如何解决
单元测试问题之使用TestMe时利用JUnit 5的参数化测试特性如何解决
347 2