jjzjj

高德地图开发实战案例:使用Loca数据源展示海量点标注(海量点、自定义分类图标、聚合、信息提示、3D控件)

漏刻有时 2024-05-14 原文

系列文章目录

  1. 高德地图开发实战案例:弧线连接线标注
  2. 高德地图开发智慧社区网格化数据格式产生的无法单击事件的解决方案
  3. 高德地图进阶开发实战案例(1):webAPI坐标转换和jsAPI批量转换
  4. 高德地图进阶开发实战案例(2):电子围栏(多边形的绘制)的展示
  5. 高德地图进阶开发实战案例(4):计算骑行的距离和时间
  6. 高德地图进阶开发实战案例(5):矩形可视范围的东北西南角经纬度的获取
  7. 高德地图进阶开发实战案例(6):添加自定义图片覆盖物图层获取可视范围经纬度的解决方案
  8. 高德地图进阶开发实战案例(7):点是否在多边形内和内外部的数量统计的解决方案
  9. 高德地图进阶开发实战案例(8):加载多个多边形的覆盖物且实现鼠标高亮和单击事件解决方案
  10. 高德地图进阶开发实战案例(9):涟漪动画标注的实现方案
  11. 高德地图进阶开发实战案例(10):地图选取起终点OD位置经纬度的驾车规划路线
  12. 高德地图进阶开发实战案例(12):热力图模拟传播范围以及小区兴趣点POI经纬度的获取方法
  13. 数据可视化大屏高德地图javascript webAPI开发的智慧治安物联网管理系统实战解析(web GIS、3D视图、个性化地图、标注、涟漪动画、自定义弹窗、3D控件)

文章目录


前言

loca 数据可视化 API 2.0是一个基于高德地图JS API 2.0的高性能地图数据可视化库,采用了和1.3版本中不同的架构模式和渲染管线,极大的提升了性能和渲染效果。数据源进行了标准化,仅支持标准的GeoJSON格式数据。


一、引入外部JS包

  • 同时引入maps和loca两个js文件,同时注意官网版本;不同版本的引入,会导致高德地图无法渲染,甚至不显示的情况。
  • Loca 数据可视化 API 2.0 依赖 JSAPI 2.0,因此需要先引入 JSAPI v2.0。
<script src="https://webapi.amap.com/maps?v=2.0&key=69fb3067449c9***"></script>
<script src="https://webapi.amap.com/loca?v=2.0.0&key=69fb306744***"></script>

注意:新版Loca API 2.0和Loca 1.3.x版本不兼容,它们是针对不同的JS API版本进行的封装。 因此如果您需要使用JS API 1.4.x,那么只能使用Loca API 1.3.x;如果您需要使用JS API 2.0,那么只能使用Loca API 2.0。

二、核心代码

1.地图实例

  • 加载个性化地图皮肤
  • 加载3D地图模式viewMode
    var map = new AMap.Map('map', {
        zoom: 15.8,
        //center: [123.0155, 41.11805],
        center: [116.33081, 39.995731],
        showIndoorMap: false,
        pitch: 45, // 地图俯仰角度,有效范围 0 度- 83 度
        viewMode: '3D', // 地图模式
        mapStyle: 'amap://styles/a88f4b4a2db1276936aefa8d21ee95a1'
    });

由于是海量点的引入,不建议在实际生产环境使用3D视图,容易卡顿,或造成浏览器的崩溃。

2.3D控制罗盘

添加 3D 罗盘控制,显示倾斜和旋转按钮。

    //3D控制罗盘
    AMap.plugin([
        'AMap.ControlBar',
    ], function () {
        // 添加 3D 罗盘控制
        map.addControl(new AMap.ControlBar({
            position: {
                right: '20px',
                top: '20px'
            },
            showControlButton: true,  // 是否显示倾斜、旋转按钮。默认为 true
        }));
    });

3.创建Loca 实例

    var loca = new Loca.Container({
        map,
    });

    var labelsLayer = (window.labelsLayer = new Loca.LabelsLayer({
        zooms: [10, 20],
    }));

    var geo = new Loca.GeoJSONSource({
        url: 'data2.json',
    });

    labelsLayer.setSource(geo);

4.AMap.LabelMarker的配置项

labelsLayer.setStyle({
        icon: {
            type: 'image',
            image: (index, feat) => {
                //console.log(feat.properties.level)
                return './images/icon' + feat.properties.types + '.png'
            },
            size: [48, 75],
            anchor: 'center',
        },
        text: {
            // 每项配置都可使用回调函数来动态配置
            content: (index, feat) => {
                return feat.properties.name;
            },
            style: {

                fontSize: 12,
                fontWeight: 'normal',
                fillColor: '#5CDE8E',
                strokeColor: '#000',
                strokeWidth: 2,
            },
            direction: 'bottom',
        },
        extData: (index, feat) => {
            return feat.properties;
        },
    });
    loca.add(labelsLayer);

4.1自定义分类图标

在labelsLayer的icon配置项中,对image新增回调函数,读取geojson中对应的项目类型,进行自动加载图标。

 image: (index, feat) => {
                //console.log(feat.properties.level)
                return './images/icon' + feat.properties.types + '.png'
            },

5.labelsLayer监听事件

 labelsLayer.on('complete', () => {
        var normalMarker = new AMap.Marker({
            offset: [70, -15],
        });
        var labelMarkers = labelsLayer.getLabelsLayer().getAllOverlays();
        for (let marker of labelMarkers) {
            marker.on('mouseover', (e) => {
                var position = e.data.data && e.data.data.position;

                if (position) {
                    normalMarker.setContent(
                        '<div class="amap-info-window">地址:' + marker.getExtData().name + '</div>',
                    );
                    normalMarker.setPosition(position);
                    map.add(normalMarker);
                }
            });

            marker.on('mouseout', () => {
                map.remove(normalMarker);
            });
        }
    });

5.1信息提示

在鼠标移动到对应的数据层时,会出现信息提示。

    normalMarker.setContent(
 '<div class="amap-info-window">地址:' + marker.getExtData().name + '</div>', );

6.geojson数据格式


总结

@漏刻有时

有关高德地图开发实战案例:使用Loca数据源展示海量点标注(海量点、自定义分类图标、聚合、信息提示、3D控件)的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  2. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  3. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  4. ruby-on-rails - 如何生成传递一些自定义参数的 `link_to` URL? - 2

    我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些

  5. ruby-on-rails - 如何在 Rails 3 中创建自定义脚手架生成器? - 2

    有这些railscast。http://railscasts.com/episodes/218-making-generators-in-rails-3有了这个,你就会知道如何创建样式表和脚手架生成器。http://railscasts.com/episodes/216-generators-in-rails-3通过这个,您可以了解如何添加一些文件来修改脚手架View。我想把两者结合起来。我想创建一个生成器,它也可以创建脚手架View。有点像RyanBates漂亮的生成器或web_app_themegem(https://github.com/pilu/web-app-theme)。我

  6. ruby-on-rails - 事件管理员日期过滤器日期格式自定义 - 2

    是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s

  7. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  8. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  9. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  10. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

随机推荐