@@ -178,8 +178,8 @@ private static XY getXYByCode(String code) {
178
178
179
179
public static final Zone getZoneByXY (double x , double y , int level ) {
180
180
double h_size = calcHexSize (level );
181
- long h_x = ( long ) x ;
182
- long h_y = ( long ) y ;
181
+ long h_x = Math . round ( x ) ;
182
+ long h_y = Math . round ( y ) ;
183
183
double unit_x = 6 * h_size ;
184
184
double unit_y = 6 * h_size * h_k ;
185
185
double h_lat = (h_k * h_x * unit_x + h_y * unit_y ) / 2 ;
@@ -204,25 +204,26 @@ public static final Zone getZoneByXY(double x, double y, int level) {
204
204
List <Integer > code3_y = new ArrayList <Integer >();
205
205
StringBuffer code3 = new StringBuffer ();
206
206
StringBuffer code9 = new StringBuffer ();
207
- long mod_x = ( long ) h_x ;
208
- long mod_y = ( long ) h_y ;
207
+ long mod_x = h_x ;
208
+ long mod_y = h_y ;
209
209
210
210
for (int i = 0 ; i <= level + 2 ; i ++) {
211
- double h_pow = Math .pow (3 , level + 2 - i );
212
- if (mod_x >= Math .ceil (h_pow / 2 )) {
211
+ long h_pow = Math .round (Math .pow (3 , level + 2 - i ));
212
+ double h_pow_half = Math .ceil ((double ) h_pow / 2 );
213
+ if (mod_x >= h_pow_half ) {
213
214
code3_x .add (2 );
214
215
mod_x -= h_pow ;
215
- } else if (mod_x <= -Math . ceil ( h_pow / 2 ) ) {
216
+ } else if (mod_x <= -h_pow_half ) {
216
217
code3_x .add (0 );
217
218
mod_x += h_pow ;
218
219
} else {
219
220
code3_x .add (1 );
220
221
}
221
222
222
- if (mod_y >= Math . ceil ( h_pow / 2 ) ) {
223
+ if (mod_y >= h_pow_half ) {
223
224
code3_y .add (2 );
224
225
mod_y -= h_pow ;
225
- } else if (mod_y <= -Math . ceil ( h_pow / 2 ) ) {
226
+ } else if (mod_y <= -h_pow_half ) {
226
227
code3_y .add (0 );
227
228
mod_y += h_pow ;
228
229
} else {
0 commit comments