|
|
|
/**
|
|
|
|
* Location.java
|
|
|
|
* Copyright 2009 by Michael Peter Christen; mc@yacy.net, Frankfurt a. M., Germany
|
|
|
|
* first published 08.10.2009 on http://yacy.net
|
|
|
|
*
|
|
|
|
* This file is part of YaCy Content Integration
|
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
|
|
* along with this program in the file lgpl21.txt
|
|
|
|
* If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
package net.yacy.document.geolocalization;
|
|
|
|
|
|
|
|
import java.util.Comparator;
|
|
|
|
|
|
|
|
|
|
|
|
public class Location extends Coordinates implements Comparable<Location>, Comparator<Location> {
|
|
|
|
|
|
|
|
private String name;
|
|
|
|
private int population;
|
|
|
|
|
|
|
|
public Location(float lon, float lat) {
|
|
|
|
super(lon, lat);
|
|
|
|
this.name = null;
|
|
|
|
this.population = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
public Location(float lon, float lat, String name) {
|
|
|
|
super(lon, lat);
|
|
|
|
this.name = name;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setName(String name) {
|
|
|
|
this.name = name;
|
|
|
|
}
|
|
|
|
|
|
|
|
public String getName() {
|
|
|
|
return this.name;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setPopulation(int population) {
|
|
|
|
this.population = population;
|
|
|
|
}
|
|
|
|
|
|
|
|
public int getPopulation() {
|
|
|
|
return this.population;
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean equals(Object loc) {
|
|
|
|
if (!(loc instanceof Location)) return false;
|
|
|
|
if (this.name == null || ((Location) loc).name == null) return super.equals(loc);
|
|
|
|
return super.equals(loc) && this.name.toLowerCase().equals(((Location) loc).name.toLowerCase());
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* comparator that is needed to use the object inside TreeMap/TreeSet
|
|
|
|
* a Location is smaller than another if it has a _greater_ population
|
|
|
|
* this order is used to get sorted lists of locations where the first elements
|
|
|
|
* have the greatest population
|
|
|
|
*/
|
|
|
|
public int compareTo(Location o) {
|
|
|
|
if (this.equals(o)) return 0;
|
|
|
|
long s = (ph(this.getPopulation()) << 30) + this.hashCode();
|
|
|
|
long t = (ph(o.getPopulation()) << 30) + o.hashCode();
|
|
|
|
if (s > t) return -1;
|
|
|
|
if (s < t) return 1;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
private long ph(int population) {
|
|
|
|
if (population > 10000) population -= 10000;
|
|
|
|
return (long) population;
|
|
|
|
}
|
|
|
|
|
|
|
|
public int compare(Location o1, Location o2) {
|
|
|
|
return o1.compareTo(o2);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|