package com.vividsolutions.jcs.conflate.polygonmatch;
import com.vividsolutions.jts.geom.Envelope;
import com.vividsolutions.jts.geom.Geometry;
import java.awt.geom.Point2D;
public abstract class AbstractDistanceMatcher extends IndependentCandidateMatcher {
protected double maxDistance = 0;
@Override
public double match(Geometry target, Geometry candidate) {
double distance = distance(target, candidate);
if (maxDistance > 0) {
return Math.max(0, 1 - (distance / maxDistance));
} else {
return 1
- (distance
/ combinedEnvelopeDiagonalDistance(target, candidate));
}
}
protected abstract double distance(Geometry target, Geometry candidate);
private double combinedEnvelopeDiagonalDistance(
Geometry target,
Geometry candidate) {
Envelope envelope = new Envelope(target.getEnvelopeInternal());
envelope.expandToInclude(candidate.getEnvelopeInternal());
return Point2D.distance(
envelope.getMinX(),
envelope.getMinY(),
envelope.getMaxX(),
envelope.getMaxY());
}
public void setMaxDistance(double maxDistance) {
if (maxDistance < 0)
this.maxDistance = 0;
else
this.maxDistance = maxDistance;
}
}