public void CanConvertEnvelopeToFromShapeMsg()
        {
            IEnvelope env =
                GeometryFactory.CreateEnvelope(2600000.1234, 1200000.987654, 2601000.12,
                                               1201000.98);

            EnvelopeMsg envelopeMsg = ProtobufGeometryUtils.ToEnvelopeMsg(env);

            IEnvelope rehydrated = ProtobufGeometryUtils.FromEnvelopeMsg(envelopeMsg);

            Assert.IsTrue(GeometryUtils.AreEqual(env, rehydrated));
        }
Пример #2
0
        private static bool UpdateParallelProgress(VerificationProgressMsg currentProgress,
                                                   VerificationProgressEventArgs e)
        {
            SetOverallStep(currentProgress, e);

            if (e.CurrentBox != null)
            {
                currentProgress.CurrentBox =
                    ProtobufGeometryUtils.ToEnvelopeMsg(e.CurrentBox);
            }

            return(true);
        }
Пример #3
0
        private static bool UpdateContainerProgress(VerificationProgressMsg currentProgress,
                                                    VerificationProgressEventArgs e)
        {
            VerificationProgressStep newProgressStep = ToVerificationStep(e.ProgressStep);

            switch (newProgressStep)
            {
            case VerificationProgressStep.TileProcessing:
                // New tile:
                SetOverallStep(currentProgress, e);
                ResetDetailStep(currentProgress);
                currentProgress.CurrentBox =
                    ProtobufGeometryUtils.ToEnvelopeMsg(e.CurrentBox);
                break;

            case VerificationProgressStep.DataLoading:
                //SetOverallStep(currentProgress, e);
                SetDetailStep(currentProgress, e);
                currentProgress.ProcessingStepMessage = "Loading data";
                currentProgress.Message = ((IDataset)e.Tag).Name;
                break;

            case VerificationProgressStep.Testing:

                if (currentProgress.ProgressStep != (int)newProgressStep)
                {
                    // First time
                    ResetDetailStep(currentProgress);
                    currentProgress.ProcessingStepMessage = "Testing rows";
                }

                double relativeProgress =
                    ((double)e.Current - currentProgress.DetailedProgressCurrentStep) /
                    e.Total;

                if (relativeProgress > 0.05)
                {
                    SetDetailStep(currentProgress, e);
                    var testRow = e.Tag as TestRow;
                    currentProgress.Message = testRow?.DataReference.DatasetName;
                }
                else
                {
                    return(false);
                }

                break;

            case VerificationProgressStep.TileCompleting:
                SetDetailStep(currentProgress, e);
                currentProgress.ProcessingStepMessage = "Completing tile";
                currentProgress.Message = ((QualityCondition)e.Tag).Name;
                break;
            }

            currentProgress.ProgressStep = (int)newProgressStep;

            string message = e.Tag as string;

            CallbackUtils.DoWithNonNull(message, s => currentProgress.Message = s);
            return(true);
        }
Пример #4
0
        public void CanReshapeAlongFilteredLinesByExtent()
        {
            GetOverlappingPolygons(out GdbFeature sourceFeature, out GdbFeature targetFeature);

            CalculateReshapeLinesRequest calculationRequest =
                CreateCalculateReshapeLinesRequest(sourceFeature, targetFeature);

            IEnvelope visibleExtent = sourceFeature.Shape.Envelope;

            visibleExtent.Expand(10, 10, false);
            calculationRequest.FilterOptions = new ReshapeLineFilterOptionsMsg();
            calculationRequest.FilterOptions.ClipLinesOnVisibleExtent = true;
            calculationRequest.FilterOptions.VisibleExtents.Add(
                ProtobufGeometryUtils.ToEnvelopeMsg(visibleExtent));

            CalculateReshapeLinesResponse calculateResponse =
                ChangeAlongServiceUtils.CalculateReshapeLines(calculationRequest, null);

            Assert.AreEqual((int)ReshapeAlongCurveUsability.CanReshape,
                            calculateResponse.ReshapeLinesUsability);
            // 1 inside-line and 2 extent-intersecting dangles to the outside within the extent.
            AssertReshapeLineCount(calculateResponse.ReshapeLines, 3, 1);

            int insideLineIndex =
                GetInsideReshapeLineIndex(calculateResponse.ReshapeLines, sourceFeature.Shape);

            IPolyline insideLine =
                (IPolyline)ProtobufGeometryUtils.FromShapeMsg(
                    calculateResponse.ReshapeLines[insideLineIndex].Path);

            Assert.NotNull(insideLine);
            Assert.AreEqual(1000, insideLine.Length);

            //
            // Reshape the non-default side (should be possible):
            //
            ApplyReshapeLinesRequest applyRequest = new ApplyReshapeLinesRequest();

            applyRequest.ReshapeLines.Add(calculateResponse.ReshapeLines[insideLineIndex]);
            applyRequest.CalculationRequest       = calculationRequest;
            applyRequest.InsertVerticesInTarget   = false;
            applyRequest.UseNonDefaultReshapeSide = true;

            ApplyReshapeLinesResponse applyResponse =
                ChangeAlongServiceUtils.ApplyReshapeLines(applyRequest, null);

            Assert.AreEqual(1, applyResponse.ResultFeatures.Count);

            GdbObjectMsg updatedFeatureMsg = applyResponse.ResultFeatures[0].Update;

            GdbObjectReference resultFeatureObjRef = new GdbObjectReference(
                updatedFeatureMsg.ClassHandle, updatedFeatureMsg.ObjectId);

            Assert.AreEqual(new GdbObjectReference(sourceFeature), resultFeatureObjRef);

            IGeometry updatedGeometry = ProtobufGeometryUtils.FromShapeMsg(updatedFeatureMsg.Shape);

            Assert.IsNotNull(updatedGeometry);
            Assert.AreEqual(1000 * 1000 * 1 / 4, ((IArea)updatedGeometry).Area);

            // Check the new reshape line - there should be 2 non-reshapable dangles
            AssertReshapeLineCount(applyResponse.NewReshapeLines, 2, 0);
            Assert.AreEqual(ReshapeAlongCurveUsability.InsufficientOrAmbiguousReshapeCurves,
                            (ReshapeAlongCurveUsability)applyResponse.ReshapeLinesUsability);
        }