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