public static double calculateScaleRecip(AffineTransform tr) {
int zoomLevel = MapScalingTransform.zoomLevel(tr);
- double scale = GeometryUtils.getScale(tr);
- double sqrt = Math.sqrt(scale / zoomLevel);
- double viewScaleRecip = (sqrt / zoomLevel);
- return viewScaleRecip;
+ double t;
+ if (zoomLevel > 15) {
+ int d = zoomLevel - 15; // stop zooming vertices when zoom level > 15
+ t = 1.0 / d / (getScale(tr) * Math.sqrt(zoomLevel));
+ } else {
+ t = 1.0 / (getScale(tr) * Math.sqrt(zoomLevel));
+ }
+ return t;
+ }
+
+ static double getScale(AffineTransform tr) {
+ double scale;
+ scale = GeometryUtils.getScale(tr);
+ scale = Math.max(4096, Math.min(scale, 32768));
+ return scale;
}
}