private async void SolveRoutesClick(object sender, EventArgs e) { // Holds locations of hospitals around San Diego. List <Facility> facilities = new List <Facility>(); // Holds locations of hospitals around San Diego. List <Incident> incidents = new List <Incident>(); // Create query parameters to select all features. QueryParameters queryParams = new QueryParameters() { WhereClause = "1=1" }; // Query all features in the facility table. FeatureQueryResult facilityResult = await _facilityTable.QueryFeaturesAsync(queryParams); // Add all of the query results to facilities as new Facility objects. facilities.AddRange(facilityResult.ToList().Select(feature => new Facility((MapPoint)feature.Geometry))); // Query all features in the incident table. FeatureQueryResult incidentResult = await _incidentTable.QueryFeaturesAsync(queryParams); // Add all of the query results to facilities as new Incident objects. incidents.AddRange(incidentResult.ToList().Select(feature => new Incident((MapPoint)feature.Geometry))); // Set facilities and incident in parameters. ClosestFacilityParameters closestFacilityParameters = await _task.CreateDefaultParametersAsync(); closestFacilityParameters.SetFacilities(facilities); closestFacilityParameters.SetIncidents(incidents); try { // Use the task to solve for the closest facility. ClosestFacilityResult result = await _task.SolveClosestFacilityAsync(closestFacilityParameters); for (int i = 0; i < incidents.Count; i++) { // Get the index of the closest facility to incident. (i) is the index of the incident, [0] is the index of the closest facility. int closestFacility = result.GetRankedFacilityIndexes(i)[0]; // Get the route to the closest facility. ClosestFacilityRoute route = result.GetRoute(closestFacility, i); // Display the route on the graphics overlay. _myMapView.GraphicsOverlays[0].Graphics.Add(new Graphic(route.RouteGeometry, _routeSymbols[i % _routeSymbols.Count])); } // Disable the solve button. _solveRoutesButton.Enabled = false; // Enable the reset button. _resetButton.Enabled = true; } catch (Esri.ArcGISRuntime.Http.ArcGISWebException exception) { CreateErrorDialog("An ArcGIS web exception occurred.\n" + exception.Message); } }
private async void closestFacility() { // クエリの実行 ClosestFacilityResult solveResult = await closestFacilityTask.SolveClosestFacilityAsync(closestFacilityParameters); var routePolylineSymbol = new SimpleLineSymbol(SimpleLineSymbolStyle.Solid, Color.FromArgb(100, 89, 95, 35), 4); // 解析の実行 for (int incidentIndex = 0; incidentIndex < solveResult.Incidents.Count; incidentIndex++) { IReadOnlyList <int> rankedFacilitiesIndexes = solveResult.GetRankedFacilityIndexes(incidentIndex); foreach (var facilityIndex in rankedFacilitiesIndexes) { ClosestFacilityRoute closestFacilityRoute = solveResult.GetRoute(facilityIndex, incidentIndex); Graphic RouteGraphics = new Graphic(closestFacilityRoute.RouteGeometry, routePolylineSymbol); // 結果を表示 myGraphicsOverlay.Graphics.Add(RouteGraphics); } } }
private async void PopulateParametersAndSolveRouteAsync() { try { // Set facilities and incident in parameters. ClosestFacilityParameters closestFacilityParameters = await _task.CreateDefaultParametersAsync(); closestFacilityParameters.SetFacilities(_facilities); closestFacilityParameters.SetIncidents(new List <Incident> { new Incident(_incidentPoint) }); // Use the task to solve for the closest facility. ClosestFacilityResult result = await _task.SolveClosestFacilityAsync(closestFacilityParameters); // Get the index of the closest facility to incident. (0) is the index of the incident, [0] is the index of the closest facility. int closestFacility = result.GetRankedFacilityIndexes(0)[0]; // Get route from closest facility to the incident and display to mapview. ClosestFacilityRoute route = result.GetRoute(closestFacility, 0); // Add graphics for the incident and route. _incidentGraphicsOverlay.Graphics.Add(new Graphic(_incidentPoint, _incidentSymbol)); _incidentGraphicsOverlay.Graphics.Add(new Graphic(route.RouteGeometry, _routeSymbol)); } catch (Esri.ArcGISRuntime.Http.ArcGISWebException exception) { if (exception.Message.Equals("Unable to complete operation.")) { CreateErrorDialog("Incident not within San Diego area!"); } else { CreateErrorDialog("An ArcGIS web exception occurred. \n" + exception.Message); } } }