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

org.wikibrain.spatial.cookbook.GraphDistanceExample Maven / Gradle / Ivy

There is a newer version: 0.9.1
Show newest version
package org.wikibrain.spatial.cookbook;

import com.vividsolutions.jts.geom.Geometry;
import org.wikibrain.conf.ConfigurationException;
import org.wikibrain.core.cmd.Env;
import org.wikibrain.core.cmd.EnvBuilder;
import org.wikibrain.core.dao.DaoException;
import org.wikibrain.core.dao.LocalPageDao;
import org.wikibrain.core.dao.UniversalPageDao;
import org.wikibrain.core.lang.Language;
import org.wikibrain.core.model.LocalPage;
import org.wikibrain.spatial.constants.Precision;
import org.wikibrain.spatial.dao.SpatialDataDao;
import org.wikibrain.spatial.distance.GeodeticDistanceMetric;
import org.wikibrain.spatial.distance.GraphDistanceMetric;
import org.wikibrain.spatial.distance.SphericalDistanceMetric;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Random;

/**
 * @author Shilad Sen
 */
public class GraphDistanceExample {
    public static void main(String args[]) throws ConfigurationException, DaoException {
        Env env = EnvBuilder.envFromArgs(args);
        Language lang = env.getDefaultLanguage();

        SpatialDataDao spatialDao = env.getConfigurator().get(SpatialDataDao.class);
        LocalPageDao pageDao = env.getConfigurator().get(LocalPageDao.class);
        UniversalPageDao conceptDao = env.getConfigurator().get(UniversalPageDao.class);

        SphericalDistanceMetric metric1 = new SphericalDistanceMetric(spatialDao);
        metric1.enableCache(true);
        GraphDistanceMetric metric2 = new GraphDistanceMetric(spatialDao, metric1);
        metric2.enableCache(true);

        Map points = spatialDao.getAllGeometriesInLayer("wikidata", Precision.LatLonPrecision.HIGH);
        List ids = new ArrayList(points.keySet());

        Random random = new Random();
        for (int i = 0; i < 1000; i++) {
            int univId1 = ids.get(random.nextInt(ids.size()));
            int univId2 = ids.get(random.nextInt(ids.size()));
            LocalPage page1 = pageDao.getById(lang, conceptDao.getLocalId(lang, univId1));
            LocalPage page2 = pageDao.getById(lang, conceptDao.getLocalId(lang, univId2));
            double distance = metric2.distance(points.get(univId1), points.get(univId2));
            System.out.println("distance between " + page1 + " and " + page2 + " is " + distance);
        }

    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy