Skip to content

Commit 0ddc2f5

Browse files
committed
Zoom out to show precision circle on the node map
1 parent f511e1e commit 0ddc2f5

2 files changed

Lines changed: 146 additions & 130 deletions

File tree

Meshtastic/Resources/images/image_manifest.json

Lines changed: 128 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -1,211 +1,211 @@
11
{
22
"files": {
3-
"promicro.svg": {
4-
"etag": "\"c54c8757f3c95185d2243fdf3da84992\""
5-
},
6-
"seeed_xiao_nrf52_kit.svg": {
7-
"etag": "\"c73c0f939e9f6ad244a36d4a3e3da289\""
8-
},
9-
"crowpanel_3_5.svg": {
10-
"etag": "\"59675dc1a08a4c485becd29a3e8d9db8\""
11-
},
12-
"rak11200.svg": {
13-
"etag": "\"7d2051c84c073becece5a6fada9a4cfc\""
14-
},
15-
"tbeam-s3-core.svg": {
16-
"etag": "\"d233dcce52944ab5fb01410c5d58a4ae\""
17-
},
18-
"tbeam.svg": {
19-
"etag": "\"df4f996aed77c59eb57d1ae0edeed549\""
20-
},
21-
"thinknode_m1.svg": {
22-
"etag": "\"4f1ffbb8c2cbd39ef57660a2b227003e\""
23-
},
24-
"rpipicow.svg": {
25-
"etag": "\"63d5265a14db854a409aa8d2c02b6df7\""
26-
},
27-
"crowpanel_7_0.svg": {
28-
"etag": "\"d41e7b3abca1955c6e7038517a0d9623\""
3+
"heltec-mesh-node-t114-case.svg": {
4+
"etag": "\"3d7eae010a7cd6fdd25e83c6abfec91c\""
295
},
30-
"m5_c6l.svg": {
31-
"etag": "\"e84fff6641461d595b2f180ddeaeeaa6\""
6+
"crowpanel_5_0.svg": {
7+
"etag": "\"9e4795bf9f644fc071d78f291f6ff510\""
328
},
33-
"rak3401.svg": {
34-
"etag": "\"d05f088f4b14eb7235678c5d84c1dde8\""
9+
"wio_tracker_l1_eink.svg": {
10+
"etag": "\"87446ec40a3c65f81a28e5c3309f4067\""
3511
},
36-
"t-watch-s3.svg": {
37-
"etag": "\"b2c26bdc010a6f78855a1fb1905c9397\""
12+
"heltec-mesh-solar.svg": {
13+
"etag": "\"80ee3e192cc4aeb6f6ec4bf54deebbce\""
3814
},
39-
"heltec_v4.svg": {
40-
"etag": "\"57666cd119ac01e74716bef5f785e2df\""
15+
"rak11310.svg": {
16+
"etag": "\"ddbea703ff2b2481a46c1b56ebbd0b44\""
4117
},
4218
"rak-wismeshtap.svg": {
4319
"etag": "\"d808e95fe31048bdfc3fbb0b574c9dc6\""
4420
},
45-
"crowpanel_2_8.svg": {
46-
"etag": "\"78955180f4e0b1a4bfc1efe8d6b953ad\""
47-
},
48-
"lilygo-tlora-pager.svg": {
49-
"etag": "\"ea8a22cd8e3436caebd4cc1ea981d6d6\""
50-
},
51-
"heltec-v3.svg": {
52-
"etag": "\"98fd45f8aed4f3cf9c59037755309362\""
21+
"pico.svg": {
22+
"etag": "\"25eaff431def69b7bf838a2e312c1032\""
5323
},
54-
"nano-g2-ultra.svg": {
55-
"etag": "\"c655b6154835204b5b60e947c64a3c43\""
24+
"tlora-t3s3-v1.svg": {
25+
"etag": "\"bbf44e526676ad298698d1387af57c15\""
5626
},
57-
"heltec_wireless_tracker_v2.svg": {
58-
"etag": "\"7a6b4a5c152ec91cc9f746da978bdfbc\""
27+
"rak11200.svg": {
28+
"etag": "\"7d2051c84c073becece5a6fada9a4cfc\""
5929
},
60-
"wio_tracker_l1_eink.svg": {
61-
"etag": "\"87446ec40a3c65f81a28e5c3309f4067\""
30+
"heltec-ht62-esp32c3-sx1262.svg": {
31+
"etag": "\"e71d389dc4571952283b1d2e69f1fc54\""
6232
},
63-
"rak_wismesh_tag.svg": {
64-
"etag": "\"d0fe0072bdfd0c3671ed8be8339708fa\""
33+
"thinknode_m1.svg": {
34+
"etag": "\"4f1ffbb8c2cbd39ef57660a2b227003e\""
6535
},
66-
"seeed-xiao-s3.svg": {
67-
"etag": "\"6475faad5c2459af8d133bf4956e8ba4\""
36+
"tbeam-1w.svg": {
37+
"etag": "\"ffb9d18fb8c98f231a610c58a1d1e865\""
6838
},
6939
"muzi_r1_neo.svg": {
7040
"etag": "\"bb4bbf8fb998eb671d61c5a7796581ba\""
7141
},
72-
"rak_3312.svg": {
73-
"etag": "\"8db94664189df83d099b726cd21045b4\""
74-
},
75-
"pico.svg": {
76-
"etag": "\"25eaff431def69b7bf838a2e312c1032\""
42+
"tbeam.svg": {
43+
"etag": "\"df4f996aed77c59eb57d1ae0edeed549\""
7744
},
78-
"heltec-mesh-solar.svg": {
79-
"etag": "\"80ee3e192cc4aeb6f6ec4bf54deebbce\""
45+
"thinknode_m4.svg": {
46+
"etag": "\"9e9d7390e3ee50ef5fbb0e9670252ec3\""
8047
},
8148
"heltec-vision-master-t190.svg": {
8249
"etag": "\"9b85f16d85e5589816d45f1b865f7132\""
8350
},
84-
"heltec-wireless-paper.svg": {
85-
"etag": "\"09dff671cae6a64033c5160c62b1a6cb\""
51+
"tbeam-s3-core.svg": {
52+
"etag": "\"d233dcce52944ab5fb01410c5d58a4ae\""
8653
},
87-
"tlora-v2-1-1_8.svg": {
88-
"etag": "\"31b910b6a06249a6850cd2485617fb1a\""
54+
"heltec-v3.svg": {
55+
"etag": "\"98fd45f8aed4f3cf9c59037755309362\""
8956
},
90-
"thinknode_m2.svg": {
91-
"etag": "\"fa007f18567fb18c9d137dae88350a4a\""
57+
"rak4631_case.svg": {
58+
"etag": "\"fdb5ee0ba5fb97d3f2c45ebec1629af2\""
59+
},
60+
"rak4631.svg": {
61+
"etag": "\"cd9d48fd9e38ccb769268681547339e8\""
62+
},
63+
"muzi_base.svg": {
64+
"etag": "\"be887c289c63af434835279b75f0879e\""
65+
},
66+
"meteor_pro.svg": {
67+
"etag": "\"db5044328b825421851b963479fab9ca\""
9268
},
9369
"seeed_solar.svg": {
9470
"etag": "\"1b517a452f66e0e5b1b7323dfce89fbc\""
9571
},
72+
"heltec-wireless-paper.svg": {
73+
"etag": "\"09dff671cae6a64033c5160c62b1a6cb\""
74+
},
9675
"rak2560.svg": {
9776
"etag": "\"e425adc49058399a2a7f8517093192f0\""
9877
},
78+
"crowpanel_2_4.svg": {
79+
"etag": "\"29194e5a415e5aee034b2d4a3ba2e398\""
80+
},
81+
"m5stack_cardputer.svg": {
82+
"etag": "\"3b483e95371895fbaf5d22a289a9a48e\""
83+
},
9984
"t5s3_epaper.svg": {
10085
"etag": "\"423640c486cc7c4480f194bc02481ea5\""
10186
},
102-
"rak4631_case.svg": {
103-
"etag": "\"fdb5ee0ba5fb97d3f2c45ebec1629af2\""
87+
"rak_3312.svg": {
88+
"etag": "\"8db94664189df83d099b726cd21045b4\""
10489
},
105-
"techo_lite.svg": {
106-
"etag": "\"c8218fb723d7e92b71cf38c17b1118c8\""
90+
"rak3401.svg": {
91+
"etag": "\"d05f088f4b14eb7235678c5d84c1dde8\""
10792
},
108-
"diy.svg": {
109-
"etag": "\"c06a4d66579f4c69c5f362918cd36da5\""
93+
"heltec-wireless-tracker.svg": {
94+
"etag": "\"cc8148848b4097c555396bb0794a2cd2\""
11095
},
111-
"tlora-t3s3-v1.svg": {
112-
"etag": "\"bbf44e526676ad298698d1387af57c15\""
96+
"rak-wismesh-tap-v2.svg": {
97+
"etag": "\"0f5bdd7e2d770dc19fe6caa64051f9d6\""
11398
},
114-
"thinknode_m3.svg": {
115-
"etag": "\"85966b6aae7d961c9b390f2a4d1e8b0c\""
99+
"seeed-xiao-s3.svg": {
100+
"etag": "\"6475faad5c2459af8d133bf4956e8ba4\""
101+
},
102+
"rpipicow.svg": {
103+
"etag": "\"63d5265a14db854a409aa8d2c02b6df7\""
116104
},
117105
"heltec-vision-master-e213.svg": {
118106
"etag": "\"48c2615afa32e5236ded7dea74aa0a66\""
119107
},
120-
"rak-wismesh-tap-v2.svg": {
121-
"etag": "\"0f5bdd7e2d770dc19fe6caa64051f9d6\""
122-
},
123-
"tdeck_pro.svg": {
124-
"etag": "\"b55287ed57a297631de99e024c8e4ab2\""
125-
},
126-
"seeed-sensecap-indicator.svg": {
127-
"etag": "\"26a69d9484d3c5f39c96e8c6081f1829\""
108+
"heltec-vision-master-e290.svg": {
109+
"etag": "\"50a5e52466ea3a5ef3ff6c87ff6b5b24\""
128110
},
129-
"wio_tracker_l1_case.svg": {
130-
"etag": "\"0b7c6f0940dc247e407937a81525e5cf\""
111+
"t-echo_plus.svg": {
112+
"etag": "\"62d23557949092b77fd24a94abe16678\""
131113
},
132-
"heltec-wsl-v3.svg": {
133-
"etag": "\"676b33b3d89eb109f5ff984db6041605\""
114+
"thinknode_m6.svg": {
115+
"etag": "\"d2cc380005e0d8ea839cc32104b14813\""
134116
},
135-
"heltec-wireless-tracker.svg": {
136-
"etag": "\"cc8148848b4097c555396bb0794a2cd2\""
117+
"m5_c6l.svg": {
118+
"etag": "\"e84fff6641461d595b2f180ddeaeeaa6\""
137119
},
138-
"crowpanel_5_0.svg": {
139-
"etag": "\"9e4795bf9f644fc071d78f291f6ff510\""
120+
"tlora-v2-1-1_8.svg": {
121+
"etag": "\"31b910b6a06249a6850cd2485617fb1a\""
140122
},
141123
"heltec-v3-case.svg": {
142124
"etag": "\"5319a951380495a93daab78d33ebc9a1\""
143125
},
144-
"t-deck.svg": {
145-
"etag": "\"8b10a3d59ee362ea0190b6612c9e695e\""
126+
"seeed-sensecap-indicator.svg": {
127+
"etag": "\"26a69d9484d3c5f39c96e8c6081f1829\""
146128
},
147-
"rak11310.svg": {
148-
"etag": "\"ddbea703ff2b2481a46c1b56ebbd0b44\""
129+
"crowpanel_3_5.svg": {
130+
"etag": "\"59675dc1a08a4c485becd29a3e8d9db8\""
131+
},
132+
"tlora-v2-1-1_6.svg": {
133+
"etag": "\"31b910b6a06249a6850cd2485617fb1a\""
149134
},
150135
"tracker-t1000-e.svg": {
151136
"etag": "\"f04f6744865fcc7aab2527b2eb31d57c\""
152137
},
153-
"tbeam-1w.svg": {
154-
"etag": "\"ffb9d18fb8c98f231a610c58a1d1e865\""
138+
"tdeck_pro.svg": {
139+
"etag": "\"b55287ed57a297631de99e024c8e4ab2\""
155140
},
156-
"heltec-ht62-esp32c3-sx1262.svg": {
157-
"etag": "\"e71d389dc4571952283b1d2e69f1fc54\""
141+
"nano-g2-ultra.svg": {
142+
"etag": "\"c655b6154835204b5b60e947c64a3c43\""
158143
},
159-
"m5stack_cardputer.svg": {
160-
"etag": "\"3b483e95371895fbaf5d22a289a9a48e\""
144+
"techo_lite.svg": {
145+
"etag": "\"c8218fb723d7e92b71cf38c17b1118c8\""
161146
},
162-
"meteor_pro.svg": {
163-
"etag": "\"db5044328b825421851b963479fab9ca\""
147+
"heltec_wireless_tracker_v2.svg": {
148+
"etag": "\"7a6b4a5c152ec91cc9f746da978bdfbc\""
164149
},
165-
"heltec_mesh_pocket.svg": {
166-
"etag": "\"4a7af4be3e7a829cd83017f05fa11f9a\""
150+
"crowpanel_7_0.svg": {
151+
"etag": "\"d41e7b3abca1955c6e7038517a0d9623\""
152+
},
153+
"t-deck.svg": {
154+
"etag": "\"8b10a3d59ee362ea0190b6612c9e695e\""
155+
},
156+
"heltec_v4.svg": {
157+
"etag": "\"57666cd119ac01e74716bef5f785e2df\""
167158
},
168159
"heltec-mesh-node-t114.svg": {
169160
"etag": "\"5a183e933a9886ed38b258c7923b3105\""
170161
},
171-
"t-echo_plus.svg": {
172-
"etag": "\"62d23557949092b77fd24a94abe16678\""
162+
"wio-tracker-wm1110.svg": {
163+
"etag": "\"97e3dea651a4f60f08ded179035ac8dd\""
173164
},
174-
"tlora-v2-1-1_6.svg": {
175-
"etag": "\"31b910b6a06249a6850cd2485617fb1a\""
165+
"thinknode_m2.svg": {
166+
"etag": "\"fa007f18567fb18c9d137dae88350a4a\""
176167
},
177-
"rak4631.svg": {
178-
"etag": "\"cd9d48fd9e38ccb769268681547339e8\""
168+
"t-watch-s3.svg": {
169+
"etag": "\"b2c26bdc010a6f78855a1fb1905c9397\""
179170
},
180-
"t-echo.svg": {
181-
"etag": "\"aaa20e725876f408d28ba4dd1c632ebc\""
171+
"thinknode_m3.svg": {
172+
"etag": "\"85966b6aae7d961c9b390f2a4d1e8b0c\""
182173
},
183-
"thinknode_m6.svg": {
184-
"etag": "\"d2cc380005e0d8ea839cc32104b14813\""
174+
"promicro.svg": {
175+
"etag": "\"c54c8757f3c95185d2243fdf3da84992\""
185176
},
186-
"muzi_base.svg": {
187-
"etag": "\"be887c289c63af434835279b75f0879e\""
177+
"heltec_mesh_pocket.svg": {
178+
"etag": "\"4a7af4be3e7a829cd83017f05fa11f9a\""
188179
},
189-
"crowpanel_2_4.svg": {
190-
"etag": "\"29194e5a415e5aee034b2d4a3ba2e398\""
180+
"diy.svg": {
181+
"etag": "\"c06a4d66579f4c69c5f362918cd36da5\""
182+
},
183+
"seeed_xiao_nrf52_kit.svg": {
184+
"etag": "\"c73c0f939e9f6ad244a36d4a3e3da289\""
185+
},
186+
"t-echo.svg": {
187+
"etag": "\"aaa20e725876f408d28ba4dd1c632ebc\""
191188
},
192189
"station-g2.svg": {
193190
"etag": "\"5527898bfd96b94c05251f8c8876dbec\""
194191
},
195-
"thinknode_m4.svg": {
196-
"etag": "\"9e9d7390e3ee50ef5fbb0e9670252ec3\""
192+
"wio_tracker_l1_case.svg": {
193+
"etag": "\"0b7c6f0940dc247e407937a81525e5cf\""
194+
},
195+
"rak_wismesh_tag.svg": {
196+
"etag": "\"d0fe0072bdfd0c3671ed8be8339708fa\""
197+
},
198+
"crowpanel_2_8.svg": {
199+
"etag": "\"78955180f4e0b1a4bfc1efe8d6b953ad\""
197200
},
198201
"tlora-t3s3-epaper.svg": {
199202
"etag": "\"7aa92389d32074449bf4ce92b8ea5fad\""
200203
},
201-
"heltec-vision-master-e290.svg": {
202-
"etag": "\"50a5e52466ea3a5ef3ff6c87ff6b5b24\""
203-
},
204-
"wio-tracker-wm1110.svg": {
205-
"etag": "\"97e3dea651a4f60f08ded179035ac8dd\""
204+
"heltec-wsl-v3.svg": {
205+
"etag": "\"676b33b3d89eb109f5ff984db6041605\""
206206
},
207-
"heltec-mesh-node-t114-case.svg": {
208-
"etag": "\"3d7eae010a7cd6fdd25e83c6abfec91c\""
207+
"lilygo-tlora-pager.svg": {
208+
"etag": "\"ea8a22cd8e3436caebd4cc1ea981d6d6\""
209209
}
210210
},
211211
"api_hash": "da281fe426e5989c17ce8933916f4c7367f90a5e15a1672f4b0b53f541c016be"

Meshtastic/Views/Nodes/Helpers/Map/NodeMapSwiftUI.swift

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,14 +238,29 @@ struct NodeMapSwiftUI: View {
238238
}
239239
}
240240

241+
/// Returns a camera distance that ensures the precision circle is fully visible.
242+
/// For precise positions (precisionBits == 32 or 0), returns the default distance.
243+
/// For imprecise positions, scales the precision radius so the circle fits comfortably.
244+
private func cameraDistanceForPrecision(_ position: PositionEntity?) -> Double {
245+
guard let position,
246+
12...24 ~= position.precisionBits,
247+
let pp = PositionPrecision(rawValue: Int(position.precisionBits)) else {
248+
return distance
249+
}
250+
// Camera distance needs to be roughly 4× the circle diameter to show it with padding
251+
let needed = pp.precisionMeters * 10.0
252+
return max(distance, needed)
253+
}
254+
241255
private func handleNodeChange() {
242256
isLookingAround = false
243257
isShowingAltitude = false
244258
let newMostRecent = node.positions?.lastObject as? PositionEntity
245259
if node.positions?.count ?? 0 > 1 {
246260
position = .automatic
247261
} else if let mrCoord = newMostRecent?.coordinate {
248-
position = .camera(MapCamera(centerCoordinate: mrCoord, distance: distance, heading: 0, pitch: 0))
262+
let cameraDistance = cameraDistanceForPrecision(newMostRecent)
263+
position = .camera(MapCamera(centerCoordinate: mrCoord, distance: cameraDistance, heading: 0, pitch: 0))
249264
}
250265
if let newMostRecent {
251266
Task {
@@ -261,7 +276,8 @@ struct NodeMapSwiftUI: View {
261276
if node.positions?.count ?? 0 > 1 {
262277
position = .automatic
263278
} else if let mrCoord = mostRecent?.coordinate {
264-
position = .camera(MapCamera(centerCoordinate: mrCoord, distance: distance, heading: 0, pitch: 0))
279+
let cameraDistance = cameraDistanceForPrecision(mostRecent)
280+
position = .camera(MapCamera(centerCoordinate: mrCoord, distance: cameraDistance, heading: 0, pitch: 0))
265281
}
266282
if scene == nil, let mrCoord = mostRecent?.coordinate {
267283
Task {

0 commit comments

Comments
 (0)