コード例 #1
0
		public PolynomialImageTransformer(RegistrationDefinition registration, InterpolationMode interpolationMode, int polynomialDegree) : base(registration, interpolationMode)
		{
			List<PositionAssociation> associationList = registration.GetAssociationList();
			TransformationStyle arg_15_0 = registration.warpStyle;
			int num = associationList.Count;
			if (num == 2)
			{
				num++;
			}
			JamaMatrix jamaMatrix = new JamaMatrix(num, 2);
			JamaMatrix jamaMatrix2 = new JamaMatrix(num, 2);
			for (int i = 0; i < num; i++)
			{
				LatLon latLon = (i == associationList.Count) ? PolynomialImageTransformer.getThirdPosition(associationList[0].sourcePosition.pinPosition.latlon, associationList[1].sourcePosition.pinPosition.latlon, true) : associationList[i].sourcePosition.pinPosition.latlon;
				jamaMatrix.SetElement(i, 0, latLon.lon);
				jamaMatrix.SetElement(i, 1, latLon.lat);
				LatLon latLon2 = (i == associationList.Count) ? PolynomialImageTransformer.getThirdPosition(MercatorCoordinateSystem.LatLonToMercator(associationList[0].globalPosition.pinPosition.latlon), MercatorCoordinateSystem.LatLonToMercator(associationList[1].globalPosition.pinPosition.latlon), false) : MercatorCoordinateSystem.LatLonToMercator(associationList[i].globalPosition.pinPosition.latlon);
				jamaMatrix2.SetElement(i, 0, latLon2.lon);
				jamaMatrix2.SetElement(i, 1, latLon2.lat);
			}
			this.destMercatorToSourceTransformer = PolynomialImageTransformer.getPolyPointTransformer(jamaMatrix, jamaMatrix2, polynomialDegree);
			this.sourceToDestMercatorTransformer_approximate = PolynomialImageTransformer.getApproximateInverterPolyPointTransformer(jamaMatrix, jamaMatrix2, polynomialDegree);
			DownhillInverterPointTransformer flakyPointTransformer = new DownhillInverterPointTransformer(this.destMercatorToSourceTransformer, this.sourceToDestMercatorTransformer_approximate);
			IPointTransformer sourceToMercator = new RobustPointTransformer(flakyPointTransformer, this.sourceToDestMercatorTransformer_approximate);
			this.destLatLonToSourceTransformer = new LatLonToSourceTransform(this.destMercatorToSourceTransformer);
			this.sourceToDestLatLonTransformer = new SourceToLatLonTransform(sourceToMercator);
		}
コード例 #2
0
        public RegistrationDefinition getWarpedRegistration()
        {
            IPointTransformer          pointTransformer   = this.getSourceToDestLatLonTransformer();
            List <PositionAssociation> associationList    = this.registration.GetAssociationList();
            List <IImageTransformer.QualitySortPair> list = new List <IImageTransformer.QualitySortPair>();

            for (int i = 0; i < associationList.Count; i++)
            {
                PositionAssociation positionAssociation = associationList[i];
                bool   invertError;
                LatLon p = pointTransformer.getTransformedPoint(positionAssociation.sourcePosition.pinPosition.latlon, out invertError);
                PositionAssociation positionAssociation2 = new PositionAssociation(positionAssociation.associationName, positionAssociation.imagePosition.pinPosition, new LatLonZoom(p.lat, p.lon, positionAssociation.sourcePosition.pinPosition.zoom), positionAssociation.globalPosition.pinPosition, new DirtyEvent());
                positionAssociation2.sourcePosition.invertError = invertError;
                positionAssociation2.sourcePosition.SetErrorPosition(DisplayablePosition.ErrorMarker.AsContributor, positionAssociation.globalPosition.pinPosition.latlon);
                positionAssociation2.pinId = positionAssociation.pinId;
                double num = LatLon.DistanceInMeters(p, positionAssociation.globalPosition.pinPosition.latlon);
                positionAssociation2.qualityMessage = LatLon.PrettyDistance(num);
                list.Add(new IImageTransformer.QualitySortPair(positionAssociation2, num));
            }
            list.Sort();
            RegistrationDefinition registrationDefinition = new RegistrationDefinition(new DirtyEvent());

            registrationDefinition.warpStyle = this.registration.warpStyle;
            foreach (IImageTransformer.QualitySortPair current in list)
            {
                registrationDefinition.AddAssociation(current.assoc);
            }
            registrationDefinition.isLocked = true;
            return(registrationDefinition);
        }
コード例 #3
0
        public PolynomialImageTransformer(RegistrationDefinition registration, InterpolationMode interpolationMode, int polynomialDegree) : base(registration, interpolationMode)
        {
            List <PositionAssociation> associationList = registration.GetAssociationList();
            TransformationStyle        arg_15_0        = registration.warpStyle;
            int num = associationList.Count;

            if (num == 2)
            {
                num++;
            }
            JamaMatrix jamaMatrix  = new JamaMatrix(num, 2);
            JamaMatrix jamaMatrix2 = new JamaMatrix(num, 2);

            for (int i = 0; i < num; i++)
            {
                LatLon latLon = (i == associationList.Count) ? PolynomialImageTransformer.getThirdPosition(associationList[0].sourcePosition.pinPosition.latlon, associationList[1].sourcePosition.pinPosition.latlon, true) : associationList[i].sourcePosition.pinPosition.latlon;
                jamaMatrix.SetElement(i, 0, latLon.lon);
                jamaMatrix.SetElement(i, 1, latLon.lat);
                LatLon latLon2 = (i == associationList.Count) ? PolynomialImageTransformer.getThirdPosition(MercatorCoordinateSystem.LatLonToMercator(associationList[0].globalPosition.pinPosition.latlon), MercatorCoordinateSystem.LatLonToMercator(associationList[1].globalPosition.pinPosition.latlon), false) : MercatorCoordinateSystem.LatLonToMercator(associationList[i].globalPosition.pinPosition.latlon);
                jamaMatrix2.SetElement(i, 0, latLon2.lon);
                jamaMatrix2.SetElement(i, 1, latLon2.lat);
            }
            this.destMercatorToSourceTransformer             = PolynomialImageTransformer.getPolyPointTransformer(jamaMatrix, jamaMatrix2, polynomialDegree);
            this.sourceToDestMercatorTransformer_approximate = PolynomialImageTransformer.getApproximateInverterPolyPointTransformer(jamaMatrix, jamaMatrix2, polynomialDegree);
            DownhillInverterPointTransformer flakyPointTransformer = new DownhillInverterPointTransformer(this.destMercatorToSourceTransformer, this.sourceToDestMercatorTransformer_approximate);
            IPointTransformer sourceToMercator = new RobustPointTransformer(flakyPointTransformer, this.sourceToDestMercatorTransformer_approximate);

            this.destLatLonToSourceTransformer = new LatLonToSourceTransform(this.destMercatorToSourceTransformer);
            this.sourceToDestLatLonTransformer = new SourceToLatLonTransform(sourceToMercator);
        }
コード例 #4
0
        public CircleSegment Transform(IPointTransformer transform)
        {
            Coordinates newCenter     = transform.TransformPoint(center);
            Coordinates newStartPoint = transform.TransformPoint(center + Coordinates.FromAngle(startAngle) * r);
            Coordinates newEndPoint   = transform.TransformPoint(center + Coordinates.FromAngle(endAngle) * r);

            return(new CircleSegment(r, newCenter, newStartPoint, newEndPoint, ccw));
        }
コード例 #5
0
        public Line Transform(IPointTransformer transformer)
        {
            if (transformer == null)
            {
                throw new ArgumentNullException("transformer");
            }

            return(new Line(transformer.TransformPoint(P0), transformer.TransformPoint(P1)));
        }
コード例 #6
0
        public LineList Transform(IPointTransformer transformer)
        {
            LineList ret = new LineList();

            ret.Capacity = this.Count;

            ret.AddRange(transformer.TransformPoints(this));

            return(ret);
        }
コード例 #7
0
        public Present Evaluate(Present[] paramList)
        {
            D.Assert(paramList.Length == 1);
            IBoundsProvider boundsProvider = (IBoundsProvider)paramList[0];
            RenderRegion renderRegion = boundsProvider.GetRenderRegion();
            IPointTransformer robustPointTransform = imageTransformer.getSourceToDestLatLonTransformer();
            double num = 0.05;
            List<LatLon> asLatLonList = renderRegion.GetAsLatLonList();
            List<LatLon> list = new List<LatLon>();
            for (int i = 0; i < asLatLonList.Count; i++)
            {
                int index = (i + 1) % asLatLonList.Count;
                LatLon source = asLatLonList[i];
                LatLon dest = asLatLonList[index];
                ParametricLine parametricLine = new ParametricLine(source, dest);
                int numSteps = (int)Math.Max(1.0, parametricLine.Length() / num);
                List<LatLon> list2 = parametricLine.Interpolate(numSteps);
                list.AddRange(list2.ConvertAll<LatLon>((LatLon inp) => robustPointTransform.getTransformedPoint(inp)));
            }

            RenderRegion renderRegion2 = new RenderRegion(list, new DirtyEvent());
            return new BoundsPresent(renderRegion2);
        }
コード例 #8
0
 public LatLonToSourceTransform(IPointTransformer mercatorToSource)
 {
     this.mercatorToSource = mercatorToSource;
 }
コード例 #9
0
		public SourceToLatLonTransform(IPointTransformer sourceToMercator)
		{
			this.sourceToMercator = sourceToMercator;
		}
コード例 #10
0
 public Polygon Transform(IPointTransformer transformer)
 {
     return(new Polygon(transformer.TransformPoints(this), coordMode));
 }
コード例 #11
0
 public LineSegment Transform(IPointTransformer transformer)
 {
     return(new LineSegment(transformer.TransformPoint(P0), transformer.TransformPoint(P1)));
 }
コード例 #12
0
 public SourceToLatLonTransform(IPointTransformer sourceToMercator)
 {
     this.sourceToMercator = sourceToMercator;
 }
コード例 #13
0
 public LineSegment Transform(IPointTransformer transformer)
 {
     return new LineSegment(transformer.TransformPoint(P0), transformer.TransformPoint(P1));
 }
コード例 #14
0
 public Circle Transform(IPointTransformer transform)
 {
     return(new Circle(r, transform.TransformPoint(center)));
 }
コード例 #15
0
		public LatLonToSourceTransform(IPointTransformer mercatorToSource)
		{
			this.mercatorToSource = mercatorToSource;
		}
コード例 #16
0
 public void TransformInPlace(IPointTransformer transformer)
 {
     transformer.TransformPointsInPlace(this);
 }
コード例 #17
0
 public new LinePath Transform(IPointTransformer transformer)
 {
     return(new LinePath(transformer.TransformPoints(this)));
 }