1
1
import { MAPTILER_KEY } from "./config.js" ;
2
2
import PanoIcon , { SIZE as ICON_SIZE } from "./pano-icon.js" ;
3
- import PanoNear from "./pano-near .js" ;
3
+ import PanoScene from "./pano-scene .js" ;
4
4
5
5
6
- const DPR = devicePixelRatio ;
7
6
const dateFormat = new Intl . DateTimeFormat ( [ ] , { dateStyle :"medium" , timeStyle :"short" } ) ;
8
- const littlePlanet = document . querySelector ( "little-planet" ) ;
9
- const scene = document . querySelector ( "#scene" ) ;
7
+ const scene = document . querySelector ( "pano-scene" ) ;
10
8
const map = L . map ( "map" ) ;
11
9
12
- let currentItem = null ;
13
10
let allItems = [ ] ;
14
- let nearNodes = [ ] ;
15
11
16
- function showPano ( item ) {
17
- littlePlanet . src = item [ "SourceFile" ] ;
18
-
19
- if ( currentItem ) {
20
- let { marker, panoIcon } = currentItem ;
21
- if ( marker . _icon ) { marker . _icon . classList . remove ( "active" ) ; }
22
- panoIcon . hideFov ( ) ;
23
- }
24
-
25
- nearNodes . forEach ( node => node . remove ( ) ) ;
26
-
27
- currentItem = item ;
28
- let { marker } = item ;
29
- if ( ! marker . _icon ) { marker . __parent . spiderfy ( ) ; }
30
- if ( marker . _icon ) { marker . _icon . classList . add ( "active" ) ; }
31
-
32
- nearNodes = allItems
33
- . map ( item => new PanoNear ( item , currentItem ) )
34
- . filter ( node => node . distance < 5 * 1000 ) ;
35
- nearNodes . forEach ( node => {
36
- node . addEventListener ( "click" , _ => showPano ( node . target ) ) ;
37
- } ) ;
38
- scene . append ( ...nearNodes ) ;
39
- }
40
12
41
13
function buildPopup ( item ) {
42
14
let frag = document . createDocumentFragment ( ) ;
@@ -46,7 +18,7 @@ function buildPopup(item) {
46
18
url . hash = item [ "SourceFile" ] ;
47
19
name . href = url . href ;
48
20
name . textContent = item [ "ImageDescription" ] || "n/a" ;
49
- name . addEventListener ( "click" , _ => showPano ( item ) ) ;
21
+ name . addEventListener ( "click" , _ => scene . show ( item , allItems ) ) ;
50
22
51
23
let date = document . createElement ( "div" ) ;
52
24
date . append ( dateFormat . format ( new Date ( item [ "CreateDate" ] * 1000 ) ) ) ;
@@ -71,8 +43,7 @@ function itemToMarker(item) {
71
43
}
72
44
73
45
function syncSize ( ) {
74
- littlePlanet . width = littlePlanet . clientWidth * DPR ;
75
- littlePlanet . height = littlePlanet . clientHeight * DPR ;
46
+ scene . syncSize ( ) ;
76
47
map . invalidateSize ( ) ;
77
48
}
78
49
@@ -85,7 +56,7 @@ function fromURL() {
85
56
86
57
map . setView ( [ item [ "GPSLatitude" ] , item [ "GPSLongitude" ] ] , 17 ) ;
87
58
item . marker . openPopup ( ) ;
88
- showPano ( item ) ;
59
+ scene . show ( item , allItems ) ;
89
60
}
90
61
91
62
function addLayers ( ) {
@@ -117,26 +88,6 @@ function addLayers() {
117
88
map . addLayer ( topo ) ;
118
89
}
119
90
120
- function onPanoChange ( e ) {
121
- if ( ! currentItem ) { return ; }
122
- if ( ! ( "FlightYawDegree" in currentItem ) ) { return ; }
123
-
124
- const { mode, camera } = e . target ;
125
-
126
- switch ( mode ) {
127
- case "pano" :
128
- let angle = camera . lon + Number ( currentItem [ "FlightYawDegree" ] ) ;
129
- currentItem . panoIcon . drawFov ( angle , camera . fov ) ;
130
- break ;
131
-
132
- case "planet" :
133
- currentItem . panoIcon . hideFov ( ) ;
134
- break ;
135
- }
136
-
137
- nearNodes . forEach ( node => node . updatePosition ( e . target ) ) ;
138
- }
139
-
140
91
async function init ( ) {
141
92
window . addEventListener ( "resize" , syncSize ) ;
142
93
syncSize ( ) ;
@@ -156,8 +107,6 @@ async function init() {
156
107
map . setView ( [ 0 , 0 ] , 2 ) ;
157
108
}
158
109
159
- littlePlanet . addEventListener ( "change" , onPanoChange ) ;
160
-
161
110
fromURL ( ) ;
162
111
}
163
112
0 commit comments