/// <summary> /// Calls raptor to get project extents /// </summary> protected override async Task <ContractExecutionResult> ProcessAsyncEx <T>(T item) { try { var request = CastRequestObjectTo <ExtentRequest>(item); bool success; BoundingBox3DGrid bbExtents = null; #if RAPTOR if (UseTRexGateway("ENABLE_TREX_GATEWAY_TILES")) { #endif var siteModelId = request.ProjectUid.ToString(); bbExtents = await trexCompactionDataProxy.SendDataGetRequest <BoundingBox3DGrid>(siteModelId, $"/sitemodels/{siteModelId}/extents", customHeaders); success = bbExtents != null; #if RAPTOR } else { success = raptorClient.GetDataModelExtents(request.ProjectId ?? VelociraptorConstants.NO_PROJECT_ID, RaptorConverters.convertSurveyedSurfaceExlusionList(request.excludedSurveyedSurfaceIds), out var extents); bbExtents = RaptorConverters.ConvertExtents(extents); } #endif if (success) { if (bbExtents.ValidExtents) { return(ProjectExtentsResult.CreateProjectExtentsResult(bbExtents)); } } throw CreateServiceException <ProjectExtentsSubmitter>(); } finally { ContractExecutionStates.ClearDynamic(); // clear memory } }
private async Task <ProjectExtentsResult> FormatProjectExtentsResult( Guid projectUid, CoordinateConversionResult coordinateConversionResult) { Log.LogInformation($"{nameof(FormatProjectExtentsResult)}: {coordinateConversionResult}"); var project = await((RaptorPrincipal)User).GetProject(projectUid); var returnResult = new ProjectExtentsResult { minLat = coordinateConversionResult.ConversionCoordinates[0].Y, minLng = coordinateConversionResult.ConversionCoordinates[0].X, maxLat = coordinateConversionResult.ConversionCoordinates[1].Y, maxLng = coordinateConversionResult.ConversionCoordinates[1].X }; //In case we have rogue tag files distorting the extents, restrict to project boundary var projectPoints = CommonConverters.GeometryToPoints(project.ProjectGeofenceWKT).ToList(); var projMinLat = projectPoints.Min(p => p.Lat); var projMinLng = projectPoints.Min(p => p.Lon); var projMaxLat = projectPoints.Max(p => p.Lat); var projMaxLng = projectPoints.Max(p => p.Lon); if (returnResult.minLat < projMinLat || returnResult.minLat > projMaxLat || returnResult.maxLat < projMinLat || returnResult.maxLat > projMaxLat || returnResult.minLng < projMinLng || returnResult.minLng > projMaxLng || returnResult.maxLng < projMinLng || returnResult.maxLng > projMaxLng) { returnResult.minLat = projMinLat; returnResult.minLng = projMinLng; returnResult.maxLat = projMaxLat; returnResult.maxLng = projMaxLng; } //Convert to degrees to return returnResult.minLat = returnResult.minLat.LatRadiansToDegrees(); returnResult.minLng = returnResult.minLng.LonRadiansToDegrees(); returnResult.maxLat = returnResult.maxLat.LatRadiansToDegrees(); returnResult.maxLng = returnResult.maxLng.LonRadiansToDegrees(); Log.LogInformation("GetProjectExtents result: " + JsonConvert.SerializeObject(returnResult)); return(returnResult); }