Ejemplo n.º 1
0
        public ArcImsDataFrame(ArcImsService service, DataFrameInfo dataFrameInfo)
        {
            _dataFrameInfo = dataFrameInfo;

            Service   = service;
            Dpi       = service.ServiceInfo.Environment.Screen.Dpi;
            Name      = dataFrameInfo.Name;
            IsDefault = dataFrameInfo.Default;

            foreach (LayerInfo layerInfo in dataFrameInfo.LayerInfos.Reverse <LayerInfo>())
            {
                Layers.Add(new ArcImsLayer(this, layerInfo));
            }

            CreateLayerHierarchy();
            List <CommonLayer> topLayers = TopLevelLayers;

            Layers.Clear();
            AddLayersFromHierarchy(topLayers);
        }
Ejemplo n.º 2
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);
                }
            };
        }