fijate en el algoritmo, por ejemplo de getColor, estas omitiendo la primera posicion del array de rango y luego haces una comparacion directamente con el ultimo elemento. por eso no te toma ningun color para "null", porque no hay ninguna comprobacion para ese valor. un apaño bien rapido, agrega otra condicion para especificamente comparar con null, asi como hicistes para determinar si el numero es mayor que el ultimo elemento. otra forma, quizas puedas devolver un valor predeterminado cuando ninguna de las comparaciones anteriores coinciden, de modo que automaticamente se puede entender que el valor es "null". en ese caso, puedes eliminar "null" del rango y el color que le pertenece a este. en el siguiente esquema usa como idea la funcion getColor pero tambien tienes que aplicarlo radius.
Código:
// alternativa 1;
for(...){
// la comprobacion
}
if(...) return colors[i]; // comprobacion si es mayor que el ultimo elemento;
else if(...) return colors[0]; // aqui comprueba si el valor es "null";
// alternativa 2;
for(...){
// la comprobacion
}
if(...) return colors[i]; // comprobacion si es mayor que el ultimo elemento;
return "#00FFFF"; // automaticamente se entiende que es null porque no concidio con ningun elemento de rangos;