里程定点

里程定点是根据指定路由上的 M 值来定位点。应用情景与点定里程相反,如知道某事故距离某路口位置,需要确定其相对精确的坐标的时候使用。

下面以长春数据为例,确定一条发生交通事故的路上(路由ID为1690的路由)与路口距离为10km的事故点,里程定点的接口使用方法:

地图加载完成后进行里程定点分析服务,首先根据 RouteID 获得路由对象,路由对象查询成功之后才能进行后续的里程定点操作。

// 通过SQL查询的方法建立路由
var queryBySQLService = new ol.supermap.QueryService(baseUrl);
// SQL查询参数设置
var queryBySQLParams = new SuperMap.QueryBySQLParameters({
    queryParams: [
        new SuperMap.FilterParameter({
            name: "[email protected]",
            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]);
    // 创建里程定点服务实例
    var routeLocatorService = new ol.supermap.SpatialAnalystService(serviceUrl);
    // 设置里程定点服务所需参数
    var routeLocatorParameters_point = new SuperMap.RouteLocatorParameters({
        "sourceRoute": routeLine,
        "type": "POINT",
        "measure": 800,
        "offset": 0,
        "isIgnoreGap": true
    });
    // 向服务端发送请求并获取数据
    routeLocatorService.routeLocate(routeLocatorParameters_point, function (routeLocateServiceResult) {
        // 获取服务端返回的数据
        var result = routeCaculateServiceResult.result;
    }
});

查看完整示例代码

results matching ""

    No results matching ""