All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.wikibrain.spatial.constants.Precision Maven / Gradle / Ivy

The newest version!
package org.wikibrain.spatial.constants;

import com.vividsolutions.jts.geom.Point;

/**
 * Created by bjhecht on 5/18/14.
 */
public class Precision {

    /**
     * Low = all wikidata points, High = anything without any significant digits after the decimal.
     * Not defined outside 'earth' reference system.
     *
     * This allows researchers and developers to implement solutions to the Geoweb Scale Problem (Hecht and Gergle 2010) like those in Lieberman et al. (2009).
     * Effectively, considering out LatLonPrecision.HIGH points will filter out *some* very large entities (e.g. Alaska) represented as points,
     * at the expense of ignoring high-precision points that happen to fall on lines of latitude AND longitude (very small set).
     *
     */
    public static enum LatLonPrecision {LOW, HIGH};

    public static LatLonPrecision getLatLonPrecision(Point p){

        if (hasSigDigitsAfterDecimal(p.getX()) || hasSigDigitsAfterDecimal(p.getY())){
            return LatLonPrecision.HIGH;
        }else{
            return LatLonPrecision.LOW;
        }

    }

    /**
     * Returns true if p1 greater than or equal to p2
     * @param p1
     * @param p2
     * @return
     */
    public static boolean isGreaterThanOrEqualTo(LatLonPrecision p1, LatLonPrecision p2){
        if (p1.equals(LatLonPrecision.HIGH)){
            return true;
        }else{
            if (p2.equals(LatLonPrecision.LOW)){
                return true;
            }else{
                return false;
            }
        }
    }

    private static boolean hasSigDigitsAfterDecimal(double d){

        Double dObj = new Double(d);
        Integer dInt = (int)Math.floor(d);

        return (dObj - dInt > 0);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy