Program: 11559
Project: 11559
Buggy source:
protected void read(InputStream in,GeoProjection tp) throws IOException {
  BufferedReader reader=new BufferedReader(new InputStreamReader(in));
  NavigableSet<Row> rows=new TreeSet<Row>(new Comparator<Row>(){
    @Override public int compare(    Row o1,    Row o2){
      int latComparison=Double.compare(o1.centerLat,o2.centerLat);
      return (latComparison != 0 ? latComparison : Double.compare(o1.centerLon,o2.centerLon));
    }
  }
);
  String line=null;
  while ((line=reader.readLine()) != null) {
    if (line.trim().isEmpty())     continue;
    String[] tokens=line.trim().split("String_Node_Str");
    float lon=Float.parseFloat(tokens[0]);
    float lat=Float.parseFloat(tokens[1]);
    float depth=Float.parseFloat(tokens[2]);
    rows.add(new Row(lat,lon,depth));
  }
  NavigableSet<Row> uniqueLatitudes=new TreeSet<Row>(new Comparator<Row>(){
    @Override public int compare(    Row o1,    Row o2){
      return Double.compare(o1.centerLat,o2.centerLat);
    }
  }
);
  NavigableSet<Row> uniqueLongitudes=new TreeSet<Row>(new Comparator<Row>(){
    @Override public int compare(    Row o1,    Row o2){
      return Double.compare(o1.centerLon,o2.centerLon);
    }
  }
);
  uniqueLatitudes.addAll(rows);
  uniqueLongitudes.addAll(rows);
  imageHeight=uniqueLatitudes.size();
  imageWidth=uniqueLongitudes.size();
  widthStep=0;
  Row prevRow=null;
  for (  Row row : uniqueLongitudes) {
    if (prevRow != null) {
      widthStep+=row.centerLon - prevRow.centerLon;
    }
    prevRow=row;
  }
  widthStep=widthStep / (uniqueLongitudes.size() - 1);
  heightStep=0;
  prevRow=null;
  for (  Row row : uniqueLatitudes) {
    if (prevRow != null) {
      heightStep+=row.centerLat - prevRow.centerLat;
    }
    prevRow=row;
  }
  heightStep=heightStep / (uniqueLatitudes.size() - 1);
  startLon=uniqueLongitudes.first().centerLon - 0.5 * widthStep;
  startLat=uniqueLatitudes.first().centerLat - 0.5 * heightStep;
  data=new double[imageWidth][imageHeight];
  for (  Row row : rows) {
    int x=(int)Math.floor((row.centerLon - startLon) / widthStep);
    int y=(int)Math.floor((row.centerLat - startLat) / heightStep);
    if (x < 0)     x=0;
    if (x >= imageWidth)     x=imageWidth - 1;
    if (y < 0)     y=0;
    if (y >= imageHeight)     y=imageHeight - 1;
    data[x][y]=row.depth;
  }
}

Fixed version (ground truth):
protected void read(InputStream in,GeoProjection tp) throws IOException {
  BufferedReader reader=new BufferedReader(new InputStreamReader(in));
  NavigableSet<Row> rows=new TreeSet<Row>(new Comparator<Row>(){
    @Override public int compare(    Row o1,    Row o2){
      int latComparison=Double.compare(o1.centerLat,o2.centerLat);
      return (latComparison != 0 ? latComparison : Double.compare(o1.centerLon,o2.centerLon));
    }
  }
);
  String line=null;
  while ((line=reader.readLine()) != null) {
    if (line.trim().isEmpty())     continue;
    String[] tokens=line.trim().split("String_Node_Str");
    float lon=Float.parseFloat(tokens[0]);
    float lat=Float.parseFloat(tokens[1]);
    float depth=Float.parseFloat(tokens[2]);
    rows.add(new Row(lat,lon,depth));
  }
  NavigableSet<Row> uniqueLatitudes=new TreeSet<Row>(new Comparator<Row>(){
    @Override public int compare(    Row o1,    Row o2){
      return Double.compare(o1.centerLat,o2.centerLat);
    }
  }
);
  NavigableSet<Row> uniqueLongitudes=new TreeSet<Row>(new Comparator<Row>(){
    @Override public int compare(    Row o1,    Row o2){
      return Double.compare(o1.centerLon,o2.centerLon);
    }
  }
);
  uniqueLatitudes.addAll(rows);
  uniqueLongitudes.addAll(rows);
  imageHeight=uniqueLatitudes.size();
  imageWidth=uniqueLongitudes.size();
  widthStep=0;
  Row prevRow=null;
  for (  Row row : uniqueLongitudes) {
    if (prevRow != null) {
      widthStep+=row.centerLon - prevRow.centerLon;
    }
    prevRow=row;
  }
  widthStep=widthStep / (uniqueLongitudes.size() - 1);
  heightStep=0;
  prevRow=null;
  for (  Row row : uniqueLatitudes) {
    if (prevRow != null) {
      heightStep+=row.centerLat - prevRow.centerLat;
    }
    prevRow=row;
  }
  heightStep=heightStep / (uniqueLatitudes.size() - 1);
  startLon=uniqueLongitudes.first().centerLon - 0.5 * widthStep;
  startLat=uniqueLatitudes.first().centerLat - 0.5 * heightStep;
  data=new double[imageWidth][imageHeight];
  for (  Row row : rows) {
    int x=(int)Math.floor((row.centerLon - startLon) / widthStep);
    int y=(int)Math.floor((row.centerLat - startLat) / heightStep);
    if (x < 0)     x=0;
    if (x >= imageWidth)     x=imageWidth - 1;
    if (y < 0)     y=0;
    if (y >= imageHeight)     y=imageHeight - 1;
    data[x][y]=row.depth;
  }
  startLon=Angle.normalizeAngle180(startLon);
}