点定里程
点定里程是计算路由上某点到起始点的 M 值,实际应用情景例如知道某事故发生的位置确定该点位于某路口距离。
下面以长春数据为例,计算一条路上(路由ID为1690的路由)发生交通事故的地点到该条路路口的距离。
点定里程接口使用方法如下:
地图加载完成后进行点定里程分析服务,首先根据 RouteID 获得路由对象,路由对象查询成功之后才能进行后续的点定里程操作。
// 通过SQL查询的方法建立路由,并添加到地图上
var queryBySQLService = new ol.supermap.QueryService(baseUrl);
// SQL查询参数设置
var queryBySQLParams = new SuperMap.QueryBySQLParameters({
queryParams: [
new SuperMap.FilterParameter({
name: "RouteDT_road@Changchun",
attributeFilter: "RouteID=1690"
})
]
});
// 创建SQL查询
queryBySQLService.queryBySQL(queryBySQLParams, function (SQLQueryServiceResult) {
// 获取SQL查询结果
var queryBySQLResult = SQLQueryServiceResult.result.recordsets[0].features;
// 将形成路由的点提出来,为了构造下面点定里程服务sourceRoute
var pointsList = [];
var routeObj = queryBySQLResult.features[0].geometry.coordinates[0];
for (var i = 0; i < routeObj.length; i++) {
pointsList.push([routeObj[i][0], routeObj[i][1],routeObj[i][2]])
}
var routeLine = new ol.geom.LineString([pointsList]);
// 在组成路由的点中选取一个查询点(数组中第8个点),并添加到地图上
var point = new ol.geom.Point([routeObj[7][0], routeObj[7][1]]);
// 点定里程服务
var routeCalculateMeasureService = new ol.supermap.SpatialAnalystService(serviceUrl);
var routeCalculateMeasureParameters = new SuperMap.RouteCalculateMeasureParameters({
"sourceRoute": routeLine, // 必选,路由类型
"point": point, // 必选
"tolerance": 10,
"isIgnoreGap": false
});
// 向服务端发送请求并获取数据
routeCalculateMeasureService.routeCalculateMeasure(routeCalculateMeasureParameters, function (routeCaculateServiceResult) {
// 获取服务端返回的数据
var result = routeCaculateServiceResult.result;
});
});