精华内容
下载资源
问答
  • Oracle表空间设计

    千次阅读 2013-06-30 16:50:42
    Oracle表空间设计空间设计原则: 1. 为表和索引分配不同的tablespace。 2. 为正式表和历史表分配不同的tablespace,提高数据的安全性。 3. 为大数据量表单独分配tablespace。 4. 将只读表或以读取为主的...

    Oracle表空间设计

    表空间设计原则:

    1.        为表和索引分配不同的tablespace。

    2.        为正式表和历史表分配不同的tablespace,提高数据的安全性。

    3.        为大数据量表单独分配tablespace。

    4.        将只读表或以读取为主的表单独分配tablespace。

    5.        以高频率更新的表分成一组,单独分配tablespace。

    6.        存于同一个 tablespace中的表(或索引)的extent 大小最好成倍数关系,有利于空间的重利用和减少碎片。

    7.     为不同类型的数据分配不同的表空间,这样既可以提高数据库输入输出性能,也有利于数据的备份和恢复等管理工作。因为我们数据库管理员在备份或者恢复数据的时候,可以按表空间来备份数据。如在设计一个大型的分销系统后台数据库的时候,我们可以按省份建立表空间。与浙江省相关的数据文件放置在浙江省的表空间中,北京发生业务记录,则记录在北京这个表空间中。如此,当浙江省的业务数据出现错误的时候,则直接还原浙江省的表空间即可。很明显,这样设计,当某个表空间中的数据出现错误需要恢复的时候,可以避免对其他表空间的影响。

     

     

    表空间设计注意:

    1.        合理利用表空间大小。根据不同的表空间设计意图,结合实际情况,分配不同的表空间大小。

    2.        合理利用服务器空间。根据实际情况,可以为不同的表空间配置不同存储位置。

     

     

    设计:

    1.        因为系统配置表以读取为主,故单独分配表空间:TS_SYS_DATA。

    2.        为系统配置表索引分配单独表空间:TS_SYS_INDEX.

    3.        为用户操作表分配单独表空:TS_MAIN_DATA,用户默认表空间。

    4.        为用户操作表索引分配单独表空间:TS_MAIN_INDEX。

    5.        为用户操作的大数量表分配单独表空间:TS_MAIN_BIG_DATA。

    6.        为用户操作历史表分配单独表空间:TS_HIS_DATA。

    7.        为用户操作大数据量历史表分配单独表空间:TS_HIS_BIG_DATA。

    8.        为用户操作的历史表索引分配单独的表空间:TS_HIS_INDEX。

    9.        创建临时表空间:TS_TEMP。

     

     

    创建表空间sql语句介绍:

    方式一、

    CREATE TABLESPACE TS_MAIN_DATA

       DATAFILE'D:\oracle\oradata\TS_MAIN_DATA' size 500M

       EXTENT MANAGEMENT LOCALAUTOALLOCATE

    /

    方式二、

    CREATETABLESPACE TS_HIS_DATA

       DATAFILE 'D:\oracle\oradata\TS_HIS_DATA'size 1000M

       EXTENT MANAGEMENT LOCAL UNIFORM SIZE 2M

    /

    方式三、

    CREATETABLESPACE PROJECT_MAIN_DATA

    DATAFILE

      'E:\Oracle_DBData\PROJECT\PROJECT_DAT01' SIZE1990M REUSE AUTOEXTEND OFF,

      'E:\Oracle_DBData\PROJECT\PROJECT_DAT02' SIZE1990M REUSE AUTOEXTEND OFF,

      'E:\Oracle_DBData\PROJECT\PROJECT_DAT03' SIZE1990M REUSE AUTOEXTEND OFF,

      'E:\Oracle_DBData\PROJECT\PROJECT_DAT04' SIZE1990M REUSE AUTOEXTEND OFF

      LOGGING

      ONLINE

      PERMANENT

      EXTENT MANAGEMENT LOCAL UNIFORM SIZE 2M

    /

     

    extent是“区间”的意思。在oracle数据库中,extentmanagement 有两种方式 extent management local(本地管理); extentmanagement dictionary(数据字典管理);默认的是local。每种也有两种大小增长方式:

    uniform:默认为1M大小,在temp表空间里为默认的,但是不能被应用在undo表空间。

    本地管理表空间与字典管理表空间相比大大提高了管理效率和数据库性能,其优点如下:

    1.      减少了递归空间管理

    本地管理表空间是自己管理分配,而不是象字典管理表空间需要系统来管理空间分配,本地表空间是通过在表空间的每个数据文件中维持一个位图来跟踪在此文件中块的剩余空间及使用情况。并及时做更新。这种更新只对表空间的额度情况做修改而不对其他数据字典表做任何update操作,所以不会产生任何回退信息,从而大大减少了空间管理,提高了管理效率。同时由于本地管理表空间可以采用统一大小分配方式(UNIFORM),因此也大大减小了空间管理,提高了数据库性能。

    2.      系统自动管理extents大小或采用统一extents大小

    本地管理表空间有自动分配(AUTOALLOCATE)和统一大小分配(UNIFORM)两种空间分配方式,自动分配方式(AUTOALLOCATE)是由系统来自动决定extents大小,而统一大小分配(UNIFORM)则是由用户指定extents大小。这两种分配方式都提高了空间管理效率。

    3.      减少了数据字典之间的竞争
    因为本地管理表空间通过维持每个数据文件的一个位图来跟踪在此文件中块的空间情况并做更新,这种更新只修改表空间的额度情况,而不涉及到其他数据字典表,从而大大减少了数据字典表之间的竞争,提高了数据库性能。

    4.      不产生回退信息

    因为本地管理表空间的空间管理除对表空间的额度情况做更新之外不修改其它任何数据字典表,因此不产生回退信息,从而大大提高了数据库的运行速度。

    5.      不需合并相邻的剩余空间

    因为本地管理表空间的extents空间管理会自动跟踪相邻的剩余空间并由系统自动管理,因而不需要去合并相邻的剩余空间。同时,本地管理表空间的所有extents还可以具有相同的大小,从而也减少了空间碎片。

    6.      减少了空间碎片

    7.      对临时表空间提供了更好的管理

    autoallocate:
    You can convert a tablespace from dictionary extent management to local extentmanagement
    and back with the Oracle-supplied PL/SQL package DBMS_SPACE_ADMIN. The SYSTEM
    tablespace and any temporary tablespaces, however, cannot be converted fromlocal to the
    older style dictionary managem
    两种extent管理方式是可以相互转换的,利用PL/SQL DBMS_SPACE_ADMIN
    但是系统表空间和临时表空间不能从local管理转化到dictionary管理。
    展开全文
  • 通信的设计空间

    千次阅读 2015-05-23 23:21:31
    当用户交换的信息需要在低延迟网络中做短时间处理 当实现的简易性或小量的协议交换比可能的性能提升更需要优先考虑时 2.2 适用于异步请求 在决定后续的请求之前不需要某种响应的时候 当通信延迟与请求...

    1. 无连接和面向连接的对比

    取舍的主要方面包括延迟,可伸缩性和可靠性
    无连接协议:UDP,IP
    面向连接:TCP
    

    1.1 数据组帧策略

    面向消息的传送策略:TP4和XTP
    字节流:TCP
    

    1.2 连接的多路复用策略

    多路复用的:节省OS诸如句柄等资源,编程难度更高,效率更低,不确定性更大。
    非多用复用的:优先级可以更好的控制,较低的同步开销,更多的OS资源。
    

    2.同步和异步的消息交换对比

    取舍因素:
    1.请求之间的关联性
    2.底层协议或通信介质的延迟
    

    2.1 适用于同步请求

    • 当请求的结果决定了后续的请求
    • 当用户交换的信息需要在低延迟网络中做短时间处理
    • 当实现的简易性或小量的协议交换比可能的性能提升更需要优先考虑时

    2.2 适用于异步请求

    • 在决定后续的请求之前不需要某种响应的时候
    • 当通信延迟与请求所要求的处理时间高度相关的时候
    展开全文
  • 空间数据库的设计与建设

    千次阅读 2008-08-04 01:53:00
    1、设计题目:四川省旅游信息数据库2、实验目的 通过设计和建立database空间数据库,掌握空间数据库设计和建设流程,学会利用所学GIS知识独立分析和解决问题的能力,对所学建库知识进行一个完整的串接。3、需求分析...
     
    

    1、设计题目四川省旅游信息数据库<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

    2、实验目的

          通过设计和建立database空间数据库,掌握空间数据库设计和建设流程,学会利用所学GIS知识独立分析和解决问题的能力,对所学建库知识进行一个完整的串接。

    3、需求分析

        旅游业是一个综合性很强的信息依赖型产业,旅游信息的获取、加工、传播和利用对旅游业的发展起着举足轻重的作用。从旅游者和旅游规划管理部门的需求出发建立旅游信息数据库,不仅可以使旅游者和旅游规划管理部门能够快速、准确地查找和检索自己所需要的旅游信息,而且能够促进旅游信息规范化和标准化,促进旅游信息的共享,打破对旅游信息的封锁;旅游信息数据库的建立有利于从整体上对旅游业进行宏观的调控和管理,有利于旅游业协调、健康有序的发展。

        四川省旅游空间数据库的建立以arcgis为平台,以database为载体,内涵四川主要景点的各种信息(属性和空间),可以为使用者提供一定的信息服务。

    4、功能分析与数据组织

       4.1 数据组织

           本实验的数据组织为:矢量数据采用简单数据格式shapefile存储,具体文件如下表所示:

        

    文件名称

    用途

    主要景点

    记录四川省的主要旅游景点信息,并进行分类

    交通要道_国道

    存储四川省的交通要道国道的走向,便于分析路径

    交通要道_高速路

    存储四川省的交通要道高速路的走向,便于分析路径

    交通要道_铁路

    存储四川省的交通要道铁路的走向,便于分析路径

    主要城市

    记录四川省的主要城市信息,便于查询信息

    主要河流

    记录四川省的主要河流信息

     

       4.2 功能分析

         本数据库主要的功能设计为:

    1、可以通过地图空间信息查询到景点的属性信息,如景点的类型、票价、主要的景点以及景点的具体位置信息等;

    2、可以通过属性的查询方式找到具体景点的位置,并可以通过提供的信息找到到该景点的路径。

    5、数据库建设流程

    5.1 环境配置

         5.1.1 硬件配置

         计算机一台(windowxp 操作系统)

         5.1.2 软件配置

          专业软件:PCI8.2ArcGIS9.2 desktop

          其它软件:Office Access 2003、抓图软件等

    5.2 数据采集

         5.2.1 资料搜集

          1、地图选择:实验中采用四川省旅游地图,此地图表面清晰,景点划分明确并且信息较多

          2、坐标信息搜集:利用网络等途径查询到四川省的主要城市的具体经纬度,数据较精确。对搜集到的经纬度数据进行筛选,选择在四川省分布较为均匀的8个点作为几何校正点位。

          3、旅游信息搜集:通过网络找寻四川省主要景点的位置、门票以及主要看点信息等,并进行分类建成Access数据库。

    5.2.2 对地图进行地理参考

            本实验利用PCI对四川省旅游地图进行地理参考,坐标系采用地理坐标系(Long/LatGCS_WGS_1984坐标,基准面为D_WGS_1984。具体流程如下:

    1、 打开PCIGCPworks,弹出一对话框(GCPworks Setup,选择相应的选项,Full Processing,Polynomial,User Entered Coordinates,然后点击Accept

    2、 选择未校准的图象,然后选择Define Georeferencing Units,然后选择坐标系统为地理坐标系,即Long/Lat,设置Earth ModelWGS-84Accept即可完成地理单位设置。如下图所示

    <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = w ns = "urn:schemas-microsoft-com:office:word" />        

    3、 选择Collect GCPs,即选择控制点,根据自己在下面查找的四川省主要城市经纬度信息,在图上选定控制点,并分别输入相应的经纬度信息,选择足够的控制点后,保存这些控制点到文件(file-save gcp text file’),然后关毕控制点选择框。如下图所示:

    1 添加控制点

     

    2 保存控制点

     


    4、 施行Perform Registration to Disk,创建新的参考后地图,名称为:schlvyou.tif,选择bilinear插值2nd

    5、 最后执行Perform Registration

    5.2.4 利用arcmap数字化地图

           本实验将使用arcmap进行旅游地图的数字化以及简单属性输入操作,具体步骤如下:

    1、利用ArcCatalog新建ShapeFile格式文件

    文件的地理参考利用导入的方式获取,如下图所示:

     

    3 新建shapefile

    4 shapefile添加投影

     


    5 shapefile添加字段

     


    要建立的ShapeFile文件名称以及字段设置如下:

    文件名称

    字段名称

    字段类型

    主要景点

    name

    文本

    type

    长整型

    主要河流

    name

    文本

    交通要道_国道

    name

    文本

    交通要道_铁路

    ——

    ——

    主要城市

    name

    文本

    边界

    ——

    ——

     

    2、将上述文件以及schlvyou.tif导入Arcmap进行数字化并输入属性数据

    利用Arcmap的数字化编辑器,对相应图层进行数字化:(见图6-8

    1)启动ArcMap并导入栅格底图和新建的Shapefile

    2)加载Editor工具条:

    View菜单——Toolbar——选中Editor

    3)开始编辑:点击Editor向下箭头——Start Editing

    4)设置捕捉环境:点击Editor向下箭头——Snapping

    5进行数字化操作。

    6每新建空间要素,输入要求输入的属性数据

       

    67  数字化地图

     


    8 添加属性信息

     


    5.3 数据处理(Geodatabase数据库的建立)

          5.3.1 新建Geodatabase以及要素集

    arccatalog下新建一个Personal Geodatabase,名字为:四川省旅游信息数据库。(见图9

    在此数据库上右击新建要素集,名字为:旅游信息空间数据。设置其投影坐标为原空间参考数据(sclvyou.tif)(见图10

       

    9新建database

    10 新建要素集

      

    5.3.2导入要素类

              在数据集上右击鼠标,导入—>要素类(多个),将以数字化好的Shapefile格式的数据导入到数据集。(见图11

    11 导入要素类

     

     


    5.3.3导入属性数据表

              在数据库上右击鼠标,导入—>表(多个),将建立好的Access格式的数据导入到数据库。(见图12

              Access数据库有两个表,分别存储了主要景点的属性信息和主要城市的属性信息。

     

    12 导入属性表

     

     

    5.3.4建立关联类

             为了将属性表与其对应的空间数据进行建立,特建立关系类,本实验建立两个关系类,分别由于连接主要景点和其对应的属性表、连接主要城市和其对应的属性表。(见图13

             参数设置如下:

    设置关联类型为:复合关联

             消息传播方式为:两者都

             数据关联方式为:11关系

             连接字段设置:城市信息表连接为:Z___name

                           景点信息表连接为:namename

    13 新建关联类

     

     

    5.3.5建立域和子类型

         因景点可分为四类,为了便于查询使用管理,特为主要景点的type字段建立了域和子类型。见图(14--16

         1“主要景点”属性域建立:

    A、右键数据库——属性——在弹出对话框切换至域选项卡

    B、设置属性域的名称、描述(用于描述属性域,相当于属性域的元数据)、类型、属性域的分割合并策略

         C、与字段链接:右键“主要景点”——属性——字段选项卡——选中type——设置域

         2、 子类型创建方法:

    A、右键数据库——属性——子类型选项卡

    B、确定划分子类型依据的ShortLong Integer字段,并在子类型栏输入各子类型字段值Code和描述。

     

    14 为景点建立域

      

    15 为景点类型建立子类型

     

     


    16 子类型以及制图效果

     

     


    5.4  数据处理结果

        本实验经过数据处理以及排版处理,最后导出地图如下:(见图17

    17 导出地图效果

    6数据库应用案例

      6.1.查询

    6.1.1从图到属性的查询

    ArcMap中点击,然后在对应空间数据上点击,即可弹出相应的属性值列表(见图18),可以看出空间数据库和其对应的属性数据进行了良好的连接,可以查询到其中的属性信息。

    18 属性信息查询

     

     


    5.1.2从属性到图的查询

    1、在ArcMap打开属性表,然后选中记录,空间数据也相应选中,从而实现从属性到图的查询。(见图19

    19 从属性到空间

     

     


    2.在Arcmap中打开根据属性选择,通过属性查询和查询语句查询空间信息(见图20

     

    20 有属性查询空间信息示例

     

     

    6.2 图表制作

        利用Arcmap的图标制作功能,对四川的风景区类别进行数量比较(见图21

    展开全文
  • 高德智慧交通地图空间可视化SDK设计与实现

    万次阅读 多人点赞 2021-02-01 17:59:59
    一、背景地图空间可视化作为高德智慧交通前端业务中最重要的功能之一,承担着城市交通大脑、全境智能大屏等业务中大量的地图渲染需求。作为向用户展示交通数据的窗口,我们需要展现省、市、区、商圈、...

    一、背景

    地图空间可视化作为高德智慧交通前端业务中最重要的功能之一,承担着城市交通大脑、全境智能大屏等业务中大量的地图渲染需求。作为向用户展示交通数据的窗口,我们需要展现省、市、区、商圈、自定义区域多种场景,包括所有交通事件、拥堵指数、辖区等多种维度的数据,呈现着数据量大、元素种类多、逻辑展现重等特点。

    JSAPI作为高德地图前端战线的引擎,涵盖着渲染地图、展示覆盖物等底层能力,但对于行业应用领域的开发来说,存在着开发难度大、适配成本高、纯原生JS实现与主流框架结合不紧密,无行业图层能力的问题。

    基于以上原因,我们设计了具有适用于垂直行业的、可复用、可扩展、二次开发简单等特点的地图SDK,已经成为智慧交通地图空间可视化能力的首选方案。

    二、方案设计

    整体框架设计方案

    高德智慧交通团队经过大量项目实践和思考,以交通行业为切入点,面向整个前端行业地图设计了一套地图空间可视化开发的SDK,整体功能架构设计如下图所示:

    (1) MapContainer是整个SDK的基座,用于承载地图引擎,装载在其上渲染的覆盖物图层,加载所需要的框架模块,在整个架构中起到中流砥柱的作用。

    (2) 配置控制器负责传入用户配置,包括地图应用key配置、加载可选功能配置、样式配置等,在用户变更这些配置后,它会把更新后的配置信息传递到流程中的其他模块中。

    (3) 接受数据的工作由SourceLoader完成,设计了一套SDK内部使用的标准化的数据格式,Loader负责将用户传入的不同类型的数据(已经支持GeoJSON、WKT、数据列表等形式)转化成专用标准格式数据,分发到地图容器及各图层中。

    (4) 为了支持不同的主流应用框架,将框架适配层单独拆分,由它将主要模块封装成Vue、React等框架兼容的组件形式,实现多框架扩展。

    (5) 地图API调用有着严格的顺序限制,而封装框架对于图层各个生命周期的触发是异步的,乱序的,存在无法保证流程一致性的问题,为了应对这种情况我们在SDK中引入了事件队列机制。

    状态驱动方案的实现

    1.生命周期设计

    地图JS API的调用逻辑与原生Javascript一样,是命令式调用设计,像下面这样:

    // 创建地图
    const map = new AMap.Map(options);
    
    
    // 添加覆盖物
    const marker = new AMap.Marker(markerOptions);
    map.add(marker);
    
    
    // 修改覆盖物属性
    marker.setContext(newContext);
    
    
    // 移除覆盖物
    map.remove(marker);
    map.destroy();
    

    这样的API调用方式,与上层项目的开发框架,如Vue、React等不匹配,如果在一个状态驱动的框架下充斥着大量命令式驱动的代码,会大幅度降低这个项目的可维护性、可扩展性。

    为了更好地支撑开发的需要,所有业务图层抽象出了一套完整的生命周期流程。不同的图层,渲染逻辑的步骤不完全相同,各图层的额外能力,如支持交互事件的能力、动画能力也不尽相同,但都可以囊括在这一套生命周期结构内。

    SDK图层组件生命周期定义如下:

    (1)地图注册

    在地图底座加载完毕后,会通知各个图层的RegisterMap流程,这是图层组件生命周期的第一步,图层中包含的所有元素都在这之后才会开始渲染。

    (2)中间层加载

    部分类型的元素需要分组批量加载,因此在渲染这些元素之前,需要先将对应的组图层加载出来。因此,我们设计了组图层相关的生命周期,相关逻辑只需要在beforeAppendGroup,appendGroup,afterAppendGroup这些流程中实现即可。

    (3)元素加载

    beforeAppendComponent,appendComponent,afterAppendComponent,这些是元素图层中最重要的流程,用于实现图层元素加载的主逻辑。

    其中,对于一些元素需要有前置检查,有数据校验,可以把相应的检查逻辑放入beforeAppend中;有的元素需要注册交互事件,或者需要有添加动画scheme能力,这部分的实现逻辑可以放到afterAppend流程中。

    与之对应的,还有元素的销毁流程,beforeRemoveComponent,removeComponent,afterRemoveComponent。如果元素绑定了交互事件,将会在beforeRemove的时候解绑;如果元素注册了动画或者周期调用,也会在beforeRemove的时候销毁周期timer。

    (4)元素更新

    shoudlUpdate,diff,updateComponent,用于实现组件数据动态更新后图层元素的diff、更新过程。

    其中为了防止源数据中只有一小部分修改导致整个图层全部重绘的情况,我们在其中加入了diff的算法,通过各图层的校验数据key的方法,筛选出变更前后一致的数据项,只重绘不同的数据,大大提升了渲染流程的效率。

    2.插件的实现

    不同图层之间存在共同处理流程和共同的属性,对此,我们设计了各种可复用的内置插件,供各图层根据自身特性组合使用。

    例如,有实现定时刷新效果的scheme插件,实现动画效果的animate插件,实现注册交互事件的event插件等。这些插件的设计,必须遵守组件生命周期的规范,插件功能的实现逻辑,也全部以注册上述的生命周期函数的方式完成。

    这些生命周期需要与主流框架的生命周期设计适配。以目前我们项目中正在使用的Vue框架举例,Vue也有其自己的组件生命周期,它的设计基本能够与我们的周期函数相匹配。因此,针对Vue的适配过程其实并不怎么难:

    Vue自身有一套不同层级的组件之间的加载控制流程,父子层级、兄弟层级之间的组件有着严格的触发顺序。例如,父组件的beforeCreate总是在子组件beforeCreate之前触发,而父组件的mounted又总是在子组件mounted之后才会响应,这与我们的多层级图层之间想要的触发顺序相符。因此,SDK图层的各生命周期总能在Vue中找到与之对应的触发时间点。

    经过封装后,用SDK实现的地图模块在项目中生成的组件树结构如下:


    3.异步流程的一致性设计

    我们使用的底层地图引擎,对于流程逻辑的顺序有着严格的要求:

    (1)地图底座的创建须在所有其他流程之前。

    (2)Loca、L7底座的初始化须在地图底座创建完成之后。

    (3)地图元素需要在地图底座加载完成后才能够开始加载,销毁也需要在地图底座销毁之前完成。

    (4)需要确保状态与结果的一致性,如果在短时间内触发了大量的更新数据的操作,即使底层引擎处理需要很长的时间,也要保证最终的展示结果与更新的顺序完全一致。

    不幸的是,虽然主流的框架有完善的生命周期管理机制,能够确保各个流程的执行顺序不出差错,但这些流程之间都是异步的、并发的,而绘图引擎在处理这些渲染指令时,会由于处理时长的不确定性,导致各指令返回的顺序有所变化,这可能会导致下面的情况出现: 

    • 地图容器的加载时间过长,导致加载后续元素时,地图仍没有渲染完成而出错;

    • 在短时间内对同一份数据进行变更,如果引擎处理第一次变更花的时间比后一次更长,就会导致第一次更新的结果渲染出来时,会把更早完成的第二次渲染结果覆盖掉。

    为了避免上述情况,我们在SDK中实现了事件队列控制器,处理顺序问题:

    (1)所有图层组件中需要调用底座引擎的事件,例如append component,remove component等,不会直接调用底座的相关接口,而是在队列控制器中push一个对应类型的事件。

    (2)队列控制器中的所有事件类型,全部封装成同步方法实现。由控制器收集所有涂层的调用消息,单线程逐一消费。

    (3)在控制器中写入特殊的控制逻辑,地图基座的加载需要在其他图层加载之前,则把基座加载的事件的响应优先级设置为最高。

    (4)引入筛选机制,针对队列中存在同一图层的互逆操作,如短时间内加载一份数据,之后又remove掉,由于这一对操作不会对当前的结果有任何影响,因此这一对操作将会被过滤逻辑删除,达到优化渲染性能的效果。

    4.地图控制指令的优化

    地图底座支持用户通过调用相关方法控制地图展示的视野,SDK在这种设计上加以优化,通过在地图底座组件上配置相应的属性状态,来实现定位到选定元素、定位到整个辖区范围、定位到特定地点及缩放级别等多种视野类型。

    同时,地图的其他控制方法,例如设置周边避让区域、设置光标形状、设置自定义地图样式等方法,也全部改为传递props属性的方式实现。

    三、其他优化

    地图实例缓存

    就我们使用的底层地图引擎来说,创建、销毁一个地图底座需要消耗大量的性能,而有时候这样的操作是可以避免的。有时候我们只是切换了一个页面路由,图面的上展示物并不需要有什么变化,但仍然会触发地图底座的销毁与重新生成。这个流程是多余的。

    为了优化这个问题,我们设计了可以容纳2个底座实例的缓存容器。每次在执行销毁地图的命令时,我们并不会真正的销毁它,而是把它隐藏掉并存入缓存中。下次需要创建实例时,直接在缓存中找到符合要求的实例拿来用。

    多实例环境隔离

    随着下游业务项目的功能迭代,产品提出了在同一个页面内展示多个SDK底座实例的要求。对此,我们对SDK进行了一系列的优化:

    • 改造消息队列控制器,原来的单线程模式已经不再适用,现在已可以支持实例隔离,不同实例之间独享事件队列和流程控制逻辑。

    • 优化图层与底座的从属判定机制,在多个底座之间存在父子关系的情况下,能够让图层在最合适的底座上展现。

    GL渲染Context没有正确GC回收导致的崩溃问题

    在为L7编写加载器时,遇到了内存泄露的问题:如果在项目中使用了L7相关图层,销毁时L7使用的WebGLRenderingContext资源不会正确释放,反复创建销毁几次后,浏览器会因为内部的renderingContext资源不足而渲染崩溃。

    分析L7源码后发现,L7为了实现与地图同步resize,在地图容器DOM上注册了一个resize事件,并把这个事件的处理函数绑定在了这个容器DOM的一个叫__resize__trigger__的属性上。

    如果开发者在项目中使用Vue作为前端框架,Vue的模板更新机制会引起DOM的重绘,在一次数据变更之后,它会把原来的容器DOM销毁,替换为一个新的。

    但由于注册的事件函数中含有DOM对象引用的缘故,虽然旧的DOM对象已经从DOM tree上移除,但并不会被GC回收,而是仍然被__resize__trigger__这个函数引用着,同时由于新生成的DOM不具有该属性,导致在L7引擎销毁的时候,由于L7找不到这个函数,resize事件解绑也会失败。在开发者触发多次切换引擎操作之后,有大量的未被实际引用的容器DOM无法被回收,而这些DOM中又都包含着webGL Canvas对象,导致浏览器的GLRendering资源不足的问题出现。

    解决方法:我们无法修改L7的源码,因此也无法更改它注册、解绑事件的逻辑。但我们可以通过在每次Vue刷新之前,对即将被移除的canvas的width和height设置为0,以此来直接释放renderingContext资源,实测有效。

    最佳解决方案:目前我们已经有自行实现的3D图形类,且也扩展了对Loca等其他可视化库的支持,可以摆脱对单一库的依赖,实现相同的能力。

    四、多维数据比对

    经过高德智慧交通大量的项目实践和数据比对,充分证明了地图空间可视化SDK开发的必要性,业务价值和技术价值都经历了项目的考验。以高德交通大脑和全境智能大屏的数据比对可以得到使用SDK之前和之后的数据比较:

    项目落地效果:

    使用SDK后的项目开发代码:

    <template>
      <!-- 地图底座 -->
      <CommonMap
        :center="center"
        :zoom="zoom"
        :city="fitViewCity"
        view-mode="3D"
        :map-style="mapStyle"
      >
        <!-- 场景1 -->
        <TrafficScene>
          <!-- 地图元素层 -->
          <TrafficPointLayer :list="trafficPointList" />
          <!-- 带有事件监听的地图元素层 -->
          <TrafficRoadMarkerLayer
            :list="trafficRoadList"
            @click="handleTrafficRoadMarkerClick"
          />
        </TrafficScene>
        <!-- 场景2 -->
        <PublishScene>
          <PublishMarkerLayer
            :list="publishList"
            @mouseover="handlePublishMouseOver"
            @mouseout="handlePublishMouseOut"
            @click="handlePublishClick"
          />
        </PublishScene>
        <!-- 可视化场景 -->
        <VisualizationScene use="amap-loca">
          <!-- 可视化数据层 -->
          <TrafficRoadLineLayer :list="trafficRoadList" />
        </VisualizationScene>
      </CommonMap>
    </template>
    

    五、展望

    经过高德智慧交通大量项目的实践,SDK的建设已经趋于成熟,其开发简单、稳定性高、性能好的特点可以很好地降低开发者使用高德开放平台JSAPI来开发地图空间可视化项目的成本。我们未来会以开发者官网的形式对外输出,更好地服务于开发者。

    招聘

    阿里巴巴高德地图技术中心长期招聘Java、Golang、Python、Android、iOS 前端资深工程师和技术专家,职位地点:北京。欢迎投递简历到gdtech@alibaba-inc.com,邮件主题为:姓名-应聘团队-应聘方向。

    展开全文
  • 空间信息空间数据

    千次阅读 2006-09-13 11:49:00
    1.对现实世界的地理认知地理环境是复杂多样的,要正确地认识、掌握与应用这种广泛而复杂的信息,需要进行去粗取精、去伪存真的加工,这就要求对地理环境进行科学的认识。对于复杂对象的认识是一个从感性认识到理性...
  • 雷达探测空间目标效能仿真系统设计与实现 张俊华 ,杨根 ,徐青  摘要:空间目标的日益增多给观测太空和发射卫星都带来了很大难度,因此有必要利用一定的手段对空间目标进行探测,而雷达探测具有独特的优势。以...
  • 康华:计算机硕士,主要从事Linux操作系统内核、Linux技术标准、计算机安全、软件测试等领域的研究与开发工作,现就职于信息产业部软件与集成电路促进中心所属的MII-HP Linux软件实验室。如果需要可以联系通过...
  • ASFF它学习了空间过滤冲突信息以抑制不一致性的方法,从而提高了特征的尺度不变性,并引入了几乎免费的推理开销。详细原理和工程代码可参考另外一篇博文:...
  • 虽然在使用SQL Server 2008的空间特性中不必要深入研究关于地理、数学、天文以及图形等学科,但如果你想在学习或者是正式的项目开发中能够很好的使用空间特性,适当和有效的掌握一些关于空间信息方面的理论概念可谓...
  • GIS空间索引

    万次阅读 2020-03-11 12:02:02
    在GIS系统中,空间索引技术就是通过更加有效的组织方式,抽取与空间定位相关的信息组成对原空间数据的索引,以较小的数据量管理大量数据的查询,从而提高空间查询的效率和空间定位的准确性。 常见的GIS空间索引 KD...
  • 数据结构课程设计——图书信息管理系统设计

    万次阅读 多人点赞 2015-12-25 15:38:08
    /* ...* All rights reserved. * 文件名称:zz.cbp * 作 者:毕梦楠 ...* 问题描述: 本项目模拟图书馆的信息管理业务,设计一个可以存书、借书、还书、浏览图书信息、浏览读者信息的图书信息管理软件系统。 */
  • 地理信息系统设计与开发读书笔记

    千次阅读 2013-05-08 18:31:19
    地理信息系统设计与开发 (第二版) 陈正江 张兴国 编著 科学出版社 2012 GIS开发百科知识 GIS产生于MIS之后体现了GIS较MIS更高级。 其主要原因如下: 1.GIS具有更为丰富也更为复杂的数据类型(空间数据...
  • 如果不设置主键并且没有唯一索引,InnoDB 会给我们自动生成一个隐藏主键列,浪费空间。 MyISAM or InnoDB 如果插入和删除并不频繁,手机号是提前载入的字典表,而不是用户主动注册而产生的,则 .
  • 文章目录第01章 【导论篇】地理空间分析方法在规划设计中的应用一、区域社会经济分析中的应用二、城市与景观分析中的应用三、生态环境分析中的应用四、水环境分析中的应用 第01章 【导论篇】地理空间分析方法在规划...
  •  ArcGIS的数据管理平台按照物理结构模式进行数据的管理,该种方式不便于对于地理空间数据的综合管理和维护,为便于用户对空间数据的有效管理和维护,特设计并开发了该空间数据管理平台。 空间数据管理平台采用树状...
  • 毕业设计开题报告----空间数据共享

    千次阅读 2012-02-18 21:32:53
    毕业设计开题报告           题 目 名 称 空间数据共享研究 院 (系) 计算机科学学院  专 业 班 级  学 生 姓 名  指 导 教 师  辅 导 教 师
  • 量化结果。使用LiDAR检测的3D BoundingBox被投影到RGB图像 1. 论文综述  3D点云中目标的精准检测是...为了将高度稀疏的LiDAR点云与区域候选网络连接在一起,很多研究学者将关注带你放在手工设计的特征表达,例如...
  • 数据结构课程设计报告-职工信息管理系统

    万次阅读 多人点赞 2016-02-24 13:34:39
    “数据结构”课程设计报告 职工信息管理系统 课程设计任务与要求: [问题描述] 每个员工的信息包括:编号、姓名、性别、出生年月、学历、职务、电话、住址等。系统能够完成员工信息的查询、更新、插入、删除、排序等...
  • 超图信息总工程师石伟伟博士在研讨会上发表了《三维GIS技术进展及其在国土空间基础信息平台中的应用》报告,深度解析了超图新一代三维GIS技术的最新进展,以及该技术在自然资源管理中的初步应用。 石伟伟博士在报告...
  • 但是我却抓不到QQ程序的包就很尴尬,我觉得应该是QQ程序之间的通讯协议大部分不是HTTP或者HTTPS,而我用的是Fillder所以找不到包,但是不影响我完成需求的进度,我找了QQ的大部分相关应用,最后在QQ空间找到了能满足...
  • 网络空间安全网络安全(Network Security)指利用网络技术、管理和控制等措施,保证网络系统和信息的保密性、完整性、可用性、可控性和可审查性受到保护。即保证网络系统的硬件、...
  • 地图空间认知论

    千次阅读 2019-03-11 22:51:40
    感觉要理解地图空间认知理论,还得从地图与空间认知的关系说起 一、地图与空间认知 ...所以,空间认知当然就是指空间信息的加工。   其次,地图是制图者空间认知的结果,同时又是读图者空间认知的手段...
  • Linux用户空间与内核空间

    千次阅读 2016-04-25 10:07:27
     Linux 简化了分段机制,使得虚拟地址(逻辑地址)与线性地址总是一致,因此,Linux的虚拟地址空间也为0~4G(2^32)。  Linux内核将这4G字节的空间分为两部分。将最高的 1G字节(从虚拟地址0xC0000000到0...
  • 为了合理管理业务数据、索引数据、临时信息以及回退信息,需要创建不同类型的表空间,为了便于实现数据的分区管理。在创建各个表空间的同时,需要合理的规划表空间的存储设置。 一、表空间介绍 表空间的类型: ...
  • 本研究借鉴国内外应急通信发展的经验,结合我国应急通信的实际需求,希望通过对应急通信平台、系留低空气球和基于粒计算的空间优化分配的研究,能够对空基通信信息平台提供积极的参考意见。   1.2 升空超...
  • 到底什么是国土空间规划?

    千次阅读 多人点赞 2020-11-30 21:16:34
    文章目录一、什么是国土空间规划?二、为什么要建立国土空间规划体系?三、国土空间规划的主要目标是什么?四、国土空间规划的编制要求是什么?五、国土空间规划体系由哪几部分组成?六、国土空间规划分哪几个层级?七、...
  • 信息可视化包括了信息图形、知识、科学、数据等的可视化表现形式,以及视觉可视化设计方面的进步与发展。地图、表格、图形,甚至包括文本在内,都是信息的表现形式,无论它是动态的或是静态的,都可以让我们从中了解...
  • Glusterfs全局统一命名空间

    万次阅读 热门讨论 2011-12-02 21:20:19
    Glusterfs采用了全局统一命名空间设计,将磁盘和内存资源聚集成一个单一的虚拟存储池进行管理,并在此命名空间中使用NFS/CIFS等标准协议来访问应用数据。与其他分布式文件系统有所不同的是,GlusterFS中没有专用的元...
  • 一、背景介绍基础集成平台是信息系统的基础设施环境,为各应用系统提供公共基础设施(如ESB、消息中间件等),将各系统的通用基础服务功能(如用户管理、授权管理、配置管理等)从业务系统剥离出来,使得业务系统...
  • 欧式空间到双曲空间

    千次阅读 2019-06-11 21:53:00
    目前为止,大多数表示学习方法停留在了欧式空间(Euclidean Space),但事实上除了简单的欧式空间,还存在很多其他的非欧式空间可以用来构建AI模型,并且我们也发现了近两年越来越多的学者也开始在这个领域做出了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 746,323
精华内容 298,529
关键字:

信息空间设计