Skip to content

Commit d65e7f0

Browse files
author
ELY M
committed
55935-elys
1 parent ce1cc5a commit d65e7f0

4 files changed

Lines changed: 107 additions & 63 deletions

File tree

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222

2323
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
2424
xmlns:tools="http://schemas.android.com/tools"
25-
android:versionCode="55934"
26-
android:versionName="55934-elys">
25+
android:versionCode="55935"
26+
android:versionName="55935-elys">
2727

2828
<uses-permission android:name="android.permission.INTERNET" />
2929
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

app/src/main/java/joshuatee/wx/radar/Metar.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ internal object Metar {
6060
UtilityIO.rawFileToStringArrayFromResource(context.resources, R.raw.obs_all)
6161
for (line in lines) {
6262
val items = line.trimEnd().split(",")
63-
println(items)
6463
if (items.size > 2) {
6564
name[items[0]] = items[1] + ", " + items[2]
6665
lat[items[0]] = items[3]

app/src/main/java/joshuatee/wx/radar/NexradDecodeEightBit.kt

Lines changed: 98 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -37,54 +37,43 @@ internal object NexradDecodeEightBit {
3737
try {
3838
val dataInputStream = UtilityIO.uncompress(context, radarBuffers.fileName)
3939
dataInputStream.skipBytes(30)
40-
var numberOfRleHalfWords: Int
4140
radarBuffers.colormap.redValues.put(0, Color.red(radarBuffers.bgColor).toByte())
4241
radarBuffers.colormap.greenValues.put(0, Color.green(radarBuffers.bgColor).toByte())
4342
radarBuffers.colormap.blueValues.put(0, Color.blue(radarBuffers.bgColor).toByte())
4443
radarBuffers.floatBuffer.position(0)
4544
radarBuffers.colorBuffer.position(0)
46-
var angle: Float
47-
var angleV: Float
48-
var level: Byte
49-
var levelCount: Int
50-
var binStart: Float
5145
var colorIndex = 0
5246
var radialIndex = 0
53-
var curLevel: Byte
54-
var angleSin: Float
55-
var angleCos: Float
56-
var angleVSin: Float
57-
var angleVCos: Float
5847
var angleNext = 0.0f
5948
var angle0 = 0.0f
6049
val numberOfRadials = radarBuffers.numberOfRadials
6150
for (radialNumber in 0 until numberOfRadials) {
62-
numberOfRleHalfWords = dataInputStream.readUnsignedShort()
63-
angle = 450.0f - dataInputStream.readUnsignedShort() / 10.0f
51+
val numberOfRleHalfWords = dataInputStream.readUnsignedShort()
52+
val angle = 450.0f - dataInputStream.readUnsignedShort() / 10.0f
6453
dataInputStream.skipBytes(2)
6554
if (radialNumber < numberOfRadials - 1) {
6655
dataInputStream.mark(100000)
6756
dataInputStream.skipBytes(numberOfRleHalfWords + 2)
6857
angleNext = 450.0f - dataInputStream.readUnsignedShort() / 10.0f
6958
dataInputStream.reset()
7059
}
71-
level = 0.toByte()
72-
levelCount = 0
73-
binStart = radarBuffers.binSize
60+
var level = 0.toByte()
61+
var levelCount = 0
62+
var binStart = radarBuffers.binSize
7463
if (radialNumber == 0) {
7564
angle0 = angle
7665
}
77-
angleV = if (radialNumber < numberOfRadials - 1) {
66+
val angleV = if (radialNumber < numberOfRadials - 1) {
7867
angleNext
7968
} else {
8069
angle0
8170
}
82-
angleVCos = cos(angleV / M_180_DIV_PI)
83-
angleVSin = sin(angleV / M_180_DIV_PI)
84-
angleCos = cos(angle / M_180_DIV_PI)
85-
angleSin = sin(angle / M_180_DIV_PI)
71+
val angleVCos = cos(angleV / M_180_DIV_PI)
72+
val angleVSin = sin(angleV / M_180_DIV_PI)
73+
val angleCos = cos(angle / M_180_DIV_PI)
74+
val angleSin = sin(angle / M_180_DIV_PI)
8675
for (bin in 0 until numberOfRleHalfWords) {
87-
curLevel = (dataInputStream.readUnsignedByte() and 0xFF).toByte()
76+
val curLevel = (dataInputStream.readUnsignedByte() and 0xFF).toByte()
8877
if (bin == 0) {
8978
level = curLevel
9079
}
@@ -93,17 +82,38 @@ internal object NexradDecodeEightBit {
9382
} else {
9483
radarBuffers.floatBuffer.putFloat(radialIndex, binStart * angleVCos)
9584
radarBuffers.floatBuffer.putFloat(radialIndex + 4, binStart * angleVSin)
96-
radarBuffers.floatBuffer.putFloat(radialIndex + 8, (binStart + radarBuffers.binSize * levelCount) * angleVCos)
97-
radarBuffers.floatBuffer.putFloat(radialIndex + 12, (binStart + radarBuffers.binSize * levelCount) * angleVSin)
98-
radarBuffers.floatBuffer.putFloat(radialIndex + 16, (binStart + radarBuffers.binSize * levelCount) * angleCos)
99-
radarBuffers.floatBuffer.putFloat(radialIndex + 20, (binStart + radarBuffers.binSize * levelCount) * angleSin)
85+
radarBuffers.floatBuffer.putFloat(
86+
radialIndex + 8,
87+
(binStart + radarBuffers.binSize * levelCount) * angleVCos
88+
)
89+
radarBuffers.floatBuffer.putFloat(
90+
radialIndex + 12,
91+
(binStart + radarBuffers.binSize * levelCount) * angleVSin
92+
)
93+
radarBuffers.floatBuffer.putFloat(
94+
radialIndex + 16,
95+
(binStart + radarBuffers.binSize * levelCount) * angleCos
96+
)
97+
radarBuffers.floatBuffer.putFloat(
98+
radialIndex + 20,
99+
(binStart + radarBuffers.binSize * levelCount) * angleSin
100+
)
100101
radarBuffers.floatBuffer.putFloat(radialIndex + 24, binStart * angleCos)
101102
radarBuffers.floatBuffer.putFloat(radialIndex + 28, binStart * angleSin)
102103
radialIndex += 32
103104
for (unused in 0..3) {
104-
radarBuffers.colorBuffer.put(colorIndex, radarBuffers.colormap.redValues.get(level.toInt() and 0xFF))
105-
radarBuffers.colorBuffer.put(colorIndex + 1, radarBuffers.colormap.greenValues.get(level.toInt() and 0xFF))
106-
radarBuffers.colorBuffer.put(colorIndex + 2, radarBuffers.colormap.blueValues.get(level.toInt() and 0xFF))
105+
radarBuffers.colorBuffer.put(
106+
colorIndex,
107+
radarBuffers.colormap.redValues.get(level.toInt() and 0xFF)
108+
)
109+
radarBuffers.colorBuffer.put(
110+
colorIndex + 1,
111+
radarBuffers.colormap.greenValues.get(level.toInt() and 0xFF)
112+
)
113+
radarBuffers.colorBuffer.put(
114+
colorIndex + 2,
115+
radarBuffers.colormap.blueValues.get(level.toInt() and 0xFF)
116+
)
107117
colorIndex += 3
108118
}
109119
totalBins += 1
@@ -123,24 +133,18 @@ internal object NexradDecodeEightBit {
123133
}
124134

125135
// level2
126-
fun createRadials(radarBuffers: OglRadarBuffers, binBuff: ByteBuffer, radialStart: ByteBuffer): Int {
136+
fun createRadials(
137+
radarBuffers: OglRadarBuffers,
138+
binBuff: ByteBuffer,
139+
radialStart: ByteBuffer
140+
): Int {
127141
radarBuffers.colormap.redValues.put(0, Color.red(radarBuffers.bgColor).toByte())
128142
radarBuffers.colormap.greenValues.put(0, Color.green(radarBuffers.bgColor).toByte())
129143
radarBuffers.colormap.blueValues.put(0, Color.blue(radarBuffers.bgColor).toByte())
130144
var totalBins = 0
131-
var angle: Float
132-
var angleV: Float
133-
var level: Int
134-
var levelCount: Int
135-
var binStart: Float
136145
var binIndex = 0
137146
var colorIndex = 0
138147
var radialIndex = 0
139-
var curLevel: Int
140-
var angleSin: Float
141-
var angleCos: Float
142-
var angleVSin: Float
143-
var angleVCos: Float
144148
val radarBlackHole: Float
145149
val radarBlackHoleAdd: Float
146150
when (radarBuffers.productCode.toInt()) {
@@ -155,38 +159,59 @@ internal object NexradDecodeEightBit {
155159
}
156160
}
157161
for (radialNumber in 0 until radarBuffers.numberOfRadials) {
158-
angle = radialStart.getFloat(radialNumber * 4)
159-
level = binBuff.get(binIndex).toInt()
160-
levelCount = 0
161-
binStart = radarBlackHole
162-
angleV = if (radialNumber < radarBuffers.numberOfRadials - 1) {
162+
val angle = radialStart.getFloat(radialNumber * 4)
163+
var level = binBuff.get(binIndex).toInt()
164+
var levelCount = 0
165+
var binStart = radarBlackHole
166+
val angleV = if (radialNumber < radarBuffers.numberOfRadials - 1) {
163167
radialStart.getFloat(radialNumber * 4 + 4)
164168
} else {
165169
radialStart.getFloat(0)
166170
}
167-
angleVCos = cos(angleV / M_180_DIV_PI)
168-
angleVSin = sin(angleV / M_180_DIV_PI)
169-
angleCos = cos(angle / M_180_DIV_PI)
170-
angleSin = sin(angle / M_180_DIV_PI)
171+
val angleVCos = cos(angleV / M_180_DIV_PI)
172+
val angleVSin = sin(angleV / M_180_DIV_PI)
173+
val angleCos = cos(angle / M_180_DIV_PI)
174+
val angleSin = sin(angle / M_180_DIV_PI)
171175
for (bin in 0 until radarBuffers.numRangeBins) {
172-
curLevel = binBuff.get(binIndex).toInt()
176+
val curLevel = binBuff.get(binIndex).toInt()
173177
binIndex += 1
174178
if (curLevel == level) {
175179
levelCount += 1
176180
} else {
177181
radarBuffers.floatBuffer.putFloat(radialIndex, binStart * angleVCos)
178182
radarBuffers.floatBuffer.putFloat(radialIndex + 4, binStart * angleVSin)
179-
radarBuffers.floatBuffer.putFloat(radialIndex + 8, (binStart + radarBuffers.binSize * levelCount) * angleVCos)
180-
radarBuffers.floatBuffer.putFloat(radialIndex + 12, (binStart + radarBuffers.binSize * levelCount) * angleVSin)
181-
radarBuffers.floatBuffer.putFloat(radialIndex + 16, (binStart + radarBuffers.binSize * levelCount) * angleCos)
182-
radarBuffers.floatBuffer.putFloat(radialIndex + 20, (binStart + radarBuffers.binSize * levelCount) * angleSin)
183+
radarBuffers.floatBuffer.putFloat(
184+
radialIndex + 8,
185+
(binStart + radarBuffers.binSize * levelCount) * angleVCos
186+
)
187+
radarBuffers.floatBuffer.putFloat(
188+
radialIndex + 12,
189+
(binStart + radarBuffers.binSize * levelCount) * angleVSin
190+
)
191+
radarBuffers.floatBuffer.putFloat(
192+
radialIndex + 16,
193+
(binStart + radarBuffers.binSize * levelCount) * angleCos
194+
)
195+
radarBuffers.floatBuffer.putFloat(
196+
radialIndex + 20,
197+
(binStart + radarBuffers.binSize * levelCount) * angleSin
198+
)
183199
radarBuffers.floatBuffer.putFloat(radialIndex + 24, binStart * angleCos)
184200
radarBuffers.floatBuffer.putFloat(radialIndex + 28, binStart * angleSin)
185201
radialIndex += 32
186202
for (unused in 0..3) {
187-
radarBuffers.colorBuffer.put(colorIndex, radarBuffers.colormap.redValues.get(level and 0xFF))
188-
radarBuffers.colorBuffer.put(colorIndex + 1, radarBuffers.colormap.greenValues.get(level and 0xFF))
189-
radarBuffers.colorBuffer.put(colorIndex + 2, radarBuffers.colormap.blueValues.get(level and 0xFF))
203+
radarBuffers.colorBuffer.put(
204+
colorIndex,
205+
radarBuffers.colormap.redValues.get(level and 0xFF)
206+
)
207+
radarBuffers.colorBuffer.put(
208+
colorIndex + 1,
209+
radarBuffers.colormap.greenValues.get(level and 0xFF)
210+
)
211+
radarBuffers.colorBuffer.put(
212+
colorIndex + 2,
213+
radarBuffers.colormap.blueValues.get(level and 0xFF)
214+
)
190215
colorIndex += 3
191216
}
192217
totalBins += 1
@@ -202,7 +227,12 @@ internal object NexradDecodeEightBit {
202227
//
203228
// canvas based widget
204229
//
205-
fun forCanvas(context: Context, src: String, radialStartAngle: ByteBuffer, binWord: ByteBuffer): Short {
230+
fun forCanvas(
231+
context: Context,
232+
src: String,
233+
radialStartAngle: ByteBuffer,
234+
binWord: ByteBuffer
235+
): Short {
206236
var numberOfRangeBins = 0
207237
try {
208238
val dataInputStream = UtilityIO.uncompress(context, src)
@@ -246,7 +276,16 @@ internal object NexradDecodeEightBit {
246276
//
247277
// canvas based widget
248278
//
249-
fun rect8bit(rBuff: ByteBuffer, binStart: Float, binSize: Float, levelCount: Int, angle: Float, angleV: Float, centerX: Int, centerY: Int) {
279+
fun rect8bit(
280+
rBuff: ByteBuffer,
281+
binStart: Float,
282+
binSize: Float,
283+
levelCount: Int,
284+
angle: Float,
285+
angleV: Float,
286+
centerX: Int,
287+
centerY: Int
288+
) {
250289
rBuff.position(0)
251290
rBuff.putFloat(binStart * cos(angle / M_180_DIV_PI) + centerX)
252291
rBuff.putFloat((binStart * sin(angle / M_180_DIV_PI) - centerY) * -1.0f)

doc/ChangeLog.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@
22

33
# Developer ChangeLog
44

5-
## 55934 2025_01_24
5+
## 55935 2025_01_25
6+
7+
* [ADD]
8+
9+
## 55934 2025_01_25
610

711
* [ADD] In National Images remove "experimental" from the label for "Week 3-4 Outlooks -
812
Temperature" and "Week 3-4 Outlooks - Precipitation" per *SCN24-104: The Experimental Weeks 3-4
@@ -13,6 +17,8 @@
1317
Graphic and the Non-Technical 72-Hour Low Tracks Graphic to be Replaced by Automated Low Clusters
1418
Forecast Tool: Effective January 20, 2025 , remove from National Images
1519
* [FIX] In National Graphics the URL for **GLSEA Ice Analysis** had changed
20+
* [REF] NexradDecodeEightBit change scope for key vars to be more local to enhance readability (
21+
originally created like this for performance reasons)
1622

1723
```
1824
"Significant Surface Low Tracks",

0 commit comments

Comments
 (0)