@SuppressWarnings("unchecked") public <T extends Point2D>T inverse(double x,double y,T ret_val){
  if (ret_val == null) {
    ret_val=(T)new LatLonPoint.Double();
  }
  double px=x + ul.x;
  double py=-y + ul.y + oy;
  if (px > ProjMath.roundAdjust(world.x / 2.0)) {
    px=ProjMath.roundAdjust(world.x / 2.0);
  }
 else   if (px < ProjMath.roundAdjust(-world.x / 2.0)) {
    px=ProjMath.roundAdjust(-world.x / 2.0);
  }
  if (py > ProjMath.roundAdjust(world.y / 2.0)) {
    py=ProjMath.roundAdjust(world.y / 2.0);
  }
 else   if (py < ProjMath.roundAdjust(-world.y / 2.0)) {
    py=ProjMath.roundAdjust(-world.y / 2.0);
  }
  double lat_=normalizeLatitude(py / spps_y);
  double lon_=wrapLongitude((px / spps_x) + centerX);
  ret_val.setLocation(Math.toDegrees(lon_),Math.toDegrees(lat_));
  return ret_val;
}

@ SuppressWarnings ( "unchecked" ) public < T extends Point2D > T inverse ( double x , double y , T ret_val ) { if ( ret_val == null ) { ret_val = ( T ) new LatLonPoint . Double ( ) ; } double px = x + ul . x ; double py = - y + ul . y + oy ; if ( px > ProjMath . roundAdjust ( world . x / 2.0 ) ) { px = ProjMath . roundAdjust ( world . x / 2.0 ) ; } else if ( px < ProjMath . roundAdjust ( - world . x / 2.0 ) ) { px = ProjMath . roundAdjust ( - world . x / 2.0 ) ; } if ( py > ProjMath . roundAdjust ( world . y / 2.0 ) ) { py = ProjMath . roundAdjust ( world . y / 2.0 ) ; } else if ( py < ProjMath . roundAdjust ( - world . y / 2.0 ) ) { py = ProjMath . roundAdjust ( - world . y / 2.0 ) ; } double lat_ = normalizeLatitude ( py / spps_y ) ; double lon_ = wrapLongitude ( ( px / spps_x ) + centerX ) ; ret_val . setLocation ( Math . toDegrees ( lon_ ) , Math . toDegrees ( lat_ ) ) ; return ret_val ; }
inverse project x , y coordinates into a latlonpoint . < p >
