If a picture is uploaded within a certain radius of a previously uploaded pic, retrieve category suggestions from cache to prevent making redundant calls to the MediaWiki API. A 3rd party library is likely to be required for this task. Library that we plan on using: https://github.com/varunpant/Quadtree , which is the Java implementation of a Quadtree.
Having gone through the QuadTree documentation and associated articles about quadtrees, my impression of how I would go about this task is:
- Construct a QuadTree
public QuadTree(double minX, double minY, double maxX, double maxY)
with min/max values according to
- Latitude : max/min +90 to -90
- Longitude : max/min +180 to -180
Where longitude = X and latitude = Y.
- For each picture uploaded that has GPS coordinates, set a point in that QuadTree using the method
public void set(double x, double y, Object value)
The Object value is the List of categories that were previously found for that picture.
- For each picture uploaded that has GPS coordinates, also
public Point searchWithin(final double xmin, final double ymin, final double xmax, final double ymax)
searchWithin(x-50, y-50, , x+50, y+50) of new point to see if there are any old points within that area. I will need to convert distance in metres to difference in decimal degrees for this. As accuracy is not that important for this task, I will convert using the formula at http://gis.stackexchange.com/questions/2951/algorithm-for-offsetting-a-latitude-longitude-by-some-amount-of-meters . It states that
111,111 meters (111.111 km) in the y direction is 1 degree (of latitude) and 111,111 * cos(latitude) meters in the x direction is 1 degree (of longitude).
Edit 7/1/16: Code for this task complete, pull request submitted.