package org.wikibrain.spatial.matcher; import com.typesafe.config.Config; import com.vividsolutions.jts.geom.Geometry; import org.wikibrain.conf.ConfigurationException; import org.wikibrain.core.cmd.Env; import org.wikibrain.core.dao.DaoException; import org.wikibrain.core.lang.LocalId; import org.wikibrain.spatial.util.WikiBrainSpatialUtils; import org.wikibrain.wikidata.WikidataDao; import org.wikibrain.wikidata.WikidataStatement; import java.util.Map; /** * @author Shilad Sen */ public class ContainsPointScorer extends AbstractMatchScorer { private WikidataDao wikidataDao; private static final int COORDINATE_PROPERTY = 625; public ContainsPointScorer(Env env, Config conf) throws ConfigurationException { super(env, conf); wikidataDao = env.getConfigurator().get(WikidataDao.class); } @Override public double score(LocalId candidate, Map<String, String> row, Geometry geometry) throws DaoException { for (WikidataStatement st : wikidataDao.getStatements(candidate.asLocalPage())) { if (st.getProperty() == null || st.getProperty().getId() != COORDINATE_PROPERTY) { continue; } Geometry point = WikiBrainSpatialUtils.jsonToGeometry(st.getValue().getJsonValue().getAsJsonObject()); if (point != null && geometry.contains(point)) { return 1.0; } } return 0.0; } }