交通网络分析性能再升级,SuperMap iServer新增开启SSC分析模型

本文介绍了SuperMapiServer11i中采用的SSC分析模型,基于ContractionHierarchies算法,显著提高大规模交通网络的最佳路径分析速度。通过步骤说明了如何开启SSC,以及与传统分析方法的性能对比,显示开启SSC后性能提升高达20倍以上。

作者:张永利

导语

SSC分析模型,全名SuperMap Short Cut,底层采用Contraction Hierarchies(简称CH)算法,该算法旨在通过对图形进行预处理和优化来降低最佳路径分析的时间复杂度。SuperMap iServer 11i(2023)(以下简称iServer)对交通网络分析服务的最佳路径分析,支持开启 SSC 分析模型,可大幅提升分析性能。本文将从以下3个方面进行介绍:
● 背景
● iServer如何开启SSC分析模型
● 开启SSC与传统分析性能对比

一、背景

对于一般系统中路径查找需求,iServer最佳路径分析速度通常可满足大多数应用场景的需求。
然而,当数据量大且用户量大时,最佳路径分析性能可能会受到影响,因此 iServer 11i(2023)对交通网络分析服务的最佳路径分析,支持开启 SSC 分析模型,可大幅提升分析性能。

1.1 为什么使用SSC分析模型

SSC分析模型,全名SuperMap Short Cut,底层采用Contraction Hierarchies(简称CH)算法,CH 算法的主要思想是在图形中进行一系列的"缩减"操作,以去除一些边,从而创建一个分层结构,其中高级别的图层包含更少的节点和边,而低级别的图层则保留更多的细节。

CH算法在大型图形中的最佳路径分析方面表现出色,它通过在预处理阶段进行一系列计算工作,显著提高了后续分析的速度。适用于处理大规模网络、高并发环境以及需要频繁进行最佳路径分析的应用。

1.2 SSC分析模型优缺点

优点

  1. 分析速度快。通过预处理生成一个层次结构文件(*.ssc),该文件可以为节点分配不同的层次,这使得最佳路径分析得到加速。
  2. 产品初始化速度快,可以根据使用场景,灵活配置按需初始化分析对象。

缺点

  1. 提前生成,可通过SuperMap iDesktopX桌面生成SSC文件或通过iServer交通网络分析配置自动生成SSC文件。
  2. 适用于静态或变化较少的数据。
  3. SSC分析模型目前只适用于交通网络分析最佳路径分析功能。

1.3 SSC分析模型适用场景

  1. 路网数据规模大,例如包括整个省份或全国的道路网络数据。
  2. 并发量大的、使用频繁的最佳路径分析应用。
  3. 数据变动幅度较小。

二、iServer如何开启SSC分析模型

iServer开启SSC分析模型有3步:
1.网络数据集准备
2.SuperMap iDesktopX制作SSC分析模型
3.SuperMap iServer 发布网络分析服务

2.1 网络数据集准备

1)在SuperMap iDesktopX 11i(2023)中,打开需要生成网络数据集的线数据集,新增道路等级字段,如下图“lv”字段。

在这里插入图片描述

2)按照道路等级,将该字段进行标识,取值范围1-3,其中 1的道路等级最低,一般为乡村道路,3的道路等级最高,一般为高速路等。

在这里插入图片描述

3)在交通分析选项卡中,通过拓扑构网,构建二维网络数据集。

在这里插入图片描述

4)最终生成二维网络数据集。

在这里插入图片描述

2.2 SuperMap iDesktopX制作SSC分析模型

1)在SuperMap iDesktopX 11i(2023)中,右上角搜索“SSC”。

在这里插入图片描述

2)点击“构建SSC文件”,依次选择“数据源”、“数据集”、“道路等级”、“文件路径”(其他参数可按需配置)点击执行按钮,即可生成*.scc文件。

在这里插入图片描述

2.3 SuperMap iServer 发布网络服务

1)进入iServer服务管理页面,点击快速创建服务。

在这里插入图片描述

2)选择文件型工作空间。

在这里插入图片描述

3)选择工作空间存储路径。

在这里插入图片描述

4)勾选交通网络分析服务。

在这里插入图片描述

5)填写相关信息,并勾选“SSC分析模型配置”,“是否启用SSC分析模型”,“是否自动生成SSC文件”、选择“SSC文件路径”、选择“道路等级字段”,点击发布。

在这里插入图片描述
这里要注意地是:
1.如果已经执行过第二步(SuperMap iDesktopX制作SSC分析模型),SSC文件选择第二步生成好的*.ssc文件即可。
2.如果没有执行过第二步,则iServer将会自动生成与“SSC 文件路径” 参数同名、同路径的 SSC文件。

6)发布成功后,可以进入到服务中,使用最近路径分析进行验证。

在这里插入图片描述

三、开启SSC与最佳分析性能对比

测试环境CPU:Intel® Core™ i7-10875H 内存:16G 浏览器:Chrome 113
测试数据全国路网(360万条记录)、udbx本地存储
测试软件supermap-iserver-1111-22418-6909-windows-x64-deploy、apache-jmeter-5.5
测试场景单台机器,全国范围内随机2点最佳路径分析。5并发、10并发、50并发、100并发对比最佳路径分析和开启SSC最佳路径分析

在这里插入图片描述

全国路网并发数最佳路径分析最佳路径分析(开启SSC)性能提升百分比
360万条线数据51.6s0.062s2480%
360万条线数据205.8s0.22s2536%
360万条线数据5014.3s0.56s2454%
360万条线数据10023.7s1.04s2179%

总结:

全国路网,SuperMap iServer开启SSC后的最佳路径分析,相比常规最佳路径分析性能提升20倍以上。

# RoutingKit [![Build Status](https://travis-ci.org/RoutingKit/RoutingKit.svg?branch=master)](https://travis-ci.org/RoutingKit/RoutingKit) RoutingKit is a C++ library that provides advanced route planning functionality. It was developed at [KIT](https://www.kit.edu) in the [group of Prof. Dorothea Wagner](https://i11www.iti.kit.edu/). The most prominent component is an index-based data structure called (Customizable) Contraction Hierarchy, that allows to answer shortest path queries within milliseconds or even less on data sets of continental size while keeping the arc weights flexible. Such running times cannot be achieved without indices. One of the main design goals of RoutingKit is to make recent research results easily accessible to people developing route planning applications. A key element is an interface that is a good compromise between usability and running time performance. For example the following code snippet is enough to build and query a basic index given an [OSM](https://www.openstreetmap.org) PBF data export. ```cpp #include <routingkit/osm_simple.h> #include <routingkit/contraction_hierarchy.h> #include <routingkit/inverse_vector.h> #include <routingkit/timer.h> #include <routingkit/geo_position_to_node.h> #include <iostream> using namespace RoutingKit; using namespace std; int main(){ // Load a car routing graph from OpenStreetMap-based data auto graph = simple_load_osm_car_routing_graph_from_pbf("file.pbf"); auto tail = invert_inverse_vector(graph.first_out); // Build the shortest path index auto ch = ContractionHierarchy::build( graph.node_count(), tail, graph.head, graph.travel_time ); // Build the index to quickly map latitudes and longitudes GeoPositionToNode map_geo_position(graph.latitude, graph.longitude); // Besides the CH itself we need a query object. ContractionHierarchyQuery ch_query(ch); // Use the query object to answer queries from stdin to stdout float from_latitude, from_longitude, to_latitude, to
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值