Beispiel #1
0
        /// <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
            }
        }
Beispiel #2
0
        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);
        }