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); }
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); } }; }