package org.gbif.occurrence.search.heatmap;
import java.util.List;
import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
/**
* This class contains the response of a occurrence heat map search.
*/
public class OccurrenceHeatmapResponse {
private Integer columns;
private Integer rows;
private Long count;
private Double minX;
private Double maxX;
private Double minY;
private Double maxY;
private Double lengthX;
private Double lengthY;
private List<List<Integer>> countsInts2D;
/**
* Default constructor, required for JSON serialization.
*/
public OccurrenceHeatmapResponse() {
//empty
}
/**
* Full constructor.
*/
public OccurrenceHeatmapResponse(
Integer columns,
Integer rows,
Long count,
Double minX,
Double maxX,
Double minY,
Double maxY,
List<List<Integer>> countsInts2D
) {
this.columns = columns;
this.count = count;
this.rows = rows;
this.minX = minX;
this.maxX = maxX;
this.minY = minY;
this.maxY = maxY;
this.countsInts2D = countsInts2D;
lengthX = (maxX - minX) / columns;
lengthY = (maxY - minY) / rows;
}
/**
*
* @return the number of columns
*/
public Integer getColumns() {
return columns;
}
public void setColumns(Integer columns) {
this.columns = columns;
}
/**
*
* @return number of rows
*/
public Integer getRows() {
return rows;
}
public void setRows(Integer rows) {
this.rows = rows;
}
/**
*
* @return the total count of records.
*/
public Long getCount() {
return count;
}
public void setCount(Long count) {
this.count = count;
}
/**
*
* @return minimum X coordinate
*/
public Double getMinX() {
return minX;
}
public void setMinX(Double minX) {
this.minX = minX;
}
/**
*
* @return maximum X coordinate
*/
public Double getMaxX() {
return maxX;
}
public void setMaxX(Double maxX) {
this.maxX = maxX;
}
/**
*
* @return minimum Y coordinate
*/
public Double getMinY() {
return minY;
}
public void setMinY(Double minY) {
this.minY = minY;
}
/**
*
* @return maximum Y coordinate
*/
public Double getMaxY() {
return maxY;
}
public void setMaxY(Double maxY) {
this.maxY = maxY;
}
/**
*
* @return length of X: maxX - minX
*/
public Double getLengthX() {
if(lengthX == null){
lengthX = (maxX - minX) / columns;
}
return lengthX;
}
/**
*
* @return length of Y: maxY - minY
*/
public Double getLengthY() {
if(lengthY == null){
lengthY = (maxY - minY) / columns;
}
return lengthY;
}
/**
*
* @return record count on each cell
*/
public List<List<Integer>> getCountsInts2D() {
return countsInts2D;
}
public void setCountsInts2D(List<List<Integer>> countsInts2D) {
this.countsInts2D = countsInts2D;
}
/**
*
* @param column number
* @return the minimum longitude for the column number
*/
public Double getMinLng(int column) {
return minX + (lengthX * column);
}
/**
*
* @param row number
* @return the minimum latitude for the row number
*/
public Double getMinLat(int row) {
return maxY - (lengthY * row) - lengthY;
}
/**
*
* @param column number
* @return the maximum longitude for the column number
*/
public Double getMaxLng(int column) {
return minX + (lengthX * column) + lengthX;
}
/**
*
* @param row number
* @return the maximum latitude for the row number
*/
public Double getMaxLat(int row) {
return maxY - (lengthY * row);
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this).add("columns", columns).add("rows", rows).add("count", count).add("minX", minX)
.add("maxX",maxX).add("minY",minY).add("maxY",maxY).add("lengthX",lengthX).add("lenghtY",lengthY)
.add("countsInts2D",countsInts2D).toString();
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof OccurrenceHeatmapResponse)) {
return false;
}
OccurrenceHeatmapResponse that = (OccurrenceHeatmapResponse) obj;
return Objects.equal(columns, that.columns)
&& Objects.equal(rows, that.rows)
&& Objects.equal(count, that.count)
&& Objects.equal(minX, that.minX)
&& Objects.equal(maxX, that.maxX)
&& Objects.equal(minY, that.minY)
&& Objects.equal(maxY, that.maxY)
&& Objects.equal(lengthX, that.lengthX)
&& Objects.equal(lengthY, that.lengthY)
&& Objects.equal(countsInts2D, that.countsInts2D);
}
@Override
public int hashCode() {
return Objects.hashCode(columns,rows,count,minX,maxX,minY,maxY,lengthX,lengthY,countsInts2D);
}
}