示例#1
0
        private void ComputeViewPort()
        {
            var pixelToEightsRatioX = _parcelSizeLong.GetAsEightSeconds() / CurrentScale.ParcelSize;
            var pixelToEightsRatioY = _parcelSizeLat.GetAsEightSeconds() / CurrentScale.ParcelSize;

            _viewportHeight = new GeoCord(pixelToEightsRatioY * _canvas.ActualHeight / 8);
            _viewportWidth  = new GeoCord(pixelToEightsRatioX * _canvas.ActualWidth / 8);
        }
示例#2
0
        public void SetupTransform(GeoCord viewportCenterLong, GeoCord viewportCenterLat, GeoCord viewportWidth, GeoCord viewportHeight)
        {
            var pixelToEightsRatioX = _parcelWidth.GetAsEightSeconds() / _parcelScreenSize;
            var pixelToEightsRatioY = _parcelHeight.GetAsEightSeconds() / _parcelScreenSize;

            var offsetFromCenterX = viewportWidth.Divide(2) + _parcelX - viewportCenterLong;
            var offsetFromCenterY = viewportHeight.Divide(2) - _parcelY + viewportCenterLat;

            var offsetX = offsetFromCenterX.GetAsEightSeconds() / pixelToEightsRatioX;
            var offsetY = offsetFromCenterY.GetAsEightSeconds() / pixelToEightsRatioY;

            var transformGroup = new System.Windows.Media.TransformGroup();

            transformGroup.Children.Add(new System.Windows.Media.ScaleTransform(1, -1));
            transformGroup.Children.Add(new System.Windows.Media.TranslateTransform(offsetX, offsetY));
            _image.RenderTransform = transformGroup;
        }
示例#3
0
        public override void Read(BinaryReader br, int length = 0)
        {
            uint b1 = br.ReadByte();
            uint b2 = br.ReadByte();
            uint b3 = br.ReadByte();

            Flag = b1 >> 7;

            uint cords = (b1 << 25 >> 9) | (b2 << 8) | b3;

            var totalDegree = cords * 0.125;
            int degree      = (int)totalDegree / 3600;
            int minute      = ((int)totalDegree - degree * 3600) / 60;
            var seconds     = totalDegree - degree * 3600 - minute * 60;

            Cord = new GeoCord(degree, minute, seconds);
        }
示例#4
0
        public ParcelShape(ParcelRecord parcel, int parcelSize, GeoCord parcelXSize, GeoCord parcelYSize, int parcelIndex)
        {
            _parcel           = parcel;
            _parcelScreenSize = parcelSize;
            _parcelWidth      = parcelXSize;
            _parcelHeight     = parcelYSize;

            _parcel.LoadChilds();

            if (_parcel.DividedWrapper)
            {
                var parcelInfo = _parcel.Childs.OfType <ParcelInformationRecord>().FirstOrDefault();
                parcelInfo.LoadChilds();
                foreach (var dividedParcel in parcelInfo.Childs.OfType <ParcelRecord>())
                {
                    dividedParcel.LoadChilds();
                    _parcelX = dividedParcel.ParcelLong;
                    _parcelY = dividedParcel.ParcelLat;

                    _dividedParcels.Add(dividedParcel);
                }
            }
            else if (_parcel.IsPartOfIntegrated)
            {
                var blockWidth        = _parcel.FindParentOfType <LevelRecord>().ParcelsCountLong;
                var blockHeight       = _parcel.FindParentOfType <LevelRecord>().ParcelsCountLat;
                var posBlockRelativeY = parcelIndex / blockWidth;
                var posBlockRelativeX = parcelIndex % blockWidth;
                _integratedOffsetX = posBlockRelativeX - _parcel.X;
                _integratedOffsetY = posBlockRelativeY - _parcel.Y;
                _parcelX           = _parcel.ParcelLong + parcelXSize.Multiply(_integratedOffsetX);
                _parcelY           = _parcel.ParcelLat + parcelYSize.Multiply(_integratedOffsetY);
            }
            else
            {
                _parcelX = parcel.ParcelLong;
                _parcelY = parcel.ParcelLat;
            }
        }
示例#5
0
        protected override void LoadChildsInternal()
        {
            if (_wrapper)
            {
                return;
            }

            using var file = _frame.OpenAt(_mapDataFrameAddress, asAbsoluteOffset: true);
            using (var br = new BinaryReader(file))
            {
                CreateField <SWS>("Header size", br);
                var pid = CreateField <PID>("Lower Left Reference Parcel ID Number", br);
                ParcelLong = pid.Longitude;
                ParcelLat  = pid.Lattitude;
                var pos = CreateField <ParcelLocation>("Lower Left Reference Parcel Location Code within the Block", br);
                X = pos.XPos;
                Y = pos.YPos;
                var divideType = CreateField <ParcelCombination>("Divided/Integrated Parcel Identifier", br);
                IsPartOfDivided    = divideType.Divided;
                IsPartOfIntegrated = divideType.Integrated;
                if (IsPartOfDivided || IsPartOfIntegrated)
                {
                    PartX = divideType.CombinationXInfo;
                    PartY = divideType.CombinationYInfo;
                }
                CreateField <PracticalManagement>("Practical Management Code", br);
                CreateField <DataSourceScale>("Data Source Flag", br);
                Height = CreateField <RealLengthData>("Real-length Data in Normalized Longitudinal (X-axis) Direction", br).Value;
                Width  = CreateField <RealLengthData>("Real-length Data in Normalized Latitudinal (Y-axis) Direction", br).Value;
                CreateField <I>("Geomagnetic Strength Data", br);
                CreateField <I>("Geomagnetic Declination Data", br);
                CreateField <DSA>("Offset to Route Guidance Data Frame", br);
                CreateField <BS>("Size of Route Guidance Data Frame", br);
                var routeRegionsCount = CreateField <N>("Number of Regions used for Route Planning Data", br).Value;
                for (int i = 0; i < routeRegionsCount; i++)
                {
                    CreateField <RegionNumber>($"Region number {i}", br);
                }

                var           parentLevel         = FindParentOfType <LevelRecord>();
                DataFrameInfo roadsDataFrame      = null;
                DataFrameInfo backgroundDataFrame = null;
                DataFrameInfo nameDataFrame       = null;
                if (parentLevel.BasicDataFrameCount > 0)
                {
                    roadsDataFrame = CreateField <DataFrameInfo>("Road Data Frame", br);
                }
                if (parentLevel.BasicDataFrameCount > 1)
                {
                    backgroundDataFrame = CreateField <DataFrameInfo>("Background Data Frame", br);
                }
                if (parentLevel.BasicDataFrameCount > 2)
                {
                    nameDataFrame = CreateField <DataFrameInfo>("Name Data Frame", br);
                }

                for (int i = 0; i < parentLevel.ExtendedDataFrameCount; i++)
                {
                    CreateField <DataFrameInfo>($"Extended data frame {i}", br);
                }

                for (int i = 0; i < 8; i++)
                {
                    var adjacentField = CreateField <AdjacentParcelInfo>(((AdjacentPosition)i).ToString(), br);
                    if (adjacentField.ParcelLocation == null)
                    {
                        _fields.RemoveAt(_fields.Count - 1);
                        var currentPosition = br.BaseStream.Position;
                        br.BaseStream.Position = _mapDataFrameAddress + adjacentField.OffsetToDividedInfo.DValue;
                        for (int j = 0; j < adjacentField.DividedParcelInfo.AdjacentCount; j++)
                        {
                            CreateField <AdjacentParcelInfo>(((AdjacentPosition)i).ToString() + " " + j, br);
                        }
                        br.BaseStream.Position = currentPosition;
                    }
                }

                if (!backgroundDataFrame.Size.IsNull && backgroundDataFrame.Size.SWSValue > 0)
                {
                    br.BaseStream.Position = _mapDataFrameAddress + backgroundDataFrame.Displacement.DValue;
                    AddRecord(new BackgroundFrameRecord(_frame), br);
                }
                if (!roadsDataFrame.Size.IsNull && roadsDataFrame.Size.SWSValue > 0)
                {
                    br.BaseStream.Position = _mapDataFrameAddress + roadsDataFrame.Displacement.DValue;
                    AddRecord(new RoadsFrameRecord(_frame), br);
                }
            };
        }