| 1 |
|
| 2 |
|
| 3 |
|
| 4 |
|
| 5 |
|
| 6 |
|
| 7 |
|
| 8 |
|
| 9 |
|
| 10 |
|
| 11 |
|
| 12 |
package org.locationtech.jts.index.hprtree; |
| 13 |
|
| 14 |
import org.locationtech.jts.geom.Envelope; |
| 15 |
import org.locationtech.jts.shape.fractal.HilbertCode; |
| 16 |
|
| 17 |
public class HilbertEncoder { |
| 18 |
private int level; |
| 19 |
private double minx; |
| 20 |
private double miny; |
| 21 |
private double strideX; |
| 22 |
private double strideY; |
| 23 |
|
| 24 |
public HilbertEncoder(int level, Envelope extent) { |
| 25 |
this.level = level; |
| 26 |
int hside = (int) Math.pow(2, level) - 1; |
| 27 |
|
| 28 |
minx = extent.getMinX(); |
| 29 |
double extentX = extent.getWidth(); |
| 30 |
strideX = extentX / hside; |
| 31 |
|
| 32 |
miny = extent.getMinX(); |
| 33 |
double extentY = extent.getHeight(); |
| 34 |
strideY = extentY / hside; |
| 35 |
} |
| 36 |
|
| 37 |
public int encode(Envelope env) { |
| 38 |
double midx = env.getWidth()/2 + env.getMinX(); |
| 39 |
int x = (int) ((midx - minx) / strideX); |
| 40 |
|
| 41 |
double midy = env.getHeight()/2 + env.getMinY(); |
| 42 |
int y = (int) ((midy - miny) / strideY); |
| 43 |
|
| 44 |
return HilbertCode.encode(level, x, y); |
| 45 |
} |
| 46 |
|
| 47 |
} |
| 48 |
|