你可以使用Point类开始操作。
https://docs.oracle.com/javase/7/docs/api/java/awt/Point.html
int xE6 = x*1e6
int yE6 = y*1e6
new Point(xE6, yE6)
但是由于这是awt特定的且不正确使用该类,您最终可能会想要创建自己的类。
public final class LatLon {
private double lat;
private double lon;
public LatLon(double lat, double lon) {
this.lat = lat;
this.lon = lon;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
LatLon latLon = (LatLon) o;
if (Double.compare(latLon.lat, lat) != 0) return false;
return Double.compare(latLon.lon, lon) == 0;
}
@Override
public int hashCode() {
int result;
long temp;
temp = Double.doubleToLongBits(lat);
result = (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits(lon);
result = 31 * result + (int) (temp ^ (temp >>> 32));
return result;
}
public double getLat() {
return lat;
}
public void setLat(double lat) {
this.lat = lat;
}
public double getLon() {
return lon;
}
public void setLon(double lon) {
this.lon = lon;
}
}
(使用IntelliJ自动生成)
这可以像这样使用
public static void main(String[] args) {
HashMap<LatLon, Double> demo = new HashMap<LatLon, Double>();
demo.put(new LatLon(23.3445556,72.4535455), 0.23434);
demo.put(new LatLon(23.3645556,72.4235455), 0.53434);
demo.put(new LatLon(23.3245556,72.4635455), 0.21434);
demo.put(new LatLon(23.3645556,72.2535455), 0.25434);
System.out.println(demo.get(new LatLon(23.3645556,72.2535455)));
}
使用该类的问题在于它使用双精度浮点数,而您需要一定精度,由小数位数给出。
双精度浮点数具有奇怪的数学性质,并且可能会导致精度误差,因此我强烈建议使用专为地理坐标设计的库。
尤其是考虑到
如果(demo.latitude<21.45454545 && demo.longitude>72.3455)
这种检查最好使用某些专门用于处理边界检查和坐标的集合,以防止性能问题。
HashMap
。如果有两个键都符合你的if
条件,那么会发生什么?你会选择哪个值? - PentaKon