1
1
import mapboxgl from "mapbox-gl" ;
2
- import { feature } from "topojson" ;
3
- import { json } from "d3-request" ;
4
- import { schemeCategory10 as colors } from "d3-scale" ;
5
- import { range } from "d3-array" ;
2
+ // import { feature } from "topojson";
3
+ // import { json } from "d3-request";
4
+ // import { schemeCategory10 as colors } from "d3-scale";
5
+ // import { range } from "d3-array";
6
+ // import { select } from "d3-selection";
7
+ import * as d3 from "d3" ;
6
8
7
9
var digitProperties = [ "digit_one" , "digit_two" , "digit_three" , "digit_four" ] ;
8
10
var testPostcodes = [
@@ -13,40 +15,60 @@ var testPostcodes = [
13
15
[ 3 , 1 , 9 , 6 ] , // 4
14
16
] ;
15
17
16
- json ( "bounds.json" , function ( error , bounds ) {
18
+ d3 . json ( "bounds.json" , function ( error , bounds ) {
17
19
var map = initMap ( ) ;
18
20
window . map = map ;
19
21
20
-
21
- // var boundInfo =
22
-
23
- // var bound = getBounds(bounds, postcode);
24
-
25
22
map . style . on ( "load" , function ( ) {
26
- var postcodeIndex = 0 ;
23
+ var postcodeIndex = 2 ;
27
24
var addedLayers = false ;
28
- var interval = setInterval ( function ( ) {
29
- // if (addedLayers) clearMapLayers(map);
30
- if ( postcodeIndex === testPostcodes . length - 1 ) {
31
- clearInterval ( interval ) ;
25
+ d3 . select ( ".postcode" ) . on ( "input" , function ( ) {
26
+ if ( addedLayers ) clearMapLayers ( map ) ;
27
+ var value = d3 . select ( this ) . property ( "value" ) . split ( "" ) ;
28
+ var postcode = [ null , null , null , null ] ;
29
+ for ( var valueIndex = 0 ; valueIndex < value . length && valueIndex < 4 ; valueIndex ++ ) {
30
+ postcode [ valueIndex ] = + value [ valueIndex ] ;
32
31
}
33
32
34
- var postcode = testPostcodes [ postcodeIndex ] ;
33
+ console . log ( postcode ) ;
34
+
35
+ // debugger
35
36
var layers = buildLayers ( buildFilters ( postcode ) ) ;
37
+ // debugger
36
38
setMapLayers ( map , layers ) ;
37
- addedLayers = true ;
38
- postcodeIndex ++ ;
39
+ var bound = getBounds ( bounds , postcode ) ;
40
+ console . log ( layers ) ;
41
+ if ( bound . infos . length ) {
42
+ map . fitBounds ( bound . bounds ) ;
43
+ addedLayers = true ;
44
+ }
45
+
39
46
47
+ } ) ;
48
+ // var interval = setInterval(function() {
49
+ // if (addedLayers) clearMapLayers(map);
50
+ // if (postcodeIndex === testPostcodes.length - 1) {
51
+ // clearInterval(interval);
52
+ // }
53
+
54
+ // var postcode = testPostcodes[postcodeIndex];
55
+ // var layers = buildLayers(buildFilters(postcode));
56
+ // setMapLayers(map, layers);
57
+ // var bound = getBounds(bounds, postcode);
58
+ // map.fitBounds(bound.bounds);
59
+ // addedLayers = true;
60
+ // postcodeIndex++;
61
+ // }, 5000);
40
62
41
- } , 2000 ) ;
42
63
} ) ;
43
- // moveMap(map, bound, filter);
44
- // makeMap(testBounds.map(function(b) { return getBounds(bounds, b); }));
45
64
} ) ;
46
65
47
66
function clearMapLayers ( map ) {
48
- range ( 10 ) . map ( function ( id ) {
49
- map . removeLayer ( id . toString ( ) ) ;
67
+ d3 . range ( 10 ) . map ( function ( id ) {
68
+ try {
69
+ map . removeLayer ( id . toString ( ) ) ;
70
+ } catch ( e ) {
71
+ }
50
72
} ) ;
51
73
}
52
74
@@ -64,7 +86,7 @@ function buildLayers(filters) {
64
86
"source-layer" : "POA_2011_AUST_DIGITS" ,
65
87
"type" : "fill" ,
66
88
"paint" : {
67
- "fill-color" : colors [ filterIndex ] ,
89
+ "fill-color" : d3 . schemeCategory10 [ filterIndex ] ,
68
90
"fill-opacity" : 0.6 ,
69
91
} ,
70
92
"filter" : filter ,
@@ -77,7 +99,7 @@ function buildFilters(postcode) {
77
99
78
100
// Build filter for existing digits
79
101
var digitIndex ;
80
- for ( digitIndex = 0 ; postcode [ digitIndex ] ; digitIndex ++ ) {
102
+ for ( digitIndex = 0 ; digitIndex < postcode . join ( "" ) . length ; digitIndex ++ ) {
81
103
var digitKey = digitProperties [ digitIndex ] ;
82
104
var digit = postcode [ digitIndex ] ;
83
105
baseFilter . push ( [ "==" , digitKey , digit ] ) ;
@@ -86,9 +108,8 @@ function buildFilters(postcode) {
86
108
if ( digitIndex === postcode . length ) {
87
109
return [ baseFilter ] ;
88
110
} else {
89
- console . log ( digitIndex ) ;
90
111
// Return 10 filters with existing filter + each digit
91
- return range ( 10 ) . map ( function ( digit ) {
112
+ return d3 . range ( 10 ) . map ( function ( digit ) {
92
113
var digitFilter = baseFilter . slice ( ) ;
93
114
var digitKey = digitProperties [ digitIndex ] ;
94
115
if ( digitKey ) {
@@ -133,9 +154,9 @@ function makeEnvelope(bounds) {
133
154
var height = bounds [ 1 ] [ 1 ] - bounds [ 0 ] [ 1 ] ;
134
155
var side = Math . max ( width , height ) ;
135
156
136
- var envelopeRatio = 0.2 ;
157
+ var envelopeRatio = 0.3 ;
137
158
138
- var envelope = Math . max ( side * envelopeRatio , 0.02 ) ;
159
+ var envelope = Math . max ( side * envelopeRatio , 0.1 ) ;
139
160
140
161
return [
141
162
[ bounds [ 0 ] [ 0 ] - envelope , bounds [ 0 ] [ 1 ] - envelope ] ,
@@ -170,38 +191,3 @@ function initMap() {
170
191
return map ;
171
192
}
172
193
173
- // var filter = [ "==", "digit_four", 3 ];
174
-
175
- // var newLayer = {
176
- // "id": "newLayer",
177
- // "source": "mapbox://arrayjam.88b94e49",
178
- // "source-layer": "POA_2011_AUST_DIGITS",
179
- // "type": "fill",
180
- // "paint": {
181
- // "fill-color": "#ff0000",
182
- // },
183
- // "filter": filter,
184
- // };
185
-
186
- // window.newLayer = newLayer;
187
- // window.map = map;
188
- // window.filter = filter;
189
-
190
- // map.style.on("load", function() {
191
- // map.addLayer(newLayer);
192
-
193
- // var boundIndex = 0;
194
- // var interval = setInterval(function() {
195
- // if (boundIndex >= bounds.length) {
196
- // clearInterval(interval);
197
- // return;
198
- // }
199
-
200
- // map.fitBounds(bounds[boundIndex++]);
201
- // }, 3000);
202
- // // map.style.on("tile.load", function() {
203
- // // var query = map.querySourceFeatures("mapbox://arrayjam.88b94e49", { sourceLayer: "POA_2011_AUST_DIGITS", filter: filter });
204
- // // console.log(map, newLayer, query);
205
- // // });
206
- // });
207
- // }
0 commit comments