接前一篇(2),还有个要求就是鼠标必须把起始点和和结束点放到道路上,或是是十分接近道路的地方,算是个缺憾吧
//求最短路径,得到路径长度,经过的道路的名称 function TfrmMapX.GetMinRoute(var RouteLength: double; var RoadNames: string): boolean; //求最短路径 var routefea: CMapXFeature; lyr: CMapXLayer; begin Result := False;
//验证 if uMrStartPt.RoadID <= 0 then begin ShowMessage('起始点没有在主要道路上'); Exit; end; if uMrEndPt.RoadID <= 0 then begin ShowMessage('结束点没有在主要道路上'); Exit; end;
if uSeekRouteObj = NIL then uSeekRouteObj := TSeekRoute.Create(uMrConn, Map1, uMrCroScope); routefea := uSeekRouteObj.GetOptiRoute(uMrStartPt, uMrEndPt, RoadNames);
if routefea <> NIL then begin routefea.Style := uMrRouteStyle; lyr := GetMarkLayer(uMrLyrNames[1]); lyr.AddFeature(routefea, EmptyParam); RouteLength := routefea.Length; routefea := NIL; Result := True; end; end;
|