里程定点
里程定点是根据指定路由上的 M 值来定位点。应用情景与点定里程相反,如知道某事故距离某路口位置,需要确定其相对精确的坐标的时候使用。
下面以长春数据为例,确定一条发生交通事故的路上(路由 ID 为1690的路由)与路口距离为10km的事故点,里程定点的接口使用方法:
地图加载完成后进行里程定点分析服务,首先根据 RouteID 获得路由对象,路由对象查询成功之后才能进行后续的里程定点操作。
// 通过SQL查询建立路由
var queryBySQLService = L.supermap.queryService(baseUrl);
// 设置SQL查询参数
queryBySQLParams = new SuperMap.QueryBySQLParameters({
queryParams: [
new SuperMap.FilterParameter({
name: "RouteDT_road@Changchun",
attributeFilter: "RouteID=1690"
})]
});
// 创建SQL查询
queryBySQLService.queryBySQL(queryBySQLParams, function (serviceResult) {
// 将形成路由的点提出来,为了构造下面里程定点服务sourceRoute属性的routeLine
var pointsList = [];
var routeObj = serviceResult.result.recordsets[0].features.features[0].geometry.coordinates[0];
for (var i = 0; i < routeObj.length; i++) {
pointsList.push([routeObj[i][1], routeObj[i][0], routeObj[i][2]])
}
var routeLine = L.polyline(pointsList);
// 创建里程定点服务实例
var serviceUrl ="http://support.sueprmap.com.cn:8090/iserver/services/spatialanalyst-changchun/restjsr/spatialanalyst";
var routeLocatorService = L.supermap.spatialAnalystService(serviceUrl);
// 里程定点参数设置
var routeLocatorParams_point = new SuperMap.RouteLocatorParameters({
"sourceRoute": routeLine, // 路由对象
"type": "POINT", // 类型,点或线
"measure": 200, // 里程值
"offset": 0, // 定位点偏移量
"isIgnoreGap": true // 是否忽略子对象之间的距离
});
// 向服务器发送请求进行里程定点服务分析,并将返回的结果进行处理展现在客户端上
routeLocatorService.routeLocate(routeLocatorParams_point, function (serviceResult) {
// 获取服务端返回的数据
var result = routeCaculateServiceResult.result;
});
});