@@ -5515,13 +5515,17 @@ d3 = function() {
55155515 var alaska = d3 . geo . albers ( ) . rotate ( [ 160 , 0 ] ) . center ( [ 0 , 60 ] ) . parallels ( [ 55 , 65 ] ) ;
55165516 var hawaii = d3 . geo . albers ( ) . rotate ( [ 160 , 0 ] ) . center ( [ 0 , 20 ] ) . parallels ( [ 8 , 18 ] ) ;
55175517 var puertoRico = d3 . geo . albers ( ) . rotate ( [ 60 , 0 ] ) . center ( [ 0 , 10 ] ) . parallels ( [ 8 , 18 ] ) ;
5518+ var alaskaInvert , hawaiiInvert , puertoRicoInvert ;
55185519 function albersUsa ( coordinates ) {
55195520 return projection ( coordinates ) ( coordinates ) ;
55205521 }
55215522 function projection ( point ) {
55225523 var lon = point [ 0 ] , lat = point [ 1 ] ;
55235524 return lat > 50 ? alaska : lon < - 140 ? hawaii : lat < 21 ? puertoRico : lower48 ;
55245525 }
5526+ albersUsa . invert = function ( coordinates ) {
5527+ return alaskaInvert ( coordinates ) || hawaiiInvert ( coordinates ) || puertoRicoInvert ( coordinates ) || lower48 . invert ( coordinates ) ;
5528+ } ;
55255529 albersUsa . scale = function ( x ) {
55265530 if ( ! arguments . length ) return lower48 . scale ( ) ;
55275531 lower48 . scale ( x ) ;
@@ -5537,10 +5541,25 @@ d3 = function() {
55375541 alaska . translate ( [ dx - .4 * dz , dy + .17 * dz ] ) ;
55385542 hawaii . translate ( [ dx - .19 * dz , dy + .2 * dz ] ) ;
55395543 puertoRico . translate ( [ dx + .58 * dz , dy + .43 * dz ] ) ;
5544+ alaskaInvert = d3_geo_albersUsaInvert ( alaska , [ [ - 180 , 50 ] , [ - 130 , 72 ] ] ) ;
5545+ hawaiiInvert = d3_geo_albersUsaInvert ( hawaii , [ [ - 164 , 18 ] , [ - 154 , 24 ] ] ) ;
5546+ puertoRicoInvert = d3_geo_albersUsaInvert ( puertoRico , [ [ - 67.5 , 17.5 ] , [ - 65 , 19 ] ] ) ;
55405547 return albersUsa ;
55415548 } ;
55425549 return albersUsa . scale ( lower48 . scale ( ) ) ;
55435550 } ;
5551+ function d3_geo_albersUsaInvert ( projection , extent ) {
5552+ var a = projection ( extent [ 0 ] ) , b = projection ( [ .5 * ( extent [ 0 ] [ 0 ] + extent [ 1 ] [ 0 ] ) , extent [ 0 ] [ 1 ] ] ) , c = projection ( [ extent [ 1 ] [ 0 ] , extent [ 0 ] [ 1 ] ] ) , d = projection ( extent [ 1 ] ) ;
5553+ var dya = b [ 1 ] - a [ 1 ] , dxa = b [ 0 ] - a [ 0 ] , dyb = c [ 1 ] - b [ 1 ] , dxb = c [ 0 ] - b [ 0 ] ;
5554+ var ma = dya / dxa , mb = dyb / dxb ;
5555+ var cx = .5 * ( ma * mb * ( a [ 1 ] - c [ 1 ] ) + mb * ( a [ 0 ] + b [ 0 ] ) - ma * ( b [ 0 ] + c [ 0 ] ) ) / ( mb - ma ) , cy = ( .5 * ( a [ 0 ] + b [ 0 ] ) - cx ) / ma + .5 * ( a [ 1 ] + b [ 1 ] ) ;
5556+ var dx0 = d [ 0 ] - cx , dy0 = d [ 1 ] - cy , dx1 = a [ 0 ] - cx , dy1 = a [ 1 ] - cy , r0 = dx0 * dx0 + dy0 * dy0 , r1 = dx1 * dx1 + dy1 * dy1 ;
5557+ var a0 = Math . atan2 ( dy0 , dx0 ) , a1 = Math . atan2 ( dy1 , dx1 ) ;
5558+ return function ( coordinates ) {
5559+ var dx = coordinates [ 0 ] - cx , dy = coordinates [ 1 ] - cy , r = dx * dx + dy * dy , a = Math . atan2 ( dy , dx ) ;
5560+ if ( r0 < r && r < r1 && a0 < a && a < a1 ) return projection . invert ( coordinates ) ;
5561+ } ;
5562+ }
55445563 function d3_geo_albers ( φ0 , φ1 ) {
55455564 var sinφ0 = Math . sin ( φ0 ) , n = ( sinφ0 + Math . sin ( φ1 ) ) / 2 , C = 1 + sinφ0 * ( 2 * n - sinφ0 ) , ρ0 = Math . sqrt ( C ) / n ;
55465565 function albers ( λ , φ ) {
0 commit comments